@outbuild-company/schedule-core 1.0.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 +59 -0
- package/dist/cdn/schedule-core.global.js +2 -0
- package/dist/cdn/schedule-core.global.js.map +1 -0
- package/dist/index.cjs +18665 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2122 -0
- package/dist/index.d.ts +2122 -0
- package/dist/index.js +18633 -0
- package/dist/index.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var ScheduleCore=(()=>{var pi=Object.defineProperty;var Gl=Object.getOwnPropertyDescriptor;var Kl=Object.getOwnPropertyNames;var ql=Object.prototype.hasOwnProperty;var zl=(e,t)=>{for(var n in t)pi(e,n,{get:t[n],enumerable:!0})},Jl=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Kl(t))!ql.call(e,r)&&r!==n&&pi(e,r,{get:()=>t[r],enumerable:!(i=Gl(t,r))||i.enumerable});return e};var Xl=e=>Jl(pi({},"__esModule",{value:!0}),e);var jh={};zl(jh,{ACTIVITY_TYPE:()=>tn,CALENDAR_UNIT:()=>at,COLUMN:()=>v,CONSTRAINT_TYPE:()=>$,CONSTRAINT_TYPE_TO_LABEL:()=>$l,CREATION_KIND:()=>Vl,DEFAULT_HOURS_PER_DAY:()=>jt,DISPATCH_ACTION_KIND:()=>z,DISPATCH_ACTION_KINDS:()=>Yl,DISPATCH_TRACK_EVENT:()=>ht,LINK_CODE_TO_TYPE:()=>Ht,LINK_TYPE:()=>B,LINK_TYPE_CODE:()=>ln,NEW_ACTIVITY_DEFAULTS:()=>Wn,REJECTION_REASON:()=>E,ROOT_PARENT_ID:()=>O,ScheduleCore:()=>fi,WORK_TIME_DIRECTION:()=>q,applyBaselinePoints:()=>Gn,checkNoUpdatedLinks:()=>jl,computeExpectedProgress:()=>mr,expectedProgressFromBaseline:()=>fe,getActiveBaseline:()=>At,getUnsavedActivities:()=>Hl,isRootParent:()=>b,normalizeParentKey:()=>St,parseFromBackend:()=>Qn,recomputeAllPonderators:()=>Yn,recomputeAllProgressRollup:()=>Vn,willRunCriticalPath:()=>zc,yieldToBrowser:()=>nt});var ut=class{items=[];head=0;enqueue(t){this.items.push(t)}dequeue(){if(this.head>=this.items.length)return;let t=this.items[this.head];return this.head+=1,t}peek(){if(!(this.head>=this.items.length))return this.items[this.head]}get size(){return this.items.length-this.head}isEmpty(){return this.head>=this.items.length}};var je=e=>String(e);function Wr(e){let{clickedId:t,isChecked:n,currentSelection:i,hierarchy:r,isFrozen:s,exists:a,autoCheckParents:o}=e,c=je(t),l=new Set([...i].map(String)),d=new Set(l),u=Zl(c,r).filter(a),f=u.filter(A=>!s(A)),p=n&&f.length<u.length;n&&!p?d.add(c):d.delete(c);for(let A of f)n?d.add(A):d.delete(A);return p||Ql({id:c,isChecked:n,autoCheckParents:o,hierarchy:r,isFrozen:s,exists:a,next:d}),{nextSelection:d,changed:td(l,d),parentBlocked:p}}function Zl(e,t){let n=[],i=new ut;i.enqueue(e);let r=new Set([e]);for(;!i.isEmpty();){let s=i.dequeue();for(let a of t.getChildrenIds(s)){let o=je(a);r.has(o)||(r.add(o),n.push(o),i.enqueue(o))}}return n}function Ql(e){let{id:t,isChecked:n,autoCheckParents:i,hierarchy:r,isFrozen:s,exists:a,next:o}=e,c=r.getParentId(t);for(;c!==null&&typeof c<"u";){let l=je(c);if(s(l))return;let d=r.getChildrenIds(l).map(je).filter(a),u=d.some(s),f=d.filter(I=>!s(I)),A=f.length>0&&f.every(I=>o.has(I))&&!u;if(n){if(!i||!A||o.has(l))return;o.add(l)}else{if(A||!o.has(l))return;o.delete(l)}c=r.getParentId(l)}}function td(e,t){let n=[],i=[];for(let r of t)e.has(r)||n.push(r);for(let r of e)t.has(r)||i.push(r);return{checked:n,unchecked:i}}function Zt(e){return(e.pendingRequests?.length??0)>0}var E={CANNOT_EDIT:"cannot_edit",PARSE_ERROR:"parse_error",INVALID:"invalid",CUSTOM_ID_DUPLICATE:"custom_id_duplicate",INVALID_LINK_TYPE:"invalid_link_type",INVALID_LINK_LAG:"invalid_link_lag",INVALID_VALUE:"invalid_value",NO_PIPELINE_FOR_COLUMN:"no_pipeline_for_column",ACTIVITY_NOT_FOUND:"activity_not_found",PARENT_NOT_FOUND:"parent_not_found",ACTIVITY_IDS_EMPTY:"activity_ids_empty",ANCHOR_SIBLING_CONFLICT:"anchor_sibling_conflict",ANCHOR_SIBLING_NOT_FOUND:"anchor_sibling_not_found",ANCHOR_SIBLING_WRONG_PARENT:"anchor_sibling_wrong_parent",PARENT_FROZEN_BY_SIR:"parent_frozen_by_sir",CANNOT_MOVE_INTO_OWN_DESCENDANT:"cannot_move_into_own_descendant",INDENT_NO_ELIGIBLE_SIBLING:"indent_no_eligible_sibling",OUTDENT_ROOT_LEVEL_NOT_EDITABLE:"outdent_root_level_not_editable",INVALID_PROGRESS_VALUE:"invalid_progress_value_must_be_0_or_100"};var ed=e=>e.checked===!0,Ur=(e,t)=>{let n=e.getActivity(t);return n!=null&&Zt(n)};function He(e){let t=[];return e.forEachActivity((n,i)=>{ed(n)&&t.push(i)}),t}var Br=(e,t,n)=>{let i=[],r=(s,a)=>{let o=t.adapter.getActivity(s);if(!o)return;let c={checked:o.checked,visibleChecked:o.visibleChecked,mustApplyVisibleChecked:o.mustApplyVisibleChecked};o.checked=a,o.visibleChecked=a,o.mustApplyVisibleChecked=a,i.push({id:s,kind:"updated",fields:{checked:{before:c.checked,after:a},visibleChecked:{before:c.visibleChecked,after:a},mustApplyVisibleChecked:{before:c.mustApplyVisibleChecked,after:a}},after:{id:s,checked:a,visibleChecked:a,mustApplyVisibleChecked:a}})};for(let s of n.checked)r(s,!0);for(let s of n.unchecked)r(s,!1);return{source:e,activities:i,links:[],calendars:[],trackingEvents:[]}};function jr(e,t){let{adapter:n}=t,i=e.activityId;if(!n.getActivity(i))return{ok:!1,reason:E.ACTIVITY_NOT_FOUND};let r=e.frozenIds?new Set(e.frozenIds):null,s=r?o=>r.has(o):o=>Ur(n,o),a=Wr({clickedId:i,isChecked:e.isChecked,currentSelection:new Set(He(n)),hierarchy:{getChildrenIds:o=>n.getChildren(o),getParentId:o=>{let c=n.getParentId(o);return!c||c==="0"?null:String(c)}},isFrozen:s,exists:o=>n.activityExists(o),autoCheckParents:e.autoCheckParents??!1});return{ok:!0,changes:Br(e,t,a.changed)}}function Hr(e,t){let{adapter:n}=t,i=new Set(e.activityIds.map(String).filter(a=>n.activityExists(a)).filter(a=>!Ur(n,a))),r=new Set(He(n)),s={checked:[...i].filter(a=>!r.has(a)),unchecked:[...r].filter(a=>!i.has(a))};return{ok:!0,changes:Br(e,t,s)}}var nd=e=>e.visible!==!1;function $r(e,t){let{adapter:n}=t,i=new Set(e.visibleIds.map(String)),r=[];return n.forEachActivity((a,o)=>{let c=i.has(String(o));if(nd(a)===c)return;let l=a.visible;a.visible=c,r.push({id:o,kind:"updated",fields:{visible:{before:l,after:c}},after:{id:o,visible:c}})}),{ok:!0,changes:{source:e,activities:r,links:[],calendars:[],trackingEvents:[]}}}var Yr="text";var Vr="description";var Qt="duration",Gr="for_disable_milestone_duration",Kr="$keep_constraints";var qr="progress",hi="progressChangedByActionButton";var zr="cost";var Jr="used_cost";var Xr="hhWorkTime";var $e="start_date",Zr="last_start_date";var te="end_date";var Ye="constraint_type",Wt="real_constraint_type",yi="constraint_type_old",Ve="last_constraint";var Ut="constraint_date",mi="last_constraint_date";var Qr="calendar_id";var ts="custom_id";var es="subcontractId";var ns="responsables";var is="tags";var rs="custom_predecessors";var ss="custom_sucessors";var Ge="real_work";var as="real_cost";var os="expected_progress";var cs="expected_progress_base";var Ke="start_base";var qe="end_base";var ze="duration_base";var Je="cost_base";var Xe="work_base";var ls="calendarDuration";var ds="is_critical",us="earlyStart",fs="earlyFinish",ps="lateStart",hs="lateFinish",ys="freeSlack",ms="totalSlack";var gs="correlative_id";var vs="unique_correlative_id";var As="ponderator";var Ze="status",Bt={DONE:"Done",OVERDUE:"Overdue",ADVANCEMENT:"Advancement",WAITING:"Waiting",DOING:"Doing"},gi="Baseline";function Qe(e){return e==="Actual"?"Actual":gi}var id={TEXT:Yr,DESCRIPTION:Vr,DURATION:Qt,PROGRESS:qr,COST:zr,USED_COST:Jr,HH_WORK_TIME:Xr,START_DATE:$e,END_DATE:te,CONSTRAINT_TYPE:Ye,CONSTRAINT_DATE:Ut,CALENDAR_ID:Qr,CUSTOM_ID:ts,SUBCONTRACT_ID:es,RESPONSABLES:ns,TAGS:is,CUSTOM_PREDECESSORS:rs,CUSTOM_SUCESSORS:ss},rd={REAL_WORK:Ge,REAL_COST:as,EXPECTED_PROGRESS:os,EXPECTED_PROGRESS_BASE:cs,START_BASE:Ke,END_BASE:qe,DURATION_BASE:ze,COST_BASE:Je,WORK_BASE:Xe,CALENDAR_DURATION:ls,IS_CRITICAL:ds,EARLY_START:us,EARLY_FINISH:fs,LATE_START:ps,LATE_FINISH:hs,FREE_SLACK:ys,TOTAL_SLACK:ms,CORRELATIVE_ID:gs,UNIQUE_CORRELATIVE_ID:vs,PONDERATOR:As,STATUS:Ze},v={...id,...rd};function Cs(e,t){throw new Error(t)}function Ss(e,t){return()=>t()===e}var q={FUTURE:"future",PAST:"past"},at={HOUR:"hour",DAY:"day"};var $={ASAP:"asap",ALAP:"alap",SNET:"snet",SNLT:"snlt",FNET:"fnet",FNLT:"fnlt",MSO:"mso",MFO:"mfo"},sd={mso:()=>!0,mfo:()=>!0,snlt:(e,t)=>e<t,snet:(e,t)=>e>t,fnlt:(e,t)=>e<t,fnet:(e,t)=>e>t};function ks(e,t,n){if(!t)return{violated:!1};let i=sd[e];return i?i(t,n)?{violated:!0,constraintType:e,constraintDate:t}:{violated:!1}:{violated:!1}}var ad=new Set(["mso","snet","snlt"]);function Ae(e,t,n){return ad.has(e)?t:n}function Is(e,t,n){return{type:"constraint",messageKey:"constraint_violation",data:{constraintType:e,constraintDate:t,...n?{projectedDate:n}:{}}}}var od={snet:{startOfDay:!0,direction:q.FUTURE},snlt:{startOfDay:!0,direction:q.PAST},fnet:{startOfDay:!1,direction:q.FUTURE},fnlt:{startOfDay:!1,direction:q.PAST},mso:{startOfDay:!0,direction:q.FUTURE},mfo:{startOfDay:!1,direction:q.PAST}},_s=e=>new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate())),cd=(e,t)=>new Date(e.getTime()+t*864e5),ld=(e,t)=>e.getUTCFullYear()===t.getUTCFullYear()&&e.getUTCMonth()===t.getUTCMonth()&&e.getUTCDate()===t.getUTCDate();function dd(e,t){if(!e.constraint_date||!e.constraint_type)return null;let n=od[e.constraint_type];if(!n)return e.constraint_date;let i=e.constraint_date,r=t.getClosestWorkTime({date:_s(i),dir:q.FUTURE,task:e});if(ld(r,i))return i;let s=_s(t.getClosestWorkTime({date:i,dir:n.direction,task:e}));return n.startOfDay?t.getClosestWorkTime({date:s,dir:q.FUTURE,task:e}):t.getClosestWorkTime({date:cd(s,1),dir:q.PAST,task:e})}function Ts(e,t){let n={earliestStart:null,latestStart:null,earliestEnd:null,latestEnd:null},i=e.constraint_type;if(!i||i==="asap"||i==="alap")return n;let r=dd(e,t);if(!r)return n;let s=o=>t.calculateEndDate({start_date:o,duration:e.duration,task:e}),a=o=>t.calculateEndDate({start_date:o,duration:-e.duration,task:e});switch(i){case"snet":return{earliestStart:r,latestStart:null,earliestEnd:s(r),latestEnd:null};case"snlt":return{earliestStart:null,latestStart:r,earliestEnd:null,latestEnd:s(r)};case"fnet":return{earliestStart:a(r),latestStart:null,earliestEnd:r,latestEnd:null};case"fnlt":return{earliestStart:null,latestStart:a(r),earliestEnd:null,latestEnd:r};case"mso":{let o=s(r);return{earliestStart:r,latestStart:r,earliestEnd:o,latestEnd:o}}case"mfo":{let o=a(r);return{earliestStart:o,latestStart:o,earliestEnd:r,latestEnd:r}}default:return n}}function Ds(e,t){return!(t.earliestStart&&e<t.earliestStart||t.latestStart&&e>t.latestStart)}function vi(e,t){return t.latestStart&&e>t.latestStart?t.latestStart:t.earliestStart&&e<t.earliestStart?t.earliestStart:e}var B={FINISH_TO_START:"0",START_TO_START:"1",FINISH_TO_FINISH:"2",START_TO_FINISH:"3"};var tn={TASK:"task",PROJECT:"project",MILESTONE:"milestone"},Es={ALAP_DEBOUNCE_MS:1e3,CRITICAL_PATH_DEBOUNCE_MS:1e3,YIELD_SLICE_MS:8};var en=typeof window>"u",Ai=!en&&typeof MessageChannel<"u"?new MessageChannel:null;function nt(){return en||!Ai?Promise.resolve():new Promise(e=>{Ai.port1.onmessage=()=>e(),Ai.port2.postMessage(null)})}async function nn(e,t){return performance.now()-e<Es.YIELD_SLICE_MS?{aborted:!1,newSliceStart:e}:(await nt(),t()?{aborted:!1,newSliceStart:performance.now()}:{aborted:!0,newSliceStart:performance.now()})}async function ee(e){return en?{aborted:!1}:(await nt(),e()?{aborted:!1}:{aborted:!0})}function rn(e,t){let{inDegree:n,successors:i}=ud(e,t),r=fd(n),s=pd(r,n,i),a=s.length<e.length,o=a?hd(e,s):[],c=[...s].reverse();return{ordered:s,reversed:c,hasCycles:a,cycleNodes:o}}function ud(e,t){let n=new Map,i=new Map;for(let r of e)n.set(r,0),i.set(r,[]);for(let r of t){let s=r.source,a=r.target;!n.has(s)||!n.has(a)||(i.get(s).push(a),n.set(a,(n.get(a)??0)+1))}return{inDegree:n,successors:i}}function fd(e){let t=new ut;for(let[n,i]of e)i===0&&t.enqueue(n);return t}function pd(e,t,n){let i=[];for(;!e.isEmpty();){let r=e.dequeue();i.push(r);for(let s of n.get(r)??[]){let a=(t.get(s)??1)-1;t.set(s,a),a===0&&e.enqueue(s)}}return i}function hd(e,t){let n=new Set(t);return e.filter(i=>!n.has(i))}var sn=class{cached=null;invalidate(){this.cached=null}get(t,n){return this.cached?this.cached:(this.cached=rn(t,n),this.cached)}};function Ps(e,t){let n=[];for(let i of e)t.has(i)&&n.push(i);return n}var Ci={project:{alwaysSummary:!0,holdsConstraint:!1,carriesCustomId:!1,forcedDuration:null,ponderatorWeight:"recursive-leaf-sum",promotesToProjectOnFirstChild:!1},task:{alwaysSummary:!1,holdsConstraint:!0,carriesCustomId:!0,forcedDuration:null,ponderatorWeight:"own-baseline",promotesToProjectOnFirstChild:!0},milestone:{alwaysSummary:!1,holdsConstraint:!0,carriesCustomId:!0,forcedDuration:0,ponderatorWeight:"zero",promotesToProjectOnFirstChild:!0}};function Si(e){return e==="project"||e==="task"||e==="milestone"}function Ct(e,t){return t||Si(e)&&Ci[e].alwaysSummary}function Rt(e){return Si(e)&&Ci[e].promotesToProjectOnFirstChild}var an="project",Ce="task";function Se(e,t){return t===0?"milestone":e===0&&t>0?"task":null}function Rs(e,t){let n=t.getActivity(e);return n?Ct(n.type,t.getChildren(e).length>0):!1}function Ls(e,t,n){let i=String(t),r=n.getActivity(e);for(;r?.parent&&String(r.parent)!=="0";){if(String(r.parent)===i)return!0;r=n.getActivity(r.parent)}return!1}function bs(e,t){let n=[],i=[e];for(;i.length>0;){let r=i.pop(),s=t.getChildren(r);if(s.length===0){String(r)!==String(e)&&n.push(r);continue}for(let a of s)i.push(a)}return n}function yd(e){let t=new Map;for(let n of e)Os(t,String(n.source),n),Os(t,String(n.target),n);return t}function Os(e,t,n){let i=e.get(t);if(i){i.push(n);return}e.set(t,[n])}function md(e,t,n){if(e.length<=1)return e;let i=new Set(e.map(String)),r=[];for(let s of e)gd(s,i,t,n)||r.push(s);return r.length>0?r:e}function gd(e,t,n,i){let r=String(e),s=n.getActivity(e);if(!s||s.auto_scheduling===!1)return!1;let a=i.get(r)??[];for(let o of a){if(vd(o))continue;let c=Ad(o,r);if(!t.has(String(c)))continue;let l=n.getActivity(c);if(l&&l.auto_scheduling!==!1&&Cd(o,e,s,c,l))return!0}return!1}function vd(e){return e.source===e.target}function Ad(e,t){return String(e.source)===t?e.target:e.source}function Cd(e,t,n,i,r){let s=e.lag??0,a=Math.abs(s);return e.target===t&&a<=n.duration||e.target===i&&a<=r.duration}function Ns(e,t){let n=[],i=yd(e),r=0;for(let s of e){let a=Rs(s.source,t),o=Rs(s.target,t);if(a&&o||o&&Ls(s.source,s.target,t)||a&&Ls(s.target,s.source,t))continue;if(!a&&!o){n.push(s);continue}let c=a?bs(s.source,t):[s.source],l=o?bs(s.target,t):[s.target];if(a&&(c=ws(c,!1,t)),o){let d=md(l,t,i);if(s.type===B.FINISH_TO_FINISH||s.type===B.START_TO_FINISH){r=Sd(n,c,d,s,s.target,t,r);continue}l=ws(d,!0,t)}r=_d(n,c,l,s,r)}return n}function Sd(e,t,n,i,r,s,a){let o=s.getActivity(r),c=o?.start_date,l=o?.duration??0,d=i.lag??0,u=s.getActivity(i.source),f=a;for(let p of t)for(let A of n){if(String(p)===String(A))continue;let I=s.getActivity(A),S=c&&I&&u?s.calculateDuration({start_date:c,end_date:I.start_date,task:u}):0;e.push({id:`virtual_${i.id}_${f}`,source:p,target:A,type:i.type,lag:i.lag,_sourceLag:0,_targetLag:-l,_trueLag:d+S}),f+=1}return f}function ws(e,t,n){if(e.length<=1)return e;let i=null;for(let s of e){let a=n.getActivity(s),o=t?a?.start_date:a?.end_date;if(!o)continue;let c=o.getTime();(i===null||(t?c<i:c>i))&&(i=c)}if(i===null)return e;let r=e.filter(s=>{let a=n.getActivity(s),o=t?a?.start_date:a?.end_date;return o!=null&&o.getTime()===i});return r.length>0?r:e}function _d(e,t,n,i,r){let s=r;for(let a of t)for(let o of n)String(a)!==String(o)&&(e.push({id:`virtual_${i.id}_${s}`,source:a,target:o,type:i.type,lag:i.lag}),s+=1);return s}var on=class{invalidate(){}get(t,n){return Ns(t,n)}};function kd(e){let t=new Map,n=i=>(t.has(i)||t.set(i,new Set),t.get(i));for(let i of e)n(i.source).add(i.id),n(i.target).add(i.id);return{neighbors:t}}function Id(e,t,n){let i=new Set,r=new Map,s=new ut;for(s.enqueue(e);!s.isEmpty();){let a=s.dequeue(),o=String(a);if(i.has(o))continue;i.add(o);let c=n.neighbors.get(a);if(c)for(let l of c){let d=t.get(l);if(!d)continue;let u=`${d.source}-${d.target}-${d.type}`;r.has(u)||r.set(u,d);let f=String(d.source)===o?d.target:d.source;i.has(String(f))||s.enqueue(f)}}return Array.from(r.values())}function xs(e,t){let n=new Map;for(let a of t)n.set(a.id,a);let i=kd(t),r=Id(e,n,i),s=new Set([String(e)]);for(let a of r)s.add(String(a.source)),s.add(String(a.target));return{activityIds:s,links:r}}function Fs(e,t,n){let i=n.type===B.FINISH_TO_START,r=n.type===B.FINISH_TO_FINISH;if(n._targetLag!==void 0)return{sourceLag:n._sourceLag??0,targetLag:n._targetLag,trueLag:n._trueLag??n.lag??0,isFS:i,isFF:r,isZeroDurationCase:!1};let s=n.lag??0;switch(n.type){case B.FINISH_TO_START:return{sourceLag:0,targetLag:0,trueLag:s,isFS:i,isFF:r,isZeroDurationCase:!1};case B.START_TO_START:return{sourceLag:-e.duration,targetLag:0,trueLag:s,isFS:i,isFF:r,isZeroDurationCase:!1};case B.FINISH_TO_FINISH:return{sourceLag:0,targetLag:-t.duration,trueLag:s,isFS:i,isFF:r,isZeroDurationCase:!1};case B.START_TO_FINISH:return{sourceLag:-e.duration,targetLag:-t.duration,trueLag:s,isFS:i,isFF:r,isZeroDurationCase:!1};default:return{sourceLag:0,targetLag:0,trueLag:s,isFS:i,isFF:r,isZeroDurationCase:!1}}}function Ms(e,t,n,i){let{sourceLag:r,targetLag:s,trueLag:a,isFS:o,isFF:c}=Fs(e,t,n);if(!(r!==0||s!==0||a!==0)){let f=o||c;return t.duration===0&&f?{successorStart:i.getClosestWorkTime({date:e.end_date,dir:"past",task:t}),link:n}:{successorStart:i.getClosestWorkTime({date:e.end_date,dir:"future",task:t}),link:n}}let d=o?t:e,u=i.getClosestWorkTime({date:e.end_date,dir:"future",task:d});if(r!==0&&(u=i.calculateEndDate({start_date:u,duration:r,task:e})),s!==0&&(u=i.calculateEndDate({start_date:u,duration:s,task:t})),a!==0&&(u=i.calculateEndDate({start_date:u,duration:a,task:t})),t.duration===0){if(o||c)return{successorStart:i.getClosestWorkTime({date:u,dir:"past",task:t}),link:n};let f=new Date(Date.UTC(u.getUTCFullYear(),u.getUTCMonth(),u.getUTCDate()));return{successorStart:i.getClosestWorkTime({date:f,dir:"future",task:t}),link:n}}return{successorStart:i.getClosestWorkTime({date:u,dir:"future",task:t}),link:n}}function Ws(e,t,n,i){let{sourceLag:r,targetLag:s,trueLag:a}=Fs(t,e,n),o=i.getClosestWorkTime({date:e.start_date,dir:"past",task:e});return a!==0&&(o=i.calculateEndDate({start_date:o,duration:-a,task:e})),s!==0&&(o=i.calculateEndDate({start_date:o,duration:-s,task:e})),r!==0&&(o=i.calculateEndDate({start_date:o,duration:-r,task:t})),o}function Us(e,t,n){for(let i of e){let r=t.getActivity(i);if(!r)continue;let s=r.constraint_type;if(!s||s===$.ASAP||s===$.ALAP)continue;let a=Ts(r,t);!a.earliestStart&&!a.latestStart&&!a.earliestEnd&&!a.latestEnd||n.set(i,{activityId:i,start_date:r.start_date,end_date:r.end_date,drivingLinkId:null,kind:"asap",conflict:!1,earliestStart:a.earliestStart,latestStart:a.latestStart,earliestEnd:a.earliestEnd,latestEnd:a.latestEnd})}}function cn(e,t,n){let i={earliestStart:t.earliestStart??null,latestStart:t.latestStart??null,earliestEnd:t.earliestEnd??null,latestEnd:t.latestEnd??null},r=t.earliestSchedulingStart??t.latestSchedulingStart??null,s;r===null?s=vi(e.start_date,i):Ds(r,i)?s=r:s=vi(r,i),t.start_date=s,t.end_date=n.calculateEndDate({start_date:s,duration:e.duration,task:e})}function Bs(e,t){if(!e||!t)return new Date;let{constraint_type:n,constraint_date:i}=e;if(!n||!i)return t;switch(n){case $.MSO:case $.MFO:return new Date(i);case $.SNET:case $.FNET:return i>t?new Date(i):t;case $.SNLT:case $.FNLT:return i<t?new Date(i):t;default:return t}}function js(e,t){return t.length?t.some(n=>String(n)===String(e)):!1}function Hs(e,t,n){return t.dragWithMultiple&&e.dragged&&js(e.id,n)?{start_date:e.start_date,end_date:e.end_date}:{start_date:e.start_date,end_date:e.end_date}}function $s(e,t,n){return t.dragWithMultiple&&js(e,n)}async function Vs(e,t,n,i,r,s){let a=new Map;for(let u of t){let f=String(u.target);a.has(f)||a.set(f,[]),a.get(f).push(u)}let o=u=>{let f=s.get(u);if(f?.start_date&&f.end_date)return{start_date:f.start_date,end_date:f.end_date};let p=n.getActivity(u);return p?{start_date:p.start_date,end_date:p.end_date}:{start_date:new Date,end_date:new Date}},c=n.getFlags(),l=i.draggedIds??[],d=performance.now();for(let u of e){let f=await nn(d,r);if(f.aborted)return s;d=f.newSliceStart;let p=n.getActivity(u);if(!p||!p.auto_scheduling||p.progress===100||Td(p,n))continue;let A=a.get(String(u))??[],I=null,S=null;for(let m of A){let y=n.getActivity(m.source);if(!y)continue;let _=o(m.source),P={...y,start_date:_.start_date,end_date:_.end_date},D=Hs(P,c,l),R={...P,start_date:D.start_date,end_date:D.end_date},U=$s(m.source,c,l)?{...m,lag:0}:m,W=Ms(R,p,U,n);(!I||W.successorStart>I)&&(I=W.successorStart,S=String(m.id))}let T=s.get(u),g=T?{...T}:{activityId:u,start_date:p.start_date,end_date:p.end_date,drivingLinkId:null,kind:"asap",conflict:!1},C=g.earliestStart||g.latestStart||g.earliestEnd||g.latestEnd;if(!(!I&&!C)){if(I){let m=I;p.type===tn.MILESTONE&&(m=Bs(p,I)),g.drivingLinkId=S,g.start_date=m,g.end_date=n.calculateEndDate({start_date:m,duration:p.duration,task:p}),g.earliestSchedulingStart=m,g.earliestSchedulingEnd=g.end_date}else p.constraint_type===$.MSO?g.earliestStart&&(g.start_date=g.earliestStart,g.end_date=g.earliestEnd??n.calculateEndDate({start_date:g.earliestStart,duration:p.duration,task:p})):p.constraint_type===$.MFO&&g.latestStart&&(g.start_date=g.latestStart,g.end_date=g.latestEnd??n.calculateEndDate({start_date:g.latestStart,duration:p.duration,task:p}));cn(p,g,n),s.set(u,g)}}return s}function Td(e,t){return Ct(e.type,t.getChildren(e.id).length>0)}var O="0";function b(e){return e==null||e===0||e==="0"}function St(e){return b(e)?"0":String(e)}async function Gs(e,t,n,i,r,s){let a=new Map(n),o=i.getAllActivities(),c=o.length,l=[];for(let S of o)S.constraint_type===$.ALAP&&l.push(S.id);if(l.length===0)return a;let d=new Map,u=new Map;for(let S of t){let T=String(S.source);d.has(T)||d.set(T,[]),d.get(T).push(S);let g=String(S.target);u.has(g)||u.set(g,[]),u.get(g).push(S)}let f=S=>{let T=a.get(S);if(T)return{start_date:T.start_date,end_date:T.end_date};let g=i.getActivity(S);return g?{start_date:g.start_date,end_date:g.end_date}:{start_date:new Date,end_date:new Date}},p=S=>!S.parent||b(S.parent)?i.getProjectEnd():f(S.parent).end_date,A=(S,T)=>{let g=S,C=0;for(;g&&!b(g)&&C++<c+1;){if(String(g)===String(T))return!0;let m=i.getActivity(g);if(!m||!m.parent)break;g=m.parent}return!1},I=performance.now();for(let S of e){let T=await nn(I,s);if(T.aborted)return a;I=T.newSliceStart;let g=i.getActivity(S);if(!g||g.constraint_type!==$.ALAP||!g.auto_scheduling||g.progress===100||Ct(g.type,i.getChildren(S).length>0))continue;let C=p(g);if(!C)continue;let m=C,y=null,_=!1,P=d.get(String(S))??[];for(let H of P){if((H.lag??0)<0)continue;let et=i.getActivity(H.target);if(!et||et.auto_scheduling===!1)continue;let ct=f(H.target),Be={...et,start_date:ct.start_date,end_date:ct.end_date},Mt=Ws(Be,g,H,i);Mt<m&&(m=Mt),(y===null||Mt<y)&&(y=Mt,_=g.parent&&!b(g.parent)?A(H.target,g.parent):!1)}if(y!==null)if(_)m=y;else{let H=f(S).end_date,et=H.getTime()>C.getTime()?H:C;m=y<et?y:et}else m>C&&(m=C);let D;if(g.duration===0&&y===null)D=i.getClosestWorkTime({date:m,dir:"past",task:g});else if(g.duration===0)if((u.get(String(S))??[]).some(ct=>ct.type===B.FINISH_TO_START||ct.type===B.FINISH_TO_FINISH)){let ct=new Date(Date.UTC(m.getUTCFullYear(),m.getUTCMonth(),m.getUTCDate()));D=i.getClosestWorkTime({date:ct,dir:"past",task:g})}else D=i.getClosestWorkTime({date:m,dir:"future",task:g});else D=i.getClosestWorkTime({date:m,dir:"future",task:g});let R=i.calculateEndDate({start_date:D,duration:-g.duration,task:g}),U=a.get(S),W=U?{...U}:{activityId:S,start_date:R,end_date:D,drivingLinkId:null,kind:"alap",conflict:!1};W.start_date=R,W.end_date=D,W.drivingLinkId=null,W.kind="alap",W.earliestSchedulingStart=null,W.earliestSchedulingEnd=null,W.latestSchedulingStart=R,W.latestSchedulingEnd=D,cn(g,W,i),a.set(S,W)}return a}var ne={warn(){},error(){}};function _e(e,t){t.cancelled||t.updatedIds.length===0||e.batchUpdate(()=>{for(let n of t.updatedIds){let i=t.plans.get(n);if(!i)continue;let r=e.getLiveActivity(n);r&&(r.start_date=i.start_date,r.end_date=i.end_date,e.updateActivity(n))}})}var jt=8;var ln={[B.FINISH_TO_START]:"fs",[B.START_TO_START]:"ss",[B.FINISH_TO_FINISH]:"ff",[B.START_TO_FINISH]:"sf"},Ht={fs:B.FINISH_TO_START,ss:B.START_TO_START,ff:B.FINISH_TO_FINISH,sf:B.START_TO_FINISH},Ks="fs";function qs(e){if(e in Ht)return Ht[e]}var zs=";",Js=/^(\d+)(fs|ss|ff|sf)?(?:([+-]?)(\d+(?:\.\d+)?)d?)?$/i;function Xs(e,t){let n=String(t.source),i=String(t.target);if(n===i)return!0;let r=new Map;for(let s of e){let a=String(s.source),o=String(s.target),c=r.get(a)??[];c.push(o),r.set(a,c)}return Dd(r,i,n)}function Dd(e,t,n){if(t===n)return!0;let i=new Set([t]),r=new ut;for(r.enqueue(t);!r.isEmpty();){let s=r.dequeue(),a=e.get(s)??[];for(let o of a){if(o===n)return!0;i.has(o)||(i.add(o),r.enqueue(o))}}return!1}function Lt(e,t){switch(e.kind){case"create":return Ed(e,t);case"update":return Pd(e,t);case"delete":return Rd(e,t)}}function Ed(e,t){let{port:n}=t;if(String(e.source)===String(e.target))return{applied:!1,rejected:"self-link"};let i=n.getActivity(e.source),r=n.getActivity(e.target);if(!i||!r)return{applied:!1,rejected:"activity-missing"};let s=n.getAllLinks();for(let l of s)if(String(l.source)===String(e.source)&&String(l.target)===String(e.target)&&l.type===e.type)return{applied:!1,rejected:"duplicate",linkId:l.id};let a=s.map(l=>({source:l.source,target:l.target}));if(Xs(a,{source:e.source,target:e.target}))return{applied:!1,rejected:"cycle"};let o=(t.newLinkId??Ld)(),c={id:o,source:e.source,target:e.target,type:e.type,lag:e.lag};return n.addLink(c),_i(n,e.target),ki(n,e.source),{applied:!0,linkId:o}}function Pd(e,t){let{port:n}=t,i=n.getLink(e.linkId);return i?(n.setLinkField?(e.lag!==void 0&&n.setLinkField(e.linkId,"lag",e.lag),e.type!==void 0&&n.setLinkField(e.linkId,"type",e.type)):(n.removeLink(e.linkId),n.addLink({...i,lag:e.lag??i.lag,type:e.type??i.type})),_i(n,i.target),ki(n,i.source),{applied:!0,linkId:e.linkId}):{applied:!1,rejected:"link-missing"}}function Rd(e,t){let{port:n}=t,i=n.getLink(e.linkId);if(!i)return{applied:!1,rejected:"link-missing"};let r=i.target,s=i.source;return n.removeLink(e.linkId),_i(n,r),ki(n,s),{applied:!0,linkId:e.linkId}}function _i(e,t){let n=e.getActivity(t);if(!n)return;let i=e.getWorkingHoursPerDayForActivity?e.getWorkingHoursPerDayForActivity(t):8,r=[];for(let s of n.$target){let a=e.getLink(s);if(!a)continue;let o=e.getActivity(a.source);if(!o)continue;let c=String(o.correlative_id??o.id??a.source);r.push(Zs(c,a.type,a.lag,i))}e.setActivityField(t,v.CUSTOM_PREDECESSORS,r.join(";"))}function ki(e,t){let n=e.getActivity(t);if(!n)return;let i=[];for(let r of n.$source){let s=e.getLink(r);if(!s)continue;let a=e.getActivity(s.target);if(!a)continue;let o=String(a.correlative_id??a.id??s.target),c=e.getWorkingHoursPerDayForActivity?e.getWorkingHoursPerDayForActivity(s.target):8;i.push(Zs(o,s.type,s.lag,c))}e.setActivityField(t,v.CUSTOM_SUCESSORS,i.join(";"))}function Zs(e,t,n,i){let r=ln[t],s=i>0?n/i:0,a=s>=0?"+":"-",o=Math.abs(s),c=Number.isInteger(o)?String(o):o.toFixed(2);return`${e}${r}${a}${c}d`}var dn=null;function Ld(){return dn===null&&(dn=Date.now()),dn+=1,String(dn)}function un(e){let t=[],n=[],i=e.replace(/\s+/g,"");if(i.length===0)return{specs:t,errors:n};for(let r of i.split(zs)){if(r.length===0)continue;let s=bd(r);s?t.push(s):n.push(r)}return{specs:t,errors:n}}function bd(e){let t=e.toLowerCase(),n=Js.exec(t);if(!n)return null;let[,i,r,s,a]=n,o=r?Ht[r]:Ht[Ks],c=0;if(a!==void 0){let l=Number(a);if(Number.isNaN(l))return null;c=s==="-"?-l:l}return{correlativeId:i,type:o,lag:c}}function pn(e){let{targetActivityId:t,currentLinks:n,desiredSpecs:i}=e,r=[],s=new Map;for(let c of i){let l=e.resolveActivityByCorrelative(c.correlativeId);if(l==null){r.push(c);continue}let d=fn(l,c.type);s.has(d)||s.set(d,{source:l,type:c.type,lag:c.lag})}let a=new Map;for(let c of n)String(c.target)===String(t)&&a.set(fn(c.source,c.type),c);let o=[];for(let[c,l]of a)s.has(c)||o.push({kind:"delete",linkId:l.id});for(let[c,l]of s){let d=a.get(c);d&&d.lag!==l.lag&&o.push({kind:"update",linkId:d.id,lag:l.lag})}for(let[c,l]of s)a.has(c)||o.push({kind:"create",source:l.source,target:t,type:l.type,lag:l.lag});return{operations:o,unresolved:r}}function fn(e,t){return`${String(e)}::${t}`}function hn(e){let{sourceActivityId:t,currentLinks:n,desiredSpecs:i}=e,r=[],s=new Map;for(let c of i){let l=e.resolveActivityByCorrelative(c.correlativeId);if(l==null){r.push(c);continue}let d=fn(l,c.type);s.has(d)||s.set(d,{target:l,type:c.type,lag:c.lag})}let a=new Map;for(let c of n)String(c.source)===String(t)&&a.set(fn(c.target,c.type),c);let o=[];for(let[c,l]of a)s.has(c)||o.push({kind:"delete",linkId:l.id});for(let[c,l]of s){let d=a.get(c);d&&d.lag!==l.lag&&o.push({kind:"update",linkId:d.id,lag:l.lag})}for(let[c,l]of s)a.has(c)||o.push({kind:"create",source:t,target:l.target,type:l.type,lag:l.lag});return{operations:o,unresolved:r}}function ft(e,t){return Math.sign(e)*Math.round(Math.abs(e)*t)}function ke(e,t){return t<=0?0:e/t}var Qs={rawInputToConstraintDate(e,t){let n=new Date(e);return n.setUTCHours(0,0,0,0),n.getTime()===e.getTime()?t.getClosestWorkTime({direction:q.FUTURE,date:e,unit:at.HOUR}):t.isWorkTime(e,at.HOUR)?e:n},computeLagBetweenTasks(e,t,n){return n.calculateDuration(e,t)}};function Ii(e,t,n){switch(n){case"0":return{sourceDate:e.end_date,targetDate:t.start_date};case"1":return{sourceDate:e.start_date,targetDate:t.start_date};case"2":return{sourceDate:e.end_date,targetDate:t.end_date};case"3":return{sourceDate:e.start_date,targetDate:t.end_date}}}var Ti=Qs;var yn=class{adapter;reporter;currentCalculationId=0;topoCache=new sn;expandedLinksCache=new on;constructor(t,n=ne){this.adapter=t,this.reporter=n}getCurrentCalculationId(){return this.currentCalculationId}invalidateTopoCache(){this.topoCache.invalidate()}invalidateExpandedLinksCache(){this.expandedLinksCache.invalidate()}invalidateAllCaches(){this.topoCache.invalidate(),this.expandedLinksCache.invalidate()}async schedule(t={}){let n=++this.currentCalculationId,i=Ss(n,()=>this.currentCalculationId),r={plans:new Map,updatedIds:[],cycles:[],cancelled:!1};try{Nd(this.adapter);let s=bt("schedule.total"),a=bt("schedule.expandParentLinks"),o=this.adapter.getAllLinks(),c=this.expandedLinksCache.get(o,this.adapter);_t(a);let l=c;if((await ee(i)).aborted)return{...r,cancelled:!0};let d=bt("schedule.scoping"),u=this.adapter.getAllIds(),f=l,p=u,A=null;if(t.triggerId!==void 0&&t.triggerId!==null){let R=xs(t.triggerId,l);f=R.links,p=Array.from(R.activityIds),A=new Set(p)}_t(d);let I=bt("schedule.topologicalSort"),S=xd(this.topoCache,u,l,A);if(_t(I),S.hasCycles)return _t(s),{...r,cycles:[S.cycleNodes]};if((await ee(i)).aborted)return{...r,cancelled:!0};let T=bt("schedule.processConstraints"),g=new Map;if(Us(S.ordered,this.adapter,g),_t(T),(await ee(i)).aborted)return{...r,cancelled:!0};let C=bt("schedule.asapPass"),m=await Vs(S.ordered,f,this.adapter,t,i,g);if(_t(C),(await ee(i)).aborted)return{...r,cancelled:!0};let y=bt("schedule.alapPass"),_=await Gs(S.reversed,f,m,this.adapter,t,i);if(_t(y),(await ee(i)).aborted)return{...r,cancelled:!0};let P=bt("schedule.diff"),D=[];for(let[R,U]of _){let W=this.adapter.getActivity(R);if(!W)continue;let H=W.start_date.getTime()!==U.start_date.getTime(),et=W.end_date.getTime()!==U.end_date.getTime();(H||et)&&D.push(R)}return _t(P),_t(s),{plans:_,updatedIds:D,cycles:[],cancelled:!1}}catch(s){return this.reporter.error("[AutoScheduler] Error during scheduling",s),r}}},Od=!1;function wd(){let e=globalThis.__SCHEDULER_PHASE_LOG__;return typeof e=="boolean"?e:Od}function bt(e){return{name:e,startedAt:performance.now()}}function Nd(e){let t=e;typeof t.clearCalendarCache=="function"&&t.clearCalendarCache()}function _t(e){if(!wd())return;let t=performance.now()-e.startedAt;console.log(`[scheduler] ${e.name} ${t.toFixed(1)}ms`)}function xd(e,t,n,i){let r=e.get(t,n);if(r.hasCycles){let a=i?Array.from(i):t;return rn(a,n)}if(!i)return r;let s=Ps(r.ordered,i);return{ordered:s,reversed:[...s].reverse(),hasCycles:!1,cycleNodes:[]}}function ta(e,t){let n=t.getActivity(e);if(!n)return;let i=t.calendarReader.getCalendar(String(n.calendar_id));for(let r of n.$target){let s=t.getLink(r);if(!s)continue;let a=t.getActivity(s.source);if(!a||a.constraint_type==="alap")continue;let{sourceDate:o,targetDate:c}=Ii(a,n,s.type),l=Ti.computeLagBetweenTasks(o,c,i);l!==s.lag&&Lt({kind:"update",linkId:s.id,lag:l},{port:t})}}function ea(e,t){let n=t.getActivity(e);n&&(n.progress!=(n.old_progress_registered??0)||n.duration!=(n.old_duration_registered??0)||n.hhWorkTime!=(n.old_hhWorkTime_registered??0)||n.cost!=(n.old_cost_registered??0)||n.used_cost!=(n.old_used_cost_registered??0)||n.real_cost!=(n.old_real_cost_registered??0))&&(n.old_duration_registered=n.duration??0,n.old_progress_registered=n.progress??0,n.old_hhWorkTime_registered=n.hhWorkTime??0,n.old_cost_registered=n.cost??0,n.old_used_cost_registered=n.used_cost??0,n.old_real_cost_registered=n.real_cost??0)}function na(e,t){let n=t.getActivity(e);n&&(n.is_milestone||n.type==="milestone")&&(n.duration=0,n.for_disable_milestone_duration=0)}function ie(e){let t=0,n=!1;for(let i of e)i.ponderator>0&&(t+=i.ponderator/100*i.progress,n=!0);return n?t:null}function mn(e){return Number(e.toFixed(2))}async function Ie(e,t,n=!0,i={}){let r=t?ia(e,t):Bd(e);await Fd(r,e,n,{skipMilestoneDurationStamp:i.skipMilestoneDurationStamp??!1,recomputeRealWork:i.recomputeRealWork??!1})}function Di(e,t,n=!0){let i=ia(e,t);for(let r of i)Pi(r,e,n)}function gn(e,t){Pi(e,t,!1,!0)}function Ei(e){e.forEachActivity(t=>{t.for_disable_milestone_duration!==t.duration&&e.setActivityField(String(t.id),"for_disable_milestone_duration",t.duration)})}async function Fd(e,t,n=!0,i={skipMilestoneDurationStamp:!1,recomputeRealWork:!1}){let s=0;for(let a of e)Pi(a,t,n,i.skipMilestoneDurationStamp,i.recomputeRealWork),s+=1,s%200===0&&await nt()}function ia(e,t){let n=new Set;for(let s of t)Md(s,e,n);if(n.size===0)return[];let i=Array.from(n),r=ra(i,e);return sa(i,r)}function Md(e,t,n){let i=t.getParentId(e);for(;i&&!b(i);){if(n.has(i))return;n.add(i),i=t.getParentId(i)}}function Wd(e,t,n){let i=null,r=null,s=0,a=[];for(let o of e){let c=t.getActivity(o);if(!c)continue;let l=c.start_date.getTime(),d=c.end_date.getTime();(i===null||l<i)&&(i=l),(r===null||d>r)&&(r=d),n&&(s+=Ud(c)),a.push({progress:Number(c.progress??0),ponderator:Number(c.ponderator??0)})}return{minStart:i,maxEnd:r,realWorkSum:s,weightedChildren:a}}function Pi(e,t,n=!0,i=!1,r=!1){let s=t.getActivity(e);if(!s)return;let a=t.getChildren(e);if(a.length===0)return;let o=Wd(a,t,r);if(o.minStart===null||o.maxEnd===null)return;let c=String(s.calendar_id??""),l=t.calendarReader.getCalendar(c),d=new Date(o.minStart),u=new Date(o.maxEnd),f=l.calculateDuration(d,u);t.setActivityField(e,v.START_DATE,d),t.setActivityField(e,v.END_DATE,u),t.setActivityField(e,v.DURATION,f),i||t.setActivityField(e,"for_disable_milestone_duration",f);let p=ie(o.weightedChildren);n&&p!==null&&t.setActivityField(e,v.PROGRESS,mn(p)),r&&t.setActivityField(e,v.REAL_WORK,o.realWorkSum)}function Ud(e){let t=Number(e.real_work);if(Number.isFinite(t)&&t!==0)return t;let i=Number(e.hhWorkTime)||0,r=Number(e.progress)||0;return i*r/100}function Bd(e){let t=jd(e),n=ra(t,e);return sa(t,n)}function jd(e){let t=new Set;return e.forEachActivity(n=>{n.parent&&!b(n.parent)&&t.add(n.parent)}),Array.from(t)}function ra(e,t){let n=new Map;for(let i of e)n.set(i,Hd(i,t));return n}function Hd(e,t){let n=0,i=e;for(;i&&!b(i)&&t.getActivity(i);)n+=1,i=t.getParentId(i);return n}function sa(e,t){return[...e].sort((n,i)=>(t.get(i)??0)-(t.get(n)??0))}var aa={updateParentDuration:ea,updateActivityDuration:na,updateTaskTiming:$d("updateTaskTiming"),adjustLinkLagOnTaskMove:ta};function Ot(e,t,n){for(let i of t){let r=i in aa?aa[i]:void 0;if(!r){console.warn(`[replay post-processors] unknown: ${i} \u2014 skipping. Add an entry in POST_PROCESSORS if a fixture needs it.`);continue}r(e,n)}}function $d(e){return()=>{console.debug(`[replay post-processors] ${e}: not yet ported to adapter \u2014 no-op.`)}}function L(e,t){return t!==void 0?{ok:!0,value:e,raw:t}:{ok:!0,value:e}}function w(e){return{ok:!1,reason:e}}function x(){return{valid:!0}}function it(e,t){return t!==void 0?{valid:!1,reason:e,notification:t}:{valid:!1,reason:e}}function F(){return{allowed:!0}}function Y(e,t){return t!==void 0?{allowed:!1,reason:e,alertKey:t}:{allowed:!1,reason:e}}function N(e,t={},n={}){return{primaryValue:e,extraFields:t,needsAutoSchedule:n.autoSchedule??!1,postProcessors:n.postProcessors??[],...n.cascadeMutations!==void 0?{cascadeMutations:n.cascadeMutations}:{},...n.trackingEvents!==void 0?{trackingEvents:n.trackingEvents}:{}}}var oa={canEdit(){return F()},parseInput(e){return typeof e!="string"?w("not_a_string"):L(e)},validate(){return x()},transform(e,t){return N(t,{},{autoSchedule:!1,postProcessors:[]})},trackEvent:"activity_name_entry"};var ca={canEdit(){return F()},parseInput(e){return typeof e!="string"?w("not_a_string"):L(e.trim())},validate(){return x()},transform(e,t){return N(t,{},{autoSchedule:!1,postProcessors:[]})},trackEvent:"activity_description_entry"};var vn=100;function re(e){return e.progress>=vn}function J(e){return Ct(e.type,e.hasChildren)}function la(e){return e.progress>0}function da(e){return e.hasLookaheadTasks}function se(e,t){return Math.round(Math.ceil(e*t*60)/60)}function Ri(e,t){return t<=0?0:e/t}var ae=e=>({[te]:e});function kt(e,t){if(t){let n=new Intl.DateTimeFormat("en-CA",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(e),i=r=>Number(n.find(s=>s.type===r)?.value);return new Date(Date.UTC(i("year"),i("month")-1,i("day")))}return new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate()))}function Te(e,t){if(!t||t==="UTC"){let f=new Date(e);return f.setUTCHours(23,59,0,0),f}let n=new Intl.DateTimeFormat("en-CA",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(e),i=f=>Number(n.find(p=>p.type===f)?.value),r=i("year"),s=i("month"),a=i("day"),o=Date.UTC(r,s-1,a,23,59,0,0),c=new Intl.DateTimeFormat("en-CA",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}).formatToParts(new Date(o)),l=f=>Number(c.find(p=>p.type===f)?.value),u=Date.UTC(l("year"),l("month")-1,l("day"),l("hour")===24?0:l("hour"),l("minute"),l("second"))-o;return new Date(o-u)}function Yd(e,t){let n=kt(t);for(;!e.isWorkTime(n,at.DAY);)n=new Date(n),n.setUTCDate(n.getUTCDate()+1),n=kt(n);return n}function De(e,t){return e.getClosestWorkTime({direction:q.FUTURE,date:t,unit:at.HOUR})}function Ee(e,t){let n=Yd(e,t),i=new Date(n);return i.setUTCDate(i.getUTCDate()+1),i.setUTCHours(0,0,0,0),e.getClosestWorkTime({direction:q.PAST,date:i,unit:at.HOUR})}var An=new Set(["snet","snlt","mso"]),Li=new Set(["fnet","fnlt","mfo"]),It=new Set(["asap","alap"]),oe="snet";function $t(e,t,n){if(!An.has(n)&&!Li.has(n))return e;let i=An.has(n)?De(t,e):Ee(t,e),r=new Date(e);return r.setUTCHours(i.getUTCHours(),i.getUTCMinutes(),i.getUTCSeconds(),i.getUTCMilliseconds()),r}var Tt=()=>({[Ye]:oe,[Wt]:oe,[yi]:oe}),ua=e=>({[Wt]:e,[yi]:e});var Yt=e=>({[Ut]:e,[mi]:e}),fa=e=>({[Ut]:e}),Cn=e=>({[mi]:e});function ce(e,t,n){return ks(e,t,n)}function le(e,t,n){return Is(e,t,n)}var pa={canEdit(e){return re(e)?Y("completed","cant_edit_completed_activity"):J(e)?Y("summary","summary_column_value"):F()},parseInput(e,t,n){let i=parseFloat(String(e));return Number.isNaN(i)?w("not_a_number"):L(n.inputUnit==="hours"?i:se(i,n.hoursPerDay))},validate(e,t,n){return Vd(n)?it("negative_duration"):Gd(t,n)?it("unchanged"):x()},transform(e,t,n){let i=Kd(e,t,n),r=qd(e,t,n,i.violated);return{...N(t,r,{autoSchedule:!0,postProcessors:["updateParentDuration"]}),...i.violated?{constraintWarning:le(i.constraintType,i.constraintDate,ha(e,t,n)??void 0)}:{}}},trackEvent:"activity_duration_entry"};function Vd(e){return Math.sign(e)===-1}function Gd(e,t){return e===t}function Kd(e,t,n){let i=n.calendars.getCalendar(e.calendar_id);if(!i)return{violated:!1};let r=e.constraint_type;if(r!=="fnet"&&r!=="fnlt"&&r!=="mfo")return{violated:!1};let s=i.calculateEndDate(e.start_date,t);return ce(r,e.constraint_date,s)}function qd(e,t,n,i=!1){let r={};i&&Object.assign(r,Tt(),Yt(e.start_date));let s=Se(e.duration,t);r.is_milestone=s==="milestone",s&&(r.type=s),r.duration=t,r.for_disable_milestone_duration=t,r[Ve]=e.constraint_type;let a=e.constraint_date??e.last_constraint_date;a!==null&&Object.assign(r,Cn(a)),r[Zr]=e.start_date,r[Kr]=!0;let o=ha(e,t,n);return o&&Object.assign(r,ae(o)),r}function ha(e,t,n){let i=n.calendars.getCalendar(e.calendar_id);return i?i.calculateEndDate(e.start_date,t):null}var zd=0,Jd=vn,ya=0,ma={canEdit(e){return da(e)?Y("has_lookahead_tasks","cant_edit_actvity_with_task"):J(e)?Y("summary","summary_column_value"):F()},parseInput(e){let t=parseFloat(String(e));return Number.isNaN(t)?w("not_a_number"):L(t)},validate(e,t,n){return Xd(n)?it("out_of_range"):x()},transform(e,t,n){let i=Zd(t),r=Qd(t),s={auto_scheduling:i};r&&(s[hi]=!0);let a=r?tu(e,t,i,n.hierarchy):[],o=r?nu(e,t,n.hierarchy):[],c=a.length+o.length>0?[...a,...o]:void 0,l=["updateParentDuration"],d=r?ru(e,t):void 0;return N(t,s,{autoSchedule:!1,postProcessors:l,cascadeMutations:c,trackingEvents:d})},trackEvent:"activity_progress_entry"};function Xd(e){return e<zd||e>Jd}function Zd(e){return e===ya}function Qd(e){return e===vn||e===ya}function tu(e,t,n,i){return i.getDescendantIds(e.id).map(s=>({activityId:s,fields:eu(t,n)}))}function eu(e,t){return{progress:e,auto_scheduling:t,[hi]:!0}}function nu(e,t,n){let i=new Map;i.set(e.id,t);for(let a of n.getDescendantIds(e.id))i.set(a,t);let r=[];for(let a of n.getAncestorIds(e.id))r.push(a);let s=[];for(let a of r){let o=iu(a,i,n);i.set(a,Number(o)),s.push({activityId:a,fields:{progress:o}})}return s}function iu(e,t,n){let i=n.getChildProgressInfo(e).map(r=>({progress:t.has(r.id)?t.get(r.id):r.progress,ponderator:r.ponderator??0}));return(ie(i)??0).toFixed(2)}function ru(e,t){return[{name:"activity_progress_update_radio_button",properties:{activity_id:e.id,activity_name:e.text,progress_updated:t}}]}var ga={canEdit(e){return J(e)?Y("summary","summary_column_value"):F()},parseInput(e){let t=parseFloat(String(e));return Number.isNaN(t)?w("not_a_number"):L(t)},validate(){return x()},transform(e,t,n){let i=su(e,t,n.hierarchy);return N(t,{},{autoSchedule:!1,postProcessors:["updateParentDuration"],cascadeMutations:i})},trackEvent:"activity_cost_budgeted_entry"};function su(e,t,n){let i=new Map;i.set(e.id,t);let r=[];for(let s of n.getAncestorIds(e.id)){let a=0;for(let o of n.getChildCostInfo(s))a+=i.has(o.id)?i.get(o.id):o.cost;i.set(s,a),r.push({activityId:s,fields:{cost:a}})}return r}var va={canEdit(e){return J(e)?Y("summary","summary_column_value"):F()},parseInput(e){let t=parseFloat(String(e));return Number.isNaN(t)?w("not_a_number"):L(t)},validate(){return x()},transform(e,t,n){let i=au(e,t,n.hierarchy);return N(t,{},{autoSchedule:!1,postProcessors:["updateParentDuration"],cascadeMutations:i})},trackEvent:"activity_cost_spent_entry"};function au(e,t,n){let i=new Map;i.set(e.id,t);let r=[];for(let s of n.getAncestorIds(e.id)){let a=0;for(let o of n.getChildUsedCostInfo(s))a+=i.has(o.id)?i.get(o.id):o.used_cost;i.set(s,a),r.push({activityId:s,fields:{used_cost:a}})}return r}var bi=e=>({[Ge]:e});var Aa={canEdit(e){return J(e)?Y("summary","summary_column_value"):F()},parseInput(e){let t=parseFloat(String(e));return Number.isNaN(t)?w("not_a_number"):L(t)},validate(){return x()},transform(e,t,n){let i=Ca(t,e.progress),r=ou(e,t,i,n.hierarchy);return N(t,{...bi(i)},{autoSchedule:!1,postProcessors:["updateParentDuration"],cascadeMutations:r})},trackEvent:"activity_labor_hours_budgeted_entry"};function Ca(e,t){return e*t/100}function ou(e,t,n,i){let r=new Map,s=new Map;r.set(e.id,t),s.set(e.id,n);let a=[];for(let o of i.getAncestorIds(e.id)){let c=0,l=0;for(let d of i.getChildHhInfo(o)){let u=r.has(d.id)?r.get(d.id):d.hhWorkTime,f=s.has(d.id)?s.get(d.id):Ca(d.hhWorkTime,d.progress);c+=u,l+=f}r.set(o,c),s.set(o,l),a.push({activityId:o,fields:{hhWorkTime:c,...bi(l)}})}return a}function Sn(e,t){return e.getUTCFullYear()===t.getUTCFullYear()&&e.getUTCMonth()===t.getUTCMonth()&&e.getUTCDate()===t.getUTCDate()}function Oi(e,t){return e.getTime()<t.getTime()}function de(e){return e instanceof Date&&!Number.isNaN(e.getTime())}var _n=e=>({[Qt]:e}),kn=e=>({[Gr]:e});var Sa={canEdit(e){return J(e)?Y("summary","summary_column_value"):la(e)?Y("has_progress","cant_edit_activity_with_progress"):F()},parseInput(e,t,n){return de(e)?L(kt(e,"UTC")):w("invalid_date")},validate(e,t,n,i){if(Sn(t,n))return it("unchanged");let r=cu(e,n,i);return r||x()},transform(e,t,n){let i=n.calendars.getCalendar(e.calendar_id);if(!i)return N(t,{...Tt(),...Yt(t)},{autoSchedule:!0,postProcessors:["updateParentDuration","adjustLinkLagOnTaskMove"]});let r=De(i,t),s=e.type==="milestone",a=s?r:i.calculateEndDate(r,e.duration),o=r;return{...N(r,{...ae(a),...s?{..._n(0),...kn(0)}:{},...Tt(),...Yt(o)},{autoSchedule:!0,postProcessors:["updateParentDuration","adjustLinkLagOnTaskMove"]}),constraintWarning:lu(e,r,i)}},trackEvent:"activity_start_date_entry"};function cu(e,t,n){let i=n.hierarchy.getParentStartDateIfHasPredecessors(e.id);if(!i)return null;let r=kt(i);return t.getTime()<r.getTime()?it("before_parent_start"):null}function lu(e,t,n){let i=n.calculateEndDate(t,e.duration),r=Ae(e.constraint_type,t,i),s=ce(e.constraint_type,e.constraint_date,r);if(s.violated)return le(s.constraintType,s.constraintDate,r)}var du=99.999,_a={canEdit(e){return J(e)?Y("summary","summary_column_value"):uu(e)?Y("completed","cant_edit_completed_activity"):F()},parseInput(e,t,n){if(!de(e))return w("invalid_date");let i=kt(e,"UTC"),r=n.calendars.getCalendar(t.calendar_id);return r?r.isWorkTime(i,at.DAY)?L(Ee(r,i)):L(i):L(i)},validate(e,t,n,i){if(Sn(e.end_date,n))return it("unchanged");if(fu(n,e))return it("before_date_origin");if(pu(n,e))return it("before_start_date");let r=hu(n,e,i);return r||x()},transform(e,t,n){let i=yu(e,t),r=mu(e,t,n,!!i);return{...N(t,r,{autoSchedule:!0,postProcessors:["updateParentDuration","updateTaskTiming"]}),...i?{constraintWarning:i}:{}}},trackEvent:"activity_end_date_entry"};function uu(e){return e.progress>=du}function fu(e,t){return t.date_origin?Oi(e,t.date_origin):!1}function pu(e,t){return Oi(e,t.start_date)}function hu(e,t,n){let i=n.calendars.getCalendar(t.calendar_id);return i?i.isWorkTime(e,at.DAY)?null:it("not_working_day"):null}function yu(e,t){let n=Ae(e.constraint_type,e.start_date,t),i=ce(e.constraint_type,e.constraint_date,n);if(i.violated)return le(i.constraintType,i.constraintDate,n)}function mu(e,t,n,i=!1){let r={};(i||gu(e))&&Object.assign(r,Tt(),Yt(e.start_date));let s=vu(e,t,n),a=Se(e.duration,s);return a&&(r.type=a,r.is_milestone=a==="milestone"),Object.assign(r,_n(s),kn(s)),r.end_date=t,r}function gu(e){return It.has(e.constraint_type)}function vu(e,t,n){let i=n.calendars.getCalendar(e.calendar_id);return i?i.calculateDuration(e.start_date,t):e.duration}var Au=new Set(Object.values($)),ka={canEdit(e){return re(e)?Y("completed","cant_edit_completed_activity"):J(e)?Y("summary","summary_column_value"):F()},parseInput(e){let t=String(e).toLowerCase();return Cu(t)?L(t):w("invalid_constraint_type")},validate(){return x()},transform(e,t){let n=Su(e,t);return N(t,n,{autoSchedule:!0})}};function Cu(e){return Au.has(e)}function Su(e,t){let n={constraint_type:t,[Wt]:t,[Ve]:t,...fa(_u(e,t))};return It.has(t)&&e.constraint_date&&Object.assign(n,Cn(e.constraint_date)),n}function _u(e,t){return It.has(t)?null:An.has(t)?e.start_date:Li.has(t)?e.end_date:e.constraint_date}var Ia={canEdit(e){return re(e)?Y("completed","cant_edit_completed_activity"):J(e)?Y("summary","summary_column_value"):F()},parseInput(e){return de(e)?L(e):w("invalid_date")},validate(){return x()},transform(e,t,n){let i=Ta(e)?oe:e.constraint_type,r=n.calendars.getCalendar(e.calendar_id),s=r?$t(t,r,i):t,a=ku(e,s);return N(s,a,{autoSchedule:!0})}};function ku(e,t){let n=Ta(e)?Tt():ua(e.constraint_type);return{constraint_date:t,last_constraint_date:e.constraint_date,...n}}function Ta(e){return It.has(e.constraint_type)||!e.constraint_type}var Da={canEdit(){return F()},parseInput(e){let t=String(e).trim();return Iu(t)?w("empty_calendar"):L(t)},validate(e,t,n){return Tu(e.calendar_id,n)?it("unchanged"):x()},transform(e,t,n){let i=Du(e,t,n);return N(t,i,{autoSchedule:!0,postProcessors:["updateParentDuration"]})},trackEvent:"activity_calendar_assignment"};function Iu(e){return e===""}function Tu(e,t){return e===t}function Du(e,t,n){let i={calendar_id:t,assignedDefaultCalendar:!1},r=n.calendars.getCalendar(t);return r&&Object.assign(i,ae(r.calculateEndDate(e.start_date,e.duration))),i}var Ea={canEdit(){return F()},parseInput(e){if(e==null)return L(null);if(typeof e!="string")return w("not_a_string");let t=e.trim();return t.length===0?L(null):t.length>20?w("exceeds_max_length"):L(t)},validate(){return x()},transform(e,t){return N(t,{},{autoSchedule:!1,postProcessors:[]})},trackEvent:"schedule_custom_id_edition"};var Pa={canEdit(){return F()},parseInput(e){if(e==null)return L(null);if(typeof e=="string"){let t=e.trim();if(t.length===0)return L(null);let n=Number(t);return!Number.isFinite(n)||!Number.isInteger(n)?w("not_an_integer"):L(n)}return typeof e=="number"?!Number.isFinite(e)||!Number.isInteger(e)?w("not_an_integer"):L(e):w("not_an_integer")},validate(){return x()},transform(e,t){return N(t,{},{autoSchedule:!1,postProcessors:[]})}};var Ra={canEdit(){return F()},parseInput(e){return e==null?L([]):Array.isArray(e)?L(e):w("not_an_array")},validate(){return x()},transform(e,t){return N(t,{},{autoSchedule:!1,postProcessors:[]})}};var La={canEdit(){return F()},parseInput(e){return e==null?L([]):Array.isArray(e)?L(e):w("not_an_array")},validate(){return x()},transform(e,t){return N(t,{},{autoSchedule:!1,postProcessors:[]})}};var Eu=new Map([[v.TEXT,oa],[v.DESCRIPTION,ca],[v.DURATION,pa],[v.PROGRESS,ma],[v.COST,ga],[v.USED_COST,va],[v.HH_WORK_TIME,Aa],[v.START_DATE,Sa],[v.END_DATE,_a],[v.CONSTRAINT_TYPE,ka],[v.CONSTRAINT_DATE,Ia],[v.CALENDAR_ID,Da],[v.CUSTOM_ID,Ea],[v.SUBCONTRACT_ID,Pa],[v.RESPONSABLES,Ra],[v.TAGS,La]]);function wt(e){return Eu.get(e)}function ue(e,t){if(!t||t.type!=="constraint")return null;let n=t.data;return!n?.constraintType||!n.constraintDate?null:{kind:"constraint_violation",activityId:e,constraintType:n.constraintType,constraintDate:n.constraintDate,projectedDate:n.projectedDate??n.constraintDate,messageKey:t.messageKey}}var tt={ID:"id",PARENT:"parent",TYPE:"type",AUTO_SCHEDULING:"auto_scheduling",ASSIGNED_DEFAULT_CALENDAR:"assignedDefaultCalendar",IS_LOOKAHEAD:"is_lookahead",VISIBLE:"visible",NEW_ACTIVITIES_ARRAY:"newActivitiesArray",ACTIVITY_MODIFICATIONS:"activityModifications",PROPLANNER_ID:"proplannerId",GANTT_ID:"ganttId",SECTOR_ID:"sectorId",COMPANY_ID:"companyId",SUBCONTRACT:"subcontract",HAS_CUSTOM_PONDERATOR:"hasCustomPonderator",HAS_CHILDS:"has_childs",SUM_OF_DURATION_RECURSIVELY:"sumOfDurationRecursively",HAS_NEW_ACTIVITIES:"hasNewActivities",IS_NEW_ACTIVITY:"isNewActivity"};function V(e,t,n,i){e.setActivityField(t,n,i)}function ba(e,t,n,i){e.setLinkField(t,n,i)}function Oa(e,t){let n=e.parent==="0"?0:e.parent;return{...e,id:e.id,parent:n,type:e.type,constraint_type:e.constraint_type,constraint_date:e.constraint_date,start_date:e.start_date,end_date:e.end_date,duration:se(e.duration,t),progress:e.progress,auto_scheduling:e.auto_scheduling,calendar_id:e.calendar_id,$source:[],$target:[]}}function X(e){let t=St(e.parent);return{...e,id:e.id,parent:t,text:String(e.text??""),description:String(e.description??""),type:e.type,start_date:e.start_date,end_date:e.end_date,duration:e.duration,constraint_type:e.constraint_type??null,constraint_date:e.constraint_date,progress:e.progress,cost:Number(e.cost??0),used_cost:Number(e.used_cost??0),hhWorkTime:Number(e.hhWorkTime??0),real_work:Number(e.real_work??0),ponderator:Number(e.ponderator??0),calendar_id:e.calendar_id!=null?String(e.calendar_id):null,auto_scheduling:e.auto_scheduling}}function gt(e){let t={id:String(e.id),source:String(e.source),target:String(e.target),type:e.type,lag:Number(e.lag)};return e.proplannerId!=null&&(t.proplannerId=Number(e.proplannerId)),e.ganttId!=null&&(t.ganttId=Number(e.ganttId)),e.sectorId!=null&&(t.sectorId=Number(e.sectorId)),t}function Nt(e,t){let n=new Set([String(e)]);for(let i of t.cascadeMutations??[])n.add(String(i.activityId));return n}function K(e,t){let n=new Map;for(let i of t){let r=e.getActivity(i);r&&n.set(i,Z(r))}return n}function Z(e){return{...e,start_date:new Date(e.start_date),end_date:new Date(e.end_date),constraint_date:e.constraint_date?new Date(e.constraint_date):null,$source:[...e.$source],$target:[...e.$target]}}function xt(e,t,n,i){V(e,t,n,i.primaryValue);for(let[r,s]of Object.entries(i.extraFields??{}))V(e,t,r,s);for(let r of i.cascadeMutations??[]){let s=r;for(let[a,o]of Object.entries(s.fields))V(e,s.activityId,a,o)}}function wa(e,t,n){let i=[];for(let r of n){let s=e.getActivity(r);if(!s){i.push({id:r,kind:"deleted",after:null});continue}let a=t.get(r),o=wi(a,s);a?i.push({id:r,kind:"updated",fields:o,after:X(s)}):i.push({id:r,kind:"created",fields:o,after:X(s)})}return i}function wi(e,t){let n={},i=e??{},r=t,s=new Set([...Object.keys(i),...Object.keys(r)]);for(let a of s)xa(i[a],r[a])||(n[a]={before:i[a],after:r[a]});return n}function In(e,t,n){let i=new Set;i.add(e);for(let r of t)i.add(r);for(let r of n)i.add(r);return i}function Na(e,t){let n=new Set;for(let i of e)n.add(String(i));for(let i of t)n.add(i);return n}function Tn(e,t,n,i,r){for(let s of t){if(n.has(s.activityId)||(r.add(s.activityId),i.has(s.activityId)))continue;let a=e.getActivity(s.activityId);if(!a)continue;let o=Z(a);o.correlative_id=s.before,i.set(s.activityId,o)}}function xa(e,t){if(e===t)return!0;if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(e==null||t==null||typeof e!=typeof t)return!1;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!xa(e[n],t[n]))return!1;return!0}return!1}var Pu=/^(\d{4})\/(\d{1,2})\/(\d{1,2})\s+(\d{1,2}):(\d{2})$/;function Dt(e){if(e==null||e==="")throw new Error(`[parseFromBackend] expected a date string, got "${e}"`);if(e.includes("T")||e.endsWith("Z")){let o=new Date(e);if(Number.isNaN(o.getTime()))throw new Error(`[parseFromBackend] invalid ISO date "${e}"`);return o}let t=e.match(Pu);if(!t)throw new Error(`[parseFromBackend] unsupported date format "${e}" (expected "YYYY/MM/DD H:MM" or ISO)`);let[,n,i,r,s,a]=t;return new Date(Date.UTC(Number(n),Number(i)-1,Number(r),Number(s),Number(a)))}function fe(e,t,n,i){if(e.getTime()>n.getTime())return 0;if(t.getTime()<n.getTime()||e.getTime()===t.getTime())return 100;let r=i.calculateDuration(e,n),s=i.calculateDuration(e,t);return s===0?0:r*100/s}var Ru=e=>e.type==="project",Lu=(e,t,n)=>{let i=e.calendar_id,r=i!=null?n.calendarReader.getCalendar(String(i)):null;if(!r)return 0;let s=a=>a instanceof Date?a:Dt(String(a));return fe(s(e.start_date),s(e.end_date),t,r)};function Fa(e,t,n){let i=[],r=(a,o)=>{let c=n.getActivity(a);c&&c.expected_progress!==o&&(n.setActivityField(a,v.EXPECTED_PROGRESS,o),i.push(String(a)))},s=a=>{let o=n.getActivity(a);if(!o)return 0;if(!Ru(o)){let d=Lu(o,t,n);return r(a,d),d}let c=0;for(let d of n.getChildren(a)){let u=s(d),f=n.getActivity(d),p=typeof f?.ponderator=="number"?f.ponderator:0;c+=u*p}let l=c/100;return r(a,l),l};for(let a of e)s(a);return i}var Ma=e=>Math.round(e*100)/100;function bu(e,t){return t==="Baseline"?e.expected_progress_base:e.expected_progress}function Ou(e,t){let n=Ma(e),i=Ma(t);return n>99.99?Bt.DONE:i>n?Bt.OVERDUE:e>0&&n>i?Bt.ADVANCEMENT:e===0&&t===0?Bt.WAITING:e>0&&n<i?Bt.DOING:Bt.WAITING}function Gt(e,t){let n=[];return e.forEachActivity((i,r)=>{let s=i,a=typeof s.progress=="number"?s.progress:0,o=Ou(a,bu(s,t));s.status!==o&&(V(e,r,Ze,o),n.push(r))}),n}var Ni=Number.MAX_SAFE_INTEGER;function Kt(e,t){let n=Fi(e,t);return n.sort(wu),n.map(i=>String(i.id))}function Ua(e){let t=[],n=r=>{t.push(r);let s=Kt(String(r.id),e);for(let a of s){let o=e.getActivity(a);o&&n(o)}},i=Kt("0",e);for(let r of i){let s=e.getActivity(r);s&&n(s)}return t}function Ba(e,t,n){let i=n.getActivity(e);if(!i)return null;let r=ja(i),s=Kt(r,n),a=s.findIndex(o=>String(o)===String(e));if(a<=0)return null;for(let o=a-1;o>=0;o--){let c=s[o];if(c!==void 0&&!Nu(t,c))return c}return null}function xi(e,t){let n=t.getActivity(e);if(!n)return-1;let i=ja(n);return Kt(i,t).findIndex(s=>String(s)===String(e))}function Fi(e,t){if(String(e)==="0")return t.getAllActivities().filter(s=>b(s.parent));let i=t.getChildren(e),r=[];for(let s of i){let a=t.getActivity(s);a&&r.push(a)}return r}function wu(e,t){let n=Wa(e),i=Wa(t);return n!==i?n-i:String(e.id).localeCompare(String(t.id))}function Wa(e){let t=e.correlative_id,n=typeof t=="number"?t:Number(t);return Number.isFinite(n)?n:Ni}function ja(e){let t=e.parent;return t==null||t===0||t==="0"?"0":String(t)}function Nu(e,t){return e.has(t)?!0:e.has(String(t))}function ot(e){e.invalidateVisualOrderIds?.();let t=[];e.forEachActivity(s=>{b(s.parent)&&t.push(s)}),t.sort(Ya);let n=[];Ha(n,t);let i=[],r=0;for(;n.length>0;){let s=n.pop();if(s.correlative_id!==r){let o=typeof s.correlative_id=="number"?s.correlative_id:void 0;i.push({activityId:String(s.id),before:o}),o!==void 0&&e.noteCorrelativeBefore?.(String(s.id),o),xu(s,r)}r+=1;let a=Fi(String(s.id),e);a.sort(Ya),Ha(n,a)}return i}function Ha(e,t){for(let n=t.length-1;n>=0;n-=1)e.push(t[n])}function $a(e){let t=e.correlative_id,n=typeof t=="number"?t:Number(t);return Number.isFinite(n)?n:Ni}var Ya=(e,t)=>$a(e)-$a(t);function xu(e,t){e.correlative_id=t}async function Va(e){let{state:t,sector:n,scheduler:i,skipAutoSchedule:r,now:s}=e;if(ot(t),n.updateDurationForPrimaveraEndDate&&Mu(t),Wu(t),r){s&&(Dn(t,s),Gt(t,n.statusCriteria));return}let a=await i.schedule({});_e(t,a),Uu(t),Fu(t),await Ie(t,void 0,!1),s&&(Dn(t,s),Gt(t,n.statusCriteria))}function Dn(e,t){let n=[];e.forEachActivity((i,r)=>{(i.parent===0||i.parent==="0"||i.parent==null)&&n.push(r)}),Fa(n,t,e)}function Fu(e){e.forEachActivity(t=>{t.auto_scheduling||!t.start_date||t.duration==null||e.getChildren(t.id).length>0||(t.end_date=e.calculateEndDate({start_date:t.start_date,duration:t.duration,task:t}))})}function Mu(e){e.forEachActivity(t=>{!t.start_date||!t.end_date||(t.duration=e.calculateDuration({start_date:t.start_date,end_date:t.end_date,task:t}))})}function Wu(e){e.forEachActivity(t=>{let n=t.constraint_type;if(!n||!t.constraint_date)return;let i=t.constraint_date;if(t.type==="milestone"&&(i.getUTCHours()!==0||i.getUTCMinutes()!==0))return;let r=e.calendarReader.getCalendar(String(t.calendar_id));r&&(t.constraint_date=$t(t.constraint_date,r,n))})}function Uu(e){e.forEachActivity(t=>{if(t.type!=="milestone")return;let n=t.constraint_type;if(!n||!t.constraint_date)return;let i=e.calendarReader.getCalendar(String(t.calendar_id));i&&(t.constraint_date=$t(t.constraint_date,i,n))})}function Mi(e){let t=e instanceof Date?new Date(e.getTime()):e&&typeof e=="object"&&typeof e.valueOf=="function"?new Date(e.valueOf()):new Date(e),n=(r,s)=>a=>a===void 0?t[r]():(t[s](a),i),i={__isMomentShim:!0,clone:()=>Mi(t),hours:n("getUTCHours","setUTCHours"),minutes:n("getUTCMinutes","setUTCMinutes"),seconds:n("getUTCSeconds","setUTCSeconds"),milliseconds:n("getUTCMilliseconds","setUTCMilliseconds"),valueOf:()=>t.getTime(),toDate:()=>new Date(t.getTime()),getTime:()=>t.getTime()};return i}Mi.isMoment=e=>!!e&&typeof e=="object"&&e.__isMomentShim===!0;var pt=Mi;function Bu(e){return e&&e.constructor===Date?!!(e.getFullYear&&e.getMonth&&e.getDate):!1}function En(e){return Bu(e)&&!isNaN(e.getTime())}function k(e,t,n,i){if(!En(new Date(t)))throw new Error(`Invalid date argument for calculateEndDate method. Date: ${t}, Activity: ${JSON.stringify(i)}`);let r=t;return e.calculateEndDate({start_date:new Date(r),duration:n,unit:"hour",task:i})}function lt(e){if(!En(new Date(e.dateBaseToCalculate)))throw new Error("Invalid date argument for getClosestWorkTime method");let{dateBaseToCalculate:t,activityCalendar:n,direction:i,activity:r}=e;return n.$gantt.getClosestWorkTime({date:new Date(t),dir:i,unit:"hour",task:r})}var ju=e=>e?e.$level===1:!1,Hu=e=>e.type==="project",$u=e=>e.$level!==0,Yu=e=>e.type==="task",Vu=e=>e.type==="task"||e.type==="milestone",rt={byFirstLevel:ju,filterByParentType:Hu,avoidSubproject:$u,byTaskType:Yu,byTaskTypeAndMilestone:Vu};var h=Object.freeze({MFO:"mfo",MSO:"mso",FNLT:"fnlt",FNET:"fnet",SNET:"snet",SNLT:"snlt",ALAP:"alap",ASAP:"asap"});var M=Object.freeze({FS:"fs",SS:"ss",FF:"ff",SF:"sf"});function qt(e){return{0:"fs",1:"ss",2:"ff",3:"sf"}[Number(e)]||"sf"}function Ga(e){let{gantt:t,pendingParentsWithNoLinks:n,calculations:i,linkProperty:r}=e;try{let s=Gu({gantt:t,pendingParentsWithNoLinks:n});if(s.length===0)return new Set;let a=Ku({gantt:t,subprojectsWithNoLinks:s}),o=qu({gantt:t,childrenIds:a,linkProperty:r,getArrayOfLinkedActivities:zu,calculations:i});return new Set(o.map(c=>c.id))}catch(s){throw s}}function Gu(e){let{gantt:t,pendingParentsWithNoLinks:n}=e;return t.getTaskByTime().filter(rt.filterByParentType).filter(i=>n.has(i.id)).map(i=>i.id)}function Ku(e){let{gantt:t,subprojectsWithNoLinks:n}=e,i=new Set;for(let r of n)t.getChildren(r).filter(o=>{let c=t.getTask(o),l=rt.byTaskTypeAndMilestone(c),d=Number(c.progress)<100;return l&&d}).forEach(o=>i.add(o));return[...i]}function qu(e){let{gantt:t,childrenIds:n,linkProperty:i,getArrayOfLinkedActivities:r,calculations:s}=e,a=[];for(let o of n){let c=t.getTask(o),l=c[i]||[];r({gantt:t,links:l,linkDirection:i==="$source"?"target":"source"}).every(f=>s.has(f))&&a.push(c)}return a}function zu(e){let{gantt:t,links:n,linkDirection:i}=e,r=[];for(let s of n){let a=t.getLink(s);if(!a){`${s}`;continue}let o=Number(a[i]);r.push(o)}return r}function Ka({gantt:e,linkProperty:t,direction:n}){try{let i=Ju(e,t);if(n==="forward")return{chainStartActivities:i,activitiesStartChainButChildrenOfLinkedParents:null};if(n==="backward")return Xu(i,e,t)}catch(i){throw console.log("Critical Path",i),i}}function Ju(e,t){return e.getTaskByTime().filter(rt.avoidSubproject).filter(rt.byTaskTypeAndMilestone).filter(n=>!n[t].length)}function Xu(e,t,n){let i=[],r=new Set;return e.forEach(s=>{let a=Number(s.parent),o=t.getTask(a);o&&(o[n].length>0?r.add(s.id):o.constraint_type!=="fnlt"&&i.push(s))}),{chainStartActivities:i,activitiesStartChainButChildrenOfLinkedParents:r}}function qa({gantt:e,direction:t,linkProperty:n}){try{let i=Zu(e),r=new Set,s=new Set,a=new Set;t==="backward"&&ef(i).forEach(d=>{r.add(d.id)});let o=Qu(i,t,n),c=tf(i,o);return o.forEach(l=>{s.add(l.id)}),c.forEach(l=>{a.add(l.id)}),{parentsWithFullProgress:r,pendingParentsWithNoLinks:s,pendingParentsWithLinks:a}}catch(i){throw i}}function Zu(e){return e.getTaskByTime().filter(rt.filterByParentType).filter(rt.avoidSubproject)}function Qu(e,t,n){return e.filter(i=>{let r=i[n];if(!Array.isArray(r))return!1;let s=r.length>0,a=i.constraint_type||"",o=a!=="fnlt";return t==="forward"?!s&&o&&a!=="snet":!s&&o})}function tf(e,t){let n=new Set(t.map(i=>i.id));return e.filter(i=>!n.has(i.id))}function ef(e){return e.filter(t=>{let n=Number(t.progress);return Number.isNaN(n)?!1:n===100})}function za({pendingParentsWithLinks:e,gantt:t,direction:n}){try{let i=new Set;return e.forEach(r=>{let s=t.getTask(r),a=nf(n),o=rf(n),c=s[a];if(!Array.isArray(c))return;sf(t,c,o).forEach(d=>{i.add(d)})}),i}catch(i){throw i}}function nf(e){return e==="forward"?"$source":"$target"}function rf(e){return e==="forward"?"target":"source"}function sf(e,t,n){return t.map(i=>{let s=e.getLink(i)[n];return Number(s)})}var Pe={identifySecondLevelActivities:Ga,identifyInitialActivities:Ka,identifyParentsWithAndWithoutLinks:qa,identifyForbiddenActivities:za};function Pn(e){return e.length?e.reduce((t,n)=>n.ef>t.ef?n:t):!1}function Wi({linkType:e,lag:t,predecessorTime:n,activityCalendar:i,activity:r}){return e===M.FS&&t===0?lt({predecessorTime:n,activityCalendar:i,direction:"future",activity:r}):Re(n,e,i,r)}function Ja({duration:e,constraintDate:t,activityCalendar:n,activity:i}){let r=new Date(t);return{es:k(n,r,e,i),ef:r}}function Xa({duration:e,constraintDate:t,activityCalendar:n,activity:i}){let r=new Date(t),s=k(n,r,e,i);return{es:r,ef:s}}function Re(e,t,n,i){if(![M.FS,M.SS,M.FF].includes(t))return e;let s=[M.FS,M.SS].includes(t)?"future":"past";return lt({dateBaseToCalculate:e,activityCalendar:n,direction:s,activity:i})}var Ui=class{constructor(t,n,i){if(this.linkedActivitiesData=t,this.activity=n,this.gantt=i,this.activityCalendar=this.gantt.getCalendar(this.activity.calendar_id),!this.activityCalendar)throw new Error(`Error trying to get calendar with id: ${this.activity.calendar_id}`)}calculate(){let t=this.calculateLinks(),n=Pn(t),i=this.activity.constraint_type;return i==="snet"?this.handleSNETConstraint(n):i==="fnlt"?this.handleFNLTConstraint(n):n}calculateLinks(){let t=[];for(let n of this.linkedActivitiesData){let i=n.linkType,r=qt(i),s=n.linkLag,a=n.es,o=n.ef,c=null;if(r==="ss")c=this.calculateSSLink({lag:s,predecessorEs:a});else if(r==="ff")c=this.calculateFFLink({lag:s,predecessorEf:o});else if(r==="fs")c=this.calculateFSLink({lag:s,predecessorEf:o});else if(r==="sf")c=this.calculateSFLink({lag:s,predecessorEs:a,predecessorEf:o});else continue;c&&t.push(c)}return t}handleSNETConstraint(t){let n=Xa({duration:this.activity.duration,constraintDate:this.activity.constraint_date,activityCalendar:this.activityCalendar,activity:this.activity});return t&&t.ef>n.ef?t:n}handleFNLTConstraint(t){let n=Ja({duration:-this.activity.duration,constraintDate:this.activity.constraint_date,activityCalendar:this.activityCalendar,activity:this.activity});return t?t.ef>n.ef?n:t:n}calculateSSLink({lag:t,predecessorEs:n}){let i=Wi({linkType:"ss",lag:t,predecessorTime:n,activityCalendar:this.activityCalendar,activity:this.activity}),r=k(this.activityCalendar,i,t,this.activity);t>0&&(r=Re(r,"ss",this.activityCalendar,this.activity));let s=k(this.activityCalendar,r,this.activity.duration,this.activity);return{es:r,ef:s}}calculateFFLink({lag:t,predecessorEf:n}){let i=Wi({linkType:"ff",lag:t,predecessorTime:n,activityCalendar:this.activityCalendar,activity:this.activity}),r=k(this.activityCalendar,i,t,this.activity),s=k(this.activityCalendar,r,-this.activity.duration,this.activity);return t>0&&(s=Re(s,"ff",this.activityCalendar,this.activity)),{es:s,ef:r}}calculateFSLink({lag:t,predecessorEf:n}){let i=n;t===0&&(i=lt({dateBaseToCalculate:n,activityCalendar:this.activityCalendar,direction:"future",activity:this.activity}));let r=k(this.activityCalendar,i,t,this.activity),s=k(this.activityCalendar,r,this.activity.duration,this.activity);return{es:r,ef:s}}calculateSFLink({lag:t,predecessorEs:n}){let i=k(this.activityCalendar,n,t,this.activity),r=k(this.activityCalendar,i,-this.activity.duration,this.activity);return t>0&&(r=Re(r,"sf",this.activityCalendar,this.activity)),{es:r,ef:i}}},Za=Ui;var Bi=class{constructor(t){this.linkedActivitiesData=t.linksWithActivityData,this.activity=t.activity,this.gantt=t.gantt}calculate(){if(this.activityCalendar=this.gantt.getCalendar(this.activity.calendar_id),!this.activityCalendar)throw new Error(`Error trying to get calendar with id: ${this.activity.calendar_id}`);let t=[];for(let n of this.linkedActivitiesData){let i=qt(n.linkType);if(n.type==="task"&&Number(n.progress)>0||n.type==="project"&&Number(n.progress)===100)continue;let r=n.linkLag,s=n.ls,a=n.lf;if(i==="ss"){let o={lag:r,workTime:s,lsDataCalculation:-r,lfDataCalculation:this.activity.duration},{ls:c,lf:l}=this.calculateSSLink(o);t.push({ls:c,lf:l})}if(i==="ff"){let o={lag:r,workTime:a,lsDataCalculation:-this.activity.duration,lfDataCalculation:-r},{ls:c,lf:l}=this.calculateFFLink(o);t.push({ls:c,lf:l})}if(i==="fs"){let o={lag:r,workTime:s,lsDataCalculation:-this.activity.duration,lfDataCalculation:-r},{ls:c,lf:l}=this.calculateFsLink(o);t.push({ls:c,lf:l})}if(i==="sf"){let o={lag:r,workTime:a,lsDataCalculation:-r,lfDataCalculation:this.activity.duration},{ls:c,lf:l}=this.calculateSFLink(o);t.push({ls:c,lf:l})}}if(this.activity.constraint_type==="fnlt"){let n=this.getMinLfFromLinks(t),i=this.calculateSfRestrictionDates();return n?this.getMinLfFromLinks([i,n]):i}else{let n=this.getMinLfFromLinks(t);if(n===!1){let i=this.gantt.getSubtaskDates();return{ls:k(this.activityCalendar,i.end_date,-this.activity.duration,this.activity),lf:i.end_date}}return n}}calculateFFLink({lag:t,workTime:n,lsDataCalculation:i,lfDataCalculation:r}){let s=null,a=null;if(t===0)return s=k(this.activityCalendar,n,r,this.activity),a=k(this.activityCalendar,s,i,this.activity),{ls:a,lf:s};let o=n;return t>0&&(o=this.getLastWorkingHour(o,this.activityCalendar,"past")),s=k(this.activityCalendar,o,r,this.activity),a=k(this.activityCalendar,s,i,this.activity),{ls:a,lf:s}}calculateFsLink({lag:t,workTime:n,lsDataCalculation:i,lfDataCalculation:r,isMilestone:s=!1}){let a=null,o=null;if(t===0){let l=this.getLastWorkingHour(n,this.activityCalendar,"past");return a=k(this.activityCalendar,l,r,this.activity),a=this.getLastWorkingHour(a,this.activityCalendar,"past"),o=k(this.activityCalendar,a,i,this.activity),{ls:o,lf:a}}let c=n;return s||(c=this.getLastWorkingHour(n,this.activityCalendar)),a=k(this.activityCalendar,c,r,this.activity),o=k(this.activityCalendar,a,i,this.activity),s||(a=this.getLastWorkingHour(a,this.activityCalendar,"past")),{ls:o,lf:a}}calculateSFLink({lag:t,workTime:n,lsDataCalculation:i,lfDataCalculation:r}){let s=null,a=null,o=n;return a=k(this.activityCalendar,o,i,this.activity),s=k(this.activityCalendar,a,r,this.activity),{ls:a,lf:s}}calculateSSLink({lag:t,workTime:n,lsDataCalculation:i,lfDataCalculation:r,isMilestone:s=!1}){let a=null,o=null;if(t===0)return o=k(this.activityCalendar,n,i,this.activity),a=k(this.activityCalendar,o,r,this.activity),{ls:o,lf:a};let c=n;return t<0&&!s&&(c=this.getLastWorkingHour(c,this.activityCalendar,"future")),o=k(this.activityCalendar,c,i,this.activity),a=k(this.activityCalendar,o,r,this.activity),{ls:o,lf:a}}getMinLfFromLinks(t=[]){return t.length?t.reduce((n,i)=>i.lf<n.lf?i:n):!1}calculateSfRestrictionDates(){let t=this.activity.constraint_date,n=this.activity.duration;return{ls:k(this.activityCalendar,t,-n,this.activity),lf:t}}getLastWorkingHour(t,n,i="past"){let r=t instanceof Date?t:new Date(t),s=pt(r).clone();return this.isActivityInInitHour(n,r)&&i==="past"&&(s=s.hours(0).minutes(0).seconds(0).milliseconds(0)),lt({dateBaseToCalculate:new Date(s),direction:i,activityCalendar:n,activity:this.activity})}isActivityInInitHour(t,n){let i=n instanceof Date?n:new Date(n),s=t.getWorkHours(i)[0];if(!s||!s.includes("-"))return!1;let a=s.split("-")[0];if(!a.includes(":"))return!1;let o=a.split(":");return o.length<2?!1:(a=parseInt(o[0],10),pt.isMoment(n)?n.hours()===a:i.getUTCHours()===a)}},Qa=Bi;function to(e){let{parent:t,linkProperty:n,linkDirection:i,calculations:r,gantt:s,direction:a}=e,o=t[n],c=af(t),l=null;if(a==="forward"){let d=of(o,i,r,s);l=new Za(d,t,s),l=l.calculate()}else{let d=cf(o,i,r,s);l=new Qa({linksWithActivityData:d,activity:t,parentData:c,gantt:s}).calculate()}return l}function af(e){return{duration:e.duration,calendarId:e.calendar_id}}function of(e,t,n,i){return e.length===0?[]:e.map(r=>{let s=i.getLink(r);if(!s)return console.warn(`Link not found: ${r}`),null;let a=Number(s[t]),o=n.get(a);return o?{es:o.es,ef:o.ef,linkLag:s.lag,linkType:s.type}:(console.warn(`Calculations not found for activity: ${a}`),null)}).filter(Boolean)}function cf(e,t,n,i){return e.length===0?[]:e.map(r=>{let s=i.getLink(r);if(!s)return console.warn(`Link not found: ${r}`),null;let a=Number(s[t]),o=n.get(a);if(!o)return null;let c=i.getTask(a);return c?{ls:o.ls,lf:o.lf,linkLag:s.lag||0,linkType:s.type,progress:c.progress,type:c.type}:null}).filter(Boolean)}function io(e){let{activityData:t,calculations:n,singleParents:i,direction:r}=e;if(lf(t.id,n))return null;let s=df(t.id,i),a=uf(s,n);return a.length===0?null:ff(a,r)}function lf(e,t){return t.has(e)}function df(e,t){let n=t.get(e);return n?n.childrens:[]}function uf(e,t){return e.filter(n=>t.has(n)).map(n=>t.get(n))}function ff(e,t){if(t==="forward"){let n=eo(e,"es"),i=no(e,"ef");return{es:n,ef:i}}else{let n=eo(e,"ls"),i=no(e,"lf");return{ls:n,lf:i}}}function eo(e,t){return e.reduce((n,i)=>i[t]<n[t]?i:n)[t]}function no(e,t){return e.reduce((n,i)=>i[t]>n[t]?i:n)[t]}var ji={parentWithLinks:to,parentWithNoLinks:io};var Hi=class{constructor(t){this.activity=t.activity,this.direction=t.direction,this.linkProperty=t.direction==="forward"?"$target":"$source",this.linkDirection=t.direction==="forward"?"source":"target",this.calculationsOfParentThatImpactChildrens=t.calculationsOfParentThatImpactChildrens,this.calculations=t.calculations,this.calculationOfParentsFromLinks=t.calculationOfParentsFromLinks,this.singleParents=t.singleParents,this.parentCalculationFromChildren=t.parentCalculationFromChildren,this.gantt=t.gantt}handleParentWithLinks(){try{let t=this.getArrayOfIdOfLinkedActivities(this.activity[this.linkProperty]);if(this.direction==="backward"){let i=[h.FNLT];if(this.shouldCalculateParentWithLinksBackward(i)){this.calculateAndStoreParentWithLinks(this.activity);return}if(this.shouldSetDatesToParentsWithLinks(i)){this.setDatesToParentsWithLinksBackward();return}}if(this.areAllLinksCalculated(t)&&this.calculationsOfParentThatImpactChildrens.has(this.activity.id)){this.direction==="forward"&&this.setDatesToParentsWithLinks(),this.direction==="backward"&&this.setDatesToParentsWithLinksBackward();return}this.calculateAndStoreParentWithLinks(this.activity)}catch(t){throw t}}shouldCalculateParentWithLinksBackward(t){let n=t.includes(this.activity.constraint_type),i=!this.calculationOfParentsFromLinks.has(this.activity.id);return n&&i}calculateAndStoreParentWithLinks(t){let n=ji.parentWithLinks({parent:t,linkProperty:this.linkProperty,linkDirection:this.linkDirection,gantt:this.gantt,calculations:this.calculations,direction:this.direction});this.calculationsOfParentThatImpactChildrens.set(t.id,n),this.calculationOfParentsFromLinks.add(t.id)}areAllLinksCalculated(t){return t.every(n=>this.calculations.has(n))}shouldSetDatesToParentsWithLinks(t){let n=t.includes(this.activity.constraint_type),i=this.calculationOfParentsFromLinks.has(this.activity.id);return n&&i}handleParentWithNoLinks(){let t=ji.parentWithNoLinks({activityData:this.activity,gantt:this.gantt,singleParents:this.singleParents,calculations:this.calculations,direction:this.direction});t&&this.calculations.set(this.activity.id,t)}setDatesToParentsWithLinks(){if(!this.activity)throw new Error("Error trying to get parent",{cause:{parentActivity:this.activity}});let t=this.singleParents.get(this.activity.id)?.childrens,i=Array.from(this.calculations).filter(a=>t.includes(a[0])).map(a=>a[1]),{minEs:r,maxEf:s}=i.reduce((a,{es:o,ef:c})=>({minEs:new Date(Math.min(a.minEs.getTime(),new Date(o).getTime())),maxEf:new Date(Math.max(a.maxEf.getTime(),new Date(c).getTime()))}),{minEs:new Date(i[0].es),maxEf:new Date(i[0].ef)});this.calculations.set(this.activity.id,{es:r,ef:s}),this.parentCalculationFromChildren.add(this.activity.id)}setDatesToParentsWithLinksBackward(){if(!this.activity)throw new Error("Error trying to get parent",{cause:{parentActivity:this.activity}});let t=this.singleParents.get(this.activity.id)?.childrens,i=Array.from(this.calculations).filter(a=>t.includes(a[0])).map(a=>a[1]),{minLs:r,maxLf:s}=i.reduce((a,{ls:o,lf:c})=>({minLs:new Date(Math.min(a.minLs.getTime(),new Date(o).getTime())),maxLf:new Date(Math.max(a.maxLf.getTime(),new Date(c).getTime()))}),{minLs:new Date(i[0].ls),maxLf:new Date(i[0].lf)});this.calculations.set(this.activity.id,{ls:r,lf:s})}getArrayOfIdOfLinkedActivities(t,n=!1){return t.map(i=>{let s=this.gantt.getLink(i)[n||this.linkDirection];return Number(s)})}},ro=Hi;var $i=class{constructor({gantt:t,linkProperty:n}){this.gantt=t,this.linkProperty=n,this.structureOfParents=new Map,this.singleParents=new Map}identifyThirdLevelActivities(){try{let t=this.getFirstLevelParents();for(let n of t){let i=this.processEachActivity(n),{activitiesByLevel:r}=i,s=this.getAllLevels(r),a=this.getDeepestLevel(s),o=this.createResult(n,i,a,s);this.structureOfParents.set(n.id,o)}return{structureOfParents:this.structureOfParents,singleParents:this.singleParents}}catch(t){throw t}}getFirstLevelParents(){return this.gantt.getTaskByTime().filter(rt.byFirstLevel).filter(rt.filterByParentType)}processEachActivity(t){let n=new Set,i=new Set,r=new Map;return this.initializeParent(t),this.gantt.eachTask(s=>{this.processActivity(s,n,i,r)},t.id),{parentsIds:n,allTasks:i,activitiesByLevel:r}}initializeParent(t){let n=Number(t.id),i=!!t[this.linkProperty]?.length,r=t.$level;this.singleParents.set(n,{level:r,hasLink:i,childrens:[]})}processActivity(t,n,i,r){let s=Number(t.id),a=Number(t.parent);i.add(s),this.isProjectActivity(t)&&this.addParentInfo(t,n);let c=this.doesParentExist(a);a!=null&&c&&this.addChildToParent(a,s),this.addActivityToLevel(t,r)}isProjectActivity(t){return t.type==="project"}hasLink(t){return!!t[this.linkProperty]?.length}addParentInfo(t,n){let i=Number(t.id),r=t.$level,s=this.hasLink(t),a={level:r,hasLink:s,childrens:[]};n.add(i),this.singleParents.set(i,a)}doesParentExist(t){return this.singleParents.has(t)}addChildToParent(t,n){this.singleParents.get(t).childrens.push(n)}addActivityToLevel(t,n){let i=t.$level,r=Number(t.parent);n.has(i)||n.set(i,new Map);let s=n.get(i);s.has(r)||s.set(r,[]),s.get(r).push({id:Number(t.id),isParent:this.isProjectActivity(t),calculated:!1})}getAllLevels(t){return new Set(t.keys())}getDeepestLevel(t){return t.size===0?0:Math.max(...t)}createResult(t,n,i,r){let{activitiesByLevel:s,parentsIds:a,allTasks:o}=n;return{parent:t.id,isALinkedParent:this.hasLink(t),levels:r,allParentChildrens:a,allChildrens:o,childrensByLevel:s,currentResolutionLevel:i,canBeCalculated:!1}}},so=$i;var Yi=class{constructor(t,n){this.direction=n,this.gantt=t,this.linkProperty=this.direction==="forward"?"$target":"$source",this.linkDirection=this.direction==="forward"?"source":"target",this.projectDates=t.getSubtaskDates()}tryToCalculateLastLevelChildrens(){this.structureOfParents.forEach(t=>{let{currentResolutionLevel:n,childrensByLevel:i,isALinkedParent:r}=t;if(r)return;let s=i.get(n);for(let[a,o]of s)if(o.filter(l=>!this.calculations.has(l.id)).length===0){let l=this.gantt.getTask(a);this.calculateParentWithNoLinks(l,o);return}})}initActivitiesWaitingForCalculation(){try{this.gantt.getTaskByTime().filter(rt.avoidSubproject).forEach(t=>{this.activitiesWaitingForCalculation.add(t.id)})}catch(t){throw t}}identifyParentsWithAndWithoutLinks(){try{let{parentsWithFullProgress:t,pendingParentsWithNoLinks:n,pendingParentsWithLinks:i}=Pe.identifyParentsWithAndWithoutLinks({gantt:this.gantt,direction:this.direction,linkProperty:this.linkProperty});this.parentsWithFullProgress=t,this.pendingParentsWithNoLinks=n,this.pendingParentsWithLinks=i}catch(t){throw t}}identifyForbiddenActivitiesLinkedToParentsWithLinks(){try{this.forbiddenActivitiesLinkedToParentsWithLinks=Pe.identifyForbiddenActivities({pendingParentsWithLinks:this.pendingParentsWithLinks,gantt:this.gantt,direction:this.direction})}catch(t){throw t}}getArrayOfIdOfLinkedActivities(t,n=!1){return t.map(i=>{let s=this.gantt.getLink(i)[n||this.linkDirection];return Number(s)})}async identifyThirdLevelActivities(){try{let{structureOfParents:t,singleParents:n}=new so({gantt:this.gantt,linkProperty:this.linkProperty}).identifyThirdLevelActivities();this.structureOfParents=t,this.singleParents=n}catch(t){throw t}}processEachActivity(t){let n=new Set,i=new Set,r=new Map,s=new Map;return this.singleParents.set(Number(t.id),{level:t.$level,hasLink:!!t[this.linkProperty].length,childrens:[]}),new Promise((a,o)=>{this.gantt.eachTask(function(c){let l=Number(c.parent);if(i.add(c.id),c.type==="project"){let u={level:c.$level,hasLink:!!c[this.linkProperty].length,childrens:[]};n.add(c.id),this.singleParents.set(Number(c.id),u)}l&&this.singleParents.has(l)&&this.singleParents.get(l).childrens.push(c.id),r.has(c.$level)||r.set(c.$level,new Map);let d=r.get(c.$level);d.has(Number(c.parent))||d.set(Number(c.parent),[]),d.get(Number(c.parent)).push({id:c.id,isParent:c.type==="project",calculated:!1})}.bind(this),t.id),a({parentsIds:n,allTasks:i,activitiesByLevel:r,singleParents:s})})}identifySecondLevelActivities(){try{let t=Pe.identifySecondLevelActivities({gantt:this.gantt,pendingParentsWithNoLinks:this.pendingParentsWithNoLinks,calculations:this.calculations,linkProperty:this.linkProperty});this.secondLevelActivities=new Set([...this.secondLevelActivities,...t])}catch(t){throw t}}identifyInitialActivities(){try{let{chainStartActivities:t,activitiesStartChainButChildrenOfLinkedParents:n}=Pe.identifyInitialActivities({gantt:this.gantt,linkProperty:this.linkProperty,direction:this.direction});this.chainStartActivities=t,n&&(this.activitiesStartChainButChildrenOfLinkedParents=n)}catch(t){throw new Error("Error in identifyInitialActivities",{cause:t})}}calculateSecondLevelActivities(){try{this.direction==="forward"?this.recursiveCalculateEfAndEs(Array.from(this.secondLevelActivities),0,"secondLevel"):this.recursiveCalculateLfAndLs(Array.from(this.secondLevelActivities))}catch(t){throw t}}calculateStartAndFinishOfActivitiesThatStartChain(){try{this.chainStartActivities.forEach(t=>{if(!t||t.progress>100||t.type==="project")return;let n=this.calculateStartAndFinishOfChainOrigin(t,this.direction);if(this.direction==="forward"){let{es:i,ef:r}=n;this.calculations.set(t.id,{es:i,ef:r,text:t.text}),this.activitiesWaitingForCalculation.delete(t.id)}else{let{ls:i,lf:r}=n;this.calculations.set(t.id,{ls:i,lf:r,text:t.text}),this.activitiesWaitingForCalculation.delete(t.id)}})}catch(t){throw t}}buildDependencyGraph(t){let n=new Map,i=new Set(this.calculations.keys()),r=new Map;return t.forEach(s=>{s&&r.set(s.id,s)}),r.forEach((s,a)=>{if(i.has(a))return;let o=[];(s[this.linkDirection]||[]).forEach(l=>{let d=this.gantt.getLink(l);if(d){let u=Number(d[this.linkProperty]);o.push(u)}}),o=o.filter(l=>r.has(l)||i.has(l)),n.set(a,o)}),{graph:n,activityMap:r,calculatedActivities:i}}topologicalSort(t,n){let i=new Set,r=new Set,s=[],a=o=>{if(r.has(o))throw new Error("Cyclical dependency detected",{cause:{nodeId:o}});if(!i.has(o)&&!n.has(o)){r.add(o);let c=t.get(o)||[];for(let l of c)a(l);r.delete(o),i.add(o),s.push(o)}};for(let o of t.keys())!i.has(o)&&!n.has(o)&&a(o);return s.reverse()}calculateStartAndFinishOfChainOrigin(t=null,n=null){try{let i=t,r=Number(i.progress);r==="0.00"&&(r=0);let s=this.gantt.getCalendar(i.calendar_id);if(!s)throw new Error(`Error trying to get calendar with id: ${i.calendar_id}`);if((n||this.direction)==="forward"){let o=i.start_date,c=i.end_date;return{es:o,ef:c}}else{if(r>=100)return{ls:pt(i.start_date).clone(),lf:pt(i.end_date).clone()};if(r===0)return this.calculateBackwardWhenZeroProgress(i,s);if(r<100&&r>0)return this.calculateWhenProgressIsBetweenZeroAndOneHundred(i,s)}}catch(i){throw i}}calculateBackwardWhenZeroProgress(t,n){let i=pt(t.start_date).clone(),r=pt(t.end_date).clone(),s=t.duration,a=[h.ASAP,h.ALAP,h.SNET,h.FNET],o=t.constraint_type||h.ASAP;if(a.includes(o))r=this.projectDates.end_date,i=k(n,r,-s,t);else{let c=[h.SNLT,h.MSO],l=[h.FNLT,h.MFO];c.includes(o)&&(i=t.constraint_date,r=k(n,i,s,t)),l.includes(o)&&(r=t.constraint_date,i=k(n,r,-s,t))}return{ls:i,lf:r}}calculateWhenProgressIsBetweenZeroAndOneHundred(t){let n=t.start_date,i=null,r=t.constraint_type||h.ASAP,s=this.projectDates.end_date,a=[h.ASAP,h.ALAP,h.SNET,h.FNET],o=[h.SNLT,h.FNLT];if(a.includes(r))i=Math.max(t.end_date,s);else if(r===h.MSO)i=t.end_date;else if(r===h.MFO||o.includes(r)){let c=Math.min(s,t.constraint_date);i=Math.max(c,t.end_date)}return{ls:n,lf:new Date(i)}}initializeActivitiesWithFullProgress(){try{Array.from(this.activitiesWaitingForCalculation).filter(i=>Number(this.gantt.getTask(i).progress)===100).map(i=>this.gantt.getTask(i)).forEach(i=>{let r=i.type==="project";this.setDatesForActivityWithFullProgress(i),this.activitiesWaitingForCalculation.delete(i.id),r&&this.pendingParentsWithLinks.has(i.id)&&(this.parentCalculationFromChildren.add(i.id),this.calculationsOfParentThatImpactChildrens.set(i.id,{[this.direction==="forward"?"es":"ls"]:i.start_date,[this.direction==="forward"?"ef":"lf"]:i.end_date}),this.calculationOfParentsFromLinks.add(i.id))})}catch(t){throw t}}doCalculationForParentType(t){let n=new ro({activity:t,direction:this.direction,calculationsOfParentThatImpactChildrens:this.calculationsOfParentThatImpactChildrens,calculations:this.calculations,calculationOfParentsFromLinks:this.calculationOfParentsFromLinks,singleParents:this.singleParents,parentCalculationFromChildren:this.parentCalculationFromChildren,gantt:this.gantt});this.pendingParentsWithLinks.has(t.id)?n.handleParentWithLinks():n.handleParentWithNoLinks()}},Ft=Yi;function pf(e,t,n){let i={es:null,ef:null};if(!e)return i;if([h.SNET,h.SNLT].includes(t)){let r=new Date(e.constraint_date);i.es=r,i.ef=k(n,r,e.duration,e)}else if([h.FNLT,h.FNET].includes(t)){let r=new Date(e.constraint_date);i.es=k(n,r,-e.duration,e),i.ef=r}else if(t===h.MSO){let r=new Date(e.constraint_date);i.es=r,i.ef=k(n,r,e.duration,e)}else if(t===h.MFO){let r=new Date(e.constraint_date);i.es=k(n,r,-e.duration,e),i.ef=r}return i}var Rn=pf;var Vi=class{constructor(t){this.referenceActivity=t.activity,this.activityToCalculate=null,this.links=t.links,this.calculatedActivities=t.calculatedActivitiesMap,this.alapMap=t.calculatedAlapsMap,this.parentsWithLinks=t.parentsWithLinks,this.parentsCalculations=t.parentsCalculations,this.gantt=t.ganttInstance}getEsAndEfFromPreviousCalculatedActivities(t){return this.alapMap.has(t)?this.alapMap.get(Number(t)):this.calculatedActivities.get(Number(t))}calculateSucessorTimes(t,n,i=0,r,s=M.FS){let a=this.gantt.getCalendar(this.referenceActivity.calendar_id);if(!a)throw new Error(`Error trying to get calendar with id: ${this.referenceActivity.calendar_id}`);let o=t,c=null,l=null,d=this.referenceActivity.type==="milestone";return d||(s===M.FS&&r===0?o=lt({dateBaseToCalculate:o,activityCalendar:a,direction:"future",activity:this.referenceActivity}):o=this.mutateTheDateToFutureOrPastInBaseRestriction(t,s,a)),[M.FF,M.SF].includes(s)?(l=k(a,o,i,this.referenceActivity),c=k(a,l,n,this.referenceActivity),!d&&r>0&&(c=this.mutateTheDateToFutureOrPastInBaseRestriction(c,s,a))):(c=k(a,o,n,this.referenceActivity),!d&&r>0&&(c=this.mutateTheDateToFutureOrPastInBaseRestriction(c,s,a)),l=k(a,c,i,this.referenceActivity)),{es:c,ef:l}}calculateSS(t){let n=this.getEsAndEfFromPreviousCalculatedActivities(Number(t.source)),i=t.lag||0,s=this.referenceActivity.duration,a=t.lag||0;return this.calculateSucessorTimes(n.es,i,s,a,M.SS)}calculateFF(t){let n=this.getEsAndEfFromPreviousCalculatedActivities(Number(t.source)),r=-this.referenceActivity.duration,s=t.lag||0,a=t.lag||0;return this.calculateSucessorTimes(n.ef,r,s,a,M.FF)}calculateFS(t){let n=this.getEsAndEfFromPreviousCalculatedActivities(Number(t.source)),i=t.lag||0,s=this.referenceActivity.duration,a=t.lag||0;return this.calculateSucessorTimes(n.ef,i,s,a,M.FS)}calculateSF(t){let n=this.getEsAndEfFromPreviousCalculatedActivities(Number(t.source)),r=-this.referenceActivity.duration,s=t.lag||0,a=t.lag||0;return this.calculateSucessorTimes(n.es,r,s,a,M.SF)}mutateTheDateToFutureOrPastInBaseRestriction(t,n,i){if(![M.FS,M.SS,M.FF].includes(n))return t;let s=[M.FS,M.SS].includes(n)?"future":"past";return lt({dateBaseToCalculate:t,activityCalendar:i,direction:s,activity:this.referenceActivity})}},ao=Vi;var Le=class extends ao{constructor(t){super(t)}calculate(){if(this.links.length===0)return new Ft(this.gantt,"forward").calculateStartAndFinishOfChainOrigin(this.referenceActivity);let t=this.links.map(i=>{let r=this.gantt.getLink(i);if(!r)throw new Error("Link data not found",{cause:{linkId:i}});return this.calculateLink(r)}),n=Number(this.referenceActivity.parent);if(this.parentsWithLinks.has(n)){let i=this.gantt.getCalendar(this.referenceActivity.calendar_id),r=this.parentsCalculations.get(n).es,s=k(i,r,this.referenceActivity.duration,this.referenceActivity);t.push({es:r,ef:s})}return Pn(t)}calculateLink(t){return{0:()=>this.calculateFS(t),1:()=>this.calculateSS(t),2:()=>this.calculateFF(t),3:()=>this.calculateSF(t)}[t.type]()}};var Gi=class{constructor(t){this.gantt=t.gantt,this.direction=t.direction,this.pendingParentsWithNoLinks=t.pendingParentsWithNoLinks,this.pendingParentsWithLinks=t.pendingParentsWithLinks,this.calculationOfParentsFromLinks=t.calculationOfParentsFromLinks,this.singleParents=t.singleParents,this.calculations=t.calculations,this.activitiesStartChainButChildrenOfLinkedParents=t.activitiesStartChainButChildrenOfLinkedParents,this.linkProperty=t.linkProperty,this.linkDirection=t.linkDirection}checkActivitiesThatNowCanBeCalculated(t){let n=new Set,i=new Set(t);for(let r of t){let s=this.gantt.getTask(r);s.type==="project"?this.handleProjectActivity(r,s,n,i):this.handleNonProjectActivity(r,s,n,i)}return{activitiesThatCanBeCalculated:n,pendingActivities:i}}handleProjectActivity(t,n,i,r){let s=this.pendingParentsWithNoLinks.has(t),a=this.pendingParentsWithLinks.has(t),o=this.calculationOfParentsFromLinks.has(t);if(s){let c=this.singleParents.get(t)?.childrens;if(!c)return;c.every(d=>this.calculations.has(d))&&(i.add(t),r.delete(t));return}if(a&&o){let c=this.singleParents.get(t)?.childrens;if(!c)return;c.every(d=>this.calculations.has(d))&&(i.add(t),r.delete(t));return}a&&!o&&this.canCalculateParentActivity(n)&&(i.add(t),r.delete(t))}canCalculateParentActivity(t){let n=(t[this.linkProperty]||[]).length===0,i=t.constraint_type;return(this.direction==="forward"?i==="fnlt"||i==="snlt":i==="fnlt")&&n?!0:this.getArrayOfLinkedActivities(t[this.linkProperty]).every(a=>this.calculations.has(a))}handleNonProjectActivity(t,n,i,r){let s=Number(n.parent),a=this.pendingParentsWithLinks.has(s),o=this.calculationOfParentsFromLinks.has(s);if(a&&!o||this.direction==="backward"&&this.activitiesStartChainButChildrenOfLinkedParents.has(t)&&!o)return;if(n.$target.length===0&&n.$source.length===0){i.add(t),r.delete(t);return}let c=this.getLinkedActivities(n[this.linkProperty]),l=c.every(d=>this.calculations.has(d.id));if(this.direction==="backward"&&(c.length===0||l)&&o){i.add(t),r.delete(t);return}l&&(i.add(t),r.delete(t))}getLinkedActivities(t){if(!Array.isArray(t))return[];let n=[];for(let i of t){let r=this.gantt.getLink(i);if(!r)continue;let s=r[this.linkDirection],a=this.gantt.getTask(s);a&&n.push(a)}return n}getArrayOfLinkedActivities(t){if(!Array.isArray(t))return[];let n=[];for(let i of t){let r=this.gantt.getLink(i);r&&n.push(Number(r[this.linkDirection]))}return n}},Ln=Gi;var Ki=(e,t)=>()=>t()===e;var qi=e=>!e?.fullyParsed||typeof window<"u"&&window.to_use_react_gantt?.conversionMode?.isActive;var hf=16,be=async e=>performance.now()-e>hf?(await nt(),performance.now()):e;var Oe=async({pending:e,activityCalculator:t,calculateFn:n,shouldKeepPending:i,isCalculated:r,onActivityProcessed:s,isCurrent:a})=>{let o=new Set(e),c=performance.now();for(;o.size>0;){if(!a())return;c=await be(c);let{activitiesThatCanBeCalculated:l,pendingActivities:d}=t.checkActivitiesThatNowCanBeCalculated(o);if(l.size===0)break;for(let u of l){if(!a())return;c=await be(c),n([u])}for(let u of l){if(!a())return;i(u)&&d.add(u),s(u),r(u)&&d.delete(u)}o=d}};var zi=class extends Ft{constructor(t){super(t,"forward"),this.gantt=t,this.chainStartActivities=new Set,this.secondLevelActivities=new Set,this.pendingParentsWithLinks=new Set,this.pendingParentsWithNoLinks=new Set,this.structureOfParents=new Map,this.singleParents=new Map,this.calculations=new Map,this.calculationsOfParentThatImpactChildrens=new Map,this.alapMap=new Map,this.activitiesWaitingForCalculation=new Set,this.constraintsMap=new Map,this.totalFloatSnltFnlt=new Map,this.totalFloatForMsoMfo=new Map,this.totalFloatForAsap=new Map,this.calculationOfParentsFromLinks=new Set,this.parentCalculationFromChildren=new Set,this.forbiddenActivitiesLinkedToParentsWithLinks=new Set,this.activitiesStartChainButChildrenOfLinkedParents=new Set,this.identifyInitialActivities(),this.initActivitiesWaitingForCalculation()}async calculateAsync(t){this.identifyParentsWithAndWithoutLinks(),t()&&(this.identifyForbiddenActivitiesLinkedToParentsWithLinks(),t()&&(this.initializeActivitiesWithFullProgress(),t()&&(this.calculateStartAndFinishOfActivitiesThatStartChain(),t()&&(this.identifySecondLevelActivities(),t()&&(this.identifyThirdLevelActivities(),t()&&await this.iterativeCalculateEfAndEs(t))))))}async iterativeCalculateEfAndEs(t){let n=new Ln({gantt:this.gantt,direction:this.direction,pendingParentsWithNoLinks:this.pendingParentsWithNoLinks,pendingParentsWithLinks:this.pendingParentsWithLinks,calculationOfParentsFromLinks:this.calculationOfParentsFromLinks,singleParents:this.singleParents,calculations:this.calculations,activitiesStartChainButChildrenOfLinkedParents:this.activitiesStartChainButChildrenOfLinkedParents,linkProperty:this.linkProperty,linkDirection:this.linkDirection});await Oe({pending:this.activitiesWaitingForCalculation,activityCalculator:n,calculateFn:i=>this.calculateStartAndFinishTimes(i),shouldKeepPending:i=>this.calculationOfParentsFromLinks.has(i)&&!this.calculations.has(i),isCalculated:i=>this.calculations.has(i),onActivityProcessed:i=>this.activitiesWaitingForCalculation.delete(i),isCurrent:t})}calculateStartAndFinishTimes(t){t.forEach(n=>{let i=this.gantt.getTask(n);if(i.type==="project")return this.doCalculationForParentType(i);if(!i)throw new Error("Error trying to get activity",{cause:{activityId:n}});let r=i.$target,s=i.constraint_type||h.ASAP,a=[h.SNET,h.SNLT,h.FNLT,h.FNET],o=[h.ASAP,h.ALAP,h.SNET,h.FNET,h.SNLT,h.FNLT],c=this.gantt.getCalendar(i.calendar_id);if(!c)throw new Error(`Error trying to get calendar with id: ${i.calendar_id}`);let l=Number(i.progress),d=null,u=null,f=null;if(l===100){this.setDatesForActivityWithFullProgress(i);return}l>0&&o.includes(s)?({es:d,ef:u}=this.getDatesForActivityWithZeroProgress(i),f=new Le({links:r,activity:i,calculatedActivitiesMap:this.calculations,calculatedAlapsMap:this.alapMap,constraint:s,parentsWithLinks:this.pendingParentsWithLinks,parentsCalculations:this.calculationsOfParentThatImpactChildrens,ganttInstance:this.gantt}).calculate(),s===h.ASAP&&this.totalFloatForAsap.set(n,{es:f.es,ef:f.ef,text:i.text})):{es:d,ef:u}=new Le({links:r,activity:i,calculatedActivitiesMap:this.calculations,calculatedAlapsMap:this.alapMap,constraint:s,parentsWithLinks:this.pendingParentsWithLinks,parentsCalculations:this.calculationsOfParentThatImpactChildrens,ganttInstance:this.gantt}).calculate(),s===h.ALAP&&this.alapMap.set(n,{es:i.start_date,ef:i.end_date,text:i.text});let p=Rn(i,s,c);if(a.includes(s)&&(this.constraintsMap.set(n,p),this.totalFloatSnltFnlt.set(n,{es:d,ef:u}),{es:d,ef:u}=this.recalculateInBaseConstraint(s,p,{es:d,ef:u})),[h.MSO,h.MFO].includes(s))if(this.totalFloatForMsoMfo.set(n,{es:d,ef:u}),this.constraintsMap.set(n,p),i.progress===0)d=p.es,u=p.ef;else{let A=i.end_date;s===h.MFO&&(A=Math.max(p.ef,i.end_date)),d=i.start_date,u=A}this.calculations.set(n,{es:d,ef:u}),this.activitiesWaitingForCalculation.delete(n)})}getTheGreatesDateBetweenRestrictionAndEsEf(t,n,i="greater"){if(i==="greater")return n.ef>t.ef?n:t;if(i==="less")return n.ef<t.ef?n:t}setDatesForActivityWithFullProgress(t){this.calculations.set(t.id,{es:t.start_date,ef:t.end_date})}getDatesForActivityWithZeroProgress(t){return{es:t.start_date,ef:t.end_date}}recalculateInBaseConstraint(t,n,i){let r=[h.SNET,h.FNET].includes(t)?"greater":"less",{es:s,ef:a}=this.getTheGreatesDateBetweenRestrictionAndEsEf(n,i,r);return{es:s,ef:a}}cleanAllActivityParentsFromLinks(t){return t.map(n=>{let i=this.gantt.getLink(n);if(!i)throw new Error("Error trying to get link",{cause:{linkId:n}});let r=i.source,s=i.target;if(!(!this.gantt.getTask(r)||this.gantt.getTask(r)?.type==="project")&&!(!this.gantt.getTask(s)||this.gantt.getTask(s)?.type==="project"))return n}).filter(Boolean)}},oo=zi;var Ji=class{constructor(t){this.activity=t.activity,this.links=t.links,this.calculatedActivities=t.calculatedActivitiesMap,this.forwardPathCalculations=t.calculatedForwardActivitiesMap,this.gantt=t.ganttInstance}getForwardOrBackwardCalculations(t,n=null){return n===h.ALAP?this.forwardPathCalculations.get(t):this.calculatedActivities.get(t)}calculateSuccessorTimes(t,n,i=0,r,s=M.FS){let a=this.gantt.getCalendar(this.activity.calendar_id);if(!a)throw new Error(`Error trying to get calendar with id: ${this.activity.calendar_id}`);let o=t,c=this.activity.type==="milestone";if(c&&r===0){let d=k(a,o,n,this.activity),u=k(a,d,i,this.activity);return{ls:d,lf:u}}let l={lag:r,workTime:o,activityCalendar:a,lsDataCalculation:n,lfDataCalculation:i,isMilestone:c};if(s===M.FS){let{ls:d,lf:u}=this.calculateFsLink(l);return{ls:d,lf:u}}if(s===M.FF){let{ls:d,lf:u}=this.calculateFFLink(l);return{ls:d,lf:u}}if(s===M.SS){let{ls:d,lf:u}=this.calculateSSlink(l);return{ls:d,lf:u}}if(s===M.SF){let{ls:d,lf:u}=this.calculateSFLink(l);return{ls:d,lf:u}}}calculateSS(t,n=!1){let i=this.getValueForSS(t,n),r=-t.lag||0,s=this.activity.duration,a=t.lag;return this.calculateSuccessorTimes(i,r,s,a,M.SS)}calculateFF(t,n){let i=this.getForwardOrBackwardCalculations(Number(t.target)),r=n===h.ALAP?"ef":"lf",s=i[r],a=-this.activity.duration,o=-t.lag||0,c=t.lag;return this.calculateSuccessorTimes(s,a,o,c,M.FF)}calculateFS(t,n){let i="ls";i=n===h.ALAP?"es":"ls";let r=this.getForwardOrBackwardCalculations(Number(t.target),n),s=-this.activity.duration,a=t.lag||0,o=-t.lag||0;return this.calculateSuccessorTimes(r[i],s,o,a,M.FS)}calculateSF(t,n=!1){let i=n?this.getEarlyStartFromForwardPath(Number(t.target)).ef:this.getForwardOrBackwardCalculations(Number(t.target)).lf,r=-t.lag||0,s=this.activity.duration,a=t.lag;return this.calculateSuccessorTimes(i,r,s,a,M.SF)}getEarlyStartFromForwardPath(t){return this.forwardPathCalculations.get(t)}getValueForSS(t,n){return n?this.getEarlyStartFromForwardPath(Number(t.target)).es:this.getForwardOrBackwardCalculations(Number(t.target))["ls"]}calculateDate(t,n,i){let r=pt(n).clone();return k(t,new Date(r),i,this.activity)}getLastWorkingHour(t,n,i="past"){let r=t instanceof Date?t:new Date(t),s=pt(r).clone();return this.isActivityInInitHour(n,r)&&i==="past"&&(s=s.hours(0).minutes(0).seconds(0).milliseconds(0)),lt({dateBaseToCalculate:new Date(s),direction:i,activityCalendar:n,activity:this.activity})}isActivityInInitHour(t,n){let i=n instanceof Date?n:new Date(n),s=t.getWorkHours(i)[0];if(!s||!s.includes("-"))return!1;let a=s.split("-")[0];if(!a.includes(":"))return!1;let o=a.split(":");return o.length<2?!1:(a=parseInt(o[0],10),pt.isMoment(n)?n.hours()===a:i.getUTCHours()===a)}calculateFsLink({lag:t,workTime:n,activityCalendar:i,lsDataCalculation:r,lfDataCalculation:s,isMilestone:a=!1}){let o=null,c=null;if(t===0){let d=this.getLastWorkingHour(n,i,"past");return o=k(i,d,s,this.activity),o=this.getLastWorkingHour(o,i,"past"),c=k(i,o,r,this.activity),{ls:c,lf:o}}let l=n;return a||(l=this.getLastWorkingHour(n,i)),o=k(i,l,s,this.activity),c=k(i,o,r,this.activity),a||(o=this.getLastWorkingHour(o,i,"past",!0)),{ls:c,lf:o}}calculateFFLink({lag:t,workTime:n,activityCalendar:i,lsDataCalculation:r,lfDataCalculation:s}){let a=null,o=null;if(t===0)return a=k(i,n,s,this.activity),o=k(i,a,r,this.activity),{ls:o,lf:a};let c=n;return t>0&&(c=this.getLastWorkingHour(c,i,"past")),a=k(i,c,s,this.activity),o=k(i,a,r,this.activity),{ls:o,lf:a}}calculateSSlink({lag:t,workTime:n,activityCalendar:i,lsDataCalculation:r,lfDataCalculation:s,isMilestone:a=!1}){let o=null,c=null;if(t===0)return c=k(i,n,r,this.activity),o=k(i,c,s,this.activity),{ls:c,lf:o};let l=n;return t<0&&!a&&(l=this.getLastWorkingHour(l,i,"future")),c=k(i,l,r,this.activity),o=k(i,c,s,this.activity),{ls:c,lf:o}}calculateSFLink({lag:t,workTime:n,activityCalendar:i,lsDataCalculation:r,lfDataCalculation:s}){let a=null,o=null;return t===0?(o=k(i,n,r),a=k(i,o,s,this.activity),{ls:o,lf:a}):(o=k(i,n,r,this.activity),a=k(i,o,s,this.activity),{ls:o,lf:a})}},co=Ji;var Xi=class extends co{constructor(t){super(t),this.constraint=t.constraint||h.ASAP,this.parentsWithFullProgress=t.parentsWithFullProgress,this.parentsThatImpactChildrens=t.parentsThatImpactChildrens,this.projectDates=this.gantt.getSubtaskDates()}calculate(){if(this.links.length===0)return new Ft(this.gantt,"backward").calculateStartAndFinishOfChainOrigin(this.activity);let t=this.activity.progress>0&&this.activity.progress<100,n=this.gantt.getTask(this.activity.parent),i=!1;n&&(i=this.parentsThatImpactChildrens.has(Number(this.activity.parent)));let r=this.links.map(a=>{let o=this.gantt.getLink(a);if(!o)throw new Error("Link not found",{cause:{linkId:a}});if(!this.parentsWithFullProgress.has(Number(o.target)))return this.calculateLink(o)}).filter(a=>a);if(r.length!==0){let a=this.getMinLfFromLinks(r);if(r.push(this.calculateTheLsAndLfForTheActivity()),i){let d=this.parentsThatImpactChildrens.get(Number(this.activity.parent));r.push(this.calculateTheLsAndLfForTheActivity(d))}let o=this.getMinDateFromLinks(r),c=o.ls,l=o.lf;return t&&(c=this.activity.start_date,l=this.getMinCalculationLogic(o)),{ls:c,lf:l,minFromLinks:a}}if(i){r.push(this.calculateTheLsAndLfForTheActivity());let o=this.parentsThatImpactChildrens.get(Number(this.activity.parent)).lf,c=k(this.gantt.getCalendar(this.activity.calendar_id),o,-this.activity.duration,this.activity);r.push({ls:c,lf:o});let l=this.getMinDateFromLinks(r);return{ls:l.ls,lf:l.lf,minFromLinks:l}}let s=this.calculateTheLsAndLfForTheActivity();return{ls:s.ls,lf:s.lf,minFromLinks:s}}calculateTheLsAndLfForTheActivity(t=null){try{let n=this.activity.duration,i=this.gantt.getCalendar(this.activity.calendar_id);if(!i)throw new Error(`Calendar not found with id ${this.activity.calendar_id}`);let r=t?t.lf:this.projectDates.end_date;if(!r)throw new Error("End date not found for activity",{cause:{activityId:this.activity.id}});return{ls:k(i,r,-n,this.activity),lf:r}}catch(n){throw Error(n.message)}}SnetSnltMsoMinDate(t){let n=Math.min(t.lf,this.projectDates.end_date);return new Date(Math.max(n,this.activity.end_date))}calculateLink(t){let n=this.gantt.getTask(t.target);if(!n||n.progress>0&&n.type!=="project")return;let i=this.getSpecialCalculationParamForConstraintLink(),r=this.getSpecialParamForSf(),s=this.getSpecialParamForFF();return{0:()=>this.calculateFS(t,i),1:()=>this.calculateSS(t),2:()=>this.calculateFF(t,s),3:()=>this.calculateSF(t,r)}[t.type]()}getSpecialCalculationParamForConstraintLink(){if(this.constraint===h.ALAP)return h.ALAP;if(this.constraint===h.FNET||this.constraint===h.SNET)return"snet-fnet";if(this.constraint===h.FNLT)return h.FNLT}getSpecialParamForSf(){return!![h.ALAP].includes(this.constraint)}getSpecialParamForFF(){return!![h.MFO,h.MSO].includes(this.constraint)}getMinCalculationLogic(t){if(this.constraint===h.ALAP)return this.getMinDateBasedOnConstraint(t);if(this.constraint===h.FNET)return this.getMinDateBasedOnConstraint(t);if(this.constraint===h.FNLT)return this.getMinDateBasedOnConstraint(t);if(this.constraint===h.MFO)return this.getMinDateBasedOnConstraint(t);if(this.constraint===h.SNET||this.constraint===h.SNLT||this.constraint===h.MSO)return this.SnetSnltMsoMinDate(t);if(this.constraint===h.ASAP)return this.getMinDateBasedOnConstraint(t)}getMinDateFromLinks(t){try{return this.constraint===h.ALAP||this.constraint===h.ASAP?t.reduce((i,r)=>r.lf<i.lf?r:i):t.reduce((n,i)=>i.ls<n.ls?i:n)}catch(n){throw new Error(`Function: getMinDateFromLinks in LinksConstraintCalculator - ${n.message}`)}}getMinLfFromLinks(t){return t.reduce((n,i)=>i.lf<n.lf?i:n)}getMinDateBasedOnConstraint(t,n=this.constraint){let i=Math.min(t.lf,this.projectDates.end_date),r=this.activity.end_date,s=this.activity.constraint_date;if(n===h.ASAP)return new Date(Math.max(i,r));if(n===h.FNET||n===h.FNLT){let a=Math.min(i,s);return new Date(Math.max(i,a))}if(n===h.ALAP)return new Date(Math.min(i,r))}},lo=Xi;function yf(e,t,n){let i={ls:null,lf:null};return n===h.MSO&&(i.ls=t.constraint_date,i.lf=k(e,i.ls,t.duration,t)),n===h.MFO&&(i.lf=t.constraint_date,i.ls=k(e,i.lf,-t.duration,t)),i}var uo=yf;var Zi=class extends Ft{constructor(t,n,i){super(t,"backward"),this.gantt=t,this.chainStartActivities=new Set,this.secondLevelActivities=new Set,this.pendingParentsWithLinks=new Set,this.pendingParentsWithNoLinks=new Set,this.structureOfParents=new Map,this.singleParents=new Map,this.calculationsOfParentThatImpactChildrens=new Map,this.activitiesWaitingForCalculation=new Set,this.calculations=new Map,this.mapOfRelationsWithActivitiesIds=new Map,this.activitiesWaitingForCalculation=new Set,this.forwardPathCalculations=n,this.forwardConstraintsMap=i,this.constraintMap=new Map,this.minFromLinks=new Map,this.activitiesStartChainButChildrenOfLinkedParents=new Set,this.calculationOfParentsFromLinks=new Set,this.parentCalculationFromChildren=new Set,this.parentsWithFullProgress=new Set,this.forbiddenActivitiesLinkedToParentsWithLinks=new Set,this.identifyInitialActivities(),this.initActivitiesWaitingForCalculation()}async calculateAsync(t){this.identifyParentsWithAndWithoutLinks(),t()&&(this.identifyForbiddenActivitiesLinkedToParentsWithLinks(),t()&&(this.initializeActivitiesWithFullProgress(),t()&&(this.calculateStartAndFinishOfActivitiesThatStartChain(),t()&&(this.identifySecondLevelActivities(),t()&&(this.identifyThirdLevelActivities(),t()&&await this.iterativeCalculateLfAndLs(t))))))}async iterativeCalculateLfAndLs(t){let n=new Ln({gantt:this.gantt,direction:this.direction,pendingParentsWithNoLinks:this.pendingParentsWithNoLinks,pendingParentsWithLinks:this.pendingParentsWithLinks,calculationOfParentsFromLinks:this.calculationOfParentsFromLinks,singleParents:this.singleParents,calculations:this.calculations,activitiesStartChainButChildrenOfLinkedParents:this.activitiesStartChainButChildrenOfLinkedParents,linkProperty:this.linkProperty,linkDirection:this.linkDirection});await Oe({pending:this.activitiesWaitingForCalculation,activityCalculator:n,calculateFn:i=>this.calculateStartAndFinishTimes(i),shouldKeepPending:i=>this.calculationOfParentsFromLinks.has(i)&&!this.calculations.has(i),isCalculated:i=>this.calculations.has(i),onActivityProcessed:i=>this.activitiesWaitingForCalculation.delete(i),isCurrent:t})}setDatesToParentsWithLinks(t){if(!t)throw new Error("Error trying to get parent",{cause:{receivedParentData:t}});let n=this.singleParents.get(t.id).childrens,r=Array.from(this.calculations).filter(o=>n.includes(o[0])).map(o=>o[1]),{minLs:s,maxLf:a}=r.reduce((o,{ls:c,lf:l})=>({minLs:new Date(Math.min(o.minLs.getTime(),new Date(c).getTime())),maxLf:new Date(Math.max(o.maxLf.getTime(),new Date(l).getTime()))}),{minLs:new Date(r[0].ls),maxLf:new Date(r[0].lf)});this.calculations.set(t.id,{ls:s,lf:a})}calculateStartAndFinishTimes(t){t.forEach(n=>{let i=this.gantt.getTask(n);if(!i)throw new Error("Activity not found",{cause:{activityId:n}});let r=i.$source,s=i.constraint_type||h.ASAP,a=Number(i.progress);if(this.activitiesStartChainButChildrenOfLinkedParents.has(n)){if(this.calculationsOfParentThatImpactChildrens.has(Number(i.parent))&&this.calculationsOfParentThatImpactChildrens.get(Number(i.parent))===!1){let{ls:d,lf:u}=this.calculateStartAndFinishOfChainOrigin(i,this.direction);this.setCalculations(i,d,u);return}return this.doCalculationForActivitiesThatStartLinkButHisParentIsLinked(i)}if(i.type==="project")return this.doCalculationForParentType(i);if(a===100){this.setDatesForActivityWithFullProgress(i);return}if(this.allLinkedActivitiesHasProgress(r,i)){this.setWhenAllLinkedActivitiesHasProgress(i);return}if(a>0&&a<100&&(s===h.MSO||s===h.MFO)){this.setWhenActivitiesHasProgressButLessThanOneHundred(i,s);return}if(s===h.MSO||s===h.MFO){this.recalculateInBaseRestriction(i,s);return}let{ls:o,lf:c,minFromLinks:l}=this.calculateLfandLsFromLinks(r,i,s,this.parentsWithFullProgress,this.calculationsOfParentThatImpactChildrens);(s===h.SNLT||s===h.FNLT)&&({ls:o,lf:c}=this.getTheLessLateInBasEsEfConstraint(i.id,{ls:o,lf:c},s)),this.setCalculations(i,o,c),this.minFromLinks.set(i.id,{ls:l.ls,lf:l.lf})})}getTheLessLateInBasEsEfConstraint(t,n,i){let r=this.forwardConstraintsMap.get(t);if(!r){let s=this.gantt.getTask(t),a=this.gantt.getCalendar(s.calendar_id);r=Rn(s,i,a)}return n.lf<r.ef?n:{ls:r.es,lf:r.ef}}allLinkedActivitiesHasProgress(t){try{let n=!0;for(let i of t){let r=this.gantt.getLink(i);if(!r)continue;let s=this.gantt.getTask(r.target);s&&(s.type==="project"&&(n=!1),s.progress===0&&(n=!1))}return n}catch(n){throw new Error(n.message)}}setDatesForActivityWithFullProgress(t){this.setCalculations(t,t.start_date,t.end_date)}setWhenAllLinkedActivitiesHasProgress(t){let n=Number(t.parent),{ls:i,lf:r}=this.calculateStartAndFinishOfChainOrigin(t,"backward");if(this.calculationsOfParentThatImpactChildrens.has(n)){i=t.start_date;let s=this.calculationsOfParentThatImpactChildrens.get(n);s&&typeof s=="object"&&s.lf!=null&&(r=new Date(Math.min(r,s.lf)))}this.setCalculations(t,i,r)}setWhenActivitiesHasProgressButLessThanOneHundred(t,n){if(n===h.MSO){this.setCalculations(t,t.start_date,t.end_date);return}if(n===h.MFO){let i=Math.min(t.constraint_date,this.projectDates.end_date),r=new Date(Math.max(i,t.end_date));this.setCalculations(t,t.start_date,r);return}}setCalculations(t,n,i){this.calculations.set(t.id,{ls:n,lf:i,text:t.text})}calculateLfandLsFromLinks(t,n,i,r,s){return new lo({links:t,activity:n,calculatedActivitiesMap:this.calculations,calculatedForwardActivitiesMap:this.forwardPathCalculations,constraint:i,parentsWithFullProgress:r,parentsThatImpactChildrens:s,ganttInstance:this.gantt}).calculate()}recalculateInBaseRestriction(t,n){try{let i=this.gantt.getCalendar(t.calendar_id);if(!i)throw new Error(`Error trying to get calendar with id: ${t.calendar_id}`);let r=uo(i,t,n);this.constraintMap.set(t,r),this.setCalculations(t,r.ls,r.lf)}catch(i){throw new Error(i.message)}}cleanAllActivityParentsFromLinks(t){return t.map(n=>{let i=this.gantt.getLink(n).source,r=this.gantt.getLink(n).target;if(!(!this.gantt.getTask(i)||this.gantt.getTask(i)?.type==="project")&&!(!this.gantt.getTask(r)||this.gantt.getTask(r)?.type==="project"))return n}).filter(Boolean)}doCalculationForActivitiesThatStartLinkButHisParentIsLinked(t){let n=Number(t.parent),i=this.calculationsOfParentThatImpactChildrens.get(n),r=0,s=0;if([h.ASAP,h.ALAP,h.SNET,h.FNET].includes(t.constraint_type))if(Number(t.progress)>0){let l=this.projectDates.end_date;s=new Date(Math.min(l,i.lf)),r=t.start_date}else s=i.lf,r=k(this.gantt.getCalendar(t.calendar_id),s,-t.duration,t);if([h.SNLT].includes(t.constraint_type)){let l=t.constraint_date,d=this.calculationsOfParentThatImpactChildrens.get(n),u=k(this.gantt.getCalendar(t.calendar_id),d.lf,-t.duration,t);r=new Date(Math.min(l.getTime(),u.getTime())),s=k(this.gantt.getCalendar(t.calendar_id),r,t.duration,t)}if([h.FNLT].includes(t.constraint_type)){let l=t.constraint_date,d=this.calculationsOfParentThatImpactChildrens.get(n);r=new Date(Math.min(l.getTime(),d.lf.getTime())),s=k(this.gantt.getCalendar(t.calendar_id),r,t.duration,t)}[h.MSO].includes(t.constraint_type)&&(r=t.constraint_date,s=k(this.gantt.getCalendar(t.calendar_id),r,t.duration,t)),[h.MFO].includes(t.constraint_type)&&(s=t.constraint_date,r=k(this.gantt.getCalendar(t.calendar_id),s,-t.duration,t));let a=this.projectDates.end_date,o=[{ls:r,lf:s}];o.push({ls:k(this.gantt.getCalendar(t.calendar_id),a,-t.duration,t),lf:a});let c=this.getMinLfFromLinks(o);this.calculations.set(t.id,{ls:c.ls,lf:c.lf,text:t.text})}getMinLfFromLinks(t=[]){return t.length?t.reduce((n,i)=>i.lf<n.lf?i:n):!1}},fo=Zi;function po(){return null}var ho=({forward:e,backward:t,id:n,activity:i,gantt:r,projectDates:s})=>({totalFloat:{es:e.calculations.get(n)?.es||0,ef:e.calculations.get(n)?.ef||0,ls:t.calculations.get(n)?.ls||0,lf:t.calculations.get(n)?.lf||0,constraintsMap:e.constraintsMap.get(n),totalFloatSnltFnlt:e.totalFloatSnltFnlt.get(n),totalFloatForMsoMfo:e.totalFloatForMsoMfo.get(n),minFromLinks:t.minFromLinks.get(n),activity:i,gantt:r},freeFloat:{forwardMap:e.calculations||new Map,backwardMap:t.calculations||new Map,activity:i,projectDates:s,gantt:r}});var Qi=class{constructor(t){this.gantt=t.gantt,this.activity=t.activity,this.es=t.es,this.ef=t.ef,this.ls=t.ls,this.lf=t.lf,this.constrainstMap=t.constraintsMap,this.totalFloatSnltFnlt=t.totalFloatSnltFnlt,this.totalFloatForMsoMfo=t.totalFloatForMsoMfo,this.minFromLinks=t.minFromLinks}getTotalFloat(){let{constraint_type:t}=this.activity,n=Number(this.activity.progress);if(n===100)return 0;if(t||(t=h.ASAP),t===h.ASAP||!t)return n===0?this.calculateAsap():this.calculateAsapWithProgress();if(t===h.ALAP)return n===0?this.calculateAlap():this.calculateAlapWithProgress();if(t===h.SNET||t===h.FNET)return n===0?this.calculateSnetFet():this.calculateSnetFnetSnltWithProgress();if(t===h.SNLT)return n===0?this.calculateSnltFnlt():this.calculateSnetFnetSnltWithProgress();if(t===h.FNLT)return n===0?this.calculateSnltFnlt():this.calculateFnltWithProgress();if(t===h.MSO||t===h.MFO)return n===0?this.calculateMsoMfo():this.calculateMsoMfoWithProgress()}calculateAsap(){let t=this.calculationWithCalendar(this.ls,this.es),n=this.calculationWithCalendar(this.lf,this.ef);return this.getMinValue(t,n)/this.gantt.config.hoursPerDay}calculateAsapWithProgress(){let t=this.calculationWithCalendar(this.lf,this.ef);if(this.minFromLinks){let n=this.calculationWithCalendar(this.minFromLinks.lf,this.ef);return this.getMinValue(t,n)/this.gantt.config.hoursPerDay}return t/this.gantt.config.hoursPerDay}calculateAlap(){let t=this.calculationWithCalendar(this.ls,this.es),n=this.calculationWithCalendar(this.lf,this.ef),i=this.getMinValue(t,n),r=this.calculationWithCalendar(this.lf,this.activity.end_date);return this.getMinValue(i,r)/this.gantt.config.hoursPerDay}calculateAlapWithProgress(){return this.calculationWithCalendar(this.lf,this.ef)/this.gantt.config.hoursPerDay}calculateSnetFnetSnltWithProgress(){let t=this.calculationWithCalendar(this.lf,this.ef);if(this.minFromLinks){let n=this.calculationWithCalendar(this.minFromLinks.lf,this.ef);return this.getMinValue(t,n)/this.gantt.config.hoursPerDay}return t/this.gantt.config.hoursPerDay}calculateFnltWithProgress(){let t=this.calculationWithCalendar(this.lf,this.ef),n=this.calculationWithCalendar(this.activity.constraint_date,this.ef);if(this.minFromLinks){let i=this.calculationWithCalendar(this.minFromLinks.lf,this.ef);return this.getMinValue(t,n,i)/this.gantt.config.hoursPerDay}return this.getMinValue(t,n)/this.gantt.config.hoursPerDay}calculateMsoMfoWithProgress(){return this.calculationWithCalendar(this.lf,this.ef)/this.gantt.config.hoursPerDay}calculateSnetFet(){let t=this.calculationWithCalendar(this.ls,this.es),n=this.calculationWithCalendar(this.lf,this.ef);return this.getMinValue(t,n)/this.gantt.config.hoursPerDay}calculateSnltFnlt(){let t=this.calculationWithCalendar(this.ls,this.es),n=this.calculationWithCalendar(this.lf,this.ef),i=this.getMinValue(t,n);if(!this.totalFloatSnltFnlt&&!this.constrainstMap)return this.getMinValue(t,n)/this.gantt.config.hoursPerDay;let r=0;return this.activity.constraint_type===h.SNLT?r=this.calculationWithCalendar(this.constrainstMap.es,this.totalFloatSnltFnlt.es):r=this.calculationWithCalendar(this.constrainstMap.ef,this.totalFloatSnltFnlt.ef),this.getMinValue(r,i)/this.gantt.config.hoursPerDay}calculateMsoMfo(){let t=this.calculationWithCalendar(this.ls,this.es),n=this.calculationWithCalendar(this.lf,this.ef),i=this.getMinValue(t,n);if(!this.totalFloatForMsoMfo&&!this.constrainstMap)return this.getMinValue(t,n)/this.gantt.config.hoursPerDay;let r=0;return this.activity.constraint_type===h.MSO?r=this.calculationWithCalendar(this.constrainstMap.es,this.totalFloatForMsoMfo.es):r=this.calculationWithCalendar(this.constrainstMap.ef,this.totalFloatForMsoMfo.ef),this.getMinValue(r,i)/this.gantt.config.hoursPerDay}getMinValue(...t){return Math.min(...t)}calculationWithCalendar(t,n){return this.gantt.getCalendar(this.activity.calendar_id).calculateDuration({start_date:new Date(n),end_date:new Date(t)})}},yo=Qi;var tr=class{constructor(t){this.gantt=t.gantt,this.activity=t.activity,this.forwardMap=t.forwardMap,this.backwardMap=t.backwardMap,this.projectDates=t.projectDates,this.linksFreeFloatArray=[],this.linksFreeFloatObject={},this.durationCache=new Map}getFreeFloat(){let t=Number(this.activity.progress),n=this.getConstraintType();return this.calculateFreeFloatOfLink(n),{activityFreeFloat:t===100?0:this.getFreeFloatBaseConstraint(n),linksFreeFloat:this.linksFreeFloatObject}}getFreeFloatBaseConstraint(t){return t===h.MSO||t===h.MFO?this.calculateMsoMfo(t):this.calculateGeneral(t)}calculateFreeFloatOfLink(t=h.ASAP){let n=this.activity.$source.map(i=>{let{LINK:r,LINK_TYPE:s}=this.getLinkData(i),a=this.gantt.getTask(r.target);if(!a)return{linkId:r.id,freeFloat:null,hasProgress:!1};let o=Number(a.progress)>0,{sucessorDateToCalculate:c,predecessorDateToCalculate:l}=this.getDatesFromSucessorAndPredecessor(s,t,a),d=this.calculationWithCalendar(c,l),u=this.parseHoursToDays(d)-this.parseHoursToDays(r.lag),f=Math.max(0,u);return this.linksFreeFloatObject[r.id]=f,{linkId:r.id,freeFloat:f,hasProgress:o}}).filter(i=>i.freeFloat!==null&&i.freeFloat!==void 0);return this.linksFreeFloatArray=n,n}calculateGeneral(t=h.ASAP){let n=this.getMinFloat(this.linksFreeFloatArray),i=this.calculateFreeFloatForEndOfProject(t),r=0;return[h.SNLT,h.FNLT].includes(t)?r=this.doCalculationForSnltFnlt(t,i,n):r=this.doGeneralCalculation(i,n),Math.max(0,r)}getConstraintType(){let{constraint_type:t}=this.activity;return t||(t=h.ASAP),t}getDatesFromSucessorAndPredecessor(t,n,i){let r=i.constraint_type===h.ALAP,s=this.getSucessorAndPredecessorDates({constraint:n,isSuscessorAlap:r,sucessorId:i.id,predecessorId:this.activity.id}),a=new Date,o=new Date;return a=s[t].sucessor,o=s[t].predecessor,{sucessorDateToCalculate:a,predecessorDateToCalculate:o}}doGeneralCalculation(t,n){return n===null?t:this.getMinValue(n,t)}doCalculationForSnltFnlt(t,n,i){let r=this.calculateFreeFloatOfRestriction(t);return this.getMinValue(i,n,r)}calculateFreeFloatForEndOfProject(t){return this.parseHoursToDays(this.calculationWithCalendar(this.gantt.getSubtaskDates().end_date,t===h.ALAP?this.backwardMap.get(this.activity.id).lf:this.forwardMap.get(this.activity.id).ef))}calculateFreeFloatOfRestriction(t){return this.parseHoursToDays(this.calculationWithCalendar(this.activity.constraint_date,t===h.FNLT?this.forwardMap.get(this.activity.id).ef:this.forwardMap.get(this.activity.id).es))}getLinkData(t){let n=this.gantt.getLink(t)||{},i=qt(n.type);return{LINK:n,LINK_TYPE:i}}getSucessorAndPredecessorDates({constraint:t,isSuscessorAlap:n,sucessorId:i,predecessorId:r}){let s=({direction:a,constraint:o=h.ASAP})=>o===h.ALAP?this.backwardMap.get(r)[a]:this.forwardMap.get(r)[a];if(t===h.ASAP||t===h.SNET||t===h.FNET||t===h.MSO||t===h.MFO)return{fs:{sucessor:n?this.backwardMap.get(i).ls:this.forwardMap.get(i).es,predecessor:s({direction:"ef"})},ss:{sucessor:n?this.backwardMap.get(i).ls:this.forwardMap.get(i).es,predecessor:s({direction:"es"})},ff:{sucessor:n?this.backwardMap.get(i).lf:this.forwardMap.get(i).ef,predecessor:s({direction:"ef"})},sf:{sucessor:n?this.backwardMap.get(i).lf:this.forwardMap.get(i).ef,predecessor:s({direction:"es"})}};if(t===h.ALAP)return{fs:{sucessor:n?this.backwardMap.get(i).ls:this.forwardMap.get(i).es,predecessor:s({constraint:h.ALAP,direction:"lf"})},ss:{sucessor:n?this.backwardMap.get(i).ls:this.forwardMap.get(i).es,predecessor:s({constraint:h.ALAP,direction:"ls"})},ff:{sucessor:n?this.backwardMap.get(i).lf:this.forwardMap.get(i).ef,predecessor:s({constraint:h.ALAP,direction:"lf"})},sf:{sucessor:n?this.backwardMap.get(i).lf:this.forwardMap.get(i).ef,predecessor:s({constraint:h.ALAP,direction:"ls"})}};if(t===h.SNLT)return{fs:{sucessor:n?this.backwardMap.get(i).ls:this.forwardMap.get(i).es,predecessor:s({direction:"ef"})},ss:{sucessor:n?this.backwardMap.get(i).ls:this.forwardMap.get(i).es,predecessor:s({direction:"es"})},ff:{sucessor:n?this.backwardMap.get(i).lf:this.forwardMap.get(i).ef,predecessor:s({direction:"ef"})},sf:{sucessor:n?this.backwardMap.get(i).lf:this.forwardMap.get(i).ef,predecessor:s({direction:"es"})}};if(t===h.FNLT)return{fs:{sucessor:n?this.backwardMap.get(i).ls:this.forwardMap.get(i).es,predecessor:s({direction:"ef"})},ss:{sucessor:n?this.backwardMap.get(i).ls:this.forwardMap.get(i).es,predecessor:s({direction:"es"})},ff:{sucessor:n?this.backwardMap.get(i).lf:this.forwardMap.get(i).ef,predecessor:s({direction:"ef"})},sf:{sucessor:n?this.backwardMap.get(i).lf:this.forwardMap.get(i).ef,predecessor:s({direction:"es"})}}}calculateMsoMfo(t){let n=this.activity.constraint_date||new Date,i=t===h.MSO?this.forwardMap.get(this.activity.id).es:this.forwardMap.get(this.activity.id).ef,r=this.calculationWithCalendar(n,i);return Math.max(0,this.parseHoursToDays(r))}getMinValue(...t){let n=t.filter(i=>i!=null);return n.length?Math.min(...n):0}calculationWithCalendar(t,n){let i=`${n.getTime()}_${t.getTime()}`;if(this.durationCache.has(i))return this.durationCache.get(i);let s=this.gantt.getCalendar(this.activity.calendar_id).calculateDuration({start_date:new Date(n),end_date:new Date(t)});return this.durationCache.set(i,s),s}parseHoursToDays(t){return t?t/this.gantt.config.hoursPerDay:0}getMinFloat(t){if(!t?.length)return null;let n=t.filter(i=>!i.hasProgress).map(i=>i.freeFloat);return n.length===0?null:Math.min(...n)}},mo=tr;var go=e=>({totalFloat:new yo(e.totalFloat).getTotalFloat(),freeFloat:new mo(e.freeFloat).getFreeFloat()});var er=async({activityIds:e,forward:t,backward:n,gantt:i,projectDates:r,isCurrent:s})=>{let a=performance.now(),o=new Map,c=new Map;for(let l of e){if(s&&!s())return{totalFloatMap:o,freeFloatMap:c};let d=i.getTask(l);if(!d)continue;let u=ho({forward:t,backward:n,id:l,activity:d,gantt:i,projectDates:r}),{totalFloat:f,freeFloat:p}=go(u);o.set(l,f),c.set(l,p),a=await be(a)}return{totalFloatMap:o,freeFloatMap:c}};var nr=class{constructor(t){this.gantt=t,this.forwardPathCalculations=null,this.backwardPathCalculations=null,this.totalFloat=new Map,this.freeFloat=new Map,this.currentCalculationId=0}getCurrentCalculationId=()=>this.currentCalculationId;async calculate(t){let n=++this.currentCalculationId,i=Ki(n,this.getCurrentCalculationId);try{let r=t||this.gantt;if(this.gantt=r||po(),qi(this.gantt))return!1;let s=new oo(this.gantt);if(await s.calculateAsync(i),!i())return!1;let a=s.calculations,o=s.constraintsMap,c=new fo(this.gantt,a,o);if(await c.calculateAsync(i),!i())return!1;this.forwardPathCalculations=a,this.backwardPathCalculations=c.calculations;let{totalFloatMap:l,freeFloatMap:d}=await this.calculateFloatsAsync(s,c,i);return i()?(this.totalFloat=l,this.freeFloat=d,this.gantt.refreshData(),!0):!1}catch(r){return this.forwardPathCalculations?.size,!1}}async calculateFloatsAsync(t,n,i){try{let r=this.gantt.getSubtaskDates(),s=Array.from(this.forwardPathCalculations.keys());return await er({activityIds:s,forward:t,backward:n,gantt:this.gantt,projectDates:r,isCurrent:i})}catch(r){return this.forwardPathCalculations?.size,{totalFloatMap:new Map,freeFloatMap:new Map}}}},vo=nr;function mf(e){return{calculateEndDate:({start_date:t,duration:n})=>e.calculateEndDate(t,n),calculateDuration:({start_date:t,end_date:n})=>e.calculateDuration(t,n),getWorkHours:t=>e.getWorkHours(t),$gantt:{getClosestWorkTime:({date:t,dir:n,unit:i})=>e.getClosestWorkTime({date:t,direction:n,unit:i??"hour"})}}}function gf(e){let t=new Map;e.forEachActivity((r,s)=>t.set(String(s),r));let n=new Map,i=(r,s)=>{let a=n.get(r);if(a!=null)return a;let o=t.get(r),c=o?o.parent:0,l=c===0||c==="0"||c==null,d=0;return!l&&!s.has(r)&&(s.add(r),d=i(String(c),s)+1),n.set(r,d),d};for(let r of t.keys())i(r,new Set);return n}function vf(e){let t=gf(e),n=new Map;return e.forEachActivity((i,r)=>{let s=String(r);n.set(s,{...i,id:Number(r),parent:Number(i.parent),$level:t.get(s)??0})}),n}function Af(e){let t=new Map;for(let a of e.values()){let o=t.get(a.parent);o?o.push(a):t.set(a.parent,[a])}let n=[],i=new Set,r=[],s=a=>{if(a)for(let o=a.length-1;o>=0;o-=1)r.push(a[o])};for(s(t.get(0));r.length>0;){let a=r.pop();i.has(a)||(i.add(a),n.push(a),s(t.get(a.id)))}if(n.length<e.size)for(let a of e.values())i.has(a)||n.push(a);return n}function Cf(e){let t=null,n=null;return e.forEachActivity(i=>{if(i.start_date){let r=i.start_date.getTime();t=t==null?r:Math.min(t,r)}if(i.end_date){let r=i.end_date.getTime();n=n==null?r:Math.max(n,r)}}),{start_date:new Date(t??0),end_date:new Date(n??0)}}async function Ao(e,t){let n=new Map,i=c=>{let l=c==null?"__default__":String(c),d=n.get(l);if(d)return d;let u=e.calendarReader.getCalendar(String(c)),f=mf(u);return n.set(l,f),f},r=Cf(e);await nt();let s=vf(e);await nt();let a=[...s.values()].sort((c,l)=>(c.start_date?.getTime()??0)-(l.start_date?.getTime()??0));await nt();let o=Af(s);return{fullyParsed:!0,config:{hoursPerDay:t},getTask:c=>s.get(String(c))??null,getLink:c=>{let l=e.getLink(c);return l?{...l,source:Number(l.source),target:Number(l.target)}:null},getCalendar:i,getChildren:c=>e.getChildren(c).map(l=>Number(l)),eachTask:c=>{for(let l of o)c(l)},getTaskByTime:()=>a,getSubtaskDates:()=>r,refreshData:()=>{}}}var Sf=1e3;async function bn(e,t){let n=await Ao(e,t),i=new vo(n),r=await i.calculate(n),s=new Map;if(!r)return s;let a=i.forwardPathCalculations,o=i.backwardPathCalculations,c=i.totalFloat,l=i.freeFloat,d=p=>p==null?null:new Date(p),u=new Set([...a?.keys()??[]]),f=0;for(let p of u){++f>=Sf&&(f=0,await nt());let A=e.getActivity(p);if(!A)continue;let I=a?.get(p),S=o?.get(p),T=c.get(p),g=Number(A.progress??0),C={earlyStart:d(I?.es),earlyFinish:d(I?.ef),lateStart:d(S?.ls),lateFinish:d(S?.lf),totalSlack:T??null,freeSlack:l.get(p)?.activityFreeFloat??null,isCritical:g<100&&T!=null&&T<=0},m=String(p);s.set(m,C),e.setActivityFields(m,{earlyStart:C.earlyStart,earlyFinish:C.earlyFinish,lateStart:C.lateStart,lateFinish:C.lateFinish,totalSlack:C.totalSlack,freeSlack:C.freeSlack,is_critical:C.isCritical?"Si":"No"})}return s}function At(e){let t=e?.baseline_points;return!Array.isArray(t)||t.length===0?null:t.find(n=>!!n?.sectorbaselineversion?.active)??null}function On(e){let t=[],n=[];e.forEachActivity((r,s)=>{(r.parent===0||r.parent==="0"||r.parent==null)&&t.push(String(s))});let i=r=>{let s=e.getActivity(String(r));if(!s)return 0;let a=[...e.getChildren(String(r))],o;if(a.length===0){let c=At(s),l=c&&Number(c.cost)||0;o=(Number(s.progress)||0)/100*l}else{let c=0;for(let l of a)c+=i(String(l));o=c}return e.setActivityField(String(r),v.REAL_COST,o),n.push(String(r)),o};for(let r of t)i(r);return n}var Co=new Set(["activity-outdent","activity-indent"]);var So=new Set(["activity-outdent","activity-indent"]);var we=new Set([v.TEXT,v.DESCRIPTION,v.COST,v.USED_COST,v.CUSTOM_ID,v.RESPONSABLES,v.SUBCONTRACT_ID,v.TAGS]),_f=new Set(["selection-toggle","selection-replace","visibility-set","sir-sync"]);function kf(e){return e.kind==="inline-edit"?we.has(e.column):e.kind==="bulk-edit"?e.edits.every(t=>we.has(t.column)):!1}function ko(e,t){return!(_f.has(e.kind)||t.has(e.kind)||kf(e))}function Ne(e){return ko(e,Co)}function ir(e){return ko(e,So)}function rr(e){return e.kind==="activity-set-progress"?!0:e.kind==="inline-edit"?e.column===v.PROGRESS:e.kind==="bulk-edit"?e.edits.some(t=>t.column===v.PROGRESS):!1}function If(e){return ir(e)&&rr(e)}var _o=new Set([v.PROGRESS,v.HH_WORK_TIME,v.DURATION,v.COST,v.USED_COST,v.REAL_COST]);function Tf(e){return e.kind==="activity-set-progress"?!0:e.kind==="inline-edit"?_o.has(e.column):e.kind==="bulk-edit"?e.edits.some(t=>_o.has(t.column)):!1}var Df=new Set([v.CUSTOM_PREDECESSORS,v.CUSTOM_SUCESSORS]);function Io(e){return e.kind==="inline-edit"&&Df.has(e.column)}var Q={AUTOSCHEDULE:"autoschedule",PARENT_BOUNDS:"parent-bounds",PARENT_PROGRESS:"parent-progress",REAL_WORK:"real-work",MILESTONE_MIRROR_ANCESTORS:"milestone-mirror-ancestors",MILESTONE_MIRROR_GLOBAL:"milestone-mirror-global",EXPECTED_PROGRESS:"expected-progress",REAL_COST:"real-cost",CRITICAL_PATH:"critical-path"};function Ef(e,t){return Io(e)?!0:e.kind==="activity-indent"?!1:e.kind==="inline-edit"||e.kind==="bulk-edit"?t.requested:!0}function Pf(e,t){return Io(e)?!1:(e.kind==="activity-delete"||e.kind==="activity-set-progress"||e.kind==="inline-edit"||e.kind==="bulk-edit")&&t.ran}function To(e,t,n){let i=new Set;t.ran&&i.add(Q.AUTOSCHEDULE),i.add(Q.PARENT_BOUNDS),Tf(e)&&i.add(Q.PARENT_PROGRESS),rr(e)&&i.add(Q.REAL_WORK),Ef(e,t)&&i.add(Q.MILESTONE_MIRROR_ANCESTORS),Pf(e,t)&&i.add(Q.MILESTONE_MIRROR_GLOBAL);let r=!n.skipAutoSchedule;return r&&ir(e)&&i.add(Q.EXPECTED_PROGRESS),r&&If(e)&&i.add(Q.REAL_COST),r&&ir(e)&&Ne(e)&&!n.skipCriticalPath&&i.add(Q.CRITICAL_PATH),i}async function j(e,t){let n=Rf(t),i=n.has(Q.AUTOSCHEDULE)?await Lf(e,t.autoscheduleFrom):Of();return await wf(e.adapter,t,i.scheduledIds,n),n.has(Q.MILESTONE_MIRROR_GLOBAL)&&Ei(e.adapter),await Nf(e,n,t.now),i}function Rf(e){let t=e.autoscheduleFrom!==null,n=!e.options.skipAutoSchedule&&t;return To(e.action,{requested:t,ran:n},e.options)}async function Lf(e,t){let n=t==="roots"?{}:{triggerId:t},i=await e.scheduler.schedule(n),r=bf(e.adapter,i.updatedIds);return _e(e.adapter,i),r}function bf(e,t){let n=[],i=new Map;for(let r of t){let s=String(r);n.push(s);let a=e.getActivity(s);a&&(i.set(s,Z(a)),e.noteScheduledBefore(s,a))}return{scheduledIds:n,scheduledBeforeImages:i}}function Of(){return{scheduledIds:[],scheduledBeforeImages:new Map}}async function wf(e,t,n,i){let r=t.collectDirty?t.collectDirty(n):Na(t.recomputeParentsFrom,n);await Ie(e,r,i.has(Q.PARENT_PROGRESS),{skipMilestoneDurationStamp:!i.has(Q.MILESTONE_MIRROR_ANCESTORS),recomputeRealWork:i.has(Q.REAL_WORK)})}async function Nf(e,t,n){t.has(Q.EXPECTED_PROGRESS)&&n!==null&&(Dn(e.adapter,n),Gt(e.adapter,e.sector.statusCriteria)),t.has(Q.REAL_COST)&&On(e.adapter),t.has(Q.CRITICAL_PATH)&&await bn(e.adapter,e.sector.hoursPerDay)}var xf=new Set([v.CONSTRAINT_TYPE,v.CONSTRAINT_DATE]),Ff=new Set(["mso","mfo"]);function wn(e){return xf.has(e)}function Nn(e,t,n,i){let r=n.getActivity(e);if(!r)return!1;let s=r.constraint_type??null;if(!s||It.has(s)||Ff.has(s))return!1;let a=sr(r.last_start_date),o=sr(r.start_date);if(!a||!o||o.getTime()!==a.getTime())return!1;let c=Mf(t,s,String(r.calendar_id??""),i),l=sr(r.constraint_date);return Wf(l,c)?!1:(n.setActivityField(e,v.CONSTRAINT_DATE,c),!0)}function Mf(e,t,n,i){if(e===null)return null;let r=i.getCalendar(n);return r?$t(e,r,t):e}function sr(e){if(e instanceof Date)return e;if(typeof e=="string"||typeof e=="number"){let t=new Date(e);return Number.isNaN(t.getTime())?null:t}return null}function Wf(e,t){return e===null&&t===null?!0:e===null||t===null?!1:e.getTime()===t.getTime()}async function xn(e,{postMutationArgs:t,revertTargets:n,revert:i}){let{scheduledIds:r,scheduledBeforeImages:s}=await j(e,Do(t)),a=!1;for(let{activityId:o,priorConstraintDate:c}of n){let l=i(o,c);a=a||l}if(a){let o=await j(e,Do(t));r=Bf(r,o.scheduledIds),s=jf(s,o.scheduledBeforeImages)}return Ne(t.action)&&await j(e,Uf(t)),{scheduledIds:r,scheduledBeforeImages:s}}function Do(e){return{...e,options:{...e.options,skipCriticalPath:!0}}}function Uf(e){return{action:e.action,autoscheduleFrom:null,recomputeParentsFrom:[],now:null,options:e.options}}function Bf(e,t){let n=new Set(e);for(let i of t)n.add(i);return[...n]}function jf(e,t){let n=new Map(e);for(let[i,r]of t)n.has(i)||n.set(i,r);return n}function Hf(e,t){let n=i=>i.getTime();return n(e.start_date)!==n(t.start_date)||n(e.end_date)!==n(t.end_date)||e.duration!==t.duration}function ar(e,t,n){let i=[];for(let r of n){let s=e.get(r);if(!s)continue;let a=s.pendingRequests??[];if(!Zt({pendingRequests:a}))continue;let o=t.getActivity(r),c=o==null;if(!c&&!Hf(s,o))continue;let l=c?"activity_deleted":"date_changed";for(let d of a)i.push({kind:"sir-auto-reject",activityId:r,sirId:d.id,reason:l});c||t.setActivityField(r,"pendingRequests",[])}return i}function G(e,t){let n=new Set;for(let l of t.touchedIds)n.add(l);for(let l of t.scheduledIds)n.add(l);if(t.includeAllIds)for(let l of e.getAllIds())n.add(l);let i=new Map(t.beforeSnap),r=e.peekWriteCapture();if(r)for(let l of r.dirty){if(n.has(l))continue;let d=r.before.get(l),u=e.getActivity(l);!d||!u||Object.keys(wi(d,u)).length!==0&&(i.set(l,d),n.add(l))}if(t.scheduledBeforeImages)for(let[l,d]of t.scheduledBeforeImages){let u=String(l);i.has(u)||(i.set(u,d),n.add(u))}let s=t.sirDetection==="before-diff"?ar(i,e,n):[],a=wa(e,i,n),o=t.sirDetection==="after-diff"?ar(i,e,n):s,c=t.warnings??[];return{source:t.source,activities:a,links:t.links??[],calendars:[],trackingEvents:t.trackingEvents??[],...o.length>0?{effects:o}:{},...c.length>0?{warnings:c}:{}}}function Fn(e,t,n){let i=[];for(let{op:r,finalLinkId:s,rejected:a}of e){if(a!==null)continue;if(r.kind==="create"){if(!s)continue;let d=n.getLink(s);if(!d)continue;i.push({id:String(s),kind:"created",fields:{source:{before:void 0,after:String(d.source)},target:{before:void 0,after:String(d.target)},type:{before:void 0,after:d.type},lag:{before:void 0,after:Number(d.lag)}},after:gt(d)});continue}if(r.kind==="delete"){let d=t.get(r.linkId);i.push({id:String(r.linkId),kind:"deleted",fields:d?{source:{before:String(d.source),after:void 0},target:{before:String(d.target),after:void 0},type:{before:d.type,after:void 0},lag:{before:Number(d.lag),after:void 0}}:void 0,after:null});continue}let o=t.get(r.linkId),c=n.getLink(r.linkId);if(!c)continue;let l={};o&&o.type!==c.type&&(l.type={before:o.type,after:c.type}),o&&Number(o.lag)!==Number(c.lag)&&(l.lag={before:Number(o.lag),after:Number(c.lag)}),i.push({id:String(r.linkId),kind:"updated",fields:l,after:gt(c)})}return i}function pe(e,t){let n=new Map,i=e.getActivity(t);if(!i)return n;for(let r of i.$target){let s=e.getLink(r);s&&n.set(String(s.id),Number(s.lag))}return n}function he(e,t,n){let i=[],r=t.getActivity(n);if(!r)return i;for(let s of r.$target){let a=t.getLink(s);if(!a)continue;let o=e.get(String(a.id));o===void 0||o===Number(a.lag)||i.push({id:String(a.id),kind:"updated",fields:{lag:{before:o,after:Number(a.lag)}},after:gt(a)})}return i}function Mn(e,t){typeof e=="string"&&e.length>0&&t.releaseCustomId(e)}async function Eo(e,t,n){let{adapter:i,ctx:r,scheduler:s,sector:a}=n,o=wt(e.column);if(!o)throw new Error(`[ScheduleCore] no pipeline registered for column "${e.column}"`);$f(e.column)&&s.invalidateExpandedLinksCache(),e.column===tt.PARENT&&s.invalidateAllCaches();let c=r.activityReader.getActivity(e.activityId);if(!c)return{ok:!1,reason:E.ACTIVITY_NOT_FOUND};let l=o.canEdit(c);if(!l.allowed)return{ok:!1,reason:l.reason??E.CANNOT_EDIT,alertKey:l.alertKey};let d=o.parseInput(e.newValue,c,r);if(!d.ok)return{ok:!1,reason:d.reason??E.PARSE_ERROR};let u=Reflect.get(c,e.column),f=o.validate(c,u,d.value,r);if(!f.valid)return{ok:!1,reason:f.reason??E.INVALID,alertKey:f.notification?.messageKey};if(e.column===v.CUSTOM_ID&&d.value!==null){let D=i.getActivity(e.activityId),R=D?D.custom_id:null,U=typeof R=="string"?R:null;if(n.customIdTracker.isCustomIdInUse(String(d.value),U))return{ok:!1,reason:E.CUSTOM_ID_DUPLICATE}}let p=o.transform(c,d.value,r,d.raw),A=Nt(e.activityId,p),I=K(i,A),S=pe(i,String(e.activityId));xt(i,e.activityId,e.column,p),Ot(e.activityId,p.postProcessors??[],i);let T=he(S,i,String(e.activityId));if(e.column===v.CUSTOM_ID){let D=I.get(String(e.activityId)),R=D?D.custom_id:null,U=typeof R=="string"?R:null,W=typeof d.value=="string"?d.value:null;U!==W&&n.customIdTracker.trackCustomIdChange(U,W)}let g=()=>({action:e,autoscheduleFrom:p.needsAutoSchedule?String(e.activityId):null,recomputeParentsFrom:[],collectDirty:D=>In(e.activityId,A,D),now:n.now,options:t}),C=wn(e.column),{scheduledIds:m,scheduledBeforeImages:y}=await(C?xn({adapter:i,scheduler:s,sector:n.sector},{postMutationArgs:g(),revertTargets:[{activityId:e.activityId,priorConstraintDate:c.constraint_date}],revert:(D,R)=>Nn(D,R,i,r.calendars)}):j({adapter:i,scheduler:s,sector:n.sector},g())),_=(p.trackingEvents??[]).map(D=>({name:D.name,properties:D.properties??{}})),P=ue(e.activityId,p.constraintWarning);return{ok:!0,changes:G(i,{source:e,beforeSnap:I,touchedIds:A,scheduledIds:m,scheduledBeforeImages:y,sirDetection:"before-diff",links:T,trackingEvents:_,...P?{warnings:[P]}:{},hoursPerDay:a.hoursPerDay})}}function $f(e){return e===v.DURATION||e===tt.AUTO_SCHEDULING}async function Po(e,t,n){if(e.kind==="link-create"||e.kind==="link-update"){let i=e.type;if(i!==void 0&&!Object.values(B).some(s=>s===i))return{ok:!1,reason:E.INVALID_LINK_TYPE};let r=e.lag;if(r!==void 0&&!Number.isFinite(r))return{ok:!1,reason:E.INVALID_LINK_LAG}}return or([Kf(e,n.sector.hoursPerDay)],e,t,n,e.kind==="link-create"&&e.linkId?new Map([[0,e.linkId]]):void 0)}async function Ro(e,t,n){let{hoursPerDay:i}=n.sector,r=e.operations.map(a=>Vf(a,i)),s=Yf(e.operations);return or(r,e,t,n,s)}function Yf(e){let t=new Map;return e.forEach((n,i)=>{n.kind==="create"&&n.linkId&&t.set(i,n.linkId)}),t.size>0?t:void 0}function Vf(e,t){return e.kind==="create"?{kind:"create",source:e.source,target:e.target,type:e.type,lag:ft(e.lag??0,t)}:e.kind==="update"?{kind:"update",linkId:e.linkId,type:e.type,lag:e.lag===void 0?void 0:ft(e.lag,t)}:{kind:"delete",linkId:e.linkId}}async function or(e,t,n,i,r){let{adapter:s,scheduler:a,sector:o,linkIdGen:c}=i;a.invalidateAllCaches();let l=new Set,d=new Map;for(let T of e)if(T.kind==="create")l.add(String(T.source)),l.add(String(T.target));else{let g=s.getLink(T.linkId);g&&(l.add(String(g.source)),l.add(String(g.target)),d.set(T.linkId,{...g}))}let u=K(s,l),f=[];for(let T=0;T<e.length;T++){let g=e[T],C=g.kind==="create"&&r?r.get(T):void 0,m=Lt(g,{port:s,newLinkId:C?()=>C:c.next});f.push({op:g,finalLinkId:m.applied?m.linkId:null,rejected:m.applied?null:m.rejected??"link_op_rejected"})}if(e.length===1&&f[0]&&f[0].rejected!==null&&t.kind!=="inline-edit")return{ok:!1,reason:f[0].rejected};let p=Gf(f,d,s),{scheduledIds:A}=await j({adapter:s,scheduler:a,sector:i.sector},{action:t,autoscheduleFrom:p,recomputeParentsFrom:l,now:i.now,options:n});for(let T of A)if(!u.has(T)){let g=s.getActivity(T);g&&u.set(T,Z(g))}let I=Fn(f,d,s),S=new Map;for(let[T,g]of d)S.set(String(T),g);return{ok:!0,__beforeLinks:S,changes:G(s,{source:t,beforeSnap:u,touchedIds:l,scheduledIds:A,links:I,hoursPerDay:o.hoursPerDay})}}function Gf(e,t,n){for(let i of e)if(i.rejected===null){if(i.op.kind==="create")return String(i.op.target);if(i.op.kind==="delete"){let r=t.get(i.op.linkId);if(r)return String(r.target)}if(i.op.kind==="update"){let r=n.getLink(i.op.linkId);if(r)return String(r.target)}}return null}function Kf(e,t){return e.kind==="link-create"?{kind:"create",source:e.source,target:e.target,type:e.type,lag:ft(e.lag,t)}:e.kind==="link-update"?{kind:"update",linkId:e.linkId,type:e.type,lag:e.lag===void 0?void 0:ft(e.lag,t)}:{kind:"delete",linkId:e.linkId}}async function Lo(e,t,n){let{adapter:i,sector:r}=n;if(typeof e.newValue!="string")return{ok:!1,reason:E.INVALID_VALUE};let s=i.getActivity(e.activityId);if(!s)return{ok:!1,reason:E.ACTIVITY_NOT_FOUND};let a=e.column===v.CUSTOM_PREDECESSORS,{specs:o}=un(e.newValue),c=o.map(A=>({...A,lag:ft(A.lag,r.hoursPerDay)})),l=new Map;i.forEachActivity(A=>{A.correlative_id!=null&&l.set(String(A.correlative_id),A.id)});let d=A=>l.get(A)??null,u=a?s.$target:s.$source,f=[];for(let A of u){let I=i.getLink(A);I&&f.push(I)}let p=a?pn({targetActivityId:e.activityId,currentLinks:f,desiredSpecs:c,resolveActivityByCorrelative:d}):hn({sourceActivityId:e.activityId,currentLinks:f,desiredSpecs:c,resolveActivityByCorrelative:d});return or(p.operations,e,t,n)}var ht={ACTIVITY_CREATION:"schedule_activity_creation",ACTIVITY_DELETION:"schedule_activity_deletion",ACTIVITY_MOVE:"schedule_activity_move",ACTIVITY_INDENT:"schedule_activity_indent",ACTIVITY_OUTDENT:"schedule_activity_outdent"};function cr(e,t){if(!e||e==="0")return;let n=String(e);for(;n!==null;){let i=t.getChildren(n),r=0,s=0;for(let c of i){let l=t.getActivity(c);if(!l)continue;let d=bo(l,v.HH_WORK_TIME),u=qf(l,v.REAL_WORK),f=u!==void 0?u:d*bo(l,v.PROGRESS)/100;r+=d,s+=f}t.setActivityField(n,v.HH_WORK_TIME,r),t.setActivityField(n,v.REAL_WORK,s);let a=t.getActivity(n);if(!a)break;let o=a.parent;if(!o||o==="0")break;n=String(o)}}function Oo(e,t){let n=t.getActivity(e);if(!n)return;let i=n.parent;!i||b(i)||cr(String(i),t)}function bo(e,t){let n=e[t];return typeof n=="number"&&Number.isFinite(n)?n:0}function qf(e,t){let n=e[t];if(typeof n=="number"&&Number.isFinite(n))return n}function lr(e,t){if(!e||e==="0")return;let n=String(e);for(;n!==null;){let i=t.getChildren(n),r=0;for(let o of i){let c=t.getActivity(o);c&&(r+=zf(c,v.USED_COST))}t.setActivityField(n,v.USED_COST,r);let s=t.getActivity(n);if(!s)break;let a=s.parent;if(!a||a==="0")break;n=String(a)}}function wo(e,t){let n=t.getActivity(e);if(!n)return;let i=n.parent;!i||b(i)||lr(String(i),t)}function zf(e,t){let n=e[t];return typeof n=="number"&&Number.isFinite(n)?n:0}function dr(e,t){if(!e||e==="0")return;let n=String(e);for(;n!==null;){let i=t.getChildren(n),r=0;for(let o of i){let c=t.getActivity(o);c&&(r+=Jf(c,v.COST))}t.setActivityField(n,v.COST,r);let s=t.getActivity(n);if(!s)break;let a=s.parent;if(!a||a==="0")break;n=String(a)}}function No(e,t){let n=t.getActivity(e);if(!n)return;let i=n.parent;!i||b(i)||dr(String(i),t)}function Jf(e,t){let n=e[t];return typeof n=="number"&&Number.isFinite(n)?n:0}var Wn=Object.freeze({description:"",type:"task",progress:0,constraint_type:"asap",constraint_date:null,auto_scheduling:!0,cost:0,used_cost:0,real_cost:0,hhWorkTime:0,real_work:0,ponderator:0,responsables:[],tags:[],subcontractId:null,real_constraint_type:"asap",should_be_showed:!0,visible:!0,activityModifications:[],pendingRequests:[],new_task:!0,isNewActivity:!0,$source:[],$target:[]}),Xf=new Set(["name","old_type","old_duration","on_open_lightbox_type","for_disable_milestone_duration","last_constraint","constraint_type_old"]);function xo(e){return e==="$source"||e==="$target"?!1:e.startsWith("$")||Xf.has(e)}var Fo="New Master Plan",Mo="New Activity";function Zf(e){let t={};for(let n of Object.keys(e))xo(n)||(t[n]=e[n]);return t}function Wo(e,t){let n=e.parentId!=null?t.getActivity(e.parentId):null,i=e.activityOverrides??{},r=e.numTasksInGantt===0?Fo:Mo,s=i.name,a=i.text??(typeof s=="string"?s:void 0)??r,o=i.duration??e.sector.hoursPerDay??8,c=i.calendar_id??e.sector.defaultCalendar,l={calendar_id:c},d=Qf(n,e.fallbackStartDate,i.start_date),u=t.getClosestWorkTime({date:d,dir:q.FUTURE,task:l}),f=t.calculateEndDate({start_date:u,duration:o,task:l}),p={...Wn,text:a,start_date:u,end_date:f,duration:o,calendar_id:c,parent:e.parentId==null?"0":String(e.parentId),unique_correlative_id:e.nextUniqueCorrelativeId,...Zf(i)};for(let[I,S]of Object.entries(p))Array.isArray(S)&&(p[I]=[...S]);p.$source=[],p.$target=[],p.real_constraint_type=p.constraint_type;let A=p.type==="milestone";return p.for_disable_milestone_duration=A?0:Math.round(p.duration),{newTask:p}}function Qf(e,t,n){return n?new Date(n):e?new Date(e.start_date):t?new Date(t):new Date}function ye(e){let t=e.getParent(e.parentId);if(!t)return null;let n=e.isCurrentlyLeaf!==void 0?e.isCurrentlyLeaf&&Rt(t.type):tp(t),i=t.type==="milestone",r=Array.isArray(t.newActivitiesArray)?t.newActivitiesArray:[],a={is_lookahead:!1,hasNewActivities:!0,newActivitiesArray:r.some(o=>String(o)===String(e.newChildId))?[...r]:[...r,e.newChildId],old_type:t.type};return t.custom_id!=null&&t.custom_id!==""&&(a.custom_id=null),n&&(a.type=an,a.$rendered_type=an,i&&(a.is_milestone=!1),a.$no_start=!0,a.$no_end=!0,a.constraint_type=$.ASAP,a.constraint_date=null,a.real_constraint_type=t.constraint_type??$.ASAP,(e.promotionSource??"create")==="create"&&(a.progress=0)),{parentId:e.parentId,fields:a}}function tp(e){return Rt(e.type)&&(!Array.isArray(e.newActivitiesArray)||e.newActivitiesArray.length===0)}function Un(e,t,n,i){let r=t,s=r==="0",a=ur(e,r);if(i!==void 0){let c=a.find(l=>l.id===i);if(c){let l=st(c),d=a.map(st).filter(f=>f<l);return d.length===0?l-1:(Math.max(...d)+l)/2}}if(n!==void 0){let c=a.find(l=>l.id===n);if(c){let l=st(c),d=a.map(st).filter(f=>f>l);if(d.length===0)return l+1;let u=Math.min(...d);return(l+u)/2}}return a.length===0?0:Math.max(...a.map(st))+1}var zt=Number.MAX_SAFE_INTEGER,Uo=Number.MAX_SAFE_INTEGER-1;function st(e){let t=e.correlative_id,n=typeof t=="number"?t:Number(t);return Number.isFinite(n)?n:zt}function ur(e,t){let n=[];return e.forEachActivity(i=>{St(i.parent)===t&&n.push(i)}),n}function Bo(e,t,n){let i=e,r=me(e,n);for(;r!=null&&t.has(r);)i=r,r=me(r,n);return i}function me(e,t){let n=t.getActivity(e);if(!n)return null;let i=St(n.parent),r=Kt(i,t),s=r.findIndex(a=>String(a)===String(e));return s<=0?null:r[s-1]??null}function jo(e,t,n,i){let r=Kt(t,e).filter(c=>String(c)!==String(i)).map(c=>e.getActivity(c)).filter(c=>c!==null);if(r.length===0)return 0;let s=r.map(st);if(n<=0)return s[0]-1;if(n>=s.length)return s[s.length-1]+1;let a=s[n-1],o=s[n];return(a+o)/2}function Bn(e,t,n={}){let{adapter:i,scheduler:r,sector:s,calendars:a,activityIdGen:o,uidGen:c}=t;r.invalidateAllCaches();let l=ep(e,i);if(!l.ok)return l;let{parent:d,anchorSiblingId:u,isRoot:f}=l,p=ip(e.activityId,i,o),A=c.next(),I={parentId:f?null:e.parentId,sector:{id:s.id,hoursPerDay:s.hoursPerDay,defaultCalendar:cp(a)},numTasksInGantt:i.activityCount(),nextUniqueCorrelativeId:A,activityOverrides:e.overrides??{}},T={...Wo(I,{getActivity:y=>i.getActivity(y),calculateEndDate:y=>i.calculateEndDate(y),getClosestWorkTime:y=>i.getClosestWorkTime(y)}).newTask,id:p};sp(T,e,t,u,d,n);let g=Un(i,f?"0":e.parentId,e.afterSiblingId,e.beforeSiblingId);T.correlative_id=g;let C=new Set([p]);d&&C.add(d.id);let m=n.skipBeforeSnap?new Map:K(i,C);return i.addActivity(T),ap(e,p,d,i,n.preserveParentCustomId??!1),Oo(p,i),wo(p,i),No(p,i),op(i,p,m,C,n),{ok:!0,newId:p,parent:d,newActivity:T,beforeSnap:m,initialTouched:C}}function ep(e,t){let n=b(e.parentId),i=n?null:t.getActivity(e.parentId);if(!n&&!i)return{ok:!1,reason:E.PARENT_NOT_FOUND};if(i!==null&&Zt({pendingRequests:i.pendingRequests}))return{ok:!1,reason:E.PARENT_FROZEN_BY_SIR};if(e.afterSiblingId!==void 0&&e.beforeSiblingId!==void 0)return{ok:!1,reason:E.ANCHOR_SIBLING_CONFLICT};let a=e.afterSiblingId??e.beforeSiblingId,o=np(e,t,n,a);return o||{ok:!0,parent:i,anchorSiblingId:a,isRoot:n}}function np(e,t,n,i){if(i===void 0)return null;let r=t.getActivity(i);if(!r)return{ok:!1,reason:E.ANCHOR_SIBLING_NOT_FOUND};let s=n?"0":e.parentId;return(r.parent==null||r.parent===0?"0":String(r.parent))!==s?{ok:!1,reason:E.ANCHOR_SIBLING_WRONG_PARENT}:null}function ip(e,t,n){return e===void 0||t.activityExists(e)?n.next():(n.bump(e),e)}function rp(e){if(e.overrides===void 0||!(v.CUSTOM_ID in e.overrides))return;let t=e.overrides.custom_id;return typeof t=="string"?t:void 0}function sp(e,t,n,i,r,s){let{adapter:a,customIdTracker:o}=n,c=rp(t);if(c!==void 0){if(c.length===0)return;if(!o.isCustomIdInUse(c)){o.registerCustomId(c);return}}let l=i??s.customIdReferenceId,d=l!==void 0,u=d?a.getActivity(l):r;e.custom_id=o.generateCustomIdForNewChild({activity:u??{},useActivityCustomIdAsReference:d})}function ap(e,t,n,i,r){if(!n)return;let s=ye({parentId:e.parentId,newChildId:t,getParent:a=>i.getActivity(a)??null});if(s)for(let[a,o]of Object.entries(s.fields))a===v.CUSTOM_ID&&r||V(i,s.parentId,a,o)}function op(e,t,n,i,r){if(r.skipCorrelativeRecompute)return;let s=ot(e);r.skipBeforeSnap||Tn(e,s,new Set([String(t)]),n,i)}function Ho(e,t,n,i,r,s){let{newId:a,newActivity:o,beforeSnap:c,initialTouched:l}=n,d={name:ht.ACTIVITY_CREATION,properties:{parent_id:t.parentId,activity_id:a,created_duration:o.duration}};t.eventSource!==void 0&&(d.properties.event_source=t.eventSource);let u=s?new Map([...s].filter(([f])=>String(f)!==String(a))):void 0;return G(e,{source:t,beforeSnap:c,touchedIds:l,scheduledIds:i,scheduledBeforeImages:u,trackingEvents:[d],hoursPerDay:r})}function $o(e,t){let n=Bn(e,t);if(!n.ok)return{ok:!1,reason:n.reason};Di(t.adapter,new Set([n.newId]));let i=t.adapter.getActivity(n.newId);if(!i)throw new Error(`[ScheduleCore] createActivity: new activity ${n.newId} missing after commit`);let r=Ho(t.adapter,e,n,[],t.sector.hoursPerDay);return{ok:!0,activity:X(i),changes:r}}async function Yo(e,t,n){let{adapter:i,scheduler:r,sector:s}=n,a=Bn(e,n);if(!a.ok)return a;let{newId:o}=a,{scheduledIds:c,scheduledBeforeImages:l}=await j({adapter:i,scheduler:r,sector:n.sector},{action:e,autoscheduleFrom:String(o),recomputeParentsFrom:[o],now:n.now,options:t});return{ok:!0,changes:Ho(i,e,a,c,s.hoursPerDay,l)}}function cp(e){for(let n of e.values())if(n.is_default)return n.id;let t=e.values().next();return!t.done&&t.value?t.value.id:"global"}function lp(e,t){if("afterSiblingId"in e){let s=t.getActivity(e.afterSiblingId);return s?{ok:!0,parentId:s.parent==null||s.parent===0?"0":String(s.parent),firstAfter:e.afterSiblingId}:{ok:!1,reason:E.ANCHOR_SIBLING_NOT_FOUND}}let n=e.parentId,r=ur(t,n).sort((s,a)=>st(s)-st(a))[e.index]?.id;return{ok:!0,parentId:n,firstBefore:r}}function dp(e,t){let n=e,{parent:i,unique_correlative_id:r,correlative_id:s,custom_id:a,...o}=n,c=o.duration,l=typeof c=="number"&&Number.isFinite(c)?se(c,t):void 0;return{...o,...l!==void 0?{duration:l}:{},progress:0,ponderator:0,used_cost:0,expected_progress_base:0,hhWorkTime:0,checked:!1,visibleChecked:!1,comesFromCopy:!0,is_lookahead:!1,should_correct_start_date:!1,is_critical:!1,constraint_type_backup:n.constraint_type}}async function Vo(e,t,n){let{adapter:i,scheduler:r,sector:s}=n,a=lp(e.destination,i);if(!a.ok)return a;let o=K(i,new Set),c=new Set,l=new Map,d=[],u;for(let g of e.activities){let C=l.get(g.originalParentId),m,y,_;C!==void 0?m=C:(m=a.parentId,u===void 0?(y=a.firstAfter,_=a.firstBefore):y=u);let P=Bn({kind:"activity-create",parentId:m,afterSiblingId:y,beforeSiblingId:_,overrides:dp(g.overrides,s.hoursPerDay),eventSource:e.eventSource},n,{skipCorrelativeRecompute:!0,skipBeforeSnap:!0,...C!==void 0?{customIdReferenceId:e.referenceActivityId,preserveParentCustomId:!0}:{}});if(!P.ok)return P;l.set(g.originalId,P.newId),d.push(P.newId),C===void 0&&(u=P.newId)}let f=ot(i),p=new Set(d.map(String));Tn(i,f,p,o,c);for(let g of d)c.add(String(g));let A=[];for(let g of e.links){let C=l.get(g.source),m=l.get(g.target);if(C===void 0||m===void 0)continue;let y={kind:"create",source:C,target:m,type:g.type,lag:ft(g.lag,s.hoursPerDay)},_=Lt(y,{port:i,newLinkId:n.linkIdGen.next});A.push({op:y,finalLinkId:_.applied?_.linkId:null,rejected:_.applied?null:_.rejected??"link_op_rejected"})}let{scheduledIds:I,scheduledBeforeImages:S}=await j({adapter:i,scheduler:r,sector:n.sector},{action:e,autoscheduleFrom:d[0]??null,recomputeParentsFrom:d,now:n.now,options:t}),T=Fn(A,new Map,i);return{ok:!0,changes:G(i,{source:e,beforeSnap:o,touchedIds:c,scheduledIds:I,scheduledBeforeImages:new Map([...S].filter(([g])=>!p.has(String(g)))),links:T,hoursPerDay:s.hoursPerDay})}}function Go(e,t){let{adapter:n}=t,i=e.activityId,r=n.getActivity(i);if(!r)return{ok:!1,reason:E.ACTIVITY_NOT_FOUND};let s=r.pendingRequests??[],a=e.pendingRequests.map(c=>({id:c.id}));return n.setActivityField(e.activityId,"pendingRequests",a),{ok:!0,changes:{source:e,activities:[{id:i,kind:"updated",fields:{pendingRequests:{before:s,after:a}},after:{id:i,pendingRequests:a}}],links:[],calendars:[],trackingEvents:[]}}}function Et(e,t){cr(e,t),lr(e,t),dr(e,t)}function Ko(e,t){let n=new Set,i=[];for(let r of e){let s=String(r);n.has(s)||(n.add(s),i.push(s))}for(;i.length>0;){let r=i.pop(),s=t.getChildren(r);for(let a of s){let o=String(a);n.has(o)||(n.add(o),i.push(o))}}return n}function qo(e,t){let n=[];for(let i of t.getAllLinks()){let r=String(i.source),s=String(i.target);(e.has(r)||e.has(s))&&n.push(String(i.id))}return n}function ge(e){if(e.remainingChildIds.length>0)return null;let t=e.parent,n={type:Ce,$no_start:!1,$no_end:!1,$rendered_type:void 0,originalMetadata:void 0};if(e.idsRemoved&&e.idsRemoved.size>0){let r=Array.isArray(t.newActivitiesArray)?t.newActivitiesArray:[];if(r.length>0){let s=r.filter(a=>!e.idsRemoved.has(a)&&!e.idsRemoved.has(String(a)));s.length!==r.length&&(n.newActivitiesArray=s)}}let i=t.tasks;return Array.isArray(i)&&i.length>0&&(n.is_lookahead=!0),{parentId:String(t.id),fields:n}}function zo(e){if(e.idsRemoved.size===0)return null;let t=e.parent.newActivitiesArray;if(!Array.isArray(t)||t.length===0)return null;let n=t,i=n.filter(r=>!e.idsRemoved.has(r)&&!e.idsRemoved.has(String(r)));return i.length===n.length?null:{parentId:String(e.parent.id),fields:{newActivitiesArray:[...i],hasNewActivities:i.length>0}}}async function Jo(e,t,n){let{adapter:i,scheduler:r,customIdTracker:s,sector:a}=n;if(r.invalidateAllCaches(),e.activityIds.length===0)return{ok:!1,reason:E.ACTIVITY_IDS_EMPTY};for(let C of e.activityIds)if(!i.getActivity(C))return{ok:!1,reason:E.ACTIVITY_NOT_FOUND};let o=Ko(e.activityIds,i),c=qo(o,i),l=new Set;for(let C of e.activityIds){let m=i.getActivity(C);if(!m)continue;let y=m.parent;if(b(y))continue;let _=String(y);o.has(_)||l.add(_)}let d=new Set([...o,...l]),u=K(i,d),f=new Map;for(let C of c){let m=i.getLink(C);m&&f.set(C,{...m})}for(let C of o){let m=i.getActivity(C);if(!m)continue;let y=m.custom_id;typeof y=="string"&&y.length>0&&s.releaseCustomId(y)}for(let C of c)i.removeLink(C);for(let C of o)i.removeActivity(C);for(let C of l){let m=i.getActivity(C);if(!m)continue;let y=zo({parent:m,idsRemoved:o});if(y)for(let[_,P]of Object.entries(y.fields))V(i,C,_,P)}for(let C of l){let m=i.getActivity(C);if(!m)continue;let y=i.getChildren(C),_=ge({parent:m,remainingChildIds:y.map(String),idsRemoved:o});if(!_){gn(C,i);continue}for(let[P,D]of Object.entries(_.fields))V(i,C,P,D)}for(let C of l)Et(C,i);let p=ot(i);for(let C of p){if(d.add(C.activityId),u.has(C.activityId))continue;let m=i.getActivity(C.activityId);if(!m)continue;let y=Z(m);y.correlative_id=C.before,u.set(C.activityId,y)}let{scheduledIds:A,scheduledBeforeImages:I}=await j({adapter:i,scheduler:r,sector:n.sector},{action:e,autoscheduleFrom:"roots",recomputeParentsFrom:l,now:n.now,options:t}),S={name:ht.ACTIVITY_DELETION,properties:{activity_ids:[...e.activityIds],cascade_count:o.size}};e.eventSource!==void 0&&(S.properties.event_source=e.eventSource);let T=new Map;for(let[C,m]of f)T.set(C,m);let g=new Map;for(let C of o){let m=u.get(String(C));m&&g.set(String(C),m)}return{ok:!0,changes:G(i,{source:e,beforeSnap:u,touchedIds:d,scheduledIds:A,scheduledBeforeImages:I,sirDetection:"after-diff",links:up(f),trackingEvents:[S],hoursPerDay:a.hoursPerDay}),__beforeSnap:g,__beforeLinks:T}}function up(e){let t=[];for(let[n,i]of e.entries())t.push({id:n,kind:"deleted",fields:{source:{before:String(i.source),after:void 0},target:{before:String(i.target),after:void 0},type:{before:i.type,after:void 0},lag:{before:Number(i.lag),after:void 0}},after:null});return t}function jn(e,t){let n=new Set;for(let r of e)n.add(String(r));let i=[];for(let r of t.getAllLinks()){let s=String(r.source),a=String(r.target);!n.has(s)&&!n.has(a)||(Xo(a,s,t)||Xo(s,a,t))&&i.push(String(r.id))}return i}function Xo(e,t,n){let i=String(e),r=new Set;for(;i!=null;){if(r.has(i))return!1;r.add(i);let s=n.getActivity(i);if(!s)return!1;let a=s.parent;if(b(a))return!1;let o=String(a);if(o===t)return!0;i=o}return!1}async function Zo(e,t,n){let{adapter:i,scheduler:r,sector:s}=n;r.invalidateAllCaches();let a=i.getActivity(e.activityId);if(!a)return{ok:!1,reason:E.ACTIVITY_NOT_FOUND};let o=b(e.parentId);if(!o&&!i.getActivity(e.parentId))return{ok:!1,reason:E.PARENT_NOT_FOUND};if(!o&&(e.parentId===e.activityId||i.isChildOf(e.parentId,e.activityId)))return{ok:!1,reason:E.CANNOT_MOVE_INTO_OWN_DESCENDANT};if(e.afterSiblingId!==void 0){let m=i.getActivity(e.afterSiblingId);if(!m)return{ok:!1,reason:E.ANCHOR_SIBLING_NOT_FOUND};if((m.parent==null||m.parent===0?"0":String(m.parent))!==e.parentId)return{ok:!1,reason:E.ANCHOR_SIBLING_WRONG_PARENT}}let c=a.parent,l=St(c),d=String(e.parentId),u=l!==d,f=new Set([e.activityId]);u?(l!=="0"&&f.add(l),d!=="0"&&f.add(d)):l!=="0"&&f.add(l);let p=K(i,f);u&&i.setActivityField(e.activityId,tt.PARENT,d);let A=Un(i,e.parentId,e.afterSiblingId,void 0);if(i.setActivityField(e.activityId,v.CORRELATIVE_ID,A),u){if(!o){let m=i.getActivity(e.parentId);if(m){let y=m.custom_id,_=Rt(m.type)&&i.getChildren(e.parentId).filter(D=>D!==e.activityId).length===0,P=ye({parentId:e.parentId,newChildId:e.activityId,getParent:D=>i.getActivity(D)??null,isCurrentlyLeaf:_,promotionSource:"reparent"});if(P){for(let[D,R]of Object.entries(P.fields))V(i,P.parentId,D,R);P.fields.custom_id===null&&Mn(y,n.customIdTracker)}}}if(l!=="0"){let m=i.getActivity(l);if(m){let y=i.getChildren(l),_=ge({parent:m,remainingChildIds:y.map(String),idsRemoved:new Set([e.activityId])});if(_){for(let[W,H]of Object.entries(_.fields))V(i,l,W,H);let P=me(l,i),D=P?i.getActivity(P)?.custom_id:null,R=typeof D=="string"&&D?D:null,U=n.customIdTracker.generateCustomIdForRestoredChild(R);i.setActivityField(l,v.CUSTOM_ID,U)}}}}u&&(l!=="0"&&Et(l,i),o||Et(e.parentId,i));let I=ot(i);for(let m of I){if(f.add(m.activityId),p.has(m.activityId))continue;let y=i.getActivity(m.activityId);if(!y)continue;let _=Z(y);_.correlative_id=m.before,p.set(m.activityId,_)}let{scheduledIds:S,scheduledBeforeImages:T}=await j({adapter:i,scheduler:r,sector:n.sector},{action:e,autoscheduleFrom:e.activityId,recomputeParentsFrom:[e.activityId,e.parentId],now:n.now,options:t}),g=u?jn([e.activityId],i):[],C={name:ht.ACTIVITY_MOVE,properties:{activity_id:e.activityId,new_parent_id:e.parentId,after_sibling_id:e.afterSiblingId??null,invalid_link_ids:g.map(String)}};return e.eventSource!==void 0&&(C.properties.event_source=e.eventSource),{ok:!0,changes:G(i,{source:e,beforeSnap:p,touchedIds:f,scheduledIds:S,scheduledBeforeImages:T,sirDetection:"before-diff",trackingEvents:[C],hoursPerDay:s.hoursPerDay})}}async function Qo(e,t,n){let{adapter:i,scheduler:r,sector:s}=n;if(r.invalidateAllCaches(),e.activityIds.length===0)return{ok:!1,reason:E.ACTIVITY_IDS_EMPTY};let a=new Set(e.activityIds),o=new Set,c=[],l=[],d=[],u=new Set(a),f=[...e.activityIds].sort((y,_)=>{let P=i.getActivity(y),D=i.getActivity(_),R=P?st(P):zt,U=D?st(D):zt;return R-U});for(let y of f){if(!i.getActivity(y)){c.push({activityId:y,reason:E.ACTIVITY_NOT_FOUND}),u.delete(y);continue}let P=Ba(y,u,i);if(P==null){c.push({activityId:y,reason:E.INDENT_NO_ELIGIBLE_SIBLING}),u.delete(y);continue}let D=i.getActivity(y)?.parent,R=D==null||D===0?"0":String(D);d.push({activityId:y,newParentId:P,oldParentId:R}),o.add(y),o.add(P),R!=="0"&&o.add(R)}let p=K(i,o);for(let{activityId:y,newParentId:_}of d)i.setActivityField(y,tt.PARENT,_),i.setActivityField(y,v.CORRELATIVE_ID,Uo),l.push(y);let A=new Set;for(let{activityId:y,newParentId:_}of d){if(A.has(_))continue;A.add(_);let P=i.getActivity(_);if(!P)continue;let D=P.custom_id,R=P.constraint_type??"asap",U=Rt(P.type)&&i.getChildren(_).filter(H=>!l.includes(H)).length===0,W=ye({parentId:_,newChildId:y,getParent:H=>i.getActivity(H)??null,isCurrentlyLeaf:U,promotionSource:"reparent"});if(W){for(let[H,et]of Object.entries(W.fields))V(i,W.parentId,H,et);i.setActivityField(_,tt.HAS_NEW_ACTIVITIES,!1),i.setActivityField(_,tt.NEW_ACTIVITIES_ARRAY,[])}i.setActivityField(_,v.CONSTRAINT_TYPE,"asap"),i.setActivityField(_,v.CONSTRAINT_DATE,null),i.setActivityField(_,Wt,R),i.setActivityField(_,v.CUSTOM_ID,null),Mn(D,n.customIdTracker)}let I=new Set;for(let y of d)y.oldParentId!=="0"&&I.add(y.oldParentId),I.add(y.newParentId);for(let y of I)Et(y,i);let S=ot(i);for(let y of S){if(o.add(y.activityId),p.has(y.activityId))continue;let _=i.getActivity(y.activityId);if(!_)continue;let P=Z(_);P.correlative_id=y.before,p.set(y.activityId,P)}let{scheduledIds:T,scheduledBeforeImages:g}=await j({adapter:i,scheduler:r,sector:n.sector},{action:e,autoscheduleFrom:null,recomputeParentsFrom:l,now:n.now,options:t}),C=jn(l,i),m={name:ht.ACTIVITY_INDENT,properties:{activity_ids:l,failed:c.map(y=>({activity_id:y.activityId,reason:y.reason})),invalid_link_ids:C}};return e.eventSource!==void 0&&(m.properties.event_source=e.eventSource),{ok:!0,changes:G(i,{source:e,beforeSnap:p,touchedIds:o,scheduledIds:T,scheduledBeforeImages:g,trackingEvents:[m],hoursPerDay:s.hoursPerDay})}}async function tc(e,t,n){let{adapter:i,scheduler:r,sector:s}=n;if(r.invalidateAllCaches(),e.activityIds.length===0)return{ok:!1,reason:E.ACTIVITY_IDS_EMPTY};let a=new Set(e.activityIds),o=new Map,c=new Map;for(let y of e.activityIds){let _=y;i.getActivity(_)&&(o.set(_,xi(_,i)),c.set(_,Bo(_,a,i)))}let l=new Set,d=[],u=[],f=new Set,p=[],A=[...e.activityIds].sort((y,_)=>{let P=i.getActivity(y),D=i.getActivity(_),R=P?st(P):zt,U=D?st(D):zt;return R-U});for(let y of A){let _=y,P=i.getActivity(_);if(!P){d.push({activityId:_,reason:E.ACTIVITY_NOT_FOUND});continue}let D=P.parent;if(b(D)){d.push({activityId:_,reason:E.OUTDENT_ROOT_LEVEL_NOT_EDITABLE});continue}let R=String(D),U=i.getActivity(R);if(!U){d.push({activityId:_,reason:E.ACTIVITY_NOT_FOUND});continue}let W=U.parent;if(b(W)){d.push({activityId:_,reason:E.OUTDENT_ROOT_LEVEL_NOT_EDITABLE});continue}let H=String(W),et=xi(R,i)+1,ct=c.get(_);if(ct!=null&&a.has(ct)){let Be=o.get(ct)??-1,Mt=o.get(_)??-1;Be>=0&&Mt>=0&&(et+=Mt-Be)}p.push({activityId:_,grandparentKey:H,oldParentKey:R,targetIndexInGrandparent:et}),l.add(String(_)),l.add(String(R)),H!=="0"&&l.add(String(H)),f.add(R)}let I=K(i,l);for(let y of p){i.setActivityField(y.activityId,tt.PARENT,y.grandparentKey);let _=jo(i,y.grandparentKey,y.targetIndexInGrandparent,y.activityId);i.setActivityField(y.activityId,v.CORRELATIVE_ID,_),u.push(y.activityId)}for(let y of f){let _=i.getActivity(y);if(!_)continue;let P=i.getChildren(y),D=ge({parent:_,remainingChildIds:P.map(String),idsRemoved:new Set(u)});if(!D){gn(y,i);continue}for(let[et,ct]of Object.entries(D.fields))V(i,y,et,ct);let R=me(y,i),U=R?i.getActivity(R)?.custom_id:null,W=typeof U=="string"&&U?U:null,H=n.customIdTracker.generateCustomIdForRestoredChild(W);i.setActivityField(y,v.CUSTOM_ID,H)}let S=new Set;for(let y of f)S.add(String(y));for(let y of p)y.grandparentKey!=="0"&&S.add(String(y.grandparentKey));for(let y of S)Et(y,i);let T=ot(i);for(let y of T){if(l.add(y.activityId),I.has(y.activityId))continue;let _=i.getActivity(y.activityId);if(!_)continue;let P=Z(_);P.correlative_id=y.before,I.set(y.activityId,P)}let{scheduledIds:g,scheduledBeforeImages:C}=await j({adapter:i,scheduler:r,sector:n.sector},{action:e,autoscheduleFrom:u.length>0?"roots":null,recomputeParentsFrom:u,now:n.now,options:t}),m={name:ht.ACTIVITY_OUTDENT,properties:{activity_ids:u.map(String),failed:d.map(y=>({activity_id:String(y.activityId),reason:y.reason}))}};return e.eventSource!==void 0&&(m.properties.event_source=e.eventSource),{ok:!0,changes:G(i,{source:e,beforeSnap:I,touchedIds:l,scheduledIds:g,scheduledBeforeImages:C,trackingEvents:[m],hoursPerDay:s.hoursPerDay})}}async function ec(e,t,n){let{adapter:i,ctx:r,scheduler:s,sector:a}=n;if(e.newValue!==0&&e.newValue!==100)return{ok:!1,reason:E.INVALID_PROGRESS_VALUE};let o=r.activityReader.getActivity(e.activityId);if(!o)return{ok:!1,reason:E.ACTIVITY_NOT_FOUND};let c=wt(v.PROGRESS);if(!c)throw new Error("[ScheduleCore] progressPipeline not registered \u2014 cannot dispatch activity-set-progress");let l=c.transform(o,e.newValue,r,e.newValue),d=Nt(e.activityId,l),u=K(i,d);xt(i,e.activityId,v.PROGRESS,l),Ot(e.activityId,l.postProcessors??[],i);let{scheduledIds:f}=await j({adapter:i,scheduler:s,sector:n.sector},{action:e,autoscheduleFrom:l.needsAutoSchedule?e.activityId:null,recomputeParentsFrom:[],collectDirty:A=>In(e.activityId,d,A),now:n.now,options:t}),p=(l.trackingEvents??[]).map(A=>({name:A.name,properties:A.properties??{}}));return{ok:!0,changes:G(i,{source:e,beforeSnap:u,touchedIds:d,scheduledIds:f,trackingEvents:p,hoursPerDay:a.hoursPerDay})}}async function nc(e,t,n){let{adapter:i,scheduler:r,sector:s}=n,a=[],o=new Map,c=new Set,l=[],d=[],u=[],f=!1;for(let A of e.edits){let I=fp(A,n);if(a.push(I.verdict),!I.verdict.ok||!I.changes)continue;let S=Nt(A.activityId,I.changes);pp(o,S,n);for(let C of S)c.add(C);let T=pe(i,A.activityId);xt(i,A.activityId,A.column,I.changes),Ot(A.activityId,I.changes.postProcessors??[],i),d.push(...he(T,i,A.activityId)),f||=!!I.changes.needsAutoSchedule;for(let C of I.changes.trackingEvents??[])l.push({name:C.name,properties:C.properties??{}});let g=ue(A.activityId,I.changes.constraintWarning);g&&u.push(g)}let{scheduledIds:p}=await j({adapter:i,scheduler:r,sector:n.sector},{action:e,autoscheduleFrom:f?"roots":null,recomputeParentsFrom:c,now:n.now,options:t});return{ok:!0,verdicts:a,changes:G(i,{source:e,beforeSnap:o,touchedIds:c,scheduledIds:p,sirDetection:"before-diff",links:d,trackingEvents:l,warnings:u,hoursPerDay:s.hoursPerDay})}}function fp(e,t){let{ctx:n}=t,i=e.activityId,r=wt(e.column);if(!r)throw new Error(`[ScheduleCore] no pipeline registered for column "${e.column}"`);let s=n.activityReader.getActivity(e.activityId);if(!s)throw new Error(`[ScheduleCore] activity "${e.activityId}" not found`);let a=r.canEdit(s);if(!a.allowed)return{verdict:{activityId:i,ok:!1,reason:a.reason??E.CANNOT_EDIT,...a.alertKey?{alertKey:a.alertKey}:{}},changes:null};let o=r.parseInput(e.newValue,s,n);if(!o.ok)return{verdict:{activityId:i,ok:!1,reason:o.reason??E.PARSE_ERROR},changes:null};let c=Reflect.get(s,e.column),l=r.validate(s,c,o.value,n);if(!l.valid)return{verdict:{activityId:i,ok:!1,reason:l.reason??E.INVALID,...l.notification?.messageKey?{alertKey:l.notification.messageKey}:{}},changes:null};let d=r.transform(s,o.value,n,o.raw);return{verdict:{activityId:i,ok:!0},changes:d}}function pp(e,t,n){let i=new Set;for(let r of t)e.has(r)||i.add(r);if(i.size!==0)for(let[r,s]of K(n.adapter,i))e.set(r,s)}var fr=v.CUSTOM_ID;async function ic(e,t,n){let{adapter:i,scheduler:r,sector:s}=n;e.edits.some(C=>C.column===v.DURATION)&&r.invalidateExpandedLinksCache();let o=[],c=new Map,l=new Map,d=new Set,u=[],f=[],p=[],A=!1;for(let C of e.edits){let m=hp(C,n);if(o.push(m.verdict),!m.verdict.ok||!m.changes)continue;let y=ue(C.activityId,m.changes.constraintWarning);y&&p.push(y);let _=Nt(C.activityId,m.changes);vp(c,_,n);for(let R of _)d.add(R);gp(l,C,c);let P=pe(i,C.activityId),D=yp(C,n);xt(i,C.activityId,C.column,m.changes),Ot(C.activityId,m.changes.postProcessors??[],i),mp(C,D,n),f.push(...he(P,i,C.activityId)),A||=!!m.changes.needsAutoSchedule;for(let R of m.changes.trackingEvents??[])u.push({name:R.name,properties:R.properties??{}})}let I={action:e,autoscheduleFrom:A?"roots":null,recomputeParentsFrom:d,now:n.now,options:t},S=l.size>0,{scheduledIds:T,scheduledBeforeImages:g}=await(S?xn({adapter:i,scheduler:r,sector:s},{postMutationArgs:I,revertTargets:[...l].map(([C,m])=>({activityId:C,priorConstraintDate:m})),revert:(C,m)=>Nn(C,m,i,n.ctx.calendars)}):j({adapter:i,scheduler:r,sector:s},I));return{ok:!0,verdicts:o,changes:G(i,{source:e,beforeSnap:c,touchedIds:d,scheduledIds:T,scheduledBeforeImages:g,sirDetection:"before-diff",links:f,trackingEvents:u,warnings:p,hoursPerDay:s.hoursPerDay})}}function hp(e,t){let{ctx:n}=t,i=e.activityId,r=wt(e.column);if(!r)return{verdict:{activityId:i,ok:!1,reason:E.NO_PIPELINE_FOR_COLUMN},changes:null};let s=n.activityReader.getActivity(e.activityId);if(!s)return{verdict:{activityId:i,ok:!1,reason:E.ACTIVITY_NOT_FOUND},changes:null};let a=r.canEdit(s);if(!a.allowed)return{verdict:{activityId:i,ok:!1,reason:a.reason??E.CANNOT_EDIT,...a.alertKey?{alertKey:a.alertKey}:{}},changes:null};let o=r.parseInput(e.newValue,s,n);if(!o.ok)return{verdict:{activityId:i,ok:!1,reason:o.reason??E.PARSE_ERROR},changes:null};let c=Reflect.get(s,e.column),l=r.validate(s,c,o.value,n);if(!l.valid)return{verdict:{activityId:i,ok:!1,reason:l.reason??E.INVALID,...l.notification?.messageKey?{alertKey:l.notification.messageKey}:{}},changes:null};if(e.column===fr&&o.value!==null){let u=t.adapter.getActivity(e.activityId),f=u?u.custom_id:null,p=typeof f=="string"?f:null;if(t.customIdTracker.isCustomIdInUse(String(o.value),p))return{verdict:{activityId:i,ok:!1,reason:E.CUSTOM_ID_DUPLICATE},changes:null}}let d=r.transform(s,o.value,n,o.raw);return{verdict:{activityId:i,ok:!0},changes:d}}function yp(e,t){if(e.column!==fr)return null;let n=t.adapter.getActivity(e.activityId),i=n?n.custom_id:null;return typeof i=="string"?i:null}function mp(e,t,n){if(e.column!==fr)return;let i=n.adapter.getActivity(e.activityId),r=i?i.custom_id:null,s=typeof r=="string"?r:null;t!==s&&n.customIdTracker.trackCustomIdChange(t,s)}function gp(e,t,n){if(!wn(t.column))return;let i=String(t.activityId);if(e.has(i))return;let r=n.get(i);r&&e.set(i,r.constraint_date??null)}function vp(e,t,n){let i=new Set;for(let r of t)e.has(r)||i.add(r);if(i.size!==0)for(let[r,s]of K(n.adapter,i))e.set(r,s)}async function rc(e,t,n){return e.kind==="link-create"||e.kind==="link-update"||e.kind==="link-delete"?Po(e,t,n):e.kind==="links-batch"?Ro(e,t,n):e.kind==="activity-create"?Yo(e,t,n):e.kind==="activity-paste"?Vo(e,t,n):e.kind==="activity-delete"?Jo(e,t,n):e.kind==="activity-move"?Zo(e,t,n):e.kind==="activity-indent"?Qo(e,t,n):e.kind==="activity-outdent"?tc(e,t,n):e.kind==="activity-set-progress"?ec(e,t,n):e.kind==="dates-batch"?nc(e,t,n):e.kind==="bulk-edit"?ic(e,t,n):e.kind==="selection-toggle"?jr(e,pr(n)):e.kind==="selection-replace"?Hr(e,pr(n)):e.kind==="visibility-set"?$r(e,pr(n)):e.kind==="sir-sync"?Go(e,n):e.kind==="inline-edit"&&(e.column===v.CUSTOM_PREDECESSORS||e.column===v.CUSTOM_SUCESSORS)?Lo(e,t,n):e.kind!=="inline-edit"?Cs(e,`[ScheduleCore] dispatch kind "${e.kind}" not supported yet`):Eo(e,t,n)}function pr(e){return{adapter:e.adapter}}function hr(e,t,n){return n==="hours"?e:Ri(e,t)}function Ap(e,t,n){return n==="hours"?e:ke(e,t)}function yt(e,t,n){return n==="hours"?e:{...e,duration:Ri(e.duration,t)}}function Hn(e,t,n){return n==="hours"?e:{...e,lag:ke(e.lag,t)}}function xe(e,t,n){return n==="hours"?e:{...e,activities:e.activities.map(i=>({...i,after:i.after?yt(i.after,t,n):i.after,fields:sc(i.fields,v.DURATION,t,n,hr)})),links:e.links.map(i=>({...i,after:i.after?Hn(i.after,t,n):i.after,fields:sc(i.fields,"lag",t,n,Ap)}))}}function sc(e,t,n,i,r){if(!e||!(t in e))return e;let s=e[t];return s?{...e,[t]:{before:typeof s.before=="number"?r(s.before,n,i):s.before,after:typeof s.after=="number"?r(s.after,n,i):s.after}}:e}function ac(e,t,n,i="days"){let r=e.getActivity(n);return r?yt(X(r),t,i):null}function oc(e,t,n="days"){return e.getAllActivities().map(i=>yt(X(i),t,n))}function cc(e){return e.getAllIds().map(String)}function lc(e,t){e.forEachActivity((n,i)=>t(i))}function dc(e,t,n,i="days"){let r=n==="0"?yr(e,"0"):e.getChildren(n),s=[];for(let a of r){let o=e.getActivity(a);o&&s.push(yt(X(o),t,i))}return s.sort((a,o)=>Number(a.correlative_id??0)-Number(o.correlative_id??0)),s}function yr(e,t){let n=t;if(n==="0"){let i=[];return e.forEachActivity((r,s)=>{b(r.parent)&&i.push(s)}),i}return[...e.getChildren(n)].map(String)}function uc(e){return He(e)}function fc(e,t){return e.getChildren(t).length>0}function pc(e,t,n,i="days"){let r=e.getLink(n);return r?Hn(gt(r),t,i):null}function hc(e,t,n="days"){return e.getAllLinks().map(i=>Hn(gt(i),t,n))}function yc(e,t,n){if(!e||e==="0")return;let i=n.getChildren(e);if(i.length===0)return;let r=new Map,s=0;for(let o of i){let c=Cp(String(o),t,n);r.set(String(o),c),s+=c}let a=s?100/s:0;for(let o of i){let c=n.getActivity(o);if(!c)continue;let l=c.baseline_points;if(At(c)){let u=r.get(String(o))??0;n.setActivityField(o,v.PONDERATOR,a*u)}else(!Array.isArray(l)||l.length===0)&&n.setActivityField(o,v.PONDERATOR,0)}}function Cp(e,t,n){let i=n.getActivity(e);if(!i)return 0;let r=At(i);if(!r)return 0;if(t==="COST")return $n(r.cost);if(t==="HH")return $n(r.hh_work);let s=i.type;return s==="project"?mc(e,n):s==="milestone"?0:$n(r.duration)}function mc(e,t){let n=0;for(let i of t.getChildren(e)){let r=t.getActivity(i);if(!r)continue;let s=At(r);if(!s)continue;let a=r.type;a==="project"?n+=mc(String(i),t):a!=="milestone"&&(n+=$n(s.duration))}return n}function $n(e){let t=typeof e=="string"?parseFloat(e):e;return typeof t=="number"&&Number.isFinite(t)?t:0}function Yn(e,t){t.forEachActivity((n,i)=>{t.setActivityField(i,v.PONDERATOR,0)}),t.forEachActivity((n,i)=>{t.getChildren(i).length>0&&yc(String(i),e,t)})}function Vn(e){for(let t of Sp(e))kp(t,e)}function Sp(e){let t=new Set;e.forEachActivity((i,r)=>{e.getChildren(r).length>0&&t.add(r)});let n=new Map;for(let i of t)n.set(i,_p(i,e));return[...t].sort((i,r)=>(n.get(r)??0)-(n.get(i)??0))}function _p(e,t){let n=0,i=e;for(;i&&i!=="0"&&t.getActivity(i);)n+=1,i=t.getParentId(i);return n}function kp(e,t){let n=t.getChildren(e);if(n.length===0)return;let i=[];for(let o of n){let c=t.getActivity(o);c&&i.push({progress:Number(c.progress??0),ponderator:Number(c.ponderator??0)})}let r=ie(i),a=t.getActivity(e)?.duration;a!==void 0&&t.setActivityField(e,"for_disable_milestone_duration",a),r!==null&&t.setActivityField(e,v.PROGRESS,mn(r))}var Ip=e=>e.type==="project",Tp=e=>{let t=e.baseline_points;return Array.isArray(t)?t.find(n=>n?.sectorbaselineversion?.active)??null:null},Dp=(e,t,n,i)=>{let r=Tp(e);if(!r)return 0;let s=(r.baseCalendarId!=null?n.getBaseCalendar(`${r.baseCalendarId}-base`):null)??(i?n.getBaseCalendar(i):null);return s?fe(Dt(String(r.start_date)),Dt(String(r.end_date)),t,s):0};function mr(e,t,n,i=null){let r=[],s=(o,c)=>{let l=n.getActivity(o);l&&l.expected_progress_base!==c&&(n.setActivityField(o,v.EXPECTED_PROGRESS_BASE,c),r.push(o))},a=o=>{let c=n.getActivity(o);if(!c)return 0;if(!Ip(c)){let u=Dp(c,t,n,i);return s(o,u),u}let l=0;for(let u of n.getChildrenIds(o)){let f=a(u),p=n.getActivity(u),A=typeof p?.ponderator=="number"?p.ponderator:0;l+=f*A}let d=l/100;return s(o,d),d};for(let o of e)a(o);return r}function gc(e,t,n=null){let i={getChildrenIds:s=>e.getChildren(String(s)).map(a=>String(a)),getActivity:s=>e.getActivity(s),setActivityField:(s,a,o)=>V(e,s,a,o),getBaseCalendar:s=>e.calendarReader.getCalendar(s)},r=[];return e.forEachActivity((s,a)=>{(s.parent===0||s.parent==="0"||s.parent==null)&&r.push(a)}),mr(r,t,i,n)}function Gn(e,t){let n=new Map;e.forEachActivity((s,a)=>{let o=s.proplannerId;typeof o=="number"&&n.set(o,a)});let i=new Map;for(let s of t){let a=s.activityId;if(typeof a!="number")continue;let o=n.get(a);if(o===void 0)continue;let c=i.get(o);c?c.push(s):i.set(o,[s])}let r=[];for(let[s,a]of i)e.setActivityField(s,"baseline_points",a),r.push(s);return e.forEachActivity((s,a)=>{if(i.has(a))return;let o=s.baseline_points;Array.isArray(o)&&o.length>0&&(e.setActivityField(a,"baseline_points",[]),r.push(a))}),r}var vc=e=>({[Ke]:e.start_date});var Ac=e=>({[qe]:e.end_date});var Cc=e=>({[ze]:e.duration});var Sc=e=>({[Je]:e.cost});var _c=e=>({[Xe]:e.hh_work});function kc(e){let t=[];return e.forEachActivity((n,i)=>{let r=At(n);if(!r)return;let s={...vc(r),...Ac(r),...Cc(r),...Sc(r),..._c(r)};for(let[a,o]of Object.entries(s))V(e,i,a,o);t.push(i)}),t}function Kn(e,t,n,i=null){if(t.length===0)return[];let r=new Set;for(let s of Gn(e,t))r.add(s);if(n)for(let s of gc(e,n,i))r.add(s);for(let s of kc(e))r.add(s);for(let s of On(e))r.add(s);return[...r]}function Ic(e){let t=e.ponderator;return typeof t=="number"&&Number.isFinite(t)?t:0}function Tc(e){let t=e.progress;return typeof t=="number"&&Number.isFinite(t)?t:0}function Dc(e,t,n){let i=new Map;e.forEachActivity((s,a)=>{i.set(a,Ic(s))}),Yn(n,e);let r=[];return e.forEachActivity((s,a)=>{Ic(s)!==(i.get(a)??0)&&r.push(yt(X(s),t,"days"))}),r}function Ec(e,t){let n=new Map;e.forEachActivity((r,s)=>{n.set(s,Tc(r))}),Vn(e);let i=[];return e.forEachActivity((r,s)=>{Tc(r)!==(n.get(s)??0)&&i.push(yt(X(r),t,"days"))}),i}function Pc(e,t,n,i,r=null){let s=Kn(e,n,i,r),a=[];for(let o of s){let c=e.getActivity(o);c&&a.push(yt(X(c),t,"days"))}return a}function Rc(e,t,n){let i=[];for(let r of Gt(e,n)){let s=e.getActivity(r);s&&i.push(yt(X(s),t,"days"))}return i}function qn(e){let[t,n]=e.split(":");return Number(t)*60+Number(n??0)}function Ep(e){return e.reduce((t,n)=>qn(n)<qn(t)?n:t)}function Pp(e){return e.reduce((t,n)=>qn(n)>qn(t)?n:t)}function Rp(e){return e.worktime.days.flatMap(t=>Array.isArray(t)?t:t===!0?e.worktime.hours:[])}function Lc(e){let t=[...e].find(s=>s.is_default);if(!t)return null;let n=Rp(t);if(n.length===0)return null;let i=n.map(s=>s.split("-")[0]),r=n.map(s=>s.split("-")[1]);return{startHour:Ep(i),endHour:Pp(r)}}function bc(e,t={}){let n=t.defaultUnit??"hour";return{getCalendar(i){let r=e.getCalendar(String(i));return r?Lp(r,n):null}}}function Lp(e,t){return{getClosestWorkTime(n){return e.getClosestWorkTime({date:n.date,dir:n.direction,unit:n.unit})},calculateEndDate(n,i){return e.calculateEndDate({start_date:n,duration:i,unit:t})},calculateDuration(n,i){return e.calculateDuration({start_date:n,end_date:i,unit:t})},isWorkTime(n,i){return e.isWorkTime({date:n,unit:i})},getWorkHours(n){return e.getWorkHours(n)}}}function bp(e){return Array.isArray?Array.isArray(e):e&&e.length!==void 0&&e.pop&&e.push}function Jt(e){return e&&typeof e=="object"?!!(e.getFullYear&&e.getMonth&&e.getDate):!1}function Xt(e){return Jt(e)&&!isNaN(e.getTime())}var Op={}.constructor.toString();function wp(e){var t=e.constructor.toString();return t!==Op}function Np(e){return e.$$typeof&&e.$$typeof.toString().includes("react.")}function vt(e){var t,n;if(e&&typeof e=="object")switch(!0){case Jt(e):n=new Date(e);break;case bp(e):for(n=new Array(e.length),t=0;t<e.length;t++)n[t]=vt(e[t]);break;default:if(wp(e))n=Object.create(e);else{if(Np(e))return n=e,n;n={}}for(t in e)Object.prototype.hasOwnProperty.apply(e,[t])&&(n[t]=vt(e[t]));break}return n||e}function ve(e,t,n){for(var i in t)(e[i]===void 0||n)&&(e[i]=t[i]);return e}function Oc(e){return typeof e<"u"}var zn;function gr(){return zn||(zn=new Date().valueOf()),zn++,zn}function dt(e,t){return e.bind?e.bind(t):function(){return e.apply(t,arguments)}}var Fp=(e,t,n)=>{e=e.replace(/%[a-zA-Z]/g,r=>{switch(r){case"%d":return`"+to_fixed(date.get${t?"UTC":""}Date())+"`;case"%m":return`"+to_fixed((date.get${t?"UTC":""}Month()+1))+"`;case"%j":return`"+date.get${t?"UTC":""}Date()+"`;case"%n":return`"+(date.get${t?"UTC":""}Month()+1)+"`;case"%y":return`"+to_fixed(date.get${t?"UTC":""}FullYear()%100)+"`;case"%Y":return`"+date.get${t?"UTC":""}FullYear()+"`;case"%D":return`"+locale.date.day_short[date.get${t?"UTC":""}Day()]+"`;case"%l":return`"+locale.date.day_full[date.get${t?"UTC":""}Day()]+"`;case"%M":return`"+locale.date.month_short[date.get${t?"UTC":""}Month()]+"`;case"%F":return`"+locale.date.month_full[date.get${t?"UTC":""}Month()]+"`;case"%h":return`"+to_fixed((date.get${t?"UTC":""}Hours()+11)%12+1)+"`;case"%g":return`"+((date.get${t?"UTC":""}Hours()+11)%12+1)+"`;case"%G":return`"+date.get${t?"UTC":""}Hours()+"`;case"%H":return`"+to_fixed(date.get${t?"UTC":""}Hours())+"`;case"%i":return`"+to_fixed(date.get${t?"UTC":""}Minutes())+"`;case"%a":return`"+(date.get${t?"UTC":""}Hours()>11?"pm":"am")+"`;case"%A":return`"+(date.get${t?"UTC":""}Hours()>11?"PM":"AM")+"`;case"%s":return`"+to_fixed(date.get${t?"UTC":""}Seconds())+"`;case"%W":return'"+to_fixed(getISOWeek(date))+"';case"%w":return'"+to_fixed(getWeek(date))+"';default:return r}});let i=new Function("date","to_fixed","locale","getISOWeek","getWeek",`return "${e}";`);return r=>i(r,n.date.to_fixed,n.locale,n.date.getISOWeek,n.date.getWeek)},Mp=(e,t,n)=>{let i="var temp=date.match(/[a-zA-Z]+|[0-9]+/g);",r=e.match(/%[a-zA-Z]/g);for(let o=0;o<r.length;o++)switch(r[o]){case"%j":case"%d":i+=`set[2]=temp[${o}]||1;`;break;case"%n":case"%m":i+=`set[1]=(temp[${o}]||1)-1;`;break;case"%y":i+=`set[0]=temp[${o}]*1+(temp[${o}]>50?1900:2000);`;break;case"%g":case"%G":case"%h":case"%H":i+=`set[3]=temp[${o}]||0;`;break;case"%i":i+=`set[4]=temp[${o}]||0;`;break;case"%Y":i+=`set[0]=temp[${o}]||0;`;break;case"%a":case"%A":i+=`set[3]=set[3]%12+((temp[${o}]||'').toLowerCase()=='am'?0:12);`;break;case"%s":i+=`set[5]=temp[${o}]||0;`;break;case"%M":i+=`set[1]=locale.date.month_short_hash[temp[${o}]]||0;`;break;case"%F":i+=`set[1]=locale.date.month_full_hash[temp[${o}]]||0;`;break}let s="set[0],set[1],set[2],set[3],set[4],set[5]";t&&(s=` Date.UTC(${s})`);let a=new Function("date","locale",`var set=[0,0,1,0,0,0]; ${i} return new Date(${s});`);return o=>a(o,n.locale)},wc={date_to_str:Fp,str_to_date:Mp},Wp=(e,t,n)=>i=>e.replace(/%[a-zA-Z]/g,r=>{switch(r){case"%d":return t?n.date.to_fixed(i.getUTCDate()):n.date.to_fixed(i.getDate());case"%m":return t?n.date.to_fixed(i.getUTCMonth()+1):n.date.to_fixed(i.getMonth()+1);case"%j":return t?i.getUTCDate():i.getDate();case"%n":return t?i.getUTCMonth()+1:i.getMonth()+1;case"%y":return t?n.date.to_fixed(i.getUTCFullYear()%100):n.date.to_fixed(i.getFullYear()%100);case"%Y":return t?i.getUTCFullYear():i.getFullYear();case"%D":return t?n.locale.date.day_short[i.getUTCDay()]:n.locale.date.day_short[i.getDay()];case"%l":return t?n.locale.date.day_full[i.getUTCDay()]:n.locale.date.day_full[i.getDay()];case"%M":return t?n.locale.date.month_short[i.getUTCMonth()]:n.locale.date.month_short[i.getMonth()];case"%F":return t?n.locale.date.month_full[i.getUTCMonth()]:n.locale.date.month_full[i.getMonth()];case"%h":return t?n.date.to_fixed((i.getUTCHours()+11)%12+1):n.date.to_fixed((i.getHours()+11)%12+1);case"%g":return t?(i.getUTCHours()+11)%12+1:(i.getHours()+11)%12+1;case"%G":return t?i.getUTCHours():i.getHours();case"%H":return t?n.date.to_fixed(i.getUTCHours()):n.date.to_fixed(i.getHours());case"%i":return t?n.date.to_fixed(i.getUTCMinutes()):n.date.to_fixed(i.getMinutes());case"%a":return t?i.getUTCHours()>11?"pm":"am":i.getHours()>11?"pm":"am";case"%A":return t?i.getUTCHours()>11?"PM":"AM":i.getHours()>11?"PM":"AM";case"%s":return t?n.date.to_fixed(i.getUTCSeconds()):n.date.to_fixed(i.getSeconds());case"%W":return t?n.date.to_fixed(n.date.getUTCISOWeek(i)):n.date.to_fixed(n.date.getISOWeek(i));case"%w":return n.date.to_fixed(n.date.getWeek(i));default:return r}}),Up=(e,t,n)=>i=>{let r=[0,0,1,0,0,0],s=i.match(/[a-zA-Z]+|[0-9]+/g),a=e.match(/%[a-zA-Z]/g);for(let o=0;o<a.length;o++)switch(a[o]){case"%j":case"%d":r[2]=s[o]||1;break;case"%n":case"%m":r[1]=(s[o]||1)-1;break;case"%y":r[0]=s[o]*1+(s[o]>50?1900:2e3);break;case"%g":case"%G":case"%h":case"%H":r[3]=s[o]||0;break;case"%i":r[4]=s[o]||0;break;case"%Y":r[0]=s[o]||0;break;case"%a":case"%A":r[3]=r[3]%12+((s[o]||"").toLowerCase()==="am"?0:12);break;case"%s":r[5]=s[o]||0;break;case"%M":r[1]=n.locale.date.month_short_hash[s[o]]||0;break;case"%F":r[1]=n.locale.date.month_full_hash[s[o]]||0;break}return t?new Date(Date.UTC(r[0],r[1],r[2],r[3],r[4],r[5])):new Date(r[0],r[1],r[2],r[3],r[4],r[5])},Nc={date_to_str:Wp,str_to_date:Up};function xc(e){var t=/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:?\d{2})?)?$/;function n(o){var c=new Date(o);return isNaN(c.getTime())?null:c}var i=null;function r(){try{new Function("canUseCsp = false;")}catch{i=!0}}function s(){var o=!1;return e.config.csp==="auto"?(i===null&&r(),o=i):o=e.config.csp,o}var a={_isoDateDetected:!1,_isoDateOnly:!1,formatISODate:function(o){return o.toISOString()},formatISODateOnly:function(o){return o.getUTCFullYear()+"-"+e.date.to_fixed(o.getUTCMonth()+1)+"-"+e.date.to_fixed(o.getUTCDate())},init:function(){for(var o=e.locale,l=o.date.month_short,d=o.date.month_short_hash={},c=0;c<l.length;c++)d[l[c]]=c;for(var l=o.date.month_full,d=o.date.month_full_hash={},c=0;c<l.length;c++)d[l[c]]=c},date_part:function(o){return o.setUTCHours(0,0,0,0),o},time_part:function(o){return o.valueOf()/1e3%86400},week_start:function(o){var c=o.getUTCDay();return e.config.start_on_monday&&(c===0?c=6:c--),this.date_part(this.add(o,-1*c,"day"))},month_start:function(o){return o.setUTCDate(1),this.date_part(o)},quarter_start:function(o){this.month_start(o);var c=o.getUTCMonth(),l;return c>=9?l=9:c>=6?l=6:c>=3?l=3:l=0,o.setUTCMonth(l),o},year_start:function(o){return o.setUTCMonth(0),this.month_start(o)},day_start:function(o){return this.date_part(o)},hour_start:function(o){return o.getUTCMinutes()&&o.setUTCMinutes(0),this.minute_start(o),o},minute_start:function(o){return o.getUTCSeconds()&&o.setUTCSeconds(0),o.getUTCMilliseconds()&&o.setUTCMilliseconds(0),o},_add_days:function(o,c,l){return o.setUTCDate(o.getUTCDate()+c),o},add:function(o,c,l){var d=new Date(o.valueOf());switch(l){case"day":d=this._add_days(d,c,o);break;case"week":d=this._add_days(d,c*7,o);break;case"month":d.setUTCMonth(d.getUTCMonth()+c);break;case"year":d.setUTCFullYear(d.getUTCFullYear()+c);break;case"hour":d.setTime(d.getTime()+c*60*60*1e3);break;case"minute":d.setTime(d.getTime()+c*60*1e3);break;default:return this["add_"+l](o,c,l)}return d},add_quarter:function(o,c){return this.add(o,c*3,"month")},to_fixed:function(o){return o<10?"0"+o:o},copy:function(o){return new Date(o.valueOf())},date_to_str:function(o,c){var l=wc;return s()&&(l=Nc),l.date_to_str(o,c,e)},str_to_date:function(o,c){var l=wc;return s()&&(l=Nc),l.str_to_date(o,c,e)},getISOWeek:function(o){return e.date._getWeekNumber(o,!0)},_getWeekNumber:function(o,c){if(!o)return!1;var l=o.getUTCDay();c&&l===0&&(l=7);var d=new Date(o.valueOf());d.setUTCDate(o.getUTCDate()+(4-l));var u=d.getUTCFullYear(),f=Math.round((d.getTime()-Date.UTC(u,0,1))/864e5),p=1+Math.floor(f/7);return p},getWeek:function(o){return e.date._getWeekNumber(o,e.config.start_on_monday)},getUTCISOWeek:function(o){return e.date.getISOWeek(o)},parseDate:function(o,c){if(o&&!o.getFullYear){var l=!c||c==="parse_date"||c==="xml_date",d=l&&(e.defined(e.templates.xml_date)||e.templates.parse_date&&!e.templates.parse_date._ganttAuto);if(!d&&typeof o=="string"&&t.test(o)){var u=o.indexOf("T")!==-1,f=n(o);if(f)return a._isoDateDetected?u&&(a._isoDateOnly=!1):(a._isoDateDetected=!0,a._isoDateOnly=!u),f}typeof c!="function"&&(typeof c=="string"?c==="parse_date"||c==="xml_date"?c=e.defined(e.templates.xml_date)?e.templates.xml_date:e.templates.parse_date:c=e.defined(e.templates[c])?e.templates[c]:e.date.str_to_date(c,!0):c=e.defined(e.templates.xml_date)?e.templates.xml_date:e.templates.parse_date),o?o=c(o):o=null}return o}};return a}function vr(e,t,n,i,r){return this.date=e,this.unit=t,this.task=n,this.id=i,this.calendar=r,this}function Ar(e,t,n,i,r,s){return this.date=e,this.dir=t,this.unit=n,this.task=i,this.id=r,this.calendar=s,this}function Cr(e,t,n,i,r,s,a){return this.start_date=e,this.duration=t,this.unit=n,this.step=i,this.task=r,this.id=s,this.calendar=a,this}function Bp(e,t,n,i){return this.start_date=e,this.end_date=t,this.task=n,this.calendar=i,this.unit=null,this.step=null,this}var Fc=function(e){return{getWorkHoursArguments:function(){var t=arguments[0];if(Jt(t)?t={date:t}:t=ve({},t),!Xt(t.date))throw e.assert(!1,"Invalid date argument for getWorkHours method"),new Error("Invalid date argument for getWorkHours method");return t},setWorkTimeArguments:function(){return arguments[0]},unsetWorkTimeArguments:function(){return arguments[0]},isWorkTimeArguments:function(){var t=arguments[0];if(t instanceof vr)return t;var n;if(t.date?n=new vr(t.date,t.unit,t.task,null,t.calendar):n=new vr(arguments[0],arguments[1],arguments[2],null,arguments[3]),n.unit=n.unit||e.config.duration_unit,!Xt(n.date))throw e.assert(!1,"Invalid date argument for isWorkTime method"),new Error("Invalid date argument for isWorkTime method");return n},getClosestWorkTimeArguments:function(t){var n=arguments[0];if(n instanceof Ar)return n;var i;if(Jt(n)?i=new Ar(n):i=new Ar(n.date,n.dir,n.unit,n.task,null,n.calendar),n.id&&(i.task=n),i.dir=n.dir||"any",i.unit=n.unit||e.config.duration_unit,!Xt(i.date))throw e.assert(!1,"Invalid date argument for getClosestWorkTime method"),new Error("Invalid date argument for getClosestWorkTime method");return i},_getStartEndConfig:function(t){var n=Bp,i;if(t instanceof n)return t;if(Jt(t)?i=new n(arguments[0],arguments[1],arguments[2],arguments[3]):(i=new n(t.start_date,t.end_date,t.task),t.id!==null&&t.id!==void 0&&(i.task=t)),i.unit=i.unit||e.config.duration_unit,i.step=i.step||e.config.duration_step,i.start_date=i.start_date||i.start||i.date,!Xt(i.start_date))throw e.assert(!1,"Invalid start_date argument for getDuration method"),new Error("Invalid start_date argument for getDuration method");if(!Xt(i.end_date))throw e.assert(!1,"Invalid end_date argument for getDuration method"),new Error("Invalid end_date argument for getDuration method");return i},getDurationArguments:function(t,n,i,r){return this._getStartEndConfig.apply(this,arguments)},hasDurationArguments:function(t,n,i,r){return this._getStartEndConfig.apply(this,arguments)},calculateEndDateArguments:function(t,n,i,r){var s=arguments[0];if(s instanceof Cr)return s;var a;if(Jt(s)?a=new Cr(arguments[0],arguments[1],arguments[2],void 0,arguments[3],void 0,arguments[4]):a=new Cr(s.start_date,s.duration,s.unit,s.step,s.task,null,s.calendar),s.id!==null&&s.id!==void 0&&(a.task=s,a.unit=null,a.step=null),a.unit=a.unit||e.config.duration_unit,a.step=a.step||e.config.duration_step,!Xt(a.start_date))throw e.assert(!1,"Invalid start_date argument for calculateEndDate method"),new Error("Invalid start_date argument for calculateEndDate method");return a}}};function Mc(){}Mc.prototype={_getIntervals:function(e){for(var t=[],n=0;n<e.length;n+=2)t.push({start:e[n],end:e[n+1]});return t},_toHoursArray:function(e){var t=[];function n(s){var a=String(s);return a.length<2&&(a="0"+a),a}function i(s){var a=Math.floor(s/3600),o=s-a*60*60,c=Math.floor(o/60);return a+":"+n(c)}for(var r=0;r<e.length;r++)t.push(i(e[r].start)+"-"+i(e[r].end));return t},_intersectHourRanges:function(e,t){var r=[],n=e.length>t.length?e:t,i=e===n?t:e;n=n.slice(),i=i.slice();for(var r=[],s=0;s<n.length;s++)for(var a=n[s],o=0;o<i.length;o++){var c=i[o];c.start<a.end&&c.end>a.start&&(r.push({start:Math.max(a.start,c.start),end:Math.min(a.end,c.end)}),a.end>c.end&&(i.splice(o,1),o--,s--))}return r},_mergeAdjacentIntervals:function(e){var t=e.slice();t.sort(function(s,a){return s.start-a.start});for(var n=t[0],i=1;i<t.length;i++){var r=t[i];r.start<=n.end?(r.end>n.end&&(n.end=r.end),t.splice(i,1),i--):n=r}return t},_mergeHoursConfig:function(e,t){return this._mergeAdjacentIntervals(this._intersectHourRanges(e,t))},merge:function(e,t){let n=vt(e.getConfig()),i=vt(t.getConfig()),r=n.parsed,s=i.parsed;r.customWeeks=n.customWeeks,s.customWeeks=i.customWeeks;var a={hours:this._toHoursArray(this._mergeHoursConfig(r.hours,s.hours)),dates:{},customWeeks:{}};let o=(l,d)=>{for(let u in l.dates){let f=l.dates[u];+u>1e3&&(a.dates[u]=!1);for(let p in d.dates){let A=d.dates[p];if(p==u&&(a.dates[u]=!!(f&&A)),Array.isArray(f)){let I=Array.isArray(A)?A:d.hours;a.dates[u]=this._toHoursArray(this._mergeHoursConfig(f,I))}}}};if(o(r,s),o(s,r),r.customWeeks)for(var c in r.customWeeks)a.customWeeks[c]=r.customWeeks[c];if(s.customWeeks)for(var c in s.customWeeks)a.customWeeks[c]?a.customWeeks[c+"_second"]=s.customWeeks[c]:a.customWeeks[c]=s.customWeeks[c];return a}};var Sr=class{constructor(){this.clear()}getItem(t,n,i){if(this._cache.has(t)){let s=this._cache.get(t)[i.getUTCFullYear()];if(s&&s.has(n))return s.get(n)}return-1}setItem(t,n,i,r){if(!t||!n)return;let s=this._cache,a=r.getUTCFullYear(),o;s.has(t)?o=s.get(t):(o=[],s.set(t,o));let c=o[a];c||(c=o[a]=new Map),c.set(n,i)}clear(){this._cache=new Map}},_r=class{constructor(){this.clear()}getItem(t,n,i){let r=this._cache;if(r&&r[t]){let s=r[t];if(s===void 0)return-1;let a=s[i.getUTCFullYear()];if(a&&a[n]!==void 0)return a[n]}return-1}setItem(t,n,i,r){if(!t||!n)return;let s=this._cache;if(!s)return;s[t]||(s[t]=[]);let a=s[t],o=r.getUTCFullYear(),c=a[o];c||(c=a[o]={}),c[n]=i}clear(){this._cache={}}},kr=class{constructor(t){this.getMinutesPerWeek=n=>{let i=n.valueOf();if(this._weekCache.has(i))return this._weekCache.get(i);let r=this._calendar,s=this._calendar.$gantt,a=0,o=s.date.week_start(new Date(n));for(let c=0;c<7;c++)a+=r.getHoursPerDay(o)*60,o=s.date.add(o,1,"day");return this._weekCache.set(i,a),a},this.getMinutesPerMonth=n=>{let i=n.valueOf();if(this._monthCache.has(i))return this._monthCache.get(i);let r=this._calendar,s=this._calendar.$gantt,a=0,o=s.date.week_start(new Date(n)),c=s.date.add(o,1,"month").valueOf();for(;o.valueOf()<c;)a+=r.getHoursPerDay(o)*60,o=s.date.add(o,1,"day");return this._monthCache.set(i,a),a},this.clear=()=>{this._weekCache=new Map,this._monthCache=new Map},this.clear(),this._calendar=t}};function jp(){return typeof Map<"u"?new Sr:new _r}var Ir=class{constructor(){this.clear()}_getCacheObject(t,n,i){let r=this._cache;r[n]||(r[n]=[]);let s=r[n];s||(s=r[n]={});let a=s[i];a||(a=s[i]={});let o=t.getUTCFullYear(),c=a[o];return c||(c=a[o]={durations:{},endDates:{}}),c}_endDateCacheKey(t,n){return String(t)+"-"+String(n)}_durationCacheKey(t,n){return String(t)+"-"+String(n)}getEndDate(t,n,i,r,s){let a=this._getCacheObject(t,i,r),o=t.valueOf(),c=this._endDateCacheKey(o,n),l;if(a.endDates[c]===void 0){let d=s(),u=d.valueOf();a.endDates[c]=u,a.durations[this._durationCacheKey(o,u)]=n,l=d}else l=new Date(a.endDates[c]);return l}getDuration(t,n,i,r,s){let a=this._getCacheObject(t,i,r),o=t.valueOf(),c=n.valueOf(),l=this._durationCacheKey(o,c),d;if(a.durations[l]===void 0){let u=s();a.durations[l]=u.valueOf(),d=u}else d=a.durations[l];return d}clear(){this._cache={}}};function Tr(e,t){this.argumentsHelper=t,this.$gantt=e,this._workingUnitsCache=jp(),this._largeUnitsCache=new kr(this),this._dateDurationCache=new Ir,this._worktime=null,this._cached_timestamps={},this._cached_timestamps_count=0}Tr.prototype={units:["year","month","week","day","hour","minute"],_clearCaches:function(){this._workingUnitsCache.clear(),this._largeUnitsCache.clear(),this._dateDurationCache.clear()},_getUnitOrder:function(e){for(var t=0,n=this.units.length;t<n;t++)if(this.units[t]==e)return t},_resetTimestampCache:function(){this._cached_timestamps={},this._cached_timestamps_count=0},_timestamp:function(e){this._cached_timestamps_count>1e6&&this._resetTimestampCache();var t=null;if(e.day||e.day===0)t=e.day;else if(e.date){var n=String(e.date.valueOf());this._cached_timestamps[n]?t=this._cached_timestamps[n]:(t=Date.UTC(e.date.getUTCFullYear(),e.date.getUTCMonth(),e.date.getUTCDate()),this._cached_timestamps[n]=t,this._cached_timestamps_count++)}return t},_checkIfWorkingUnit:function(e,t){if(!this["_is_work_"+t]){let n=this.$gantt.date[`${t}_start`](new Date(e)),i=this.$gantt.date.add(n,1,t);return this.hasDuration(n,i)}return this["_is_work_"+t](e)},_is_work_day:function(e){var t=this._getWorkHours(e);return Array.isArray(t)?t.length>0:!1},_is_work_hour:function(e){for(var t=this._getWorkHours(e),n=e.getUTCHours(),i=0;i<t.length;i++)if(n>=t[i].startHour&&n<t[i].endHour)return!0;return!1},_getTimeOfDayStamp:function(e,t){var n=e.getUTCHours();return!e.getUTCHours()&&!e.getUTCMinutes()&&t&&(n=24),n*60*60+e.getUTCMinutes()*60},_is_work_minute:function(e){for(var t=this._getWorkHours(e),n=this._getTimeOfDayStamp(e),i=0;i<t.length;i++)if(n>=t[i].start&&n<t[i].end)return!0;return!1},_nextDate:function(e,t,n){return this.$gantt.date.add(e,n,t)},_getWorkUnitsBetweenGeneric:function(e,t,n,i){var r=this.$gantt.date,s=new Date(e),a=new Date(t);i=i||1;var o=0,c=null,l,d,u=!1;l=r[n+"_start"](new Date(s)),l.valueOf()!=s.valueOf()&&(u=!0);var f=!1;d=r[n+"_start"](new Date(t)),d.valueOf()!=t.valueOf()&&(f=!0);for(var p=!1;s.valueOf()<a.valueOf();){if(c=this._nextDate(s,n,i),p=c.valueOf()>a.valueOf(),this._isWorkTime(s,n))(u||f&&p)&&(l=r[n+"_start"](new Date(s)),d=r.add(l,i,n)),u?(u=!1,c=this._nextDate(l,n,i),o+=(d.valueOf()-s.valueOf())/(d.valueOf()-l.valueOf())):f&&p?(f=!1,o+=(a.valueOf()-s.valueOf())/(d.valueOf()-l.valueOf())):o++;else{var A=this._getUnitOrder(n),I=this.units[A-1];I&&!this._isWorkTime(s,I)&&(c=this._getClosestWorkTimeFuture(s,I))}s=c}return o},_getMinutesPerHour:function(e){var t=this._getTimeOfDayStamp(e),n=this._getTimeOfDayStamp(this._nextDate(e,"hour",1));n===0&&(n=1440*60);for(var i=this._getWorkHours(e),r=0;r<i.length;r++){var s=i[r];if(t>=s.start&&n<=s.end)return 60;if(t<s.end&&n>s.start){var a=Math.min(n,s.end)-Math.max(t,s.start);return a/60}}return 0},_getMinutesPerDay:function(e){var t=this._getWorkHours(e),n=0;return t.forEach(function(i){n+=i.durationMinutes}),n},getHoursPerDay:function(e){var t=this._getWorkHours(e),n=0;return t.forEach(function(i){n+=i.durationHours}),n},_getWorkUnitsForRange:function(e,t,n,i){var r=0,s=new Date(e),a=new Date(t),o;for(n=="minute"?o=dt(this._getMinutesPerDay,this):o=dt(this.getHoursPerDay,this);s.valueOf()<a.valueOf();){if(a-s>1e3*60*60*24*32&&s.getUTCDate()===0){var c=this._largeUnitsCache.getMinutesPerMonth(s);n=="hour"&&(c=c/60),r+=c,s=this.$gantt.date.add(s,1,"month");continue}else if(a-s>1e3*60*60*24*16){var l=this.$gantt.date.week_start(new Date(s));if(s.valueOf()===l.valueOf()){var c=this._largeUnitsCache.getMinutesPerWeek(s);n=="hour"&&(c=c/60),r+=c,s=this.$gantt.date.add(s,7,"day");continue}}r+=o(s),s=this._nextDate(s,"day",1)}return r/i},_getMinutesBetweenSingleDay:function(e,t){for(var n=this._getIntervalTimestamp(e,t),i=this._getWorkHours(e),r=0,s=0;s<i.length;s++){var a=i[s];if(n.end>=a.start&&n.start<=a.end){var o=Math.max(a.start,n.start),c=Math.min(a.end,n.end);r+=(c-o)/60,n.start=c}}return Math.floor(r)},_getMinutesBetween:function(e,t,n,i){var r=new Date(e),s=new Date(t);i=i||1;var a=new Date(r),o=this.$gantt.date.add(this.$gantt.date.day_start(new Date(r)),1,"day");if(s.valueOf()<=o.valueOf())return this._getMinutesBetweenSingleDay(e,t);var c=this.$gantt.date.day_start(new Date(s)),l=s,d=this._getMinutesBetweenSingleDay(a,o),u=this._getMinutesBetweenSingleDay(c,l),f=this._getWorkUnitsForRange(o,c,n,i),p=d+f+u;return p},_getHoursBetween:function(e,t,n,i){var r=new Date(e),s=new Date(t);i=i||1;var a=new Date(r),o=this.$gantt.date.add(this.$gantt.date.day_start(new Date(r)),1,"day");if(s.valueOf()<=o.valueOf())return Math.round(this._getMinutesBetweenSingleDay(e,t)/60);var c=this.$gantt.date.day_start(new Date(s)),l=s,d=this._getMinutesBetweenSingleDay(a,o,n,i)/60,u=this._getMinutesBetweenSingleDay(c,l,n,i)/60,f=this._getWorkUnitsForRange(o,c,n,i),p=d+f+u;return Math.round(p)},getConfig:function(){return this._worktime},_setConfig:function(e){this._worktime=e,this._parseSettings(),this._clearCaches()},_parseSettings:function(){var e=this.getConfig();e.parsed={dates:{},hours:null,haveCustomWeeks:!1,customWeeks:{},customWeeksRangeStart:null,customWeeksRangeEnd:null,customWeeksBoundaries:[]},e.parsed.hours=this._parseHours(e.hours);for(var t in e.dates)e.parsed.dates[t]=this._parseHours(e.dates[t]);if(e.customWeeks){var n=null,i=null;for(var t in e.customWeeks){var r=e.customWeeks[t];if(r.from&&r.to){var s=r.from,a=r.to;(!n||n>s.valueOf())&&(n=s.valueOf()),(!i||i<a.valueOf())&&(i=a.valueOf()),e.parsed.customWeeksBoundaries.push({from:s.valueOf(),fromReadable:new Date(s),to:a.valueOf(),toReadable:new Date(a),name:t}),e.parsed.haveCustomWeeks=!0;var o=e.parsed.customWeeks[t]={from:r.from,to:r.to,hours:this._parseHours(r.hours),dates:{}};if(r.days&&!r.dates){r.dates=r.dates||{};for(var t=0;t<r.days.length;t++)r.dates[t]=r.days[t],r.days[t]instanceof Array||(r.dates[t]=!!r.days[t]);delete r.days}for(var c in r.dates)o.dates[c]=this._parseHours(r.dates[c])}}e.parsed.customWeeksRangeStart=n,e.parsed.customWeeksRangeEnd=i}},_tryChangeCalendarSettings:function(e){var t=JSON.stringify(this.getConfig());return e(),this.hasWorkTime()?!0:(this._setConfig(JSON.parse(t)),this._clearCaches(),!1)},_arraysEqual:function(e,t){if(e===t)return!0;if(!e||!t||e.length!=t.length)return!1;for(var n=0;n<e.length;++n)if(e[n]!==t[n])return!1;return!0},_compareSettings:function(e,t){if(!this._arraysEqual(e.hours,t.hours))return!1;var n=Object.keys(e.dates),i=Object.keys(t.dates);if(n.sort(),i.sort(),!this._arraysEqual(n,i))return!1;for(var r=0;r<n.length;r++){var s=n[r],a=e.dates[s],o=t.dates[s];if(a!==o&&!(Array.isArray(a)&&Array.isArray(o)&&this._arraysEqual(a,o)))return!1}return!0},equals:function(e){if(!(e instanceof Tr))return!1;var t=this.getConfig(),n=e.getConfig();if(!this._compareSettings(t,n))return!1;if(t.parsed.haveCustomWeeks&&n.parsed.haveCustomWeeks){if(t.parsed.customWeeksBoundaries.length!=n.parsed.customWeeksBoundaries.length)return!1;for(var i in t.parsed.customWeeks){var r=t.parsed.customWeeks[i],s=n.parsed.customWeeks[i];if(!s||!this._compareSettings(r,s))return!1}}else if(t.parse.haveCustomWeeks!==n.parsed.haveCustomWeeks)return!1;return!0},getWorkHours:function(){var e=this.argumentsHelper.getWorkHoursArguments.apply(this.argumentsHelper,arguments);return this._getWorkHours(e.date,!1)},_getWorkHours:function(e,t){var n=this.getConfig();if(t!==!1&&(n=n.parsed),!e)return n.hours;let i=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()));var r=this._timestamp({date:i});if(n.haveCustomWeeks&&n.customWeeksRangeStart<=r&&n.customWeeksRangeEnd>r){for(var s=0;s<n.customWeeksBoundaries.length;s++)if(n.customWeeksBoundaries[s].from<=r&&n.customWeeksBoundaries[s].to>r){n=n.customWeeks[n.customWeeksBoundaries[s].name];break}}var a=!0;return n.dates[r]!==void 0?a=n.dates[r]:n.dates[e.getUTCDay()]!==void 0&&(a=n.dates[e.getUTCDay()]),a===!0?n.hours:a||[]},_getIntervalTimestamp:function(e,t){var n={start:0,end:0};n.start=e.getUTCHours()*60*60+e.getUTCMinutes()*60+e.getUTCSeconds();var i=t.getUTCHours();return!i&&!t.getUTCMinutes()&&!t.getUTCSeconds()&&e.valueOf()<t.valueOf()&&(i=24),n.end=i*60*60+t.getUTCMinutes()*60+t.getUTCSeconds(),n},_parseHours:function(e){if(Array.isArray(e)){var t=[];e.forEach(function(o){typeof o=="number"?t.push(o*60*60):typeof o=="string"&&o.split("-").map(function(c){return c.trim()}).forEach(function(c){var l=c.split(":").map(function(u){return u.trim()}),d=parseInt(l[0]*60*60);l[1]&&(d+=parseInt(l[1]*60)),l[2]&&(d+=parseInt(l[2])),t.push(d)})});for(var n=[],i=0;i<t.length;i+=2){var r=t[i],s=t[i+1],a=s-r;n.push({start:r,end:s,startHour:Math.floor(r/3600),startMinute:Math.floor(r/60),endHour:Math.ceil(s/3600),endMinute:Math.ceil(s/60),durationSeconds:a,durationMinutes:a/60,durationHours:a/3600})}return n}else return e},setWorkTime:function(e){return this._tryChangeCalendarSettings(dt(function(){var t=e.hours!==void 0?e.hours:!0,n=this._timestamp(e),i=this.getConfig();if(n!==null?i.dates[n]=t:e.customWeeks||(i.hours=t),e.customWeeks){if(i.customWeeks||(i.customWeeks={}),typeof e.customWeeks=="string")n!==null?i.customWeeks[e.customWeeks].dates[n]=t:e.customWeeks||(i.customWeeks[e.customWeeks].hours=t);else if(typeof e.customWeeks=="object"&&e.customWeeks.constructor===Object)for(var r in e.customWeeks)i.customWeeks[r]=e.customWeeks[r]}this._parseSettings(),this._clearCaches()},this))},unsetWorkTime:function(e){return this._tryChangeCalendarSettings(dt(function(){if(!e)this.reset_calendar();else{var t=this._timestamp(e);t!==null&&delete this.getConfig().dates[t]}this._parseSettings(),this._clearCaches()},this))},_isWorkTime:function(e,t){var n=-1,i=null;return i=String(e.valueOf()),n=this._workingUnitsCache.getItem(t,i,e),n==-1&&(n=this._checkIfWorkingUnit(e,t),this._workingUnitsCache.setItem(t,i,n,e)),n},isWorkTime:function(){var e=this.argumentsHelper.isWorkTimeArguments.apply(this.argumentsHelper,arguments);return this._isWorkTime(e.date,e.unit)},calculateDuration:function(){var e=this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper,arguments);if(!e.unit)return!1;var t=this;return this._dateDurationCache.getDuration(e.start_date,e.end_date,e.unit,e.step,function(){return t._calculateDuration(e.start_date,e.end_date,e.unit,e.step)})},_calculateDuration:function(e,t,n,i){var r=0,s=1;if(e.valueOf()>t.valueOf()){var a=t;t=e,e=a,s=-1}return n=="hour"&&i==1?r=this._getHoursBetween(e,t,n,i):n=="minute"&&i==1?r=this._getMinutesBetween(e,t,n,i):r=this._getWorkUnitsBetweenGeneric(e,t,n,i),s*Math.round(r)},hasDuration:function(){var e=this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper,arguments),t=e.start_date,n=e.end_date,i=e.unit,r=e.step;if(!i)return!1;var s=new Date(t),a=new Date(n);for(r=r||1;s.valueOf()<a.valueOf();){if(this._isWorkTime(s,i))return!0;s=this._nextDate(s,i,r)}return!1},calculateEndDate:function(){var e=this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper,arguments),t=e.start_date,n=e.duration,i=e.unit,r=e.step;if(!i)return!1;var s=e.duration>=0?1:-1;n=Math.abs(n*1);var a=this;return this._dateDurationCache.getEndDate(t,n,i,r*s,function(){return a._calculateEndDate(t,n,i,r*s)})},_calculateEndDate:function(e,t,n,i){if(!n)return!1;if(i==1&&n=="minute")return this._calculateMinuteEndDate(e,t,i);if(i==-1&&n=="minute")return this._subtractMinuteDate(e,t,i);if(i==1&&n=="hour")return this._calculateHourEndDate(e,t,i);var r=this._addInterval(e,t,n,i,null);return r.end},_addInterval:function(e,t,n,i,r){for(var s=0,a=e;s<t&&!(r&&r(a));){var o=this._nextDate(a,n,i),c=new Date(o.valueOf()+1);i>0&&(c=new Date(o.valueOf()-1));var l=this._isWorkTime(c,n);l&&s++,a=o}return{end:a,start:e,added:s}},_addHoursUntilDayEnd:function(e,t){for(var n=this.$gantt.date.add(this.$gantt.date.day_start(new Date(e)),1,"day"),i=0,r=t,s=this._getIntervalTimestamp(e,n),a=this._getWorkHours(e),o=0;o<a.length&&i<t;o++){var c=a[o];if(s.end>=c.start&&s.start<=c.end){var l=Math.max(c.start,s.start),d=Math.min(c.end,s.end),u=(d-l)/3600;u>r&&(u=r,d=l+r*60*60);var f=Math.round((d-l)/3600);i+=f,r-=f,s.start=d}}var p=n;return i===t&&(p=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),0,0,s.start))),{added:i,end:p}},_calculateHourEndDate:function(e,t,n){var i=new Date(e),r=0;n=n||1,t=Math.abs(t*1);var s=this._addHoursUntilDayEnd(i,t);r=s.added,i=s.end;var a=t-r;if(a){for(var o=i;r<t;){var c=this._nextDate(o,"day",n);c.setUTCHours(0),c.setUTCMinutes(0),c.setUTCSeconds(0);var l=0;if(n>0?l=this.getHoursPerDay(new Date(c.valueOf()-1)):l=this.getHoursPerDay(new Date(c.valueOf()+1)),r+l>=t)break;r+=l,o=c}i=o}if(r<t){var a=t-r;s=this._addHoursUntilDayEnd(i,a),i=s.end}return i},_addMinutesUntilHourEnd:function(e,t){if(e.getUTCMinutes()===0)return{added:0,end:new Date(e)};for(var n=this.$gantt.date.add(this.$gantt.date.hour_start(new Date(e)),1,"hour"),i=0,r=t,s=this._getIntervalTimestamp(e,n),a=this._getWorkHours(e),o=0;o<a.length&&i<t;o++){var c=a[o];if(s.end>=c.start&&s.start<=c.end){var l=Math.max(c.start,s.start),d=Math.min(c.end,s.end),u=(d-l)/60;u>r&&(u=r,d=l+r*60);var f=Math.round((d-l)/60);r-=f,i+=f,s.start=d}}var p=n;return i===t&&(p=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),0,0,s.start))),{added:i,end:p}},_subtractMinutesUntilHourStart:function(e,t){for(var n=this.$gantt.date.hour_start(new Date(e)),i=0,r=t,s=n.getUTCHours()*60*60+n.getUTCMinutes()*60+n.getUTCSeconds(),a=e.getUTCHours()*60*60+e.getUTCMinutes()*60+e.getUTCSeconds(),o=this._getWorkHours(e),c=o.length-1;c>=0&&i<t;c--){var l=o[c];if(a>l.start&&s<=l.end){var d=Math.min(a,l.end),u=Math.max(s,l.start),f=(d-u)/60;f>r&&(f=r,u=d-r*60);var p=Math.abs(Math.round((d-u)/60));r-=p,i+=p,a=u}}var A=n;return i===t&&(A=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),0,0,a))),{added:i,end:A}},_subtractMinuteDate:function(e,t,n){var i=this.getClosestWorkTime({date:e,dir:"past",unit:"minute"}),r=0;n=n||-1,t=Math.abs(t*1),t=Math.round(t);let s=this._isMinutePrecision(i),a=this._subtractMinutesUntilHourStart(i,t);r+=a.added,i=a.end;for(var o=0,c=[],l=0;r<t;){var d=this.$gantt.date.day_start(new Date(i)),u=!1;i.valueOf()===d.valueOf()&&(d=this.$gantt.date.add(d,-1,"day"),u=!0);var f=new Date(Date.UTC(d.getUTCFullYear(),d.getUTCMonth(),d.getUTCDate(),23,59,59,999)).valueOf();f!==o&&(c=this._getWorkHours(d),l=this._getMinutesPerDay(d),o=f);var p=t-r,A=this._getTimeOfDayStamp(i,u);if(!c.length||!l){i=this.$gantt.date.add(i,-1,"day");continue}if(c[c.length-1].end<=A&&p>l){r+=l,i=this.$gantt.date.add(i,-1,"day");continue}for(var I=!1,S=null,T=null,g=c.length-1;g>=0;g--)if(c[g].start<A-1&&c[g].end>=A-1){I=!0,S=c[g],T=c[g-1];break}if(I)if(A===S.end&&p>=S.durationMinutes)r+=S.durationMinutes,i=this.$gantt.date.add(i,-S.durationMinutes,"minute");else if(!s&&p<=A/60-S.startMinute)r+=p,i=this.$gantt.date.add(i,-p,"minute");else if(s)p<=A/60-S.startMinute?(r+=p,i=this.$gantt.date.add(i,-p,"minute")):(r+=A/60-S.startMinute,T?i=new Date(Date.UTC(i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate(),0,0,T.end)):i=this.$gantt.date.day_start(i));else{var C=this._getMinutesPerHour(i);C<=p?(r+=C,i=this._nextDate(i,"hour",n)):(a=this._subtractMinutesUntilHourStart(i,p),r+=a.added,i=a.end)}else if(i.getUTCHours()===0&&i.getUTCMinutes()===0&&i.getUTCSeconds()===0){var m=this._getClosestWorkTimePast(i,"hour");if(m.valueOf()===i.valueOf()){var m=this.$gantt.date.add(i,-1,"day"),y=this._getWorkHours(m);if(y.length){var _=y[y.length-1];m.setUTCSeconds(_.durationSeconds)}}i=m}else i=this._getClosestWorkTimePast(new Date(i-1),"hour")}if(r<t){var P=t-r;a=this._subtractMinutesUntilHourStart(i,P),r+=a.added,i=a.end}return i},_calculateMinuteEndDate:function(e,t,n){var i=new Date(e),r=0;n=n||1,t=Math.abs(t*1),t=Math.round(t);var s=this._addMinutesUntilHourEnd(i,t);r+=s.added,i=s.end;for(var a=0,o=[],c=0,l=this._isMinutePrecision(i);r<t;){var d=this.$gantt.date.day_start(new Date(i)).valueOf();d!==a&&(o=this._getWorkHours(i),c=this._getMinutesPerDay(i),a=d);var u=t-r,f=this._getTimeOfDayStamp(i);if(!o.length||!c){i=this.$gantt.date.add(this.$gantt.date.day_start(i),1,"day");continue}if(o[0].start>=f&&u>=c){if(r+=c,u==c){i=new Date(Date.UTC(i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate(),0,0,o[o.length-1].end));break}else i=this.$gantt.date.add(i,1,"day"),i=this.$gantt.date.day_start(i);continue}for(var p=!1,A=null,I=0;I<o.length;I++)if(o[I].start<=f&&o[I].end>f){p=!0,A=o[I];break}if(p)if(f===A.start&&u>=A.durationMinutes)r+=A.durationMinutes,i=this.$gantt.date.add(i,A.durationMinutes,"minute");else if(u<=A.endMinute-f/60)r+=u,i=this.$gantt.date.add(i,u,"minute");else{var S=this._getMinutesPerHour(i);S<=u?(r+=S,l?i=this.$gantt.date.add(i,S,"minute"):i=this._nextDate(i,"hour",n)):(s=this._addMinutesUntilHourEnd(i,u),r+=s.added,i=s.end)}else i=this._getClosestWorkTimeFuture(i,"hour")}if(r<t){var T=t-r;s=this._addMinutesUntilHourEnd(i,T),r+=s.added,i=s.end}return i},getClosestWorkTime:function(){var e=this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper,arguments);return this._getClosestWorkTime(e.date,e.unit,e.dir)},_getClosestWorkTime:function(e,t,n){var i=new Date(e);if(this._isWorkTime(i,t))return i;if(i=this.$gantt.date[t+"_start"](i),n=="any"||!n){var r=this._getClosestWorkTimeFuture(i,t),s=this._getClosestWorkTimePast(i,t);Math.abs(r-e)<=Math.abs(e-s)?i=r:i=s}else n=="past"?i=this._getClosestWorkTimePast(i,t):i=this._getClosestWorkTimeFuture(i,t);return i},_getClosestWorkTimeFuture:function(e,t){return this._getClosestWorkTimeGeneric(e,t,1)},_getClosestWorkTimePast:function(e,t){var n=this._getClosestWorkTimeGeneric(e,t,-1);return this.$gantt.date.add(n,1,t)},_findClosestTimeInDay:function(e,t,n){var i=new Date(e),r=null,s=!1;this._getWorkHours(i).length||(i=this._getClosestWorkTime(i,"day",t<0?"past":"future"),t<0&&(i=new Date(i.valueOf()-1),s=!0),n=this._getWorkHours(i));var a=this._getTimeOfDayStamp(i);if(s&&(a=this._getTimeOfDayStamp(new Date(i.valueOf()+1),s)),t>0){for(var o=0;o<n.length;o++)if(n[o].start>=a){r=new Date(Date.UTC(i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate(),0,0,n[o].start));break}}else for(var o=n.length-1;o>=0;o--)if(n[o].end<=a){r=new Date(Date.UTC(i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate(),0,0,n[o].end));break}else if(n[o].end>a&&n[o].start<=a){r=new Date(Date.UTC(i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate(),0,0,a));break}return r},_getClosestWorkMinute:function(e,t,n){var i=new Date(e),r=this._getWorkHours(i),s=this._findClosestTimeInDay(i,n,r);return s||(n>0?(i=this.calculateEndDate(i,n,t),i=this.$gantt.date.day_start(i)):(i=this.calculateEndDate(i,n,"day"),i=this.$gantt.date.day_start(i),i=this.$gantt.date.add(i,1,"day"),i=new Date(i.valueOf()-1)),r=this._getWorkHours(i),s=this._findClosestTimeInDay(i,n,r)),n<0&&(s=this.$gantt.date.add(s,-1,t)),s},_getClosestWorkTimeGeneric:function(e,t,n){if(t==="hour"||t==="minute")return this._getClosestWorkMinute(e,t,n);for(var i=this._getUnitOrder(t),r=this.units[i-1],s=e,a=3e3,o=0;!this._isWorkTime(s,t)&&!(r&&!this._isWorkTime(s,r)&&(n>0?s=this._getClosestWorkTimeFuture(s,r):s=this._getClosestWorkTimePast(s,r),this._isWorkTime(s,t)));){if(o++,o>a)return this.$gantt.assert(!1,"Invalid working time check"),!1;s=this.$gantt.date.add(s,n,t),this.$gantt.date[t+"_start"]&&(s=this.$gantt.date[t+"_start"](s))}return s},hasWorkTime:function(){var e=this.getConfig(),t=e.dates,n=[0,1,2,3,4,5,6];for(var i in e.dates);var r=this._checkWorkHours(e.hours),s=!1;return n.forEach((function(a){if(!s){var o=t[a];o===!0?s=r:Array.isArray(o)&&(s=this._checkWorkHours(o))}}).bind(this)),s},_checkWorkHours:function(e){if(e.length===0)return!1;for(var t=!1,n=0;n<e.length;n+=2)e[n]!==e[n+1]&&(t=!0);return t},_isMinutePrecision:function(e){let t=!1;return this._getWorkHours(e).forEach(function(n){(n.startMinute%60||n.endMinute%60)&&(t=!0)}),t}};var Fe={isLegacyResourceCalendarFormat:function(e){if(!e)return!1;for(var t in e)if(e[t]&&typeof e[t]=="object")return!0;return!1},getResourceProperty:function(e){var t=e.resource_calendars,n=e.resource_property;if(this.isLegacyResourceCalendarFormat(t))for(var i in e){n=i;break}return n},getCalendarIdFromLegacyConfig:function(e,t){if(t)for(var n in t){var i=t[n];if(e[n]){var r=i[e[n]];if(r)return r}}return null}};function Hp(){function e(r){return r.map(function(s){return s&&s.resource_id?s.resource_id:s}).sort().join("-")}var t={};function n(r,s){return s.mergeCalendars(r.map(function(a){var o=a&&a.resource_id?a.resource_id:a;return s.getResourceCalendar(o)}))}function i(r,s){var a=e(r);if(r.length){if(r.length===1)return s.getResourceCalendar(a).id;if(t[a])return t[a].id;var o=n(r,s);return t[a]=o,s.addCalendar(o)}else return null}return{getCalendarIdFromMultipleResources:i}}var $p=Hp();function Wc(e){this.$gantt=e,this._calendars={},this._legacyConfig=void 0,this.$gantt.attachEvent("onGanttReady",(function(){this.$gantt.config.resource_calendars&&(this._isLegacyConfig=Fe.isLegacyResourceCalendarFormat(this.$gantt.config.resource_calendars))}).bind(this)),this.$gantt.attachEvent("onBeforeGanttReady",(function(){this.createDefaultCalendars()}).bind(this)),this.$gantt.attachEvent("onBeforeGanttRender",(function(){this.createDefaultCalendars()}).bind(this))}Wc.prototype={_calendars:{},_convertWorkTimeSettings:function(e){let t=e.days;if(typeof t=="object"&&!Array.isArray(t)&&t!==null){let n={};if(t?.weekdays)for(let i=0;i<7;i++)n[i]=t.weekdays[i];t?.dates&&Object.entries(t.dates).forEach(([i,r])=>{n[new Date(i).valueOf()]=r}),Object.entries(n).forEach(([i,r])=>{r instanceof Array||(n[i]=!!r)}),e={...e,dates:n}}else if(t&&!e.dates){e.dates=e.dates||{};for(let n=0;n<t.length;n++)e.dates[n]=t[n],t[n]instanceof Array||(e.dates[n]=!!t[n])}return delete e.days,e},mergeCalendars:function(){var e=[],t=arguments;if(Array.isArray(t[0]))e=t[0].slice();else for(var n=0;n<arguments.length;n++)e.push(arguments[n]);var i=new Mc,r;return e.forEach((function(s){r?r=this._createCalendarFromConfig(i.merge(r,s)):r=s}).bind(this)),this.createCalendar(r)},_createCalendarFromConfig:function(e){var t=new Tr(this.$gantt,Fc(this.$gantt));t.id=String(gr());var n=this._convertWorkTimeSettings(e);if(n.customWeeks)for(var i in n.customWeeks)n.customWeeks[i]=this._convertWorkTimeSettings(n.customWeeks[i]);return t._setConfig(n),t},createCalendar:function(e){var t;e||(e={}),e.getConfig?t=vt(e.getConfig()):e.worktime?t=vt(e.worktime):t=vt(e);var n=vt(this.defaults.fulltime.worktime);return ve(t,n),this._createCalendarFromConfig(t)},getCalendar:function(e){e=e||"global";var t=this._calendars[e];return t||(this.createDefaultCalendars(),t=this._calendars[e]),t},getCalendars:function(){var e=[];for(var t in this._calendars)e.push(this.getCalendar(t));return e},_getOwnCalendar:function(e){var t=this.$gantt.config;if(e[t.calendar_property])return this.getCalendar(e[t.calendar_property]);if(t.resource_calendars){var n,i,r;if(this._legacyConfig===!1?r=t.resource_property:r=Fe.getResourceProperty(t),Array.isArray(e[r])&&e[r].length)t.dynamic_resource_calendars?i=$p.getCalendarIdFromMultipleResources(e[r],this):n=this.getResourceCalendar(e[r]);else if(this._legacyConfig===void 0&&(this._legacyConfig=Fe.isLegacyResourceCalendarFormat(t.resource_calendars)),this._legacyConfig)var i=Fe.getCalendarIdFromLegacyConfig(e,t.resource_calendars);else if(r&&e[r]&&t.resource_calendars[e[r]])var n=this.getResourceCalendar(e[r]);if(i&&(n=this.getCalendar(i)),n)return n}return null},getResourceCalendar:function(e){if(e==null)return this.getCalendar();var t=null;typeof e=="number"||typeof e=="string"?t=e:t=e.id||e.key;var n=this.$gantt.config,i=n.resource_calendars,r=null;if(Array.isArray(e)&&e.length===1&&(typeof e[0]=="object"?t=e[0].resource_id:t=e[0]),i){if(this._legacyConfig===void 0&&(this._legacyConfig=Fe.isLegacyResourceCalendarFormat(n.resource_calendars)),this._legacyConfig){for(var s in i)if(i[s][t]){r=i[s][t];break}}else var r=i[t];if(r)return this.getCalendar(r)}return this.getCalendar()},getTaskCalendar:function(e){var t=this.$gantt,n;if(e==null)return this.getCalendar();if((typeof e=="number"||typeof e=="string")&&t.isTaskExists(e)?n=t.getTask(e):n=e,!n)return this.getCalendar();var i=this._getOwnCalendar(n),r=!!t.getState().group_mode;if(!i&&t.config.inherit_calendar&&t.isTaskExists(n.parent)){for(var s=n;t.isTaskExists(s.parent)&&(s=t.getTask(s.parent),!(t.isSummaryTask(s)&&(i=this._getOwnCalendar(s),i))););r&&!i&&e.$effective_calendar&&(i=this.getCalendar(e.$effective_calendar))}return i||this.getCalendar()},addCalendar:function(e){if(!this.isCalendar(e)){var t=e.id;e=this.createCalendar(e),e.id=t}if(e._tryChangeCalendarSettings(function(){})){var n=this.$gantt.config;return e.id=e.id||gr(),this._calendars[e.id]=e,n.worktimes||(n.worktimes={}),n.worktimes[e.id]=e.getConfig(),e.id}else return this.$gantt.callEvent("onCalendarError",[{message:"Invalid calendar settings, no worktime available"},e]),null},deleteCalendar:function(e){var t=this.$gantt.config;return e&&this._calendars[e]?(delete this._calendars[e],t.worktimes&&t.worktimes[e]&&delete t.worktimes[e],!0):!1},restoreConfigCalendars:function(e){for(var t in e)if(!this._calendars[t]){var n=e[t],i=this.createCalendar(n);i.id=t,this.addCalendar(i)}},defaults:{global:{id:"global",worktime:{hours:[8,12,13,17],days:[0,1,1,1,1,1,0]}},fulltime:{id:"fulltime",worktime:{hours:[0,24],days:[1,1,1,1,1,1,1]}}},createDefaultCalendars:function(){var e=this.$gantt.config;this.restoreConfigCalendars(this.defaults),this.restoreConfigCalendars(e.worktimes)},isCalendar:function(e){var t=[e.isWorkTime,e.setWorkTime,e.getWorkHours,e.unsetWorkTime,e.getClosestWorkTime,e.calculateDuration,e.hasDuration,e.calculateEndDate];return t.every(function(n){return n instanceof Function})}};function Dr(e,t){this.argumentsHelper=t,this.$gantt=e}Dr.prototype={getWorkHours:function(){return[0,24]},setWorkTime:function(){return!0},unsetWorkTime:function(){return!0},isWorkTime:function(){return!0},getClosestWorkTime:function(t){var t=this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper,arguments);return t.date},calculateDuration:function(){var e=this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper,arguments),t=e.start_date,n=e.end_date,i=e.unit,r=e.step;return this._calculateDuration(t,n,i,r)},_calculateDuration:function(e,t,n,i){var r=this.$gantt.date,s={week:1e3*60*60*24*7,day:1e3*60*60*24,hour:1e3*60*60,minute:1e3*60},a=0;if(s[n])a=Math.round((t-e)/(i*s[n]));else{for(var o=new Date(e),c=new Date(t);o.valueOf()<c.valueOf();)a+=1,o=r.add(o,i,n);o.valueOf()!=t.valueOf()&&(a+=(c-o)/(r.add(o,i,n)-o))}return Math.round(a)},hasDuration:function(){var e=this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper,arguments),t=e.start_date,n=e.end_date,i=e.unit;return i?(t=new Date(t),n=new Date(n),t.valueOf()<n.valueOf()):!1},hasWorkTime:function(){return!0},equals:function(e){return e instanceof Dr},calculateEndDate:function(){var e=this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper,arguments),t=e.start_date,n=e.duration,i=e.unit,r=e.step;return this.$gantt.date.add(t,r*n,i)}};function Uc(e){this.$gantt=e.$gantt,this.argumentsHelper=Fc(this.$gantt),this.calendarManager=e,this.$disabledCalendar=new Dr(this.$gantt,this.argumentsHelper)}Uc.prototype={_getCalendar:function(e){var t;if(!this.$gantt.config.work_time)t=this.$disabledCalendar;else{var n=this.calendarManager;e.task?t=n.getTaskCalendar(e.task):e.id?t=n.getTaskCalendar(e):e.calendar&&(t=e.calendar),t||(t=n.getTaskCalendar())}return t},getWorkHours:function(e){e=this.argumentsHelper.getWorkHoursArguments.apply(this.argumentsHelper,arguments);var t=this._getCalendar(e);return t.getWorkHours(e.date)},setWorkTime:function(e,t){return e=this.argumentsHelper.setWorkTimeArguments.apply(this.argumentsHelper,arguments),t||(t=this.calendarManager.getCalendar()),t.setWorkTime(e)},unsetWorkTime:function(e,t){return e=this.argumentsHelper.unsetWorkTimeArguments.apply(this.argumentsHelper,arguments),t||(t=this.calendarManager.getCalendar()),t.unsetWorkTime(e)},isWorkTime:function(e,t,n,i){var r=this.argumentsHelper.isWorkTimeArguments.apply(this.argumentsHelper,arguments);return i=this._getCalendar(r),i.isWorkTime(r)},getClosestWorkTime:function(e){e=this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper,arguments);var t=this._getCalendar(e);return t.getClosestWorkTime(e)},calculateDuration:function(){var e=this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper,arguments),t=this._getCalendar(e);return t.calculateDuration(e)},hasDuration:function(){var e=this.argumentsHelper.hasDurationArguments.apply(this.argumentsHelper,arguments),t=this._getCalendar(e);return t.hasDuration(e)},calculateEndDate:function(t){var t=this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper,arguments),n=this._getCalendar(t);return n.calculateEndDate(t)}};var Yp=function(e,t){return{getWorkHours:function(n){return t.getWorkHours(n)},setWorkTime:function(n){return t.setWorkTime(n)},unsetWorkTime:function(n){t.unsetWorkTime(n)},isWorkTime:function(n,i,r){return t.isWorkTime(n,i,r)},getClosestWorkTime:function(n){return t.getClosestWorkTime(n)},calculateDuration:function(n,i,r){return t.calculateDuration(n,i,r)},_hasDuration:function(n,i,r){return t.hasDuration(n,i,r)},calculateEndDate:function(n,i,r,s){return t.calculateEndDate(n,i,r,s)},mergeCalendars:dt(e.mergeCalendars,e),createCalendar:dt(e.createCalendar,e),addCalendar:dt(e.addCalendar,e),getCalendar:dt(e.getCalendar,e),getCalendars:dt(e.getCalendars,e),getResourceCalendar:dt(e.getResourceCalendar,e),getTaskCalendar:dt(e.getTaskCalendar,e),deleteCalendar:dt(e.deleteCalendar,e)}},Vp={create:Yp};function Bc(e){var t=new Wc(e),n=new Uc(t),i=Vp.create(t,n);ve(e,i)}var jc={date:{month_full:["January","February","March","April","May","June","July","August","September","October","November","December"],month_short:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],day_full:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],day_short:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},labels:{}};function Hc(e={}){let t=e.config||{},n={config:Object.assign({duration_unit:"hour",duration_step:1,work_time:!1,worktimes:{},work_days:null,inherit_calendar:!1,calendar_property:"calendar_id",resource_property:"resource_id",resource_calendars:{},dynamic_resource_calendars:!1,start_on_monday:!0,server_utc:!0,csp:"auto",show_errors:!1},t),locale:e.locale||jc,templates:e.templates||{},getTask:e.getTask||function(i){return null},isTaskExists:e.isTaskExists||function(i){return!1},isSummaryTask:e.isSummaryTask||function(i){return!1},getState:function(){return{group_mode:!1}},callEvent:function(i,r){let s=e.onEvent;return s&&s(i,r),!0},attachEvent:function(){return 0},checkEvent:function(){return!1},detachEvent:function(){},defined:Oc,mixin:ve,copy:vt,assert:function(i,r){if(!i){if(e.throwOnAssert)throw new Error("[calendar] "+r);e.silent!==!0&&console.error("[calendar]",r)}},$services:{getService:function(){return null}},$ui:{getView:function(){return null}}};return n._correct_dst_change=function(i){return i},n.date=xc(n),n.date.init(),Bc(n),n}function Gp(e={}){let t=Hc(e);return{addCalendar:function(n){return t.addCalendar(n)},deleteCalendar:function(n){return t.deleteCalendar(n)},getCalendar:function(n){return t.getCalendar(n)},getCalendars:function(){return t.getCalendars()},mergeCalendars:function(){return t.mergeCalendars.apply(t,arguments)},getTaskCalendar:function(n){return t.getTaskCalendar(n)},getResourceCalendar:function(n){return t.getResourceCalendar(n)},setWorkTime:function(n){return t.setWorkTime(n)},unsetWorkTime:function(n){return t.unsetWorkTime(n)},isWorkTime:function(){return t.isWorkTime.apply(t,arguments)},getClosestWorkTime:function(){return t.getClosestWorkTime.apply(t,arguments)},getWorkHours:function(){return t.getWorkHours.apply(t,arguments)},calculateDuration:function(){return t.calculateDuration.apply(t,arguments)},calculateEndDate:function(){return t.calculateEndDate.apply(t,arguments)},_internals:t}}var $c={createCalendar:Gp};var JR=3600*1e3;function Vc(e){return{getActivity(t){let n=e.getActivity(t);return n?Kp(n,e):null}}}function Kp(e,t){let n=t.getChildren(e.id).length>0;return{id:String(e.id),text:String(e.text??""),description:String(e.description??""),type:e.type??"task",start_date:e.start_date,end_date:e.end_date,duration:Number(e.duration??0),progress:Number(e.progress??0),constraint_type:e.constraint_type??"asap",constraint_date:e.constraint_date??null,calendar_id:String(e.calendar_id??""),cost:Number(e.cost??0),used_cost:Number(e.used_cost??0),hhWorkTime:Number(e.hhWorkTime??0),ponderator:Number(e.ponderator??0),auto_scheduling:!!(e.auto_scheduling??!0),hasChildren:n,hasLookaheadTasks:Array.isArray(e.tasks)&&e.tasks.length>0,isMilestone:e.type==="milestone",real_constraint_type:e.real_constraint_type??null,last_constraint:e.last_constraint??null,last_constraint_date:e.last_constraint_date??null,last_start_date:e.last_start_date??null,date_origin:e.date_origin??null}}var{createCalendar:qp}=$c,Me="__replay_default__";function zp(e){if(!e||e.length===0||typeof e[0]=="string")return e;let t=e.map(Number);if(t.some(s=>Number.isNaN(s)))return e;let n=t[0],i=t[t.length-1];return t.every((s,a)=>s===n+a)?[`${n}:00-${i+1}:00`]:e}var Yc={hours:["8:00-16:00"],days:[!1,!0,!0,!0,!0,!0,!1]};function Jp(e){let t={};if(Array.isArray(e.days))for(let i=0;i<e.days.length;i+=1)t[i]=e.days[i];if(e.dates)for(let[i,r]of Object.entries(e.dates))t[i]=r;let n={hours:zp(e.hours),dates:t};return e.customWeeks&&(n.customWeeks=e.customWeeks),n}function Gc(e){let t=qp({config:{work_time:!0}});t.addCalendar({id:Me,worktime:Yc});for(let o of e)t.addCalendar({id:o.id,worktime:o.worktime?Jp(o.worktime):Yc});let n=bc(t),i=n.getCalendar(Me);if(!i)throw new Error("[replay-calendar] default calendar failed to register in work-calendar instance");let r=new Set([Me]);for(let o of e)r.add(String(o.id));let s=new Map;return{reader:{getCalendar(o){let c=String(o),l=s.get(c);if(l)return l;let d=r.has(c)?n.getCalendar(o)??i:i;return s.set(c,d),d}}}}function Kc(e){return{getParentStartDateIfHasPredecessors(t){let n=e.getActivity(t);if(!n)return null;let i=e.getParent(n.id);return!i||i.$target.length===0?null:i.start_date},getDescendantIds(t){return Xp(e,t).map(n=>String(n))},getAncestorIds(t){let n=[],i=e.getActivity(t);for(;i;){let r=i.parent;if(!r||r==="0")break;let s=e.getActivity(r);if(!s)break;n.push(String(r)),i=s}return n},getChildProgressInfo(t){return e.getChildren(t).map(i=>{let r=e.getActivity(i);return{id:i,progress:Number(r?.progress??0),ponderator:Number(r?.ponderator??0)}})},getChildHhInfo(t){return e.getChildren(t).map(i=>{let r=e.getActivity(i);return{id:i,hhWorkTime:Number(r?.hhWorkTime??0),progress:Number(r?.progress??0)}})},getChildUsedCostInfo(t){return e.getChildren(t).map(i=>{let r=e.getActivity(i);return{id:i,used_cost:Number(r?.used_cost??0)}})},getChildCostInfo(t){return e.getChildren(t).map(i=>{let r=e.getActivity(i);return{id:i,cost:Number(r?.cost??0)}})}}}function Xp(e,t){let n=[],i=new ut;for(let r of e.getChildren(t))i.enqueue(r);for(;!i.isEmpty();){let r=i.dequeue();n.push(r);for(let s of e.getChildren(r))i.enqueue(s)}return n}function qc(e,t={}){return{calendars:e.calendarReader,hierarchy:Kc(e),activityReader:Vc(e),dateFormat:t.dateFormat??"YYYY-MM-DD",customHours:t.customHours??{},hoursPerDay:t.hoursPerDay??8,inputUnit:t.inputUnit??"days"}}function zc(e){return Ne(e)}function Er(e,t,n,i,r){return{changeSet:e,beforeSnap:t,beforeLinks:n,afterSnap:i,afterLinks:r}}function Xc(e,t){let n=new Map,i=new Map;for(let r of t.activities){if(r.kind!=="created")continue;let s=e.getActivity(String(r.id));s&&n.set(String(r.id),Z(s))}for(let r of t.links){if(r.kind!=="created")continue;let s=e.getLink(String(r.id));s&&i.set(String(r.id),{...s})}return{afterSnap:n,afterLinks:i}}function Zc(e){return e.kind!=="inline-edit"||!we.has(e.column)?null:`inline-edit:${String(e.activityId)}:${e.column}`}function Jc(e){return e.changeSet.activities.length===1&&e.changeSet.activities[0]?.kind==="updated"&&e.changeSet.links.length===0&&!e.beforeSnap?.size&&!e.afterSnap?.size}function Qc(e,t){if(!Jc(e)||!Jc(t))return!1;let n=e.changeSet.activities[0],i=t.changeSet.activities[0];return!!n&&!!i&&String(n.id)===String(i.id)}function tl(e,t){let n=e.changeSet.activities[0],i=t.changeSet.activities[0];if(!n||!i)return t;let r=n.fields??{},s=i.fields??{},a={};for(let c of new Set([...Object.keys(r),...Object.keys(s)])){let l=r[c],d=s[c];a[c]={before:l?l.before:d?.before,after:d?d.after:l?.after}}let o={...t.changeSet,activities:[{...i,fields:a}]};return Er(o)}function el(e){return e.kind!=="selection-toggle"&&e.kind!=="selection-replace"&&e.kind!=="visibility-set"&&e.kind!=="sir-sync"}function Pr(e){for(let t of e.changeSet.activities)if(t.kind==="created"||t.kind==="deleted"||t.kind==="updated"&&t.fields&&v.CUSTOM_ID in t.fields)return!0;return!1}function Rr(e,t,n){let i=[],r=[];for(let s of t.changeSet.activities){let a=String(s.id);if(s.kind==="updated"){let o=e.getActivity(a);i.push({id:a,kind:"updated",after:o?X(o):null})}else if(s.kind==="deleted")if(n==="before"){let o=e.getActivity(a);i.push({id:a,kind:"created",after:o?X(o):null})}else i.push({id:a,kind:"deleted",after:null});else if(n==="before")i.push({id:a,kind:"deleted",after:null});else{let o=e.getActivity(a);i.push({id:a,kind:"created",after:o?X(o):null})}}for(let s of t.changeSet.links){let a=String(s.id);if(s.kind==="updated"){let o=e.getLink(a);r.push({id:a,kind:"updated",after:o?gt(o):null})}else if(s.kind==="deleted")if(n==="before"){let o=e.getLink(a);r.push({id:a,kind:"created",after:o?gt(o):null})}else r.push({id:a,kind:"deleted",after:null});else if(n==="before")r.push({id:a,kind:"deleted",after:null});else{let o=e.getLink(a);r.push({id:a,kind:"created",after:o?gt(o):null})}}return{source:{kind:n==="before"?"undo":"redo"},activities:i,links:r,calendars:[],trackingEvents:[],effects:[]}}function nl(e){return e.activities.length>0||e.links.length>0||(e.effects?.length??0)>0}function il(e,t){sl(e,t,"before")}function rl(e,t){sl(e,t,"after")}function sl(e,t,n){let i=t.changeSet;for(let r of i.activities)if(r.kind==="updated"){if(!r.fields)continue;for(let[s,a]of Object.entries(r.fields))V(e,r.id,s,n==="before"?a.before:a.after)}else if(r.kind==="deleted")if(n==="before"){let s=t.beforeSnap?.get(String(r.id));if(!s)throw new Error(`undo: missing beforeSnap for resurrecting activity ${r.id}`);e.addActivity(Z(s))}else e.removeActivity(String(r.id));else if(n==="before")e.removeActivity(String(r.id));else{let s=t.afterSnap?.get(String(r.id));if(!s)throw new Error(`redo: missing afterSnap for re-creating activity ${r.id}`);e.addActivity(Z(s))}for(let r of i.links)if(r.kind==="updated"){if(!r.fields)continue;for(let[s,a]of Object.entries(r.fields))ba(e,String(r.id),s,n==="before"?a.before:a.after)}else if(r.kind==="deleted")if(n==="before"){let s=t.beforeLinks?.get(String(r.id));if(!s)throw new Error(`undo: missing beforeLinks for re-adding link ${r.id}`);e.addLink(s)}else e.removeLink(String(r.id));else if(n==="before")e.removeLink(String(r.id));else{let s=t.afterLinks?.get(String(r.id));if(!s)throw new Error(`redo: missing afterLinks for re-creating link ${r.id}`);e.addLink(s)}}var Zp=100,Qp=600,Jn=class{constructor(t=Zp){this.maxDepth=t}maxDepth;undoStack=[];redoStack=[];_lastKey=null;_lastTime=0;record(t,n=null,i=0){let r=this.undoStack[this.undoStack.length-1];n!=null&&n===this._lastKey&&i-this._lastTime<=Qp&&r!==void 0&&Qc(r,t)?this.undoStack[this.undoStack.length-1]=tl(r,t):(this.undoStack.push(t),this.undoStack.length>this.maxDepth&&this.undoStack.shift()),this._lastKey=n,this._lastTime=i,this.redoStack.length=0}resetCoalesce(){this._lastKey=null}takeUndo(){return this.undoStack.pop()??null}takeRedo(){return this.redoStack.pop()??null}pushRedo(t){this.redoStack.push(t)}pushUndo(t){this.undoStack.push(t)}canUndo(){return this.undoStack.length>0}canRedo(){return this.redoStack.length>0}undoDepth(){return this.undoStack.length}clear(){this.undoStack.length=0,this.redoStack.length=0}};var th=new Set(["baseline_points","tasks","baselineObject","activityModifications","color","freeSlack","totalSlack","custom_predecessors","custom_sucessors","start_base","work_base","cost_base","duration_base","$effective_calendar","checked","visibleChecked","mustApplyVisibleChecked","earlyStart","earlyFinish","lateStart","lateFinish","is_critical"]);function al(e,t){if(e.assignedDefaultCalendar)return!0;for(let[n,i]of Object.entries(e)){if(th.has(n))continue;let r=t[n];if(i instanceof Date){if(!(r instanceof Date)||i.getTime()!==r.getTime())return!0}else if(i!==r)return!0}return!1}var Xn=class{initialized=!1;linksAtLastSave=new Map;activitiesAtLastSave=new Map;init(t,n){this.snapshotActivities(t),this.snapshotLinks(n),this.initialized=!0}snapshotActivities(t){this.activitiesAtLastSave.clear();for(let n of t)n.proplannerId!=null&&this.activitiesAtLastSave.set(String(n.id),n)}snapshotLinks(t){this.linksAtLastSave.clear();for(let n of t)n.proplannerId!=null&&this.linksAtLastSave.set(String(n.id),{lag:n.lag,type:n.type})}modifiedActivities(t){return this.initialized?t.filter(n=>{if(n.proplannerId==null)return!1;if(n.assignedDefaultCalendar)return!0;let i=this.activitiesAtLastSave.get(String(n.id));return i?al(n,i):!0}):[]}modifiedLinks(t){return this.initialized?t.filter(n=>{if(n.proplannerId==null)return!1;let i=this.linksAtLastSave.get(String(n.id));return i?n.lag!==i.lag||n.type!==i.type:!0}):[]}clear(){this.linksAtLastSave.clear(),this.activitiesAtLastSave.clear()}};var ol=/^(\d{4})[/-](\d{1,2})[/-](\d{1,2})/;var cl="9:00-17:00",Lr=[!1,!0,!0,!0,!0,!0,!1],ll=new Set(["1","true"]),br="DURATION",dl=new Set(["DURATION","COST","HH"]),ul="asap";function Qn(e,t=ne){let n=oh(e.sector),r=((e.calendars&&e.calendars.length>0?e.calendars:e.sector.calendars)??[]).map(ml),s=new Set(r.map(f=>f.id)),a=ih(r),o=(e.baseCalendars??[]).map(nh),c=e.activities.map(f=>{let p=kh(f,s,a,t);return p.for_disable_milestone_duration=Math.round(Number(p.duration)*n.hoursPerDay),p}),l=c.find(f=>f.correlative_id===0&&f.type==="project");l&&(l.parent="0");let d=new Set(c.map(f=>f.id));Ph(c,d,t);let u=sh(e.links,d,n.hoursPerDay,t);return{sector:n,activities:c,links:u,calendars:r,baseCalendars:o}}function nh(e){let n={...e,exceptiondays:e.baseexceptiondays??e.exceptiondays??[],id:`${e.id}-base`,baseDefault:!!e.is_default,is_default:!1};return ml(n)}function ih(e){let t=e.find(i=>i.is_default);if(t)return t.id;let n=e[0];return n?n.id:null}function rh(e,t,n){if(e==null)return n;let i=String(e);return t.has(i)?i:n}function sh(e,t,n,i){let r=[];for(let s of e)try{r.push(Rh(s,t,n))}catch(a){i.warn("[parseFromBackend] dropping invalid link",a)}return ah(r)}function ah(e){let t=new Map;for(let n of e){let i=`${n.source}-${n.target}-${n.type}`,r=t.get(i);(!r||fl(n)>fl(r))&&t.set(i,n)}return[...t.values()]}function fl(e){let t=Number(e.id);return Number.isFinite(t)?t:-1/0}function oh(e){let t=e,n=typeof t.custom_id_prefix=="string"&&t.custom_id_prefix.length>0?t.custom_id_prefix:void 0,i=t.custom_id_increment,r=typeof i=="string"?i:typeof i=="number"&&Number.isFinite(i)?String(i):void 0;return{id:String(e.id),name:e.name,hoursPerDay:e.hoursPerDay,hoursPerWeek:e.hoursPerWeek,dateFormat:e.dateFormat,projectId:e.projectId,companyId:e.companyId,...n!==void 0?{customIdPrefix:n}:{},...r!==void 0?{customIdIncrement:r}:{},...e.update_duration_for_primavera_for_end_date===!0?{updateDurationForPrimaveraEndDate:!0}:{},activityCreter:lh(t.activity_creter),statusCriteria:gi}}function ch(e){return e===0}function lh(e){if(typeof e!="string")return br;let t=e.toUpperCase();return dl.has(t)?t:br}function ml(e){let t=yh(e.working_days),{days:n,hours:i}=hh(e,t),r=dh(e.exceptiondays),s={days:n,hours:i};r&&(s.dates=r);let a=e.baseDefault;return{id:String(e.id),name:e.name,is_default:!!e.is_default,...typeof a=="boolean"?{baseDefault:a}:{},worktime:s}}function dh(e){if(!Array.isArray(e)||e.length===0)return null;let t={};for(let n of e){if(!n)continue;let i=uh(n.from_date,n.to_date);if(i.length===0)continue;let r=fh(n);if(r!==void 0)for(let s of i)t[s]=r}return Object.keys(t).length>0?t:null}function uh(e,t){let n=pl(e),i=pl(t);if(n===null||i===null)return[];let r=[],s=n;for(;s<=i;)r.push(String(s)),s+=864e5;return r}function pl(e){if(typeof e!="string")return null;let t=ol.exec(e.trim());if(!t)return null;let n=Number(t[1]),i=Number(t[2]),r=Number(t[3]);return!Number.isFinite(n)||!Number.isFinite(i)||!Number.isFinite(r)?null:Date.UTC(n,i-1,r)}function fh(e){if(e.workable===!1)return!1;let t=e.shifts;if(Array.isArray(t)&&t.length>0){let n=ph(t);if(n.length>0)return n}}function ph(e){let t=[];for(let n of e){let i=Al(n?.shift_string);if(!i)continue;if(!i.startsCsv.includes(",")&&!i.endsCsv.includes(",")){let a=i.startsCsv.trim(),o=i.endsCsv.trim();!Zn(a)&&!Zn(o)&&hl.test(a)&&hl.test(o)&&t.push(`${a}-${o}`);continue}let s=vl(i.startsCsv,i.endsCsv).find(a=>a!==null);s&&t.push(s)}return t.sort(gl),t}var hl=/^\d{1,2}:\d{2}$/;function yl(e){let t=e.indexOf("-"),n=t>0?e.slice(0,t):e,[i,r]=n.split(":");return(Number(i)||0)*60+(Number(r)||0)}function gl(e,t){return yl(e)-yl(t)}function hh(e,t){let n=Array.from({length:7},()=>[]),i=(o,c)=>{let l=vl(o,c);for(let d=0;d<7;d+=1){let u=l[d],f=n[d];u&&f&&f.push(u)}};if(Array.isArray(e.shifts)&&e.shifts.length>0)for(let o of e.shifts){let c=Al(o?.shift_string);c&&i(c.startsCsv,c.endsCsv)}else typeof e.shift_start=="string"&&typeof e.shift_end=="string"&&i(e.shift_start,e.shift_end);for(let o of n)o.sort(gl);let r=n.find((o,c)=>!!t[c]&&o.length>0),s=r&&r.length>0?r:[cl];return{days:t.map((o,c)=>{if(!o)return!1;let l=n[c];return l&&l.length>0?l:s}),hours:s}}function vl(e,t){let n=Array.from({length:7},()=>null);if(typeof e!="string"||typeof t!="string")return n;let i=e.split(",").map(a=>a.trim()),r=t.split(",").map(a=>a.trim());if(i.length!==r.length||i.length===0||i.length>7)return n;let s=[...n];for(let a=0;a<i.length;a+=1){let o=i[a],c=r[a];Zn(o)||Zn(c)||(s[a]=`${o}-${c}`)}return s}function Al(e){if(typeof e!="string")return null;let t=e.indexOf("-");return t<=0?null:{startsCsv:e.slice(0,t),endsCsv:e.slice(t+1)}}function yh(e){if(typeof e!="string")return[...Lr];let t=e.split(",").map(n=>n.trim());return t.length!==7?[...Lr]:t.map(n=>ll.has(n))}var mh=new Set(["false","null"]);function Zn(e){return!e||mh.has(e)}var gh=new Set(["unique_correlative_id","ganttId","sectorId","companyId","subcontractId","subcontract","custom_id","hasCustomPonderator","has_childs","sumOfDurationRecursively","freeSlack","is_critical","hasNewActivities","isNewActivity","date_origin","baseline_points","tasks","responsables","tags","createdAt","updatedAt"]);function vh(e){return typeof e.id=="number"?{proplannerId:e.id}:{}}function Ah(e){let t={};for(let n of gh)n in e&&(t[n]=e[n]);return t}function Ch(e,t){let n=Eh(e.constraint,t),r=n!=="asap"&&n!=="alap"&&e.constraint_date?Dt(e.constraint_date):null;return{constraint_type:n,constraint_date:r}}function Sh(e){let t=Dt(e.start_date),n=e.type==="milestone";return{start_date:t,end_date:n?t:Dt(e.end_date),duration:n?0:Number(e.duration)}}function _h(e){let t=e.type==="milestone";return{old_progress_registered:Number(e.progress),old_duration_registered:t?0:Number(e.duration),old_cost_registered:Number(e.cost),old_used_cost_registered:Number(e.used_cost??0),old_real_cost_registered:Number(e.real_cost??0),old_hhWorkTime_registered:Number(e.hhWorkTime)}}function kh(e,t,n,i){let r=String(e.unique_id),s=e.parent_id==="0"?"0":String(e.parent_id),a=rh(e.calendarId,t,n),o=a!=null&&(e.calendarId==null||!t.has(String(e.calendarId))),c=Number(e.progress),l=ch(c),{constraint_type:d,constraint_date:u}=Ch(e,i),{start_date:f,end_date:p,duration:A}=Sh(e);return{...Ah(e),...vh(e),id:r,parent:s,text:e.name,description:e.description??"",type:e.type,start_date:f,end_date:p,duration:A,constraint_type:d,constraint_date:u,progress:c,cost:Number(e.cost),used_cost:Number(e.used_cost??0),real_cost:Number(e.real_cost??0),hhWorkTime:Number(e.hhWorkTime),real_work:Number(e.real_work??0),ponderator:Number(e.ponderator),calendar_id:a,assignedDefaultCalendar:o,auto_scheduling:l,correlative_id:e.correlative_id,is_lookahead:e.isOnLookahead,visible:e.should_be_showed!==!1,..._h(e),pendingRequests:Th(e.pendingRequests),activityModifications:e.activitymodifications,newActivitiesArray:Ih(e.newActivitiesArray)}}function Ih(e){if(e==null||e==="")return[];if(Array.isArray(e))return e.map(String);if(typeof e!="string")return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.map(String):[]}catch{return[]}}function Th(e){return Array.isArray(e)?e.filter(t=>t!=null&&typeof t=="object").map(t=>({id:String(t.id)})):[]}var Dh={"AS SOON AS POSSIBLE":"asap","AS LATE AS POSSIBLE":"alap","START NO EARLIER THAN":"snet","START NO LATER THAN":"snlt","FINISH NO EARLIER THAN":"fnet","FINISH NO LATER THAN":"fnlt","MUST START ON":"mso","MUST FINISH ON":"mfo"};function Eh(e,t){if(!e)return null;let n=Dh[e.toUpperCase()];return n===void 0?(t.warn(`[parseFromBackend] unknown constraint label "${e}" \u2014 defaulting to "asap"`),ul):n}function Ph(e,t,n){for(let i of e)i.parent!=="0"&&(t.has(i.parent)||(n.warn(`[parseFromBackend] activity "${i.id}" references unknown parent "${i.parent}" \u2014 re-parenting to root ('0')`),i.parent="0"))}function Rh(e,t,n){let i=e,r=String(i.unique_id??i.id),s=String(i.source_id??i.source??""),a=String(i.target_id??i.target??"");if(!t.has(s))throw new Error(`[parseFromBackend] link "${r}" source "${s}" does not exist`);if(!t.has(a))throw new Error(`[parseFromBackend] link "${r}" target "${a}" does not exist`);let o=String(i.type??"fs"),c=qs(o)??o,l=i.ganttId,d=i.sectorId,u=i.id;return{id:r,source:s,target:a,type:c,lag:ft(Number(i.lag??0),n),...typeof l=="number"?{ganttId:l}:{},...typeof d=="number"?{sectorId:d}:{},...typeof u=="number"?{proplannerId:u}:{}}}function Cl(e={}){let t=e.seed??0,n=i=>{i>t&&(t=i)};if(e.knownIds)for(let i of e.knownIds){let r=typeof i=="number"?i:Number(i);Number.isFinite(r)&&n(r)}return{next(){return t+=1,String(t)},bump(i){let r=typeof i=="number"?i:Number(i);Number.isFinite(r)&&n(r)}}}function Sl(e={}){let t=e.seed??Date.now(),n=i=>{i>t&&(t=i)};if(e.knownIds)for(let i of e.knownIds){let r=typeof i=="number"?i:Number(i);Number.isFinite(r)&&n(r)}return{next(){return t+=1,String(t)},bump(i){let r=typeof i=="number"?i:Number(i);Number.isFinite(r)&&n(r)}}}function _l(e={}){let t=e.seed??0,n=i=>{Number.isFinite(i)&&i>0&&i<=9999999&&i>t&&(t=i)};if(e.knownIds)for(let i of e.knownIds){if(i==null)continue;let r=typeof i=="number"?i:Number(i);n(r)}return{next(){return t+=1,String(t)},bump(i){if(i==null)return;let r=typeof i=="number"?i:Number(i);n(r)}}}function kl(e){return!!e&&typeof e=="string"&&e.trim().length>0}function ti(e){if(!e||typeof e!="string"||e.trim().length===0)return"";let t=e.match(/^(.*?)(\d+)$/);return t?t[1]??"":e}function ei(e){if(!e||typeof e!="string"||e.trim().length===0)return"";let t=e.match(/(\d+)$/);return t?t[1]??"":""}function Il(e){if(!e||typeof e!="object")return"";let t=e.custom_id;return typeof t=="string"?t:""}function Tl(e,t){return!t&&kl(e)}function Dl(e,t){return t&&kl(e)}function Ue(e){return typeof e=="string"&&e.length>0&&/^\d+$/.test(e)}function We(e){if(!Ue(e))return 0n;try{return BigInt(e)}catch{return 0n}}function Lh(e,t){if(typeof e!="bigint")return"";let n=e.toString();if(!Ue(t))return n;let i=t.length;return n.padStart(i,"0")}function mt(e,t){let n=We(e),i=We(t),r=n+i;return Lh(r,e)}function ni(e,t){let n=We(e),i=We(t);return n<i?-1:n>i?1:0}function ii(e,t){return ni(e,t)<=0?e:t}function ri(e,t){return ni(e,t)>=0?e:t}function El(e){if(!e||e.length===0)throw new Error("minSuffixFromArray requires non-empty array");return e.reduce((t,n)=>ii(t,n))}function Pl(e){if(!e||e.length===0)throw new Error("maxSuffixFromArray requires non-empty array");return e.reduce((t,n)=>ri(t,n))}function Rl(e){return{prefix:e,baseSuffix:null}}function Ll(e,t){let n=ei(e);return{prefix:ti(e),baseSuffix:mt(n,t)}}function bl(e){return{prefix:e,baseSuffix:null}}function Ol(e,t){return Tl(e,t)?"parentConversion":Dl(e,t)?"pasteReference":"noContext"}var si=class{prefixMap=new Map;processedIds=new Set;defaultPrefix;suffixIncrement;constructor(t={}){this.defaultPrefix=t.defaultPrefix??"A",this.suffixIncrement=t.suffixIncrement??"10"}extractPrefix(t){return ti(t)}extractSuffix(t){return ei(t)}analyzeCustomId(t){return{prefix:this.extractPrefix(t),suffix:this.extractSuffix(t)}}_updatePrefixStats(t,n){if(!this.prefixMap.has(t)){this.prefixMap.set(t,{min:n,max:n,next:n,quantity:1,usedSuffixes:new Set([n])}),this._recalculateNext(t);return}let i=this.prefixMap.get(t);i.usedSuffixes.has(n)||(i.usedSuffixes.add(n),i.min=ii(n,i.min),i.max=ri(n,i.max),i.quantity+=1,this._recalculateNext(t))}_recalculateNext(t){let n=this.prefixMap.get(t);if(!n)return;let i=this.getNextAvailableSuffix(t);n.next=i??this.suffixIncrement}getPrefixStats(t){let n=this.prefixMap.get(t);return n?{min:n.min,max:n.max,next:n.next,quantity:n.quantity}:null}getNextSuffix(t){let n=this.prefixMap.get(t);return n?n.next:this.suffixIncrement}getAllPrefixes(){return Array.from(this.prefixMap.keys())}registerCustomId(t){if(!t||typeof t!="string")return{prefix:"",suffix:""};let{prefix:n,suffix:i}=this.analyzeCustomId(t);if(!n&&!i)return{prefix:n,suffix:i};if(this.prefixMap.has(n)){let r=this.prefixMap.get(n);r.usedSuffixes.has(i)||(r.usedSuffixes.add(i),r.min=ii(i,r.min),r.max=ri(i,r.max),r.quantity+=1,this._recalculateNext(n))}else this.prefixMap.set(n,{min:i,max:i,next:mt(i,this.suffixIncrement),quantity:1,usedSuffixes:new Set([i])});return this.processedIds.add(t),{prefix:n,suffix:i}}releaseCustomId(t=null){if(!t||typeof t!="string")return{prefix:"",suffix:""};let{prefix:n,suffix:i}=this.analyzeCustomId(t);if(!this.prefixMap.has(n))return{prefix:n,suffix:i};let r=this.prefixMap.get(n);if(r.usedSuffixes.has(i)){let s=r.quantity-1;if(s===0)this.prefixMap.delete(n);else{let a=new Set(r.usedSuffixes);a.delete(i);let o=Array.from(a);o.length===0?this.prefixMap.delete(n):(r.usedSuffixes=a,r.min=El(o),r.max=Pl(o),r.quantity=s,this._recalculateNext(n))}}return this.processedIds.delete(t),{prefix:n,suffix:i}}trackCustomIdChange(t,n){let i=this.releaseCustomId(t),r=this.registerCustomId(n);return{oldPrefix:i.prefix,oldSuffix:i.suffix,newPrefix:r.prefix,newSuffix:r.suffix}}_exceedsMaxLength(t){return t.length>20}_shouldSearchForGaps(t){if(!this.prefixMap.has(t))return!1;let n=this.prefixMap.get(t);return`${t}${mt(n.max,this.suffixIncrement)}`.length>20}_findFirstAvailableGap(t){if(!this.prefixMap.has(t))return null;let n=this.prefixMap.get(t),i=this.suffixIncrement;for(;ni(i,n.max)<0;){if(`${t}${i}`.length>20)return null;if(!n.usedSuffixes.has(i))return i;i=mt(i,this.suffixIncrement)}return null}_generateDefaultCustomId(){let t=this.getNextAvailableSuffix(this.defaultPrefix);if(t===null){if(this._shouldSearchForGaps(this.defaultPrefix)){let n=this._findFirstAvailableGap(this.defaultPrefix);if(n!==null)return`${this.defaultPrefix}${n}`}return`${this.defaultPrefix}${this.suffixIncrement}`}return`${this.defaultPrefix}${t}`}getNextAvailableSuffix(t,n=null){if(!this.prefixMap.has(t)){let o=n&&Ue(n)?n:this.suffixIncrement;return`${t}${o}`.length>20?null:o}let i=this.prefixMap.get(t),r=this.suffixIncrement;if(!n||!Ue(n)){let o=mt(i.max,r);return`${t}${o}`.length>20?null:o}let s=n;for(let o=0;o<100;o++){if(`${t}${s}`.length>20)return null;if(!i.usedSuffixes.has(s))return s;s=mt(s,r)}let a=mt(i.max,r);return`${t}${a}`.length>20?null:a}generateNextCustomId(t){let n=this.getNextAvailableSuffix(t);if(n===null)return this._generateDefaultCustomId();if(this.prefixMap.has(t)){let r=this.prefixMap.get(t),s=0;for(;r.usedSuffixes.has(n)&&s<1e4;){let a=this.getNextAvailableSuffix(t,mt(n,this.suffixIncrement));if(a===null)return this._generateDefaultCustomId();n=a,s++}}let i=`${t}${n}`;return this._exceedsMaxLength(i)&&(i=this._generateDefaultCustomId()),i}populateFromActivities(t){if(!Array.isArray(t))return this;let n=[...new Set(t.filter(i=>i&&typeof i.custom_id=="string"&&i.custom_id).map(i=>i.custom_id))];for(let i of n){if(this.processedIds.has(i))continue;let{prefix:r,suffix:s}=this.analyzeCustomId(i);(r||s)&&(this._updatePrefixStats(r,s),this.processedIds.add(i))}return this}getDefaults(){return{prefix:this.defaultPrefix,increment:this.suffixIncrement}}generateCustomIdForNewChild(t){let{activity:n,useActivityCustomIdAsReference:i=!1}=t,r=Il(n),s=Ol(r,i),{prefix:a,baseSuffix:o}=this._applyGenerationStrategy(s,r),c=null;if(s==="parentConversion"&&this.prefixMap.has(a)){let f=this.prefixMap.get(a).max;c=mt(f,this.suffixIncrement)}s==="parentConversion"&&this.releaseCustomId(r);let l=s==="parentConversion"&&c?c:o,d=this.getNextAvailableSuffix(a,l);if(d===null){let f=this._generateDefaultCustomId();return this.registerCustomId(f),f}let u=`${a}${d}`;return this._exceedsMaxLength(u)&&(u=this._generateDefaultCustomId()),this.registerCustomId(u),u}_applyGenerationStrategy(t,n){switch(t){case"parentConversion":return Rl(this.defaultPrefix);case"pasteReference":return Ll(n,this.suffixIncrement);default:return bl(this.defaultPrefix)}}generateCustomIdForRestoredChild(t=null){if(t){let i=t.trim();if(i.length>0){let r=this.extractPrefix(i),s=this.extractSuffix(i),a=mt(s,this.suffixIncrement),o=this.getNextAvailableSuffix(r,a);if(o===null){let l=this._generateDefaultCustomId();return this.registerCustomId(l),l}let c=`${r}${o}`;return this._exceedsMaxLength(c)&&(c=this._generateDefaultCustomId()),this.registerCustomId(c),c}}let n=this.generateNextCustomId(this.defaultPrefix);return this.registerCustomId(n),n}clear(){this.prefixMap.clear(),this.processedIds.clear()}getTotalPrefixes(){return this.prefixMap.size}hasPrefix(t){return this.prefixMap.has(t)}isCustomIdInUse(t,n=null){if(!t||typeof t!="string"||!t.trim())return!1;let i=t.trim();return n&&i===n.trim()?!1:this.processedIds.has(i)}};var bh=new Set([$e,te,Ut]);function wr(e,t){return bh.has(e)&&typeof t=="string"?new Date(t):t}var ai=class{_journal=null;begin(){this._journal={dirty:new Set,before:new Map,ops:[],linkFieldCaptured:new Set,correlativeBefore:new Map,scheduledBefore:new Map}}peek(){return this._journal}end(){this._journal=null}note(t,n){let i=this._journal;i&&(i.before.has(t)||i.before.set(t,Nr(n)),i.dirty.add(t))}noteInsert(t){this._journal?.ops.push({kind:"insert",activityId:t})}noteRemove(t,n){this._journal?.ops.push({kind:"remove",activityId:t,before:Nr(n)})}noteLinkAdd(t){this._journal?.ops.push({kind:"link-add",linkId:t})}noteLinkRemove(t,n){this._journal?.ops.push({kind:"link-remove",linkId:t,before:wl(n)})}noteCorrelativeBefore(t,n){let i=this._journal;!i||i.correlativeBefore.has(t)||i.correlativeBefore.set(t,n)}noteScheduledBefore(t,n){let i=this._journal;!i||i.scheduledBefore.has(t)||i.scheduledBefore.set(t,Nr(n))}noteLinkField(t,n){let i=this._journal;!i||i.linkFieldCaptured.has(t)||(i.linkFieldCaptured.add(t),i.ops.push({kind:"link-field",linkId:t,before:wl(n)}))}};function Nr(e){return{...e,start_date:new Date(e.start_date),end_date:new Date(e.end_date),constraint_date:e.constraint_date?new Date(e.constraint_date):null,$source:[...e.$source],$target:[...e.$target]}}function wl(e){return{...e}}var oi=class{_cache={closestWorkTime:new Map,endDate:new Map,duration:new Map};reader;constructor(t){this.reader=t.reader}resolveCalendar(t){let n=Nl(t);return this.reader.getCalendar(n??Me)}getClosestWorkTime(t){let n=`${Fr(t.task)}|${t.dir}|${t.date.getTime()}`;return xr(this._cache.closestWorkTime,n,()=>this.resolveCalendar(t.task).getClosestWorkTime({direction:t.dir,date:t.date,unit:at.HOUR}))}calculateEndDate(t){let n=`${Fr(t.task)}|${t.start_date.getTime()}|${t.duration}`;return xr(this._cache.endDate,n,()=>this.resolveCalendar(t.task).calculateEndDate(t.start_date,t.duration))}calculateDuration(t){let n=`${Fr(t.task)}|${t.start_date.getTime()}|${t.end_date.getTime()}`;return xr(this._cache.duration,n,()=>this.resolveCalendar(t.task).calculateDuration(t.start_date,t.end_date))}clearCache(){this._cache.closestWorkTime.clear(),this._cache.endDate.clear(),this._cache.duration.clear()}};function xr(e,t,n){let i=e.get(t);if(i!==void 0)return i;let r=n();return e.set(t,r),r}var Oh="__default__";function Nl(e){if(!e)return null;let t=e.calendar_id;return t==null?null:String(t)}function Fr(e){return Nl(e)??Oh}var ci=class{constructor(t){this.activities=t}activities;_childrenByParent=new Map;_dirty=!1;markDirty(){this._dirty=!0}getChildren(t){return this._dirty&&(this.rebuild(),this._dirty=!1),this._childrenByParent.get(String(t))??[]}isChildOf(t,n){let i=this.activities.get(t)?.parent,r=0,s=this.activities.size;for(;i&&!b(i);){if(i===n)return!0;if(++r>s)return!1;i=this.activities.get(i)?.parent}return!1}getParent(t){let n=this.activities.get(t)?.parent;return!n||b(n)?null:this.activities.get(n)??null}getParentId(t){let n=this.activities.get(t);return n?n.parent??0:0}addChild(t,n){if(this._dirty||b(t))return;let i=String(t),r=this._childrenByParent.get(i);r?r.includes(n)||r.push(n):this._childrenByParent.set(i,[n])}rebuild(){this._childrenByParent.clear();for(let t of this.activities.values()){if(b(t.parent))continue;let n=String(t.parent),i=this._childrenByParent.get(n)??[];i.push(t.id),this._childrenByParent.set(n,i)}}};var ui=class{_activities=new Map;_links=new Map;_hierarchy;_cache={ids:null,visualOrderIds:null};_writeCapture=new ai;_calendar;_flags;constructor(t){for(let n of t.activities)this._activities.set(n.id,n);for(let n of t.links)this._links.set(String(n.id),n);this._calendar=new oi(Gc(t.calendars)),this._flags=Nh(t),this._hierarchy=new ci(this._activities),this._hierarchy.rebuild()}getAllActivities(){return Array.from(this._activities.values())}getAllLinks(){return Array.from(this._links.values())}getAllIds(){return this._cache.ids?this._cache.ids:(this._cache.ids=Array.from(this._activities.keys()),this._cache.ids)}activityCount(){return this._activities.size}getVisualOrderIds(){return this._cache.visualOrderIds?this._cache.visualOrderIds:(this._cache.visualOrderIds=Ua(this).map(t=>String(t.id)),this._cache.visualOrderIds)}invalidateVisualOrderIds(){this._cache.visualOrderIds=null}forEachActivity(t){for(let[n,i]of this._activities)t(i,n)}getParentId(t){return this._hierarchy.getParentId(t)}getActivity(t){return this._activities.get(String(t))??null}getLink(t){return this._links.get(String(t))??null}activityExists(t){return this._activities.has(String(t))}getChildren(t){return this._hierarchy.getChildren(t)}isChildOf(t,n){return this._hierarchy.isChildOf(t,n)}getParent(t){return this._hierarchy.getParent(t)}getClosestWorkTime(t){return this._calendar.getClosestWorkTime(t)}calculateEndDate(t){return this._calendar.calculateEndDate(t)}calculateDuration(t){return this._calendar.calculateDuration(t)}clearCalendarCache(){this._calendar.clearCache()}get calendarReader(){return this._calendar.reader}batchUpdate(t){t()}updateActivity(t){}getLiveActivity(t){return this.getActivity(t)}getFlags(){return{...this._flags,allCheckedTaskIds:[...this._flags.allCheckedTaskIds]}}getProjectEnd(){return null}beginWriteCapture(){this._writeCapture.begin()}peekWriteCapture(){return this._writeCapture.peek()}endWriteCapture(){this._writeCapture.end()}setActivityField(t,n,i){let r=this.getActivity(t);r&&(this._writeCapture.note(String(t),r),r[n]=wr(n,i),n===tt.PARENT&&this._hierarchy.markDirty(),xl(n)&&(this._cache.visualOrderIds=null))}setActivityFields(t,n){let i=this.getActivity(t);if(!i)return;this._writeCapture.note(String(t),i);let r=!1;for(let s of Object.keys(n))Reflect.set(i,s,wr(s,n[s])),s===tt.PARENT&&(r=!0),xl(s)&&(this._cache.visualOrderIds=null);r&&this._hierarchy.markDirty()}addLink(t){this._writeCapture.noteLinkAdd(String(t.id)),this._links.set(String(t.id),{...t});let n=this.getActivity(t.source);n&&(n.$source=di(n.$source,t.id));let i=this.getActivity(t.target);i&&(i.$target=di(i.$target,t.id))}getWorkingHoursPerDayForActivity(t){let n=this.getActivity(t);if(!n)return Mr;let i=this.calendarReader.getCalendar(String(n.calendar_id));return i?wh(i,n.start_date):Mr}setLinkField(t,n,i){let r=this.getLink(t);r&&(this._writeCapture.noteLinkField(String(t),r),r[n]=i)}removeLink(t){let n=this.getLink(t);if(!n)return;this._writeCapture.noteLinkRemove(String(t),n),this._links.delete(String(t));let i=this.getActivity(n.source);i&&(i.$source=li(i.$source,n.id));let r=this.getActivity(n.target);r&&(r.$target=li(r.$target,n.id))}addActivity(t){this._writeCapture.noteInsert(String(t.id)),this._activities.set(t.id,t),this._cache.ids=null,this._cache.visualOrderIds=null,this._hierarchy.addChild(t.parent,t.id)}removeActivity(t){let n=this.getActivity(t);n&&this._writeCapture.noteRemove(String(t),n),this._activities.delete(t),this._cache.ids=null,this._cache.visualOrderIds=null,this._hierarchy.markDirty()}noteCorrelativeBefore(t,n){this._writeCapture.noteCorrelativeBefore(t,n)}noteScheduledBefore(t,n){this._writeCapture.noteScheduledBefore(t,n)}restoreFromCapture(){let t=this._writeCapture.peek();if(!t)return;let{ops:n,before:i,correlativeBefore:r,scheduledBefore:s}=t;this._undoLinkAdds(n),this._undoInserts(n),this._reInsertRemovedActivities(n),this._reAddRemovedLinks(n),this._restoreLinkFields(n),this._restoreCorrelatives(r),this._restoreActivityFields(s),this._restoreActivityFields(i),this._cache.ids=null,this._cache.visualOrderIds=null,this._hierarchy.markDirty()}_restoreCorrelatives(t){for(let[n,i]of t){let r=this._activities.get(n);r&&(r.correlative_id=i)}}_undoLinkAdds(t){for(let n of t)n.kind==="link-add"&&this._detachLink(n.linkId)}_undoInserts(t){for(let n of t)n.kind==="insert"&&this._activities.delete(n.activityId)}_reInsertRemovedActivities(t){for(let n of t)n.kind==="remove"&&this._activities.set(n.activityId,n.before)}_reAddRemovedLinks(t){for(let n of t)n.kind==="link-remove"&&this._attachLink(n.before)}_restoreLinkFields(t){for(let n of t)n.kind==="link-field"&&this._links.has(n.linkId)&&this._links.set(n.linkId,n.before)}_restoreActivityFields(t){for(let[n,i]of t){let r=this._activities.get(n);r&&this._restoreScalarFields(r,i)}}_restoreScalarFields(t,n){for(let i of Object.keys(t))i==="$source"||i==="$target"||Object.hasOwn(n,i)||Reflect.deleteProperty(t,i);for(let i of Object.keys(n))i==="$source"||i==="$target"||Reflect.set(t,i,Reflect.get(n,i))}_attachLink(t){this._links.set(String(t.id),{...t});let n=this.getActivity(t.source);n&&(n.$source=di(n.$source,t.id));let i=this.getActivity(t.target);i&&(i.$target=di(i.$target,t.id))}_detachLink(t){let n=this.getLink(t);if(!n)return;this._links.delete(String(t));let i=this.getActivity(n.source);i&&(i.$source=li(i.$source,n.id));let r=this.getActivity(n.target);r&&(r.$target=li(r.$target,n.id))}},Mr=8;function xl(e){return e===tt.PARENT||e===v.CORRELATIVE_ID}function wh(e,t){let n=De(e,kt(t)),i=Ee(e,n),r=e.calculateDuration(n,i);return r>0?r:Mr}function li(e,t){return e.filter(n=>String(n)!==String(t))}function di(e,t){return e.includes(t)?e:[...e,t]}function Nh(e){let t=e.runtimeFlags??{};return{isPasting:!!t.isPasting,isBulkOperation:!!t.isBulkOperation,dragWithMultiple:!!t.dragWithMultiple,draggingSingleMilestone:!!t.draggingSingleMilestone,creatingActivity:!1,avoidAutoScheduleBeforeDrag:!1,maxPerformance:!!t.maxPerformance,allCheckedTaskIds:[]}}function Fl(e){let t=[];e.forEachActivity((n,i)=>{n.type==="project"&&e.getChildren(String(i)).length===0&&t.push(String(i))});for(let n of t)e.setActivityField(n,tt.TYPE,Ce),xh(e,n)}function xh(e,t){let n=e.getActivity(t);if(!n||!n.start_date||n.duration==null)return;let i=new Date(n.start_date);i.setUTCHours(0,0,0,0);let r=e.getClosestWorkTime({date:i,dir:q.FUTURE,task:n});if(r.getTime()===n.start_date.getTime())return;let s=e.calculateEndDate({start_date:r,duration:n.duration,task:n});e.setActivityField(t,v.START_DATE,r),e.setActivityField(t,v.END_DATE,s)}function Ml(e,t,n){let i=e.get(t);i?i.push(n):e.set(t,[n])}function Fh(e){let t=new Map,n=new Map;for(let i of e)Ml(t,String(i.source),String(i.id)),Ml(n,String(i.target),String(i.id));return{sourceByActivity:t,targetByActivity:n}}function Mh(e,t,n){let i=Oa(e,t);return i.$source=n.sourceByActivity.get(e.id)??[],i.$target=n.targetByActivity.get(e.id)??[],i}function Wh(e){return{...e,id:String(e.id),source:String(e.source),target:String(e.target),type:e.type,lag:Number(e.lag)}}function Uh(e){return{days:e.days,hours:e.hours,...e.dates?{dates:e.dates}:{},...e.customWeeks?{customWeeks:e.customWeeks}:{}}}function Wl(e){return{id:String(e.id),worktime:Uh(e.worktime)}}function Ul(e,t,n,i,r=[]){let s=Fh(t),a=e.map(l=>Mh(l,i,s)),o=t.map(Wh),c=[...n.map(Wl),...r.map(Wl)];return{activities:a,links:o,calendars:c}}var Pt={READY:"ready",DESTROYED:"destroyed",POISONED:"poisoned"};function Bl(e){let t=e.clock??null,n=t?Te(t()):null,i=e.reporter??ne,r=Qn({sector:e.sector,activities:e.activities,links:e.links,calendars:e.calendars,baseCalendars:e.baseCalendars},i),s=r.sector;s.statusCriteria=Qe(e.statusCriteria);let a=r.calendars,o=r.baseCalendars??[],c=Ul(r.activities,r.links,r.calendars,s.hoursPerDay,o),l=new ui(c),d=new yn(l,i);Fl(l);let u=Cl({knownIds:r.activities.map(S=>S.id)}),f=Sl({knownIds:r.links.map(S=>S.id)}),p=_l({knownIds:r.activities.map(S=>S.unique_correlative_id)}),A=new si({defaultPrefix:s.customIdPrefix,suffixIncrement:s.customIdIncrement});if(A.populateFromActivities(r.activities),e.baselinePoints&&e.baselinePoints.length>0){let S=o.find(T=>T.baseDefault)?.id??null;Kn(l,e.baselinePoints,n,S)}let I=Va({state:l,sector:s,scheduler:d,skipAutoSchedule:e.skipInitialAutoSchedule===!0,now:n??void 0});return{sector:s,state:l,scheduler:d,activityIdGen:u,linkIdGen:f,uidGen:p,customIdTracker:A,calendars:a,baseCalendars:o,clock:t,reporter:i,initPromise:I}}var fi=class{_status=Pt.READY;_dispatchInFlight=!1;coreRuntime;_undo=new Jn;_opQueue=Promise.resolve();_mutationEpoch=0;_cpComputedEpoch=0;constructor(t){let n=Bl(t);this.coreRuntime={state:n.state,scheduler:n.scheduler,sector:n.sector,activityIdGenerator:n.activityIdGen,linkIdGenerator:n.linkIdGen,uniqueCorrelativeIdGenerator:n.uidGen,customIdTracker:n.customIdTracker,clock:n.clock,calendars:new Map(n.calendars.map(r=>[r.id,r])),baseCalendars:n.baseCalendars,reporter:n.reporter},this._initPromise=n.initPromise.then(()=>{this._status!==Pt.DESTROYED&&this._saveTracker.init(this.getAllActivitiesView(),this.getAllLinksView())}),this._criticalPathReady=this._initPromise.then(()=>this._enqueue(()=>this._runCriticalPathAndCapture()));let i=t.criticalPathOnLoad===!0;this._ready=i?this._criticalPathReady.then(()=>{}):this._initPromise}get ready(){return this._ready}get criticalPathReady(){return this._criticalPathReady}get status(){return this._status}getSector(){return this.coreRuntime.sector}getActivityView(t,n="days"){return this.assertReady(),ac(this.coreRuntime.state,this.coreRuntime.sector.hoursPerDay,t,n)}getAllActivitiesView(t="days"){return this.assertReady(),oc(this.coreRuntime.state,this.coreRuntime.sector.hoursPerDay,t)}getChildrenView(t,n="days"){return this.assertReady(),dc(this.coreRuntime.state,this.coreRuntime.sector.hoursPerDay,t,n)}getLinkView(t,n="days"){return this.assertReady(),pc(this.coreRuntime.state,this.coreRuntime.sector.hoursPerDay,t,n)}getAllLinksView(t="days"){return this.assertReady(),hc(this.coreRuntime.state,this.coreRuntime.sector.hoursPerDay,t)}getProperty(t,n,i){this.assertReady();let r=this.coreRuntime.state.getActivity(t);if(!r)return null;let s=Reflect.get(r,n);return n===Qt?hr(s,this.coreRuntime.sector.hoursPerDay,i?.unit??"days"):s}getAllIds(){return this.assertReady(),cc(this.coreRuntime.state)}forEachActivityId(t){this.assertReady(),lc(this.coreRuntime.state,t)}getChildrenIds(t){return this.assertReady(),yr(this.coreRuntime.state,t)}getSelectedActivityIds(){return this.assertReady(),uc(this.coreRuntime.state)}getVisualOrderIds(){return this.assertReady(),this.coreRuntime.state.getVisualOrderIds()}hasChild(t){return this.assertReady(),fc(this.coreRuntime.state,t)}getCalendar(t){return this.assertReady(),this.coreRuntime.calendars.get(t)??null}getAllCalendars(){return this.assertReady(),Array.from(this.coreRuntime.calendars.values())}getBaseCalendars(){return this.assertReady(),this.coreRuntime.baseCalendars}isCustomIdInUse(t,n=null){return this.assertReady(),this.coreRuntime.customIdTracker.isCustomIdInUse(t,n)}getProjectWorkHours(){return this.assertReady(),Lc(this.coreRuntime.calendars.values())}getModifiedLinks(){return this.assertReady(),this._saveTracker.modifiedLinks(this.getAllLinksView())}markLinksPersisted(){this._saveTracker.snapshotLinks(this.getAllLinksView())}getModifiedActivities(){return this.assertReady(),this._saveTracker.modifiedActivities(this.getAllActivitiesView())}markActivitiesPersisted(){this._saveTracker.snapshotActivities(this.getAllActivitiesView())}applyBaselines(t){this.assertReady();let n=this.coreRuntime.clock?Te(this.coreRuntime.clock()):null,i=this.coreRuntime.baseCalendars.find(r=>r.baseDefault)?.id??null;return Pc(this.coreRuntime.state,this.coreRuntime.sector.hoursPerDay,t,n,i)}recomputeAllPonderators(t){return this.assertReady(),Dc(this.coreRuntime.state,this.coreRuntime.sector.hoursPerDay,t)}recomputeAllProgressRollup(){return this.assertReady(),Ec(this.coreRuntime.state,this.coreRuntime.sector.hoursPerDay)}setStatusCriteria(t){this.assertReady();let n=Qe(t);return this.coreRuntime.sector.statusCriteria=n,Rc(this.coreRuntime.state,this.coreRuntime.sector.hoursPerDay,n)}allocateActivityId(){return this.assertReady(),this.coreRuntime.activityIdGenerator.next()}createActivity(t,n="days"){if(this.assertReady(),this._dispatchInFlight)throw new Error("[ScheduleCore] createActivity called during an in-flight dispatch");let i={kind:"activity-create",...t};this.coreRuntime.state.beginWriteCapture();let r;try{r=$o(i,{adapter:this.coreRuntime.state,scheduler:this.coreRuntime.scheduler,sector:this.coreRuntime.sector,calendars:this.coreRuntime.calendars,activityIdGen:this.coreRuntime.activityIdGenerator,uidGen:this.coreRuntime.uniqueCorrelativeIdGenerator,customIdTracker:this.coreRuntime.customIdTracker}),r.ok||this._rollback()}catch(a){throw this._rollback(),a}finally{this.coreRuntime.state.endWriteCapture()}if(!r.ok)return r;let s=this.coreRuntime.sector.hoursPerDay;return{ok:!0,activity:yt(r.activity,s,n),changes:xe(r.changes,s,n)}}_enqueue(t){let n=this._opQueue.then(t,t);return this._opQueue=n.then(()=>{},()=>{}),n}async dispatch(t,n={}){return this._enqueue(()=>this._dispatchInner(t,n))}async _dispatchInner(t,n={}){this.assertReady();let i=qc(this.coreRuntime.state,{hoursPerDay:this.coreRuntime.sector.hoursPerDay,inputUnit:n.inputUnit??"days"}),r=el(t);this.coreRuntime.state.beginWriteCapture(),this._dispatchInFlight=!0;let s;try{s=await rc(t,n,{adapter:this.coreRuntime.state,ctx:i,scheduler:this.coreRuntime.scheduler,sector:this.coreRuntime.sector,calendars:this.coreRuntime.calendars,activityIdGen:this.coreRuntime.activityIdGenerator,linkIdGen:this.coreRuntime.linkIdGenerator,uidGen:this.coreRuntime.uniqueCorrelativeIdGenerator,customIdTracker:this.coreRuntime.customIdTracker,now:this.coreRuntime.clock?Te(this.coreRuntime.clock()):null}),s.ok||this._rollback()}catch(a){throw this._rollback(),a}finally{this._dispatchInFlight=!1,this.coreRuntime.state.endWriteCapture()}if(s.ok&&r&&nl(s.changes)){let a=Xc(this.coreRuntime.state,s.changes);this._undo.record(Er(s.changes,s.__beforeSnap,s.__beforeLinks,a.afterSnap,a.afterLinks),Zc(t),Date.now())}return s.ok?(n.skipCriticalPath&&this._mutationEpoch++,{...s,changes:xe(s.changes,this.coreRuntime.sector.hoursPerDay,n.outputUnit??"days")}):s}recomputeCriticalPath(){return this._enqueue(()=>this._recomputeCriticalPathIfStale())}async _recomputeCriticalPathIfStale(){if(this._status===Pt.DESTROYED)return null;let t=this._mutationEpoch;if(this._cpComputedEpoch===t)return null;let n=await this._runCriticalPathAndCapture();return this._cpComputedEpoch=t,n}async _runCriticalPathAndCapture(){if(this._status===Pt.DESTROYED)return{changes:{source:{kind:"init"},activities:[],links:[],calendars:[],trackingEvents:[]}};this.coreRuntime.state.beginWriteCapture();let t;try{await bn(this.coreRuntime.state,this.coreRuntime.sector.hoursPerDay),t=G(this.coreRuntime.state,{source:{kind:"init"},beforeSnap:new Map,touchedIds:[],scheduledIds:[],hoursPerDay:this.coreRuntime.sector.hoursPerDay})}finally{this.coreRuntime.state.endWriteCapture()}return{changes:t}}undo(t){return this._enqueue(async()=>{this.assertReady();let n=this._undo.takeUndo();if(!n)return null;il(this.coreRuntime.state,n),this._mutationEpoch++,Pr(n)&&this._resyncCustomIdTrackerFromModel(),this._undo.pushRedo(n),this._undo.resetCoalesce();let i=Rr(this.coreRuntime.state,n,"before");return xe(i,this.coreRuntime.sector.hoursPerDay,t?.outputUnit??"days")})}redo(t){return this._enqueue(async()=>{this.assertReady();let n=this._undo.takeRedo();if(!n)return null;rl(this.coreRuntime.state,n),this._mutationEpoch++,Pr(n)&&this._resyncCustomIdTrackerFromModel(),this._undo.pushUndo(n),this._undo.resetCoalesce();let i=Rr(this.coreRuntime.state,n,"after");return xe(i,this.coreRuntime.sector.hoursPerDay,t?.outputUnit??"days")})}clearHistory(){this._undo.clear()}canUndo(){return this._undo.canUndo()}canRedo(){return this._undo.canRedo()}undoDepth(){return this._undo.undoDepth()}_resyncCustomIdTrackerFromModel(){this.coreRuntime.customIdTracker.clear(),this.coreRuntime.customIdTracker.populateFromActivities(this.coreRuntime.state.getAllActivities())}destroy(){this.coreRuntime.calendars.clear(),this._saveTracker.clear(),this._status=Pt.DESTROYED}_initPromise;_criticalPathReady;_ready;_saveTracker=new Xn;assertReady(){if(this._status===Pt.DESTROYED)throw new Error("[ScheduleCore] instance is destroyed");if(this._status===Pt.POISONED)throw new Error("[ScheduleCore] instance is poisoned (a rollback failed) \u2014 reload from backend")}_rollback(){try{this.coreRuntime.state.restoreFromCapture()}catch(t){throw this._status=Pt.POISONED,this.coreRuntime.reporter.error("[ScheduleCore] rollback failed \u2014 core poisoned",t),t}}};function jl(e,t){let n=new Map(e.map(i=>[String(i.id),i]));return t.filter(i=>{let r=n.get(String(i.id));return r?r.lag!==i.lag||r.type!==i.type:!1})}var Hl=(e=[])=>(e??[]).filter(t=>!t.proplannerId);var $l={asap:"AS SOON AS POSSIBLE",alap:"AS LATE AS POSSIBLE",snet:"START NO EARLIER THAN",snlt:"START NO LATER THAN",fnet:"FINISH NO EARLIER THAN",fnlt:"FINISH NO LATER THAN",mso:"MUST START ON",mfo:"MUST FINISH ON"};var z={INLINE_EDIT:"inline-edit",DATES_BATCH:"dates-batch",BULK_EDIT:"bulk-edit",LINK_CREATE:"link-create",LINK_UPDATE:"link-update",LINK_DELETE:"link-delete",LINKS_BATCH:"links-batch",ACTIVITY_CREATE:"activity-create",ACTIVITY_DELETE:"activity-delete",ACTIVITY_MOVE:"activity-move",ACTIVITY_INDENT:"activity-indent",ACTIVITY_OUTDENT:"activity-outdent",ACTIVITY_SET_PROGRESS:"activity-set-progress",ACTIVITY_PASTE:"activity-paste",SELECTION_TOGGLE:"selection-toggle",SELECTION_REPLACE:"selection-replace",VISIBILITY_SET:"visibility-set",SIR_SYNC:"sir-sync"},Bh={[z.INLINE_EDIT]:!0,[z.DATES_BATCH]:!0,[z.BULK_EDIT]:!0,[z.LINK_CREATE]:!0,[z.LINK_UPDATE]:!0,[z.LINK_DELETE]:!0,[z.LINKS_BATCH]:!0,[z.ACTIVITY_CREATE]:!0,[z.ACTIVITY_DELETE]:!0,[z.ACTIVITY_MOVE]:!0,[z.ACTIVITY_INDENT]:!0,[z.ACTIVITY_OUTDENT]:!0,[z.ACTIVITY_SET_PROGRESS]:!0,[z.ACTIVITY_PASTE]:!0,[z.SELECTION_TOGGLE]:!0,[z.SELECTION_REPLACE]:!0,[z.VISIBILITY_SET]:!0,[z.SIR_SYNC]:!0},Yl=Object.keys(Bh);var Vl={CHILD:"child",CHILD_CONFIRMED:"child-confirmed",LINE:"line",ROOT:"root"};return Xl(jh);})();
|
|
2
|
+
//# sourceMappingURL=schedule-core.global.js.map
|