@outbuild-company/schedule-core 1.27.0 → 1.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build-fingerprint.json +2 -2
- package/dist/cdn/schedule-core.global.js +1 -1
- package/dist/cdn/schedule-core.global.js.map +1 -1
- package/dist/index.cjs +33 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +31 -1
- package/dist/index.d.ts +31 -1
- package/dist/index.js +33 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var ScheduleCore=(()=>{var Ls=Object.defineProperty;var XA=Object.getOwnPropertyDescriptor;var ZA=Object.getOwnPropertyNames;var QA=Object.prototype.hasOwnProperty;var tI=(t,e)=>{for(var i in e)Ls(t,i,{get:e[i],enumerable:!0})},eI=(t,e,i,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of ZA(e))!QA.call(t,r)&&r!==i&&Ls(t,r,{get:()=>e[r],enumerable:!(n=XA(e,r))||n.enumerable});return t};var iI=t=>eI(Ls({},"__esModule",{value:!0}),t);var zb={};tI(zb,{ACTIVITY_BATCH_ACTION_KIND:()=>Xe,ACTIVITY_BATCH_MODE:()=>Lt,ACTIVITY_DATE_EDGE:()=>ur,ACTIVITY_FIELD:()=>Ft,ACTIVITY_PONDERATOR_CRITERION:()=>ct,ACTIVITY_PROGRESS_ORIGIN:()=>eo,ACTIVITY_TYPE:()=>L,CALENDAR_UNIT:()=>dt,CHANGE_SET_SOURCE_KIND:()=>Kt,COLUMN:()=>T,COMPLETED_PROGRESS:()=>gt,CONFIRMATION_KIND:()=>Ut,CONSTRAINT_TYPE:()=>_,CONSTRAINT_TYPE_TO_LABEL:()=>qA,CONSTRAINT_WARNING_KIND:()=>Yi,CREATION_KIND:()=>JA,DATA_DATE_PROPERTY_CONTRACT:()=>$A,DATE_GESTURE_KIND:()=>ee,DEFAULT_HOURS_PER_DAY:()=>zA,DISPATCH_ACTION_KIND:()=>A,DISPATCH_ACTION_KINDS:()=>vd,DISPATCH_LINK_OPERATION_KIND:()=>ft,DISPATCH_TRACK_EVENT:()=>fe,DataDateCapabilityError:()=>se,EDIT_ALERT_KEY:()=>Ja,EDIT_DENIAL_REASON:()=>Ae,ENTITY_CHANGE_KIND:()=>H,FILTER_FIELD:()=>Z,FILTER_LOGIC:()=>dn,FILTER_OPERATOR:()=>K,FILTER_REJECTION_REASON:()=>mt,FILTER_VALUE_KIND:()=>x,FLAT_WBS_DEPTH:()=>ma,GROUP_ID_PREFIX:()=>Fs,GROUP_ID_SEPARATOR:()=>un,LINK_BATCH_OPERATION_KIND:()=>cn,LINK_CODE:()=>xt,LINK_CODE_TO_TYPE:()=>Hi,LINK_REJECTION_REASON:()=>ht,LINK_RELATIONSHIP:()=>bi,LINK_TYPE:()=>M,LINK_TYPE_CODE:()=>Ha,LookaheadActualTransitionError:()=>na,MINIMUM_GROUP_DEPTH:()=>ha,MINIMUM_GROUP_LEVEL:()=>ti,NEW_ACTIVITY_DEFAULTS:()=>To,NOT_STARTED_PROGRESS:()=>Bt,ORDER_DIRECTION:()=>Vt,ORDER_MODE:()=>we,REJECTION_REASON:()=>v,ROOT_PARENT_ID:()=>Y,SCHEDULE_CORE_STATUS:()=>De,SCHEDULE_EFFECT_KIND:()=>io,SIR_AUTO_REJECT_REASON:()=>no,STATUS:()=>Wt,STATUS_CRITERIA:()=>ze,ScheduleCore:()=>sr,UNASSIGNED_GROUP_LABEL:()=>ya,UNASSIGNED_VALUE_ID:()=>xi,VIEW_ATTRIBUTE_KIND:()=>Fi,VISUAL_ROW_KIND:()=>pn,WORK_TIME_DIRECTION:()=>z,allowedSecondaryConstraintTypes:()=>sl,appendGroupRowId:()=>Aa,buildGroupRowId:()=>ga,checkNoUpdatedLinks:()=>Cm,computeExpectedProgress:()=>ul,createLookaheadDerivedFields:()=>GA,createOutbuildDataDateScheduleSettings:()=>Ps,createSchedule:()=>WA,expectedProgressFromBaseline:()=>Fn,formatUtcAsP6WallDate:()=>SA,getActiveBaseline:()=>Tt,getUnsavedActivities:()=>VA,isRootParent:()=>W,isViewAttributeCriterion:()=>wi,isViewAttributeOrderRule:()=>fn,mapDataDateScheduleOptions:()=>DA,normalizeParentKey:()=>re,parseFromBackend:()=>is,parseP6DayAsCalendarStart:()=>_s,parseP6WallDateAsUtc:()=>Ts,planLookaheadProgressActuals:()=>Ad,prepareLookaheadProgressActuals:()=>KA,resolveExpectedFinishDateSelection:()=>YA,resolveLookaheadActualDateSelection:()=>ks,willRunCriticalPath:()=>im,yieldToBrowser:()=>St});var sa={CONSTRAINT:"constraint",ALERT:"alert",WARNING:"warning"},z={FUTURE:"future",PAST:"past"},dt={MINUTE:"minute",HOUR:"hour",DAY:"day"},ct={DURATION:"DURATION",COST:"COST",WORK_HOURS:"HH"},ze={BASELINE:"Baseline",ACTUAL:"Actual"},Wt={DONE:"Done",OVERDUE:"Overdue",ADVANCEMENT:"Advancement",WAITING:"Waiting",DOING:"Doing"},H={CREATED:"created",UPDATED:"updated",DELETED:"deleted"};var _={ASAP:"asap",ALAP:"alap",SNET:"snet",SNLT:"snlt",FNET:"fnet",FNLT:"fnlt",MSO:"mso",MFO:"mfo"},nI={[_.MSO]:()=>!0,[_.MFO]:()=>!0,[_.SNLT]:(t,e)=>t<e,[_.SNET]:(t,e)=>t>e,[_.FNLT]:(t,e)=>t<e,[_.FNET]:(t,e)=>t>e};function ca(t,e,i){if(!e)return{violated:!1};let n=nI[t];return n?n(e,i)?{violated:!0,constraintType:t,constraintDate:e}:{violated:!1}:{violated:!1}}var rI=new Set([_.MSO,_.SNET,_.SNLT]);function Oi(t,e,i){return rI.has(t)?e:i}function da(t,e,i){return{type:sa.CONSTRAINT,messageKey:"constraint_violation",data:{constraintType:t,constraintDate:e,...i?{projectedDate:i}:{}}}}var aI={[_.SNET]:{startOfDay:!0,direction:z.FUTURE},[_.SNLT]:{startOfDay:!0,direction:z.PAST},[_.FNET]:{startOfDay:!1,direction:z.FUTURE},[_.FNLT]:{startOfDay:!1,direction:z.PAST},[_.MSO]:{startOfDay:!0,direction:z.FUTURE},[_.MFO]:{startOfDay:!1,direction:z.PAST}},la=t=>new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())),Id=(t,e)=>new Date(t.getTime()+e*864e5),oI=(t,e)=>t.getUTCFullYear()===e.getUTCFullYear()&&t.getUTCMonth()===e.getUTCMonth()&&t.getUTCDate()===e.getUTCDate();function dr(t,e){if(!t.constraintDate||!t.constraintType)return null;let i=aI[t.constraintType];if(!i)return t.constraintDate;let n=t.constraintDate,r=e.getClosestWorkTime({date:la(n),dir:z.FUTURE,task:t});if(oI(r,n))return n.getTime()!==la(n).getTime()?n:i.startOfDay?r:e.getClosestWorkTime({date:Id(la(n),1),dir:z.PAST,task:t});let a=la(e.getClosestWorkTime({date:n,dir:i.direction,task:t}));return i.startOfDay?e.getClosestWorkTime({date:a,dir:z.FUTURE,task:t}):e.getClosestWorkTime({date:Id(a,1),dir:z.PAST,task:t})}function Je(t,e){let i={earliestStart:null,latestStart:null,earliestEnd:null,latestEnd:null},n=t.constraintType;if(!n||n===_.ASAP||n===_.ALAP)return i;let r=dr(t,e);if(!r)return i;let a=s=>e.calculateEndDate({startDate:s,durationHours:t.durationHours,task:t}),o=s=>e.calculateEndDate({startDate:s,durationHours:-t.durationHours,task:t});switch(n){case _.SNET:return{earliestStart:r,latestStart:null,earliestEnd:a(r),latestEnd:null};case _.SNLT:return{earliestStart:null,latestStart:r,earliestEnd:null,latestEnd:a(r)};case _.FNET:return{earliestStart:o(r),latestStart:null,earliestEnd:r,latestEnd:null};case _.FNLT:return{earliestStart:null,latestStart:o(r),earliestEnd:null,latestEnd:r};case _.MSO:{let s=a(r);return{earliestStart:r,latestStart:r,earliestEnd:s,latestEnd:s}}case _.MFO:{let s=o(r);return{earliestStart:s,latestStart:s,earliestEnd:r,latestEnd:r}}default:return i}}function Sd(t,e){return!(e.earliestStart&&t<e.earliestStart||e.latestStart&&t>e.latestStart)}function Os(t,e){return e.latestStart&&t>e.latestStart?e.latestStart:e.earliestStart&&t<e.earliestStart?e.earliestStart:t}var M={FINISH_TO_START:"0",START_TO_START:"1",FINISH_TO_FINISH:"2",START_TO_FINISH:"3"},sI=Object.values(M);function ua(t){return sI.includes(t)}var ln={ACTUAL_START:"actualStart",ACTUAL_FINISH:"actualFinish",PLANNED_START:"plannedStart",PLANNED_FINISH:"plannedFinish",REMAINING_DURATION_HOURS:"remainingDurationHours",EXECUTION_STATUS:"executionStatus",EXPECTED_FINISH:"expectedFinish",SUSPEND_DATE:"suspendDate",RESUME_DATE:"resumeDate",SECONDARY_CONSTRAINT_TYPE:"secondaryConstraintType",SECONDARY_CONSTRAINT_DATE:"secondaryConstraintDate",PERCENT_COMPLETE_TYPE:"percentCompleteType",PHYSICAL_PERCENT_COMPLETE:"physicalPercentComplete"},lI={TEXT:"text",DESCRIPTION:"description",DURATION:"duration",PROGRESS:"progress",COST:"cost",USED_COST:"used_cost",HH_WORK_TIME:"hhWorkTime",START_DATE:"start_date",END_DATE:"end_date",CONSTRAINT_TYPE:"constraint_type",CONSTRAINT_DATE:"constraint_date",CALENDAR_ID:"calendar_id",CUSTOM_ID:"custom_id",SUBCONTRACT_ID:"subcontractId",RESPONSABLES:"responsables",TAGS:"tags",CUSTOM_PREDECESSORS:"custom_predecessors",CUSTOM_SUCESSORS:"custom_sucessors",...ln},cI={REAL_WORK:"real_work",REAL_COST:"real_cost",EXPECTED_PROGRESS:"expected_progress",EXPECTED_PROGRESS_BASE:"expected_progress_base",START_BASE:"start_base",END_BASE:"end_base",DURATION_BASE:"duration_base",COST_BASE:"cost_base",WORK_BASE:"work_base",BASELINE_VARIANCE:"baseline_variance",CALENDAR_DURATION:"calendarDuration",IS_CRITICAL:"is_critical",EARLY_START:"earlyStart",EARLY_FINISH:"earlyFinish",LATE_START:"lateStart",LATE_FINISH:"lateFinish",FREE_SLACK:"freeSlack",TOTAL_SLACK:"totalSlack",CORRELATIVE_ID:"correlative_id",UNIQUE_CORRELATIVE_ID:"unique_correlative_id",PONDERATOR:"ponderator",STATUS:"status"},T={...lI,...cI};var vt={CREATE:"create",UPDATE:"update",DELETE:"delete"},ht={SELF_LINK:"self-link",CYCLE:"cycle",DUPLICATE:"duplicate",ACTIVITY_MISSING:"activity-missing",LINK_MISSING:"link-missing",HIERARCHY_LINK:"hierarchy-link"};var A={ACTIVITY_CLIPBOARD_CLEAR:"activity-clipboard-clear",ACTIVITY_CLIPBOARD_IMPORT:"activity-clipboard-import",ACTIVITY_COPY:"activity-copy",CALENDAR_RECONCILE:"calendar-reconcile",ACTIVITY_PASTE_COPIED:"activity-paste-copied",ACTIVITY_DUPLICATE:"activity-duplicate",CELL_COPY:"cell-copy",CELL_CLIPBOARD_CLEAR:"cell-clipboard-clear",CELL_PASTE_COPIED:"cell-paste-copied",PERSISTENCE_ACKNOWLEDGE:"persistence-acknowledge",BASELINE_APPLY:"baseline-apply",PONDERATOR_CRITERION_SET:"ponderator-criterion-set",STATUS_CRITERIA_SET:"status-criteria-set",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_TYPE_SET:"activity-type-set",ACTIVITY_SET_PROGRESS:"activity-set-progress",ACTIVITY_LOOKAHEAD_CONVERT:"activity-lookahead-convert",SELECTION_TOGGLE:"selection-toggle",SELECTION_REPLACE:"selection-replace",VISIBILITY_SET:"visibility-set",FILTER_SET:"filter-set",SORT_SET:"sort-set",VIEW_ATTRIBUTES_SET:"view-attributes-set",GROUP_SET:"group-set",WBS_DEPTH_SET:"wbs-depth-set",SIR_SYNC:"sir-sync",ACTIVITY_LOOKAHEAD_SYNC:"activity-lookahead-sync",SCHEDULE_AUTO_SCHEDULE:"schedule-auto-schedule"},Xe="activity-batch",ft=vt,vd=Object.values(A);function Tt(t){let e=t?.baselinePoints;return!Array.isArray(e)||e.length===0?null:e.find(i=>i.isActiveVersion)??null}var Ft={NAME:"name",DESCRIPTION:"description",DURATION_DAYS:"durationDays",PROGRESS:"progress",COST:"cost",USED_COST:"usedCost",WORK_HOURS:"workHours",START_DATE:"startDate",END_DATE:"endDate",CONSTRAINT_TYPE:"constraintType",CONSTRAINT_DATE:"constraintDate",CALENDAR_ID:"calendarId",CUSTOM_ID:"customId",SUBCONTRACT_ID:"subcontractId",RESPONSABLE_IDS:"responsableIds",TAG_IDS:"tagIds"},ur={START:"start",END:"end"},bi={FINISH_TO_START:"finish-to-start",START_TO_START:"start-to-start",FINISH_TO_FINISH:"finish-to-finish",START_TO_FINISH:"start-to-finish"},cn={CREATE:"create",UPDATE:"update",REMOVE:"remove"};var dI={[Ft.NAME]:T.TEXT,[Ft.DESCRIPTION]:T.DESCRIPTION,[Ft.DURATION_DAYS]:T.DURATION,[Ft.PROGRESS]:T.PROGRESS,[Ft.COST]:T.COST,[Ft.USED_COST]:T.USED_COST,[Ft.WORK_HOURS]:T.HH_WORK_TIME,[Ft.START_DATE]:T.START_DATE,[Ft.END_DATE]:T.END_DATE,[Ft.CONSTRAINT_TYPE]:T.CONSTRAINT_TYPE,[Ft.CONSTRAINT_DATE]:T.CONSTRAINT_DATE,[Ft.CALENDAR_ID]:T.CALENDAR_ID,[Ft.CUSTOM_ID]:T.CUSTOM_ID,[Ft.SUBCONTRACT_ID]:T.SUBCONTRACT_ID,[Ft.RESPONSABLE_IDS]:T.RESPONSABLES,[Ft.TAG_IDS]:T.TAGS};function bs(t,e){return{activityId:t,column:dI[e.field],newValue:e.value}}var uI={[bi.FINISH_TO_START]:M.FINISH_TO_START,[bi.START_TO_START]:M.START_TO_START,[bi.FINISH_TO_FINISH]:M.FINISH_TO_FINISH,[bi.START_TO_FINISH]:M.START_TO_FINISH};function pr(t){return uI[t]}function pI(t){return t.kind===cn.CREATE?{kind:ft.CREATE,source:t.sourceId,target:t.targetId,type:pr(t.relationship),...t.lagDays===void 0?{}:{lag:t.lagDays},...t.linkId===void 0?{}:{linkId:t.linkId}}:t.kind===cn.UPDATE?{kind:ft.UPDATE,linkId:t.linkId,...t.sourceId===void 0?{}:{source:t.sourceId},...t.targetId===void 0?{}:{target:t.targetId},...t.relationship===void 0?{}:{type:pr(t.relationship)},...t.lagDays===void 0?{}:{lag:t.lagDays}}:t.kind===cn.REMOVE?{kind:ft.DELETE,linkId:t.linkId}:t}function fI(t){return t===ur.START?T.START_DATE:t===ur.END?T.END_DATE:t}function yI(t){return{kind:Xe,mode:t.mode,items:t.items,links:t.links.map(e=>({source:e.source,target:e.target,type:pr(e.relationship),...e.lagDays===void 0?{}:{lag:e.lagDays},...e.linkId===void 0?{}:{linkId:e.linkId}})),...t.eventSource===void 0?{}:{eventSource:t.eventSource}}}function hI(t){return{get:e=>t.getActivityView(e),list:()=>t.getAllActivitiesView(),ids:()=>t.getAllIds(),forEachId:e=>t.forEachActivityId(e),property:(e,i)=>t.getProperty(e,i),children:e=>t.getChildrenView(e),childIds:e=>t.getChildrenIds(e),hasChildren:e=>t.hasChild(e),indentTargetParentIds:e=>t.getIndentTargetParentIds(e),isCustomIdInUse:(e,i)=>t.isCustomIdInUse(e,i??null),clipboard:()=>t.getActivityClipboardView(),create:(e,i)=>t.dispatch({...e,kind:A.ACTIVITY_CREATE},i),applyBatch:(e,i)=>t.applyActivityBatch(yI(e),i),editInline:(e,i,n)=>t.dispatch({...bs(e,i),kind:A.INLINE_EDIT},n),setType:(e,i,n)=>t.dispatch({kind:A.ACTIVITY_TYPE_SET,activityId:e,type:i},n),applyDragBatch:(e,i)=>t.dispatch({kind:A.DATES_BATCH,edits:e.map(n=>({activityId:n.activityId,column:fI(n.edge),newValue:n.value}))},i),editFields:(e,i)=>t.dispatch({kind:A.BULK_EDIT,edits:e.map(n=>bs(n.activityId,n))},i),remove:(e,i={})=>t.dispatch({...i,kind:A.ACTIVITY_DELETE,activityIds:e}),move:(e,i)=>t.dispatch({...e,kind:A.ACTIVITY_MOVE},i),planLookaheadConversion:e=>t.planLookaheadConversion(e),applyLookaheadConversion:e=>t.applyLookaheadConversion(e),indent:(e,i={})=>t.dispatch({...i,kind:A.ACTIVITY_INDENT,activityIds:e}),outdent:(e,i={})=>t.dispatch({...i,kind:A.ACTIVITY_OUTDENT,activityIds:e}),setProgress:(e,i,n={})=>t.dispatch({...n,kind:A.ACTIVITY_SET_PROGRESS,activityId:e,newValue:i}),copy:(e={})=>t.dispatch({...e,kind:A.ACTIVITY_COPY}),paste:(e,i={})=>t.dispatch({...i,kind:A.ACTIVITY_PASTE_COPIED,destination:{afterSiblingId:e}}),duplicate:(e,i={})=>t.dispatch({...i,kind:A.ACTIVITY_DUPLICATE,activityIds:e}),clearClipboard:(e={})=>t.dispatch({...e,kind:A.ACTIVITY_CLIPBOARD_CLEAR}),importClipboard:(e,i,n={})=>t.dispatch({...n,kind:A.ACTIVITY_CLIPBOARD_IMPORT,snapshot:e,...i===void 0?{}:{references:i}}),lookaheadSync:e=>t.dispatch({...e,kind:A.ACTIVITY_LOOKAHEAD_SYNC}),autoSchedule:(e,i)=>t.dispatch({kind:A.SCHEDULE_AUTO_SCHEDULE,...e===void 0?{}:{activityId:e}},i),createDateGesturePreview:e=>t.createDateGesturePreview(e)}}function mI(t){return{copy:(e,i,n,r={})=>t.dispatch({...r,kind:A.CELL_COPY,activityId:e,column:i,...n===void 0?{}:{copiedText:n}}),paste:(e,i,n,r={})=>t.dispatch({...r,kind:A.CELL_PASTE_COPIED,activityIds:e,column:i,...n===void 0?{}:{clipboardText:n}}),clearClipboard:(e={})=>t.dispatch({...e,kind:A.CELL_CLIPBOARD_CLEAR})}}function gI(t){return{get:e=>t.getLinkView(e),list:()=>t.getAllLinksView(),forActivity:e=>t.getLinksForActivityView(e),create:(e,i)=>t.dispatch({kind:A.LINK_CREATE,source:e.sourceId,target:e.targetId,type:pr(e.relationship),...e.lagDays===void 0?{}:{lag:e.lagDays},...e.linkId===void 0?{}:{linkId:e.linkId}},i),update:(e,i,n)=>t.dispatch({kind:A.LINK_UPDATE,linkId:e,...i.sourceId===void 0?{}:{source:i.sourceId},...i.targetId===void 0?{}:{target:i.targetId},...i.relationship===void 0?{}:{type:pr(i.relationship)},...i.lagDays===void 0?{}:{lag:i.lagDays}},n),remove:(e,i)=>t.dispatch({kind:A.LINK_DELETE,linkId:e},i),batch:(e,i)=>t.dispatch({kind:A.LINKS_BATCH,operations:e.map(pI)},i)}}function Cd(t){let e=(i,n)=>t.dispatch({kind:A.BASELINE_APPLY,points:i},n);return{activities:hI(t),cells:mI(t),links:gI(t),calendars:{get:i=>t.getCalendar(i),list:()=>t.getAllCalendars(),listBase:()=>t.getBaseCalendars(),projectWorkHours:()=>t.getProjectWorkHours(),reconcile:i=>t.dispatch({kind:A.CALENDAR_RECONCILE},i)},selection:{ids:()=>t.getSelectedActivityIds(),toggle:({checked:i,...n})=>t.dispatch({...n,kind:A.SELECTION_TOGGLE,isChecked:i}),replace:(i,n={})=>t.dispatch({...n,kind:A.SELECTION_REPLACE,activityIds:i})},view:{hiddenActivityIds:()=>t.getHiddenActivityIds(),visibleActivityIds:()=>t.getVisibleActivityIds(),visualOrderIds:()=>t.getVisualOrderIds(),visualRows:()=>t.getVisualRows(),filter:()=>t.getActiveFilter(),setFilter:i=>t.dispatch({...i,kind:A.FILTER_SET}),order:()=>t.getActiveOrder(),setOrder:(i,n={})=>t.dispatch({...n,kind:A.SORT_SET,rules:i}),group:()=>t.getActiveGroup(),setViewAttributes:(i,n={})=>t.dispatch({...n,kind:A.VIEW_ATTRIBUTES_SET,catalogs:i}),setGroup:(i,n={})=>t.dispatch({...n,kind:A.GROUP_SET,group:i}),wbsDepth:()=>t.getWbsDepth(),setWbsDepth:(i,n={})=>t.dispatch({...n,kind:A.WBS_DEPTH_SET,wbsDepth:i}),setVisibility:(i,n={})=>t.dispatch({...n,kind:A.VISIBILITY_SET,visibleIds:i}),setStatusCriteria:(i,n)=>t.dispatch({kind:A.STATUS_CRITERIA_SET,criteria:i},n)},baselines:{refresh:e,setVisibility:e,setPonderatorCriterion:(i,n)=>t.dispatch({kind:A.PONDERATOR_CRITERION_SET,criterion:i},n),activeFor:i=>Tt(i)},impactRequests:{sync:i=>t.dispatch({...i,kind:A.SIR_SYNC})},persistence:{hasChanges:()=>t.hasUnsavedChanges(),modifiedActivities:()=>t.getModifiedActivities(),modifiedActivityFields:()=>t.getModifiedActivityFields(),newActivities:()=>t.getNewActivities(),deletedActivities:()=>t.getDeletedActivitiesSinceLastSave(),modifiedLinks:()=>t.getModifiedLinks(),newLinks:()=>t.getNewLinks(),deletedLinks:()=>t.getDeletedLinksSinceLastSave(),captureHistoryBoundary:()=>t.capturePersistenceHistoryBoundary(),readSnapshot:()=>t.readPersistenceCheckpoint(),acknowledge:i=>t.dispatch({kind:A.PERSISTENCE_ACKNOWLEDGE,checkpoint:i})},history:{undo:i=>t.undo(i),redo:i=>t.redo(i),canUndo:()=>t.canUndo(),canRedo:()=>t.canRedo(),clear:()=>t.clearHistory(),depth:()=>t.undoDepth()},projection:{changeSetFrom:i=>t.createProjectionChangeSetFrom(i)},criticalPath:{get ready(){return t.criticalPathReady},recompute:()=>t.recomputeCriticalPath(),isSettled:()=>t.isCriticalPathSettled(),whenSettled:()=>t.whenCriticalPathSettled()},diagnostics:{auditEffectiveGraph:()=>t.auditEffectiveGraph(),revision:()=>t.getScheduleRevision(),stateRevision:()=>t.getStateRevision(),canonicalDigest:()=>t.getCanonicalDigest(),canonicalFingerprint:()=>t.getCanonicalFingerprint()}}}var $t=class{items=[];head=0;enqueue(e){this.items.push(e)}dequeue(){if(this.head>=this.items.length)return;let e=this.items[this.head];return this.head+=1,e}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 pa=t=>String(t);function Dd(t){let{clickedId:e,isChecked:i,currentSelection:n,hierarchy:r,isFrozen:a,exists:o,autoCheckParents:s}=t,l=pa(e),c=new Set([...n].map(String)),d=new Set(c),u=AI(l,r).filter(o),p=u.filter(y=>!a(y)),f=i&&p.length<u.length;i&&!f?d.add(l):d.delete(l);for(let y of p)i?d.add(y):d.delete(y);return f||II({id:l,isChecked:i,autoCheckParents:s,hierarchy:r,isFrozen:a,exists:o,next:d}),{nextSelection:d,changed:SI(c,d),parentBlocked:f}}function AI(t,e){let i=[],n=new $t;n.enqueue(t);let r=new Set([t]);for(;!n.isEmpty();){let a=n.dequeue();for(let o of e.getChildrenIds(a)){let s=pa(o);r.has(s)||(r.add(s),i.push(s),n.enqueue(s))}}return i}function II(t){let{id:e,isChecked:i,autoCheckParents:n,hierarchy:r,isFrozen:a,exists:o,next:s}=t,l=r.getParentId(e);for(;l!==null&&typeof l<"u";){let c=pa(l);if(a(c))return;let d=r.getChildrenIds(c).map(pa).filter(o),u=d.some(a),p=d.filter(h=>!a(h)),y=p.length>0&&p.every(h=>s.has(h))&&!u;if(i){if(!n||!y||s.has(c))return;s.add(c)}else{if(y||!s.has(c))return;s.delete(c)}l=r.getParentId(c)}}function SI(t,e){let i=[],n=[];for(let r of e)t.has(r)||i.push(r);for(let r of t)e.has(r)||n.push(r);return{checked:i,unchecked:n}}function Ze(t){return(t.pendingRequestIds?.length??0)>0}var v={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",CONFIRMATION_REQUIRED:"confirmation_required",DATA_DATE_ACTUAL_START_LOCKED:"data_date_actual_start_locked",DATA_DATE_ACTIVITY_COMPLETED:"data_date_activity_completed",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",NO_ACTIVITY_SELECTION:"no_activity_selection",CLIPBOARD_EMPTY:"clipboard_empty",CLIPBOARD_SNAPSHOT_INVALID:"clipboard_snapshot_invalid",CELL_PASTE_COLUMN_MISMATCH:"cell_paste_column_mismatch",ACTIVITY_PASTE_INVARIANT_FAILED:"activity_paste_invariant_failed",SOLE_SCHEDULE_ROOT:"sole_schedule_root",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",HIERARCHY_CYCLE:"hierarchy_cycle",MANUAL_SCHEDULING_ACTIVE:"manual_scheduling_active",SANDBOX_PERSISTENCE_FORBIDDEN:"sandbox_persistence_forbidden",STALE_STATE_REVISION:"stale-state-revision",INVALID_PROGRESS_VALUE:"invalid_progress_value_must_be_0_or_100"};var Td=(t,e)=>{let i=t.getActivity(e);return i!=null&&Ze(i)},_d=(t,e,i)=>{let n=[],r=(a,o)=>{let s=e.isChecked(a);e.setChecked(a,o)&&n.push({activityId:a,checked:{before:s,after:o}})};for(let a of i.checked)r(a,!0);for(let a of i.unchecked)r(a,!1);return{source:t,activities:[],links:[],calendars:[],trackingEvents:[],viewState:n}};function Ed(t,e){let{adapter:i}=e,n=t.activityId;if(!i.getActivity(n))return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};let r=t.frozenIds?new Set(t.frozenIds):null,a=r?s=>r.has(s):s=>Td(i,s),o=Dd({clickedId:n,isChecked:t.isChecked,currentSelection:new Set(i.checkedIds().map(String)),hierarchy:{getChildrenIds:s=>i.getChildren(s),getParentId:s=>{let l=i.getParentId(s);return!l||l==="0"?null:String(l)}},isFrozen:a,exists:s=>i.activityExists(s),autoCheckParents:t.autoCheckParents??!1});return{ok:!0,changes:_d(t,i,o.changed)}}function fa(t,e){let{adapter:i}=e,n=new Set(t.activityIds.map(String).filter(o=>i.activityExists(o)).filter(o=>!Td(i,o))),r=new Set(i.checkedIds().map(String)),a={checked:[...n].filter(o=>!r.has(o)),unchecked:[...r].filter(o=>!n.has(o))};return{ok:!0,changes:_d(t,i,a)}}function Ni(t,e,i=t.getAllIds()){let n=[];for(let r of i){let a=String(r),o=e.has(a),s=t.isVisible(a);s!==o&&(t.setVisible(a,o),n.push({activityId:a,visible:{before:s,after:o}}))}return n}function Pd(t,e){let{adapter:i}=e,n=new Set(t.visibleIds.map(String)),r=Ni(i,n);return{ok:!0,changes:{source:t,activities:[],links:[],calendars:[],trackingEvents:[],viewState:r}}}var L={TASK:"task",PROJECT:"project",MILESTONE:"milestone"},vI=Object.values(L);function fr(t){return vI.includes(t)}var Rd={ALAP_DEBOUNCE_MS:1e3,CRITICAL_PATH_DEBOUNCE_MS:1e3,YIELD_SLICE_MS:8};var Fi="viewAttribute";var x={STRING:"string",NUMBER:"number",DATE:"date",ID_ARRAY:"id-array",ENUM:"enum",BOOLEAN:"boolean",REFERENCE:"reference"},Z={NAME:"name",DESCRIPTION:"description",CUSTOM_ID:"customId",CORRELATIVE_ID:"correlativeId",UNIQUE_CORRELATIVE_ID:"uniqueCorrelativeId",PROGRESS:"progress",DURATION_DAYS:"durationDays",CALENDAR_DURATION:"calendarDuration",COST:"cost",USED_COST:"usedCost",REAL_COST:"realCost",WORK_HOURS:"workHours",REAL_WORK_HOURS:"realWorkHours",PONDERATOR:"ponderator",FREE_SLACK_DAYS:"freeSlackDays",TOTAL_SLACK_DAYS:"totalSlackDays",EXPECTED_PROGRESS_BASELINE:"expectedProgressBaseline",BASELINE_DURATION_DAYS:"baselineDurationDays",BASELINE_VARIANCE_DAYS:"baselineVarianceDays",BASELINE_COST:"baselineCost",BASELINE_WORK_HOURS:"baselineWorkHours",EXPECTED_PROGRESS:"expectedProgress",START_DATE:"startDate",END_DATE:"endDate",CONSTRAINT_DATE:"constraintDate",BASELINE_START_DATE:"baselineStartDate",BASELINE_END_DATE:"baselineEndDate",EARLY_START:"earlyStart",EARLY_FINISH:"earlyFinish",LATE_START:"lateStart",LATE_FINISH:"lateFinish",RESPONSABLE_IDS:"responsableIds",TAG_IDS:"tagIds",STATUS:"status",CONSTRAINT_TYPE:"constraintType",CALENDAR_ID:"calendarId",SUBCONTRACT_ID:"subcontractId",IS_CRITICAL:"isCritical",FLOAT_PATH:"floatPath",FLOAT_PATH_ORDER:"floatPathOrder"},K={INCLUDES:"includes",NOT_INCLUDES:"notIncludes",IS:"is",IS_NOT:"isNot",EQUALS:"equals",NOT_EQUALS:"notEquals",GREATER_THAN:"greaterThan",LESS_THAN:"lessThan",GREATER_OR_EQUAL:"greaterOrEqual",LESS_OR_EQUAL:"lessOrEqual",AFTER:"after",BEFORE:"before",BETWEEN:"between",SOME_OF:"someOf",NOT_SOME_OF:"notSomeOf"};function wi(t){return"kind"in t&&t.kind===Fi}var dn={AND:"and",OR:"or"};var CI=2,DI=[Wt.WAITING,Wt.DONE,Wt.DOING,Wt.OVERDUE,Wt.ADVANCEMENT],TI=[_.MFO,_.MSO,_.SNLT,_.SNET,_.ALAP,_.ASAP,_.FNET,_.FNLT],_I=1e3*60*60*24;function Ns(t,e){return t===null||e<=0?null:t/e}function EI(t,e){let i=Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()),n=Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate());return Math.floor((n-i)/_I)+1}var PI={[Z.NAME]:{valueKind:x.STRING,extract:t=>t.name},[Z.DESCRIPTION]:{valueKind:x.STRING,extract:t=>t.description},[Z.CUSTOM_ID]:{valueKind:x.STRING,extract:t=>t.customId},[Z.CORRELATIVE_ID]:{valueKind:x.NUMBER,extract:t=>t.correlativeId},[Z.UNIQUE_CORRELATIVE_ID]:{valueKind:x.NUMBER,extract:t=>{let e=Number(t.uniqueCorrelativeId);return Number.isFinite(e)?e:null}},[Z.PROGRESS]:{valueKind:x.NUMBER,extract:t=>t.progress},[Z.DURATION_DAYS]:{valueKind:x.NUMBER,extract:(t,e)=>Ns(t.durationHours,e.hoursPerDay)},[Z.CALENDAR_DURATION]:{valueKind:x.NUMBER,extract:t=>t.type===L.MILESTONE?0:EI(t.startDate,t.endDate)},[Z.COST]:{valueKind:x.NUMBER,extract:t=>t.cost},[Z.USED_COST]:{valueKind:x.NUMBER,extract:t=>t.usedCost},[Z.REAL_COST]:{valueKind:x.NUMBER,extract:t=>t.realCost},[Z.WORK_HOURS]:{valueKind:x.NUMBER,extract:t=>t.workHours},[Z.REAL_WORK_HOURS]:{valueKind:x.NUMBER,extract:t=>t.realWorkHours},[Z.PONDERATOR]:{valueKind:x.NUMBER,extract:t=>t.ponderator},[Z.FREE_SLACK_DAYS]:{valueKind:x.NUMBER,extract:(t,e)=>Ns(t.freeSlackHours,e.hoursPerDay)},[Z.TOTAL_SLACK_DAYS]:{valueKind:x.NUMBER,extract:(t,e)=>Ns(t.criticalPath?.totalSlackHours??null,e.hoursPerDay)},[Z.EXPECTED_PROGRESS_BASELINE]:{valueKind:x.NUMBER,equalityPrecision:CI,extract:t=>t.expectedProgressBaseline},[Z.EXPECTED_PROGRESS]:{valueKind:x.NUMBER,extract:t=>t.expectedProgress},[Z.BASELINE_DURATION_DAYS]:{valueKind:x.NUMBER,extract:t=>t.baselineSnapshot?.durationDays??null},[Z.BASELINE_VARIANCE_DAYS]:{valueKind:x.NUMBER,extract:t=>t.baselineVarianceDays},[Z.BASELINE_COST]:{valueKind:x.NUMBER,extract:t=>t.baselineSnapshot?.cost??null},[Z.BASELINE_WORK_HOURS]:{valueKind:x.NUMBER,extract:t=>t.baselineSnapshot?.workHours??null},[Z.START_DATE]:{valueKind:x.DATE,extract:t=>t.startDate},[Z.END_DATE]:{valueKind:x.DATE,extract:t=>t.endDate},[Z.CONSTRAINT_DATE]:{valueKind:x.DATE,extract:t=>t.constraintDate},[Z.BASELINE_START_DATE]:{valueKind:x.DATE,extract:t=>t.baselineSnapshot?.startDate??null},[Z.BASELINE_END_DATE]:{valueKind:x.DATE,extract:t=>t.baselineSnapshot?.endDate??null},[Z.EARLY_START]:{valueKind:x.DATE,extract:t=>t.criticalPath?.earlyStart??null},[Z.EARLY_FINISH]:{valueKind:x.DATE,extract:t=>t.criticalPath?.earlyFinish??null},[Z.LATE_START]:{valueKind:x.DATE,extract:t=>t.criticalPath?.lateStart??null},[Z.LATE_FINISH]:{valueKind:x.DATE,extract:t=>t.criticalPath?.lateFinish??null},[Z.RESPONSABLE_IDS]:{valueKind:x.ID_ARRAY,extract:t=>t.responsableIds},[Z.TAG_IDS]:{valueKind:x.ID_ARRAY,extract:t=>t.tagIds},[Z.STATUS]:{valueKind:x.ENUM,order:DI,extract:t=>t.status},[Z.CONSTRAINT_TYPE]:{valueKind:x.ENUM,order:TI,extract:t=>t.constraintType},[Z.CALENDAR_ID]:{valueKind:x.REFERENCE,extract:t=>t.calendarId===null?null:String(t.calendarId)},[Z.SUBCONTRACT_ID]:{valueKind:x.REFERENCE,extract:t=>t.subcontractId===null?null:String(t.subcontractId)},[Z.IS_CRITICAL]:{valueKind:x.BOOLEAN,extract:t=>t.isCritical},[Z.FLOAT_PATH]:{valueKind:x.NUMBER,extract:t=>t.p6?.floatPath??null},[Z.FLOAT_PATH_ORDER]:{valueKind:x.NUMBER,extract:t=>t.p6?.floatPathOrder??null}};function Qe(t){return PI[t]??null}var pn={GROUP:"group",ACTIVITY:"activity"},xi="unassigned",Fs="g",un=":",ya="Unassigned",ha=1,ti=1,ma=0;function ga(t,e){return`${Fs}${un}${t}${un}${e}`}function Aa(t,e,i){return`${t}${un}${e}${un}${i}`}var Ld=null;function kd(t){return t===Ld?"":t}function Od(t){let e=new Map,i=new Map;for(let l of t.values){e.set(l.id,l);let c=kd(l.parentId),d=i.get(c)??[];d.push(l),i.set(c,d)}for(let l of i.values())l.sort((c,d)=>c.sequence!==d.sequence?c.sequence-d.sequence:c.id.localeCompare(d.id));let n=new Map,r=new Map,a=(l,c,d)=>{let u=i.get(kd(l))??[];for(let p of u){let f=[...c,p.id],y=[...d,p.sequence];n.set(p.id,f),r.set(p.id,y),a(p.id,f,y)}};a(Ld,[],[]);let o=new Map;for(let l of e.keys()){let c=new Set([l]);for(let[d,u]of n)u.includes(l)&&c.add(d);o.set(l,c)}let s=new Map;for(let l of t.assignments)e.has(l.valueId)&&s.set(String(l.activityId),l.valueId);return{key:t.key,valueById:e,pathByValueId:n,sequencePathByValueId:r,descendantIdsByValueId:o,assignmentByActivityId:s}}var Ia=new Map;function bd(t,e){let i=new Set;for(let n of e){let r=t.descendantIdsByValueId.get(n);if(r===void 0){i.add(n);continue}for(let a of r)i.add(a)}return i}function Nd(t,e,i,n){let r=Math.max(i,ti),a=t.pathByValueId.get(e);return a===void 0||a.length===0?r>ti?[]:[e]:a.slice(r-1,Math.max(n,r))}function Fd(t,e,i){let n=i.get(e.key),r=n?.assignmentByActivityId.get(String(t.id))??null,a=n?bd(n,e.value):new Set(e.value),o=r!==null&&a.has(r);return e.operator===K.SOME_OF?o:e.operator===K.NOT_SOME_OF?!o:!1}function ws(t){return t instanceof Date?t:typeof t=="string"||typeof t=="number"?new Date(t):new Date(Number.NaN)}function Fe(t){return Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())}function RI(t,e,i){let n=t===null;return i===K.INCLUDES?!n&&String(t).toLowerCase().includes(e.toLowerCase()):i===K.NOT_INCLUDES?n||!String(t).toLowerCase().includes(e.toLowerCase()):i===K.IS?!n&&String(t)===e:i===K.IS_NOT?n||String(t)!==e:!1}function kI(t,e,i,n){if(t===null||typeof t!="number")return i===K.NOT_EQUALS;let r=n===void 0?t:Number(t.toFixed(n));return i===K.EQUALS?r===e:i===K.NOT_EQUALS?r!==e:i===K.GREATER_THAN?t>e:i===K.LESS_THAN?t<e:i===K.GREATER_OR_EQUAL?t>=e:i===K.LESS_OR_EQUAL?t<=e:!1}function LI(t,e,i){return typeof t=="number"&&t>=e&&t<=i}function OI(t,e,i){if(!(t instanceof Date))return!1;let n=Fe(t),r=Fe(e);return i===K.AFTER?n>r:i===K.BEFORE?n<r:!1}function bI(t,e,i){if(!(t instanceof Date))return!1;let n=Fe(t);return n>=Fe(e)&&n<=Fe(i)}function NI(t,e,i){let r=(Array.isArray(t)?t:[]).some(a=>e.has(String(a)));return i===K.SOME_OF?r:i===K.NOT_SOME_OF?!r:!1}function FI(t,e,i){let n=t!==null&&e.has(String(t));return i===K.SOME_OF?n:i===K.NOT_SOME_OF?!n:!1}function wd(t){let e=Array.isArray(t)?t:[t];return new Set(e.map(i=>String(i)))}function va(t){return t.viewAttributeCatalogs??Ia}function Sa(t,e,i,n){if(wi(e))return Fd(t,e,n);let r=Qe(e.field);if(r===null)return!1;let a=r.extract(t,i),{operator:o}=e;return o===K.BETWEEN?r.valueKind===x.NUMBER?LI(a,Number(e.value),Number(e.valueTo)):r.valueKind===x.DATE?bI(a,ws(e.value),ws(e.valueTo)):!1:r.valueKind===x.STRING?RI(a,String(e.value),o):r.valueKind===x.NUMBER?kI(a,Number(e.value),o,r.equalityPrecision):r.valueKind===x.DATE?OI(a,ws(e.value),o):r.valueKind===x.ID_ARRAY?NI(a,wd(e.value),o):FI(a,wd(e.value),o)}function xd(t,e,i,n){return e.criteria.length===0?!0:e.logic===dn.OR?e.criteria.some(r=>Sa(t,r,i,n)):e.criteria.every(r=>Sa(t,r,i,n))}function wI(t,e,i,n){return e.groups&&e.groups.length>0?e.logic===dn.OR?e.groups.some(r=>xd(t,r,i,n)):e.groups.every(r=>xd(t,r,i,n)):e.criteria.length===0?!0:e.logic===dn.OR?e.criteria.some(r=>Sa(t,r,i,n)):e.criteria.every(r=>Sa(t,r,i,n))}function xI(t,e){let i=Fe(t.startDate),n=Fe(t.endDate),r=Fe(e.start),a=Fe(e.end),o=i>=r&&n<=a,s=i>=r&&i<=a,l=r>=i&&r<=n;return o||s||l}function xs(t,e,i,n){let r=wI(t,e,i,n),a=e.dateRange,o=a===void 0||xI(t,a);return r&&o}function MI(t,e,i){let n=e(t);for(;n!==null&&!i.has(String(n));)i.add(String(n)),n=e(n)}function Md(t){let{activities:e,parentOf:i,filter:n,context:r}=t,a=va(t),o=new Set,s=[];for(let l of e)xs(l,n,r,a)&&(o.add(String(l.id)),s.push(l.id));for(let l of s)MI(l,i,o);return o}function UI(t){let{activities:e,parentOf:i,filter:n,context:r}=t,a=va(t),o=new Set,s=new Map,l=new Map,c=new Map;for(let d of e){let u=String(d.id),p=i(u);l.set(u,p),c.set(u,c.get(u)??0),p!==null&&c.set(p,(c.get(p)??0)+1);let f=xs(d,n,r,a);s.set(u,f?1:0),f&&o.add(u)}return{matchedIds:o,visibleReferenceCounts:s,parentIds:l,remainingChildren:c}}function HI(t){let{visibleReferenceCounts:e,parentIds:i,remainingChildren:n}=t,r=[];for(let a of i.keys())n.get(a)===0&&r.push(a);for(;r.length>0;){let a=r.pop();if(a===void 0)break;let o=i.get(a);if(o==null)continue;let s=e.get(a)??0;e.set(o,(e.get(o)??0)+s);let l=(n.get(o)??1)-1;n.set(o,l),l===0&&r.push(o)}}function BI(t){let e=new Set;for(let[i,n]of t)n>0&&e.add(i);return e}function Ca(t){let e=UI(t);HI(e);let i=BI(e.visibleReferenceCounts);return{filter:t.filter,context:t.context,matchedIds:e.matchedIds,visibleIds:i,visibleReferenceCounts:e.visibleReferenceCounts,viewAttributeCatalogs:va(t)}}function Ud(t,e,i){let n=new Set;for(let r of e){let a=String(r.id);n.add(a);let o=t.matchedIds.has(a),s=xs(r,t.filter,t.context,va(t));if(o===s)continue;s?t.matchedIds.add(a):t.matchedIds.delete(a);let l=s?1:-1,c=a;for(;c!==null;){let d=t.visibleReferenceCounts.get(c)??0,u=d+l;t.visibleReferenceCounts.set(c,u);let p=d>0,f=u>0;p!==f&&(n.add(c),f?t.visibleIds.add(c):t.visibleIds.delete(c)),c=i(c)}}return n}function Mi(t){return{hoursPerDay:t,locale:"en"}}var mt={UNKNOWN_FIELD:"unknown_field",UNKNOWN_OPERATOR:"unknown_operator",INVALID_VALUE:"invalid_value"},jI={[x.STRING]:new Set([K.INCLUDES,K.NOT_INCLUDES,K.IS,K.IS_NOT]),[x.NUMBER]:new Set([K.EQUALS,K.NOT_EQUALS,K.GREATER_THAN,K.LESS_THAN,K.GREATER_OR_EQUAL,K.LESS_OR_EQUAL,K.BETWEEN]),[x.DATE]:new Set([K.AFTER,K.BEFORE,K.BETWEEN]),[x.ID_ARRAY]:new Set([K.SOME_OF,K.NOT_SOME_OF]),[x.ENUM]:new Set([K.SOME_OF,K.NOT_SOME_OF]),[x.BOOLEAN]:new Set([K.SOME_OF,K.NOT_SOME_OF]),[x.REFERENCE]:new Set([K.SOME_OF,K.NOT_SOME_OF])};function Hd(t){if(t===void 0)return{ok:!0,dateRange:void 0};if(typeof t!="object"||t===null)return{ok:!1,reason:mt.INVALID_VALUE};let{start:e,end:i}=t;if(!(e instanceof Date)||!(i instanceof Date))return{ok:!1,reason:mt.INVALID_VALUE};let n=e.getTime(),r=i.getTime();return!Number.isFinite(n)||!Number.isFinite(r)||n>r?{ok:!1,reason:mt.INVALID_VALUE}:{ok:!0,dateRange:{start:new Date(n),end:new Date(r)}}}function Hs(t){if(wi(t))return VI(t);let e=Qe(t.field);if(e===null)return{ok:!1,reason:mt.UNKNOWN_FIELD};if(!jI[e.valueKind].has(t.operator))return{ok:!1,reason:mt.UNKNOWN_OPERATOR};if(t.operator===K.BETWEEN)return WI(t,e.valueKind);if(e.valueKind===x.NUMBER){let n=Ms(t.value);return n===null?{ok:!1,reason:mt.INVALID_VALUE}:{ok:!0,criterion:{...t,value:n}}}if(e.valueKind===x.DATE){let n=Us(t.value);return n===null?{ok:!1,reason:mt.INVALID_VALUE}:{ok:!0,criterion:{...t,value:n}}}let i=KI(t,e.valueKind);return i!==null?{ok:!1,reason:i}:e.valueKind===x.BOOLEAN?{ok:!0,criterion:{...t,value:[...new Set(t.value)]}}:e.valueKind===x.ID_ARRAY||e.valueKind===x.ENUM||e.valueKind===x.REFERENCE?{ok:!0,criterion:{...t,value:[...new Set(t.value.map(String))]}}:{ok:!0,criterion:t}}function WI(t,e){if(e===x.NUMBER){let i=Ms(t.value),n=Ms(t.valueTo);return i===null||n===null||i>n?{ok:!1,reason:mt.INVALID_VALUE}:{ok:!0,criterion:{...t,value:i,valueTo:n}}}if(e===x.DATE){let i=Us(t.value),n=Us(t.valueTo);return i===null||n===null||i.getTime()>n.getTime()?{ok:!1,reason:mt.INVALID_VALUE}:{ok:!0,criterion:{...t,value:i,valueTo:n}}}return{ok:!1,reason:mt.UNKNOWN_OPERATOR}}function VI(t){return wi(t)?typeof t.key!="string"||t.key.length===0?{ok:!1,reason:mt.UNKNOWN_FIELD}:t.operator!==K.SOME_OF&&t.operator!==K.NOT_SOME_OF?{ok:!1,reason:mt.UNKNOWN_OPERATOR}:!Array.isArray(t.value)||t.value.some(e=>typeof e!="string")?{ok:!1,reason:mt.INVALID_VALUE}:{ok:!0,criterion:t}:{ok:!1,reason:mt.UNKNOWN_FIELD}}function KI(t,e){let{value:i}=t;return e===x.BOOLEAN?Array.isArray(i)&&i.every(n=>typeof n=="boolean")?null:mt.INVALID_VALUE:e===x.ID_ARRAY||e===x.ENUM||e===x.REFERENCE?Array.isArray(i)&&i.every(n=>typeof n=="string"||typeof n=="number")?null:mt.INVALID_VALUE:Array.isArray(i)?mt.INVALID_VALUE:null}function Ms(t){if(typeof t=="string"&&t.trim()===""||typeof t!="string"&&typeof t!="number")return null;let e=typeof t=="number"?t:Number(t);return Number.isFinite(e)?e:null}function Us(t){let e;if(t instanceof Date)e=new Date(t.getTime());else if(typeof t=="string")e=new Date(t);else if(typeof t=="number")e=new Date(t);else return null;return Number.isFinite(e.getTime())?e:null}function S(t){return structuredClone(t)}function Bd(t){return!(t.groups!==void 0&&t.groups.some(i=>i.criteria.length>0))&&t.criteria.length===0&&t.dateRange===void 0}function jd(t,e,i){let n=t.getAllActivities();if(Bd(e))return{visibleIds:Md({activities:n,parentOf:a=>t.getParentId(a),filter:e,context:Mi(i),viewAttributeCatalogs:t.getViewAttributeCatalogMap()}),projection:null};let r=Ca({activities:n,parentOf:a=>t.getParentId(a),filter:e,context:Mi(i),viewAttributeCatalogs:t.getViewAttributeCatalogMap()});return{visibleIds:r.visibleIds,projection:r}}function YI(t){if(!t||t.length===0)return{ok:!0,groups:[]};let e=[];for(let i of t){let n=[];for(let r of i.criteria){let a=Hs(r);if(!a.ok)return{ok:!1,reason:a.reason};n.push(a.criterion)}e.push({criteria:n,logic:i.logic})}return{ok:!0,groups:e}}function Wd(t,e){let{adapter:i,hoursPerDay:n}=e,r=[];for(let p of t.criteria){let f=Hs(p);if(!f.ok)return{ok:!1,reason:f.reason};r.push(f.criterion)}let a=YI(t.groups);if(!a.ok)return{ok:!1,reason:a.reason};let o=Hd(t.dateRange);if(!o.ok)return{ok:!1,reason:o.reason};let s=S({criteria:r,logic:t.logic,...a.groups.length>0?{groups:a.groups}:{},...o.dateRange!==void 0?{dateRange:o.dateRange}:{}});i.setActiveFilter(Bd(s)?null:s);let{visibleIds:l,projection:c}=jd(i,s,n);i.setFilterProjection(c);let d=Ni(i,l);return{ok:!0,changes:{source:t,activities:[],links:[],calendars:[],trackingEvents:[],viewState:d}}}function Vd(t,e){let i=t.getActiveFilter();if(i===null)return[];let{visibleIds:n,projection:r}=jd(t,i,e);return t.setFilterProjection(r),Ni(t,n)}var Vt={ASCENDING:"asc",DESCENDING:"desc"};function fn(t){return"kind"in t&&t.kind===Fi&&"key"in t&&"direction"in t&&!("operator"in t)}var we={STANDARD:"standard",KEEP_WBS_IN_PLACE:"keepWbsInPlace"};var Y="0";function W(t){return t==null||t===0||t==="0"}function re(t){return W(t)?"0":String(t)}var Bs=Number.MAX_SAFE_INTEGER;function le(t,e){let i=yr(t,e);return Da(i,e.getOrderComparator?.()??null,e.getOrderMode?.()??we.STANDARD,r=>e.hasChildren(r)).map(r=>String(r.id))}function Da(t,e,i,n){return e===null?(t.sort(yn),t):i===we.KEEP_WBS_IN_PLACE?GI(t,e,n):(t.sort((r,a)=>e(r,a)||yn(r,a)),t)}function GI(t,e,i){let n=[],r=[];for(let a of t)i(a.id)?r.push(a):n.push(a);return n.sort((a,o)=>e(a,o)||yn(a,o)),r.sort(yn),t.length=0,t.push(...n,...r),t}function Yd(t){let e=[],i=r=>{e.push(r);let a=le(String(r.id),t);for(let o of a){let s=t.getActivity(o);s&&i(s)}},n=le("0",t);for(let r of n){let a=t.getActivity(r);a&&i(a)}return e}function Gd(t,e,i){let n=i.getActivity(t);if(!n)return null;let r=$d(n),a=le(r,i),o=a.findIndex(s=>String(s)===String(t));if(o<=0)return null;for(let s=o-1;s>=0;s--){let l=a[s];if(l!==void 0&&!$I(e,l))return l}return null}function js(t,e){let i=e.getActivity(t);if(!i)return-1;let n=$d(i);return le(n,e).findIndex(a=>String(a)===String(t))}function yr(t,e){let i=String(t)==="0"?e.getRootIds?.()??e.getChildren("0"):e.getChildren(t),n=[];for(let r of i){let a=e.getActivity(r);a&&n.push(a)}return n}function yn(t,e){let i=Kd(t),n=Kd(e);return i!==n?i-n:String(t.id).localeCompare(String(e.id))}function Kd(t){let e=t.correlativeId,i=typeof e=="number"?e:Number(e);return Number.isFinite(i)?i:Bs}function $d(t){let e=t.parentId;return e===null?"0":e}function $I(t,e){return t.has(e)?!0:t.has(String(e))}function ei(t){let e=[],i=n=>{let r=le(n,t);r.length>1&&e.push({parentId:n,childIds:r});for(let a of r)i(a)};return i("0"),e}function Ws(t,e){let i=[];for(let n of e){let r=le(n,t);r.length>1&&i.push({parentId:n,childIds:r})}return i}function qI(t){return fn(t)?typeof t.key!="string"||t.key.length===0?mt.UNKNOWN_FIELD:t.direction!==Vt.ASCENDING&&t.direction!==Vt.DESCENDING?mt.UNKNOWN_OPERATOR:null:Qe(t.field)===null?mt.UNKNOWN_FIELD:t.direction!==Vt.ASCENDING&&t.direction!==Vt.DESCENDING?mt.UNKNOWN_OPERATOR:null}function qd(t,e){let{adapter:i}=e;for(let o of t.rules){let s=qI(o);if(s!==null)return{ok:!1,reason:s}}let n=t.mode??we.STANDARD,r=t.rules.length===0?null:S({rules:t.rules,mode:n});return i.setActiveOrder(r),{ok:!0,changes:{source:t,activities:[],links:[],calendars:[],trackingEvents:[],order:ei(i)}}}function Vs(t){return Number.isInteger(t)&&Number.isFinite(t)}function zd(t){return t===Vt.ASCENDING||t===Vt.DESCENDING}function Jd(t){let e=t.startLevel??ti;return!Vs(e)||e<ti||!Vs(t.depth)||t.depth<ha||t.depth<e?null:{startLevel:e,depth:t.depth}}var hn=Symbol("invalid-group-criterion");function zI(t){let e=t.secondary;if(e==null)return null;if(typeof e!="object"||typeof e.attributeKey!="string"||e.attributeKey.length===0||e.attributeKey===t.attributeKey)return hn;let i=Jd(e);return i===null||!zd(e.direction)?hn:{attributeKey:e.attributeKey,startLevel:i.startLevel,depth:i.depth,direction:e.direction}}function JI(t){if(typeof t.attributeKey!="string"||t.attributeKey.length===0)return null;let e=Jd(t);if(e===null||!zd(t.direction)||typeof t.includeWbs!="boolean"||!Array.isArray(t.collapsedIds)||t.collapsedIds.some(n=>typeof n!="string"))return null;let i=zI(t);return i===hn?null:{attributeKey:t.attributeKey,startLevel:e.startLevel,depth:e.depth,direction:t.direction,includeWbs:t.includeWbs,collapsedIds:new Set(t.collapsedIds),secondary:i}}function Ta(t){return{source:t,activities:[],links:[],calendars:[],trackingEvents:[]}}function Xd(t,e){let{adapter:i,hoursPerDay:n}=e;if(!Array.isArray(t.catalogs))return{ok:!1,reason:mt.INVALID_VALUE};i.setViewAttributeCatalogs(t.catalogs);let r=Vd(i,n),a=i.getActiveOrder();return{ok:!0,changes:{...Ta(t),viewState:r,...a===null?{}:{order:ei(i)}}}}function Zd(t,e){let{adapter:i}=e;if(t.group===null)return i.setGroup(null),{ok:!0,changes:Ta(t)};let n=JI(t.group);return n===null?{ok:!1,reason:mt.INVALID_VALUE}:(i.setGroup(n),{ok:!0,changes:Ta(t)})}function Qd(t,e){let{adapter:i}=e,{wbsDepth:n}=t;return n!==null&&(!Vs(n)||n<ma)?{ok:!1,reason:mt.INVALID_VALUE}:(i.setWbsDepth(n),{ok:!0,changes:Ta(t)})}function tu(t,e){throw new Error(e)}var Ks={OWN_BASELINE:"own-baseline",RECURSIVE_LEAF_SUM:"recursive-leaf-sum",ZERO:"zero"},Ys={[L.PROJECT]:{alwaysSummary:!0,holdsConstraint:!1,carriesCustomId:!1,forcedDuration:null,ponderatorWeight:Ks.RECURSIVE_LEAF_SUM,promotesToProjectOnFirstChild:!1},[L.TASK]:{alwaysSummary:!1,holdsConstraint:!0,carriesCustomId:!0,forcedDuration:null,ponderatorWeight:Ks.OWN_BASELINE,promotesToProjectOnFirstChild:!0},[L.MILESTONE]:{alwaysSummary:!1,holdsConstraint:!0,carriesCustomId:!0,forcedDuration:0,ponderatorWeight:Ks.ZERO,promotesToProjectOnFirstChild:!0}};function he(t,e){return e||fr(t)&&Ys[t].alwaysSummary}function xe(t){return t===L.MILESTONE}function ii(t){return fr(t)&&Ys[t].promotesToProjectOnFirstChild}var Gs=L.PROJECT,mn=L.TASK;function hr(t,e){return e===0?L.MILESTONE:t===0&&e>0?L.TASK:null}var B={ID:"id",PROPLANNER_ID:"proplannerId",PARENT:"parentId",NAME:"name",DESCRIPTION:"description",TYPE:"type",START_DATE:"startDate",END_DATE:"endDate",DURATION_HOURS:"durationHours",CONSTRAINT_TYPE:"constraintType",CONSTRAINT_DATE:"constraintDate",AUTO_SCHEDULING:"autoScheduling",CALENDAR_ID:"calendarId",ASSIGNED_DEFAULT_CALENDAR:"assignedDefaultCalendar",DATE_ORIGIN:"dateOrigin",PROGRESS:"progress",COST:"cost",USED_COST:"usedCost",REAL_COST:"realCost",WORK_HOURS:"workHours",REAL_WORK_HOURS:"realWorkHours",PONDERATOR:"ponderator",HAS_CUSTOM_PONDERATOR:"hasCustomPonderator",CORRELATIVE_ID:"correlativeId",UNIQUE_CORRELATIVE_ID:"uniqueCorrelativeId",CUSTOM_ID:"customId",SUBCONTRACT_ID:"subcontractId",IS_LOOKAHEAD:"isLookahead",HAS_LOOKAHEAD_TASKS:"hasLookaheadTasks",NEW_ACTIVITIES_ARRAY:"newActivityIds",HAS_NEW_ACTIVITIES:"hasNewActivities",IS_NEW_ACTIVITY:"isNewActivity",PENDING_REQUEST_IDS:"pendingRequestIds",RESPONSABLE_IDS:"responsableIds",TAG_IDS:"tagIds",BASELINE_POINTS:"baselinePoints",BASELINE_SNAPSHOT:"baselineSnapshot",SUM_OF_DURATION_RECURSIVELY:"recursiveDurationHours",CALENDAR_DURATION:"calendarDuration",BASELINE_VARIANCE_DAYS:"baselineVarianceDays",IS_CRITICAL:"isCritical",FREE_SLACK_HOURS:"freeSlackHours",EXPECTED_PROGRESS:"expectedProgress",EXPECTED_PROGRESS_BASELINE:"expectedProgressBaseline",STATUS:"status",CRITICAL_PATH:"criticalPath",P6:"p6"},Jt={ID:"id",SOURCE:"source",TARGET:"target",TYPE:"type",LAG:"lag",FREE_SLACK_HOURS:"freeSlackHours",IS_CRITICAL:"isCritical",SOURCE_LAG:"_sourceLag",TARGET_LAG:"_targetLag",TRUE_LAG:"_trueLag",SUMMARY_SOURCE_ID:"_summarySourceId",SUMMARY_TARGET_ID:"_summaryTargetId",LAG_ACTIVITY_ID:"_lagActivityId",GANTT_ID:"ganttId",SECTOR_ID:"sectorId",PROPLANNER_ID:"proplannerId"};function eu(t,e){return()=>e()===t}var $s=typeof window>"u",XI=!$s&&typeof MessageChannel<"u";function St(){return XI?new Promise(t=>{let e=new MessageChannel;e.port1.onmessage=()=>{e.port1.close(),e.port2.close(),t()},e.port2.postMessage(null)}):Promise.resolve()}async function _a(t,e){return performance.now()-t<Rd.YIELD_SLICE_MS?{aborted:!1,newSliceStart:t}:(await St(),e()?{aborted:!1,newSliceStart:performance.now()}:{aborted:!0,newSliceStart:performance.now()})}async function gn(t){return $s||await St(),t()?{aborted:!1}:{aborted:!0}}function Ee(t,e){let{inDegree:i,successors:n}=ZI(t,e),r=QI(i),a=tS(r,i,n),o=a.length<t.length,s=o?eS(t,a):[],l=[...a].reverse();return{ordered:a,reversed:l,hasCycles:o,cycleNodes:s}}function ZI(t,e){let i=new Map,n=new Map;for(let r of t)i.set(r,0),n.set(r,[]);for(let r of e){let a=r.source,o=r.target;!i.has(a)||!i.has(o)||(n.get(a).push(o),i.set(o,(i.get(o)??0)+1))}return{inDegree:i,successors:n}}function QI(t){let e=new $t;for(let[i,n]of t)n===0&&e.enqueue(i);return e}function tS(t,e,i){let n=[];for(;!t.isEmpty();){let r=t.dequeue();n.push(r);for(let a of i.get(r)??[]){let o=(e.get(a)??1)-1;e.set(a,o),o===0&&t.enqueue(a)}}return n}function eS(t,e){let i=new Set(e);return t.filter(n=>!i.has(n))}var Ea=class{cached=null;invalidate(){this.cached=null}get(e,i){return this.cached?this.cached:(this.cached=Ee(e,i),this.cached)}};function iu(t,e){let i=[];for(let n of t)e.has(n)&&i.push(n);return i}var Bt=0,gt=100,qs=100+Number.EPSILON*100*2;function An(t){return t>=100&&t<=qs}function Ui(t){return t===0}function Pa(t,e){let i=e.getActivity(t);return i?he(i.type,e.getChildren(t).length>0):!1}function Ra(t,e,i){let n=String(e),r=i.getActivity(t);for(;r?.parentId&&String(r.parentId)!=="0";){if(String(r.parentId)===n)return!0;r=i.getActivity(r.parentId)}return!1}function ka(t,e,i){let n=Pa(t,i);return Pa(e,i)&&Ra(t,e,i)||n&&Ra(e,t,i)}function au(t,e){let i=[],n=[t];for(;n.length>0;){let r=n.pop(),a=e.getChildren(r);if(a.length===0){String(r)!==String(t)&&i.push(r);continue}for(let o of a)n.push(o)}return i}function iS(t){let e=new Map;for(let i of t)nu(e,String(i.source),i),nu(e,String(i.target),i);return e}function nu(t,e,i){let n=t.get(e);if(n){n.push(i);return}t.set(e,[i])}function nS(t,e,i,n){if(t.length<=1)return t;let r=new Set(t.map(String)),a=[];for(let o of t)rS(o,r,e,i,n)||a.push(o);return a.length>0?a:t}function rS(t,e,i,n,r){let a=String(t),o=i.getActivity(t);if(!o||o.autoScheduling===!1)return!1;let s=n.get(a)??[];for(let l of s)if(aS(l,a,o,e,i,r))return!0;return!1}function aS(t,e,i,n,r,a){if(oS(t)||!(a?String(t.source)===e:String(t.target)===e))return!1;let s=sS(t,e);if(!n.has(String(s)))return!1;let l=r.getActivity(s);return!!(l?.autoScheduling!==!1&&l&&lS(t,i,l))}function oS(t){return t.source===t.target}function sS(t,e){return String(t.source)===e?t.target:t.source}function lS(t,e,i){let n=t.lag??0,r=Math.abs(n);return String(t.target)===String(i.id)&&r<=i.durationHours||String(t.target)===String(e.id)&&r<=e.durationHours}function La(t,e){let i=[],n=iS(t),r=0;for(let a of t){let o=Pa(a.source,e),s=Pa(a.target,e);if(cS(a,o,s,e))continue;if(!o&&!s){i.push(a);continue}let l=ru(a.source,o,e,n,!0),c=ru(a.target,s,e,n,!1);r=hS(i,l,c,a,e,r,n)}return i}function cS(t,e,i,n){return i&&Ra(t.source,t.target,n)||e&&Ra(t.target,t.source,n)}function ru(t,e,i,n,r){return e?nS(au(t,i),i,n,r):[t]}function ou(t,e,i){let n=au(t,e);if(n.length===0)return null;let r=null,a=null;for(let o of n){let s=i(o);if(!s)continue;(r===null||s.startDate<r)&&(r=s.startDate),(a===null||s.endDate>a)&&(a=s.endDate)}return r===null||a===null?null:{startDate:r,endDate:a}}function In(t,e,i=n=>e.getActivity(n)){return ou(t,e,i)}function dS(t,e,i){return t?e?i.calculateDuration({startDate:e.startDate,endDate:e.endDate,task:t}):t.durationHours:0}function uS(t,e,i,n){if(!e)return 0;let r=n.getActivity(t);return!i||!r?-e.durationHours:-n.calculateDuration({startDate:i.startDate,endDate:r.endDate,task:e})}function pS(t,e){let i=String(t);return(e.get(i)??[]).some(r=>String(r.target)===i)}function fS(t,e,i,n,r){if(!r&&pS(t,n))return 0;let a=i.getActivity(t);return!e||!a?0:i.calculateDuration({startDate:e,endDate:a.startDate,task:a})}function yS(t,e){let i=e.getActivity(t.source),n=e.getActivity(t.target),r=In(t.source,e),a=In(t.target,e),o=ou(t.target,e,c=>{let d=e.getActivity(c);if(!d)return null;let u=d.constraintDate!==null&&(d.constraintType===_.MSO||d.constraintType===_.MFO);return d.autoScheduling&&d.progress!==100&&!u?{startDate:d.startDate,endDate:d.endDate}:null}),s=t.type===M.START_TO_START||t.type===M.START_TO_FINISH,l=t.type===M.FINISH_TO_FINISH||t.type===M.START_TO_FINISH;return{source:i,sourceBounds:r,targetStart:o?.startDate??n?.startDate,targetBounds:o,hasFrozenTargetStart:!!(a&&o&&a.startDate<o.startDate),targetEndpointIsFinish:l,userLag:t.lag??0,sourceEndpointIsStart:s,summarySourceId:s&&r?t.source:void 0,finishAnchoredSummaryTargetId:l&&o?t.target:void 0}}function hS(t,e,i,n,r,a,o){let s=yS(n,r),{source:l,sourceBounds:c,targetStart:d,userLag:u}=s,{sourceEndpointIsStart:p,targetBounds:f,targetEndpointIsFinish:y,hasFrozenTargetStart:h,summarySourceId:m,finishAnchoredSummaryTargetId:g}=s,C=a;for(let b of e){let E=p?uS(b,l,c,r):0;for(let P of i){if(String(b)===String(P))continue;let N=y?-dS(r.getActivity(P),f,r):0,I=fS(P,d,r,o,y);t.push(mS(n,b,P,C,E,N,u+I,m,g??((I!==0||h)&&N===0?n.target:void 0),f?n.target:void 0)),C+=1}}return C}function mS(t,e,i,n,r,a,o,s,l,c){return{id:`virtual_${t.id}_${n}`,source:e,target:i,type:t.type,lag:t.lag,freeSlackHours:null,isCritical:!1,...c===void 0?{}:{_lagActivityId:c},_sourceLag:r,_targetLag:a,_trueLag:o,...s===void 0?{}:{_summarySourceId:s},...l===void 0?{}:{_summaryTargetId:l}}}var Oa=class{invalidate(){}get(e,i){return La(e,i)}};function gS(t){let e=new Map,i=n=>(e.has(n)||e.set(n,new Set),e.get(n));for(let n of t)i(n.source).add(n.id),i(n.target).add(n.id);return{neighbors:e}}function AS(t,e,i){let n=new Set,r=new Map,a=new $t;for(a.enqueue(t);!a.isEmpty();){let o=a.dequeue(),s=String(o);if(n.has(s))continue;n.add(s);let l=i.neighbors.get(o);if(l)for(let c of l){let d=e.get(c);if(!d)continue;let u=`${d.source}-${d.target}-${d.type}`;r.has(u)||r.set(u,d);let p=String(d.source)===s?d.target:d.source;n.has(String(p))||a.enqueue(p)}}return Array.from(r.values())}function su(t,e){let i=new Map;for(let o of e)i.set(o.id,o);let n=gS(e),r=AS(t,i,n),a=new Set([String(t)]);for(let o of r)a.add(String(o.source)),a.add(String(o.target));return{activityIds:a,links:r}}var lu=36e5,cu=1;function ni(t,e){return new Date(t.getTime()+e*lu)}function mr(t){return new Date(t.getTime()+cu)}function Sn(t){return new Date(t.getTime()-cu)}function du(t,e){return(e.getTime()-t.getTime())/lu}function uu(t,e,i){let n=i.type===M.FINISH_TO_START,r=i.type===M.FINISH_TO_FINISH;if(i._targetLag!==void 0)return{sourceLag:i._sourceLag??0,targetLag:i._targetLag,trueLag:i._trueLag??i.lag??0,isFS:n,isFF:r,isZeroDurationCase:!1};let a=i.lag??0;switch(i.type){case M.FINISH_TO_START:return{sourceLag:0,targetLag:0,trueLag:a,isFS:n,isFF:r,isZeroDurationCase:!1};case M.START_TO_START:return{sourceLag:-t.durationHours,targetLag:0,trueLag:a,isFS:n,isFF:r,isZeroDurationCase:!1};case M.FINISH_TO_FINISH:return{sourceLag:0,targetLag:-e.durationHours,trueLag:a,isFS:n,isFF:r,isZeroDurationCase:!1};case M.START_TO_FINISH:return{sourceLag:-t.durationHours,targetLag:-e.durationHours,trueLag:a,isFS:n,isFF:r,isZeroDurationCase:!1};default:return{sourceLag:0,targetLag:0,trueLag:a,isFS:n,isFF:r,isZeroDurationCase:!1}}}function IS(t,e,i,n){if(t._summarySourceId===void 0)return null;let r=i.getActivity(t._summarySourceId);if(!r)return null;let a=In(t._summarySourceId,i,n);return a?-i.calculateDuration({startDate:a.startDate,endDate:e.endDate,task:r}):null}function SS(t,e,i,n,r){let a=e.durationHours===0&&r;return{successorStart:n.getClosestWorkTime({date:t.endDate,dir:a?"past":"future",task:e}),link:i}}function vS(t,e,i,n){return i===null?new Date(t.endDate):n.getClosestWorkTime({date:t.endDate,dir:"future",task:e})}function ba(t,e,i,n){return i===null?ni(t,e):n.calculateEndDate({startDate:t,durationHours:e,task:i})}function CS(t,e,i){return e===null?new Date(t.startDate):i.getClosestWorkTime({date:t.startDate,dir:"past",task:e})}function gr(t,e,i,n,r=e,a){let{sourceLag:o,targetLag:s,trueLag:l,isFS:c,isFF:d}=uu(t,e,i),u=IS(i,t,n,a)??o,p=i._lagActivityId===void 0?null:n.getActivity(i._lagActivityId),f=u+s+l,y=e.durationHours===0;if(!(y?f!==0:u!==0||s!==0||l!==0)&&(!p||y&&u===0&&s===0&&l===0))return SS(t,e,i,n,c||d);let g=vS(t,c?p??e:t,r,n);if(u!==0&&(g=n.calculateEndDate({startDate:g,durationHours:u,task:t})),p){g=ba(g,i.lag??0,p,n),g=n.getClosestWorkTime({date:g,dir:c||i.type===M.START_TO_START?"future":"past",task:p});let C=s+l-(i.lag??0);C!==0&&(g=n.calculateEndDate({startDate:g,durationHours:C,task:e}))}else s!==0&&(g=n.calculateEndDate({startDate:g,durationHours:s,task:e})),l!==0&&(g=ba(g,l,r,n));if(e.durationHours===0){if(c||d)return{successorStart:n.getClosestWorkTime({date:g,dir:"past",task:e}),link:i};let C=new Date(Date.UTC(g.getUTCFullYear(),g.getUTCMonth(),g.getUTCDate()));return{successorStart:n.getClosestWorkTime({date:C,dir:"future",task:e}),link:i}}return{successorStart:n.getClosestWorkTime({date:g,dir:"future",task:e}),link:i}}function Na(t,e,i,n,r=t){let{sourceLag:a,targetLag:o,trueLag:s}=uu(e,t,i),l=i._lagActivityId===void 0?null:n.getActivity(i._lagActivityId),c=l?new Date(t.startDate):CS(t,r,n);if(l){let d=o+s-(i.lag??0);d!==0&&(c=n.calculateEndDate({startDate:c,durationHours:-d,task:t})),c=ba(c,-(i.lag??0),l,n)}else s!==0&&(c=ba(c,-s,r,n)),o!==0&&(c=n.calculateEndDate({startDate:c,durationHours:-o,task:t}));return a!==0&&(c=n.calculateEndDate({startDate:c,durationHours:-a,task:e})),c}function pu(t,e,i){for(let n of t){let r=e.getActivity(n);if(!r)continue;let a=r.constraintType;if(!a||a===_.ASAP||a===_.ALAP)continue;let o=Je(r,e);!o.earliestStart&&!o.latestStart&&!o.earliestEnd&&!o.latestEnd||i.set(n,{activityId:n,startDate:r.startDate,endDate:r.endDate,drivingLinkId:null,kind:_.ASAP,conflict:!1,earliestStart:o.earliestStart,latestStart:o.latestStart,earliestEnd:o.earliestEnd,latestEnd:o.latestEnd})}}function vn(t,e,i){let n={earliestStart:e.earliestStart??null,latestStart:e.latestStart??null,earliestEnd:e.earliestEnd??null,latestEnd:e.latestEnd??null},r=e.earliestSchedulingStart??e.latestSchedulingStart??null,a;r===null?a=Os(t.startDate,n):Sd(r,n)?a=r:a=Os(r,n),e.startDate=a,e.endDate=i.calculateEndDate({startDate:a,durationHours:t.durationHours,task:t})}function fu(t,e){if(!t||!e)return new Date;let{constraintType:i,constraintDate:n}=t;if(!i||!n)return e;switch(i){case _.MSO:case _.MFO:return new Date(n);case _.SNET:case _.FNET:return n>e?new Date(n):e;case _.SNLT:case _.FNLT:return n<e?new Date(n):e;default:return e}}function DS(t,e){return e.length?e.some(i=>String(i)===String(t)):!1}function yu(t,e,i){return zs(t.id,e,i)?{startDate:t.startDate,endDate:t.endDate}:{startDate:t.startDate,endDate:t.endDate}}function zs(t,e,i){return e.dragWithMultiple&&DS(t,i)}function hu(t,e,i){let n=new Map;for(let r of t){if(r.type!==M.FINISH_TO_FINISH&&r.type!==M.START_TO_FINISH)continue;let a=r._summaryTargetId;if(a===void 0||n.has(a))continue;let o=!1,s=new Map,l=null,c=null,d=In(a,e,f=>{let y=e.getActivity(f);if(!y)return null;let h=i(f);s.set(f,h.startDate),(!y.autoScheduling||y.progress===100||y.constraintType!==_.ASAP)&&(o=!0);for(let C of e.getIncomingLinkIds(f)){let b=e.getLink(C);b&&String(b.source)!==String(a)&&!e.isChildOf(b.source,a)&&(o=!0)}let m=y.constraintDate!==null&&(y.constraintType===_.MSO||y.constraintType===_.MFO);return y.autoScheduling&&y.progress!==100&&!m&&(l===null||h.endDate>l||h.endDate.getTime()===l.getTime()&&f<(c??f))&&(l=h.endDate,c=f),h}),u=new Set,p=c===null?[]:[c];for(;p.length>0;){let f=p.pop();if(!u.has(f)){u.add(f);for(let y of[...e.getIncomingLinkIds(f),...e.getOutgoingLinkIds(f)]){let h=e.getLink(y);if(!h)continue;let m=String(h.source)===String(f)?h.target:h.source;s.has(m)&&!u.has(m)&&p.push(m)}}}n.set(a,o&&d?{endDate:d.endDate,movableEnd:l,starts:s,drivingLeafIds:u}:null)}return n}async function Js(t,e,i,n,r,a,o=!1){let s=new Map;for(let f of e){let y=String(f.target);s.has(y)||s.set(y,[]),s.get(y).push(f)}let l=f=>{let y=a.get(f);if(y?.startDate&&y.endDate)return{startDate:y.startDate,endDate:y.endDate};let h=i.getActivity(f);return h?{startDate:h.startDate,endDate:h.endDate}:{startDate:new Date,endDate:new Date}},c=hu(e,i,l),d=i.getFlags(),u=n.draggedIds??[],p=performance.now();for(let f of t){let y=await _a(p,r);if(y.aborted)return a;p=y.newSliceStart;let h=i.getActivity(f);if(!h||!h.autoScheduling||h.progress===100||TS(h,i))continue;let m=s.get(String(f))??[],g=null,C=null,b=!1;for(let R of m){let k=i.getActivity(R.source);if(!k)continue;let O=l(R.source),F=O.startDate.getTime()!==k.startDate.getTime()||O.endDate.getTime()!==k.endDate.getTime(),U={...k,startDate:O.startDate,endDate:O.endDate},$=yu(U,d,u),ut={...U,startDate:$.startDate,endDate:$.endDate},q=zs(R.source,d,u)?{...R,lag:0}:R,At=q._summaryTargetId===void 0||q.type!==M.FINISH_TO_FINISH&&q.type!==M.START_TO_FINISH?null:c.get(q._summaryTargetId);if(At){if(o)continue;let Gt=gr(ut,{...h,durationHours:0},{...q,_targetLag:0,_trueLag:q.lag},i,h,l).successorStart,yt=i.getActivity(q._summaryTargetId)??h;if(At.endDate>=Gt||i.calculateDuration({startDate:At.endDate,endDate:Gt,task:yt})===0||At.movableEnd===null||!At.drivingLeafIds.has(f))continue;q={...q,_targetLag:-i.calculateDuration({startDate:At.starts.get(f)??h.startDate,endDate:At.movableEnd,task:h}),_trueLag:q.lag}}let Pt=!1,ie=gr(ut,h,q,i,h,Gt=>{let yt=l(Gt),ne=i.getActivity(Gt);return ne&&(yt.startDate.getTime()!==ne.startDate.getTime()||yt.endDate.getTime()!==ne.endDate.getTime())&&(Pt=!0),yt});(!g||ie.successorStart>g)&&(g=ie.successorStart,C=String(R.id),b=R._summaryTargetId!==void 0&&!F&&!Pt&&(R._targetLag===0||n.preventSummaryTargetPullback===!0))}g!==null&&b&&g<h.startDate&&(g=new Date(h.startDate));let P=a.get(f),N=P?{...P}:{activityId:f,startDate:h.startDate,endDate:h.endDate,drivingLinkId:null,kind:_.ASAP,conflict:!1},I=N.earliestStart||N.latestStart||N.earliestEnd||N.latestEnd;if(!(!g&&!I)){if(g){let R=g;h.type===L.MILESTONE&&(R=fu(h,g)),N.drivingLinkId=C,N.startDate=R,N.endDate=i.calculateEndDate({startDate:R,durationHours:h.durationHours,task:h}),N.earliestSchedulingStart=R,N.earliestSchedulingEnd=N.endDate}else h.constraintType===_.MSO?N.earliestStart&&(N.startDate=N.earliestStart,N.endDate=N.earliestEnd??i.calculateEndDate({startDate:N.earliestStart,durationHours:h.durationHours,task:h})):h.constraintType===_.MFO&&N.latestStart&&(N.startDate=N.latestStart,N.endDate=N.latestEnd??i.calculateEndDate({startDate:N.latestStart,durationHours:h.durationHours,task:h}));vn(h,N,i),a.set(f,N)}}return a}function TS(t,e){return he(t.type,e.getChildren(t.id).length>0)}async function mu(t,e,i,n,r,a){let o=new Map(i),s=n.getAllActivities(),l=s.length,c=[];for(let m of s)m.constraintType===_.ALAP&&c.push(m.id);if(c.length===0)return o;let d=new Map,u=new Map;for(let m of e){let g=String(m.source);d.has(g)||d.set(g,[]),d.get(g).push(m);let C=String(m.target);u.has(C)||u.set(C,[]),u.get(C).push(m)}let p=m=>{let g=o.get(m);if(g)return{startDate:g.startDate,endDate:g.endDate};let C=n.getActivity(m);return C?{startDate:C.startDate,endDate:C.endDate}:{startDate:new Date,endDate:new Date}},f=m=>!m.parentId||W(m.parentId)?n.getProjectEnd():p(m.parentId).endDate,y=(m,g)=>{let C=m,b=0;for(;C&&!W(C)&&b++<l+1;){if(String(C)===String(g))return!0;let E=n.getActivity(C);if(!E||!E.parentId)break;C=E.parentId}return!1},h=performance.now();for(let m of t){let g=await _a(h,a);if(g.aborted)return o;h=g.newSliceStart;let C=n.getActivity(m);if(!C||C.constraintType!==_.ALAP||!C.autoScheduling||C.progress===100||he(C.type,n.getChildren(m).length>0))continue;let b=f(C),E=b,P=null,N=null,I=!1,R=d.get(String(m))??[];for(let yt of R){if((yt.lag??0)<0)continue;let ne=n.getActivity(yt.target);if(!ne||ne.autoScheduling===!1)continue;let ra=p(yt.target),aa={...ne,startDate:ra.startDate,endDate:ra.endDate},oa=Na(aa,C,yt,n);(E===null||oa<E)&&(E=oa),(P===null||oa<P)&&(P=oa,N=yt.type,I=C.parentId&&!W(C.parentId)?y(yt.target,C.parentId):!1)}if(P!==null)if(I||b===null)E=P;else{let yt=p(m).endDate,ne=yt.getTime()>b.getTime()?yt:b;E=P<ne?P:ne}else{if(b===null||E===null)continue;E>b&&(E=b)}if(E===null)continue;let O=(u.get(String(m))??[]).some(yt=>yt.type===M.FINISH_TO_START||yt.type===M.FINISH_TO_FINISH),F=new Date(Date.UTC(E.getUTCFullYear(),E.getUTCMonth(),E.getUTCDate())),U=()=>n.getClosestWorkTime({date:F,dir:"past",task:C}),$=n.getClosestWorkTime({date:E,dir:"future",task:C}).getTime()===E.getTime(),ut;C.durationHours===0&&P===null?ut=O&&$?U():n.getClosestWorkTime({date:E,dir:"past",task:C}):C.durationHours===0?P!==null&&N===M.FINISH_TO_START&&E.getTime()===P.getTime()?ut=E:O?ut=U():ut=n.getClosestWorkTime({date:E,dir:"future",task:C}):ut=n.getClosestWorkTime({date:E,dir:"future",task:C});let q=n.calculateEndDate({startDate:ut,durationHours:-C.durationHours,task:C}),At=o.get(m),Pt=At?{...At}:{activityId:m,startDate:q,endDate:ut,drivingLinkId:null,kind:_.ALAP,conflict:!1};Pt.startDate=q,Pt.endDate=ut,Pt.drivingLinkId=null,Pt.kind=_.ALAP;let ie=Pt.earliestSchedulingStart??null;Pt.earliestSchedulingStart=null,Pt.earliestSchedulingEnd=null;let Gt=ie!==null&&ie.getTime()>q.getTime()?ie:q;Pt.latestSchedulingStart=Gt,Pt.latestSchedulingEnd=Gt===q?ut:n.calculateEndDate({startDate:Gt,durationHours:C.durationHours,task:C}),vn(C,Pt,n),o.set(m,Pt)}return o}var Cn={warn(){},error(){}};var _S=864e5;function Pe(t){if(t.type===L.MILESTONE)return 0;let e=t.startDate?.getTime(),i=t.endDate?.getTime();return e==null||i==null||Number.isNaN(e)||Number.isNaN(i)?null:Math.floor((i-e)/_S)+1}function Ar(t,e){e.cancelled||e.updatedIds.length===0||t.batchUpdate(()=>{for(let i of e.updatedIds){let n=e.plans.get(i);if(!n)continue;let r=t.getLiveActivity(i);r&&(r.startDate=n.startDate,r.endDate=n.endDate,r.calendarDuration=Pe(r),t.updateActivity(i))}})}function Xs(t,e){let i=String(e.source),n=String(e.target);if(i===n)return!0;let r=new Map;for(let a of t){let o=String(a.source),s=String(a.target),l=r.get(o)??[];l.push(s),r.set(o,l)}return ES(r,n,i)}function Ir(t){let e=new Map,i=new Map;for(let a of t){let o=String(a.source),s=String(a.target),l=e.get(o)??[];l.push(s),e.set(o,l),i.set(o,i.get(o)??0),i.set(s,(i.get(s)??0)+1)}let n=new $t;for(let[a,o]of i)o===0&&n.enqueue(a);let r=0;for(;!n.isEmpty();){let a=n.dequeue();r+=1;for(let o of e.get(a)??[]){let s=i.get(o)-1;i.set(o,s),s===0&&n.enqueue(o)}}return r!==i.size}function ES(t,e,i){if(e===i)return!0;let n=new Set([e]),r=new $t;for(r.enqueue(e);!r.isEmpty();){let a=r.dequeue(),o=t.get(a)??[];for(let s of o){if(s===i)return!0;n.has(s)||(n.add(s),r.enqueue(s))}}return!1}function Fa(t){let e=PS(t);for(let i of e.adjacency.keys())e.records.has(i)||RS(i,e);return e.components}function PS(t){let e=new Map,i=new Set;for(let n of t){let r=String(n.source),a=String(n.target),o=gu(e,r);if(gu(e,a),r===a){i.add(r);continue}o.push(a)}return{adjacency:e,selfLooped:i,records:new Map,componentStack:[],nextIndex:0,components:[]}}function gu(t,e){let i=t.get(e);if(i)return i;let n=[];return t.set(e,n),n}function RS(t,e){let i=[];for(i.push({node:t,record:Au(t,e),neighborCursor:0});i.length>0;){let n=i[i.length-1];if(n===void 0)break;let r=e.adjacency.get(n.node)??[];if(n.neighborCursor<r.length){let s=r[n.neighborCursor];if(n.neighborCursor+=1,s===void 0)continue;kS(n,s,i,e);continue}i.pop();let a=i[i.length-1];a&&n.record.lowLink<a.record.lowLink&&(a.record.lowLink=n.record.lowLink),n.record.lowLink===n.record.visitIndex&&LS(n.node,e)}}function kS(t,e,i,n){let r=n.records.get(e);if(!r){i.push({node:e,record:Au(e,n),neighborCursor:0});return}r.onStack&&r.visitIndex<t.record.lowLink&&(t.record.lowLink=r.visitIndex)}function Au(t,e){let i={visitIndex:e.nextIndex,lowLink:e.nextIndex,onStack:!0};return e.nextIndex+=1,e.records.set(t,i),e.componentStack.push({node:t,record:i}),i}function LS(t,e){let i=[];for(;;){let o=e.componentStack.pop();if(o===void 0||(o.record.onStack=!1,i.push(o.node),o.node===t))break}let n=i[0],r=i.length===1&&n!==void 0&&e.selfLooped.has(n);(i.length>1||r)&&e.components.push(i)}function Sr(t,e,i){let n=i?new Zs(t,i):t;return La([...e],n)}var Zs=class{constructor(e,i){this.base=e;e.isWorkTime!==void 0&&(this.isWorkTime=e.isWorkTime.bind(e));for(let[n,r]of i.reparented){let a=String(n),o=r===null||W(r)?null:r,s=e.getActivity(n)?.parentId??null,l=s===null||W(s)?null:String(s),c=o===null?null:String(o);if(l!==c){if(this.reparented.set(a,o),l!==null){let d=this.movedOutByParent.get(l)??new Set;d.add(a),this.movedOutByParent.set(l,d)}if(c!==null){let d=this.movedInByParent.get(c)??[];d.push(n),this.movedInByParent.set(c,d)}}}}base;isWorkTime;reparented=new Map;movedOutByParent=new Map;movedInByParent=new Map;withOverride(e){if(!e)return null;let i=this.reparented.get(String(e.id));return i===void 0?e:{...e,parentId:i}}getActivity(e){return this.withOverride(this.base.getActivity(e))}getLiveActivity(e){return this.withOverride(this.base.getLiveActivity(e))}getAllActivities(){return this.base.getAllActivities().map(e=>this.withOverride(e)??e)}getChildren(e){let i=String(e),n=this.movedOutByParent.get(i),r=this.base.getChildren(e),a=n?r.filter(s=>!n.has(String(s))):[...r],o=this.movedInByParent.get(i);return o&&a.push(...o),a}getParent(e){let i=this.reparented.get(String(e));return i===void 0?this.base.getParent(e):i===null?null:this.getActivity(i)}isChildOf(e,i){let n=String(i),r=new Set,a=this.getActivity(e);for(;a;){let o=a.parentId;if(o===null||W(o))return!1;let s=String(o);if(s===n)return!0;if(r.has(s))return!1;r.add(s),a=this.getActivity(o)}return!1}getAllLinks(){return this.base.getAllLinks()}getAllIds(){return this.base.getAllIds()}getLink(e){return this.base.getLink(e)}activityExists(e){return this.base.activityExists(e)}getOutgoingLinkIds(e){return this.base.getOutgoingLinkIds(e)}getIncomingLinkIds(e){return this.base.getIncomingLinkIds(e)}getClosestWorkTime(e){return this.base.getClosestWorkTime(e)}calculateEndDate(e){return this.base.calculateEndDate(e)}calculateDuration(e){return this.base.calculateDuration(e)}batchUpdate(e){this.base.batchUpdate(e)}updateActivity(e){this.base.updateActivity(e)}getFlags(){return this.base.getFlags()}getProjectEnd(){return this.base.getProjectEnd()}};function ri(t){let{port:e,proposedPort:i,currentLinks:n,proposedLinks:r,proposal:a}=t,o=Sr(i??e,r,a);if(!Ir(o))return{ok:!0};let s=Sr(e,n),l=Iu(s),d=[...Iu(o)].filter(u=>!l.has(u));return d.length===0?{ok:!0}:{ok:!1,newlyCyclicActivityIds:d}}function Iu(t){let e=new Set;for(let i of Fa(t))for(let n of i)e.add(n);return e}function xa(t,e,i){return i.getChildren(t).length>0||i.getChildren(e).length>0}function Re(t,e){switch(t.kind){case vt.CREATE:return OS(t,e);case vt.UPDATE:return bS(t,e.port,e.rejectParentLinkMutations??!1);case vt.DELETE:return NS(t,e)}}function vr(t,e){if(t.length===0)return{applied:!0};let i=e.port.getAllLinks(),n=new Map,r=[];for(let c of i){let d=Ma(c);n.has(d)||n.set(d,c.id),r.push({source:c.source,target:c.target})}let a=Ir(r),o=null;for(let{operation:c,linkId:d}of t){if(String(c.source)===String(c.target)){o={applied:!1,rejected:ht.SELF_LINK};break}if(!e.port.getActivity(c.source)||!e.port.getActivity(c.target)){o={applied:!1,rejected:ht.ACTIVITY_MISSING};break}if(e.rejectParentLinkMutations&&xa(c.source,c.target,e.port)){o={applied:!1,rejected:ht.HIERARCHY_LINK};break}if(ka(c.source,c.target,e.port)){o={applied:!1,rejected:ht.HIERARCHY_LINK};break}let u=Ma(c),p=n.get(u);if(p!==void 0){o={applied:!1,rejected:ht.DUPLICATE,linkId:p};break}if(n.set(u,d),a&&Xs(r,{source:c.source,target:c.target}))return{applied:!1,rejected:ht.CYCLE};r.push({source:c.source,target:c.target})}if(!a&&Ir(r))return{applied:!1,rejected:ht.CYCLE};if(o)return o;let s=[...i,...t.map(({operation:c,linkId:d})=>({id:d,source:c.source,target:c.target,type:c.type,lag:c.lag,freeSlackHours:null,isCritical:!1}))];return ri({port:e.port,currentLinks:i,proposedLinks:s}).ok?{applied:!0}:{applied:!1,rejected:ht.CYCLE}}function Ua(t,e){if(t.length===0)return{applied:!0};let i=vr(t,e);if(!i.applied)return i;for(let{operation:n,linkId:r}of t){let a=e.preserved?.get(r);e.port.addLink({id:r,source:n.source,target:n.target,type:n.type,lag:n.lag,freeSlackHours:null,isCritical:!1,...a?.ganttId===void 0?{}:{ganttId:a.ganttId},...a?.sectorId===void 0?{}:{sectorId:a.sectorId},...a?.proplannerId===void 0?{}:{proplannerId:a.proplannerId}})}return{applied:!0}}function Ma(t){return JSON.stringify([String(t.source),String(t.target),t.type])}function OS(t,e){let{port:i}=e;if(String(t.source)===String(t.target))return{applied:!1,rejected:ht.SELF_LINK};let n=i.getActivity(t.source),r=i.getActivity(t.target);if(!n||!r)return{applied:!1,rejected:ht.ACTIVITY_MISSING};if(e.rejectParentLinkMutations&&xa(t.source,t.target,i))return{applied:!1,rejected:ht.HIERARCHY_LINK};if(ka(t.source,t.target,i))return{applied:!1,rejected:ht.HIERARCHY_LINK};let a=i.getAllLinks();for(let d of a)if(String(d.source)===String(t.source)&&String(d.target)===String(t.target)&&d.type===t.type)return{applied:!1,rejected:ht.DUPLICATE,linkId:d.id};let o=a.map(d=>({source:d.source,target:d.target}));if(Xs(o,{source:t.source,target:t.target}))return{applied:!1,rejected:ht.CYCLE};let s=(e.newLinkId??FS)(),l={id:s,source:t.source,target:t.target,type:t.type,lag:t.lag,freeSlackHours:null,isCritical:!1};return ri({port:i,currentLinks:a,proposedLinks:[...a,l]}).ok?(i.addLink(l),{applied:!0,linkId:s}):{applied:!1,rejected:ht.CYCLE}}function bS(t,e,i){let n=e.getLink(t.linkId);if(!n)return{applied:!1,rejected:ht.LINK_MISSING};let r={...n,source:t.source??n.source,target:t.target??n.target,type:t.type??n.type,lag:t.lag??n.lag};if(String(r.source)===String(r.target))return{applied:!1,rejected:ht.SELF_LINK};if(!e.getActivity(r.source)||!e.getActivity(r.target))return{applied:!1,rejected:ht.ACTIVITY_MISSING};if(i&&(xa(n.source,n.target,e)||xa(r.source,r.target,e)))return{applied:!1,rejected:ht.HIERARCHY_LINK};if(ka(r.source,r.target,e))return{applied:!1,rejected:ht.HIERARCHY_LINK};let a=e.getAllLinks(),o=a.find(c=>String(c.id)!==String(t.linkId)&&Ma(c)===Ma(r));if(o)return{applied:!1,rejected:ht.DUPLICATE,linkId:o.id};let s=a.map(c=>String(c.id)===String(t.linkId)?r:c);return ri({port:e,currentLinks:a,proposedLinks:s}).ok?((String(n.source)!==String(r.source)||String(n.target)!==String(r.target))&&e.setLinkEndpoints(t.linkId,r.source,r.target),t.lag!==void 0&&e.setLinkField(t.linkId,"lag",t.lag),t.type!==void 0&&e.setLinkField(t.linkId,"type",t.type),{applied:!0,linkId:t.linkId}):{applied:!1,rejected:ht.CYCLE}}function NS(t,e){let{port:i}=e;return i.getLink(t.linkId)?(i.removeLink(t.linkId),{applied:!0,linkId:t.linkId}):{applied:!1,rejected:ht.LINK_MISSING}}var wa=null;function FS(){return wa===null&&(wa=Date.now()),wa+=1,String(wa)}var xt={FINISH_TO_START:"fs",START_TO_START:"ss",FINISH_TO_FINISH:"ff",START_TO_FINISH:"sf"},Ha={[M.FINISH_TO_START]:xt.FINISH_TO_START,[M.START_TO_START]:xt.START_TO_START,[M.FINISH_TO_FINISH]:xt.FINISH_TO_FINISH,[M.START_TO_FINISH]:xt.START_TO_FINISH},Hi={[xt.FINISH_TO_START]:M.FINISH_TO_START,[xt.START_TO_START]:M.START_TO_START,[xt.FINISH_TO_FINISH]:M.FINISH_TO_FINISH,[xt.START_TO_FINISH]:M.START_TO_FINISH},Su=xt.FINISH_TO_START;function vu(t){if(t in Hi)return Hi[t]}var Cu=";",ai={DAY:"d",WEEK:"w",WEEK_DHTMLX:"wk",MONTH:"m",MONTH_DHTMLX:"mon",YEAR:"y"},Du=/^(\d+)(fs|ss|ff|sf)?(?:([+-]?)(\d+(?:\.\d+)?)(weeks?|wk|w|months?|mon|m|days?|d|years?|y)?)?$/i;var wS=5,Ba=30,Qs=365,xS={[ai.DAY]:1,day:1,days:1,[ai.MONTH]:Ba,[ai.MONTH_DHTMLX]:Ba,month:Ba,months:Ba,[ai.YEAR]:Qs,year:Qs,years:Qs},MS=new Set([ai.WEEK,ai.WEEK_DHTMLX,"week","weeks"]);function ja(t,e={}){let i=[],n=[],r=e.daysPerWeek!==void 0&&Number.isFinite(e.daysPerWeek)&&e.daysPerWeek>0?e.daysPerWeek:wS,a=t.replace(/\s+/g,"");if(a.length===0)return{specs:i,errors:n};for(let o of a.split(Cu)){if(o.length===0)continue;let s=US(o,r);s?i.push(s):n.push(o)}return{specs:i,errors:n}}function US(t,e){let i=t.toLowerCase(),n=Du.exec(i);if(!n)return null;let[,r,a,o,s,l]=n,c=a?Hi[a]:Hi[Su],d=0;if(s!==void 0){let u=Number(s);if(Number.isNaN(u))return null;let p=l!==void 0&&MS.has(l)?e:xS[l??ai.DAY],f=u*p;d=o==="-"?-f:f}return{correlativeId:r,type:c,lag:d}}function Dn(t){let{targetActivityId:e,currentLinks:i,desiredSpecs:n}=t,r=[],a=new Map;for(let c of n){let d=t.resolveActivityByCorrelative(c.correlativeId);if(d==null){r.push(c);continue}let u=Wa(d,c.type);a.has(u)||a.set(u,{source:d,type:c.type,lag:c.lag})}let o=new Map;for(let c of i)String(c.target)===String(e)&&o.set(Wa(c.source,c.type),c);let s=[],l=Tu(o,a,c=>c.source);for(let[c,d]of a){if(o.has(c))continue;let u=l.get(String(d.source))?.pop();if(!u)continue;let[p,f]=u;s.push({kind:vt.UPDATE,linkId:f.id,type:d.type,lag:d.lag}),o.delete(p),a.delete(c)}for(let[c,d]of o)a.has(c)||s.push({kind:vt.DELETE,linkId:d.id});for(let[c,d]of a){let u=o.get(c);u&&u.lag!==d.lag&&s.push({kind:vt.UPDATE,linkId:u.id,lag:d.lag})}for(let[c,d]of a)o.has(c)||s.push({kind:vt.CREATE,source:d.source,target:e,type:d.type,lag:d.lag});return{operations:s,unresolved:r}}function Wa(t,e){return`${String(t)}::${e}`}function Tu(t,e,i){let n=new Map;for(let r of t){if(e.has(r[0]))continue;let a=String(i(r[1])),o=n.get(a)??[];o.push(r),n.set(a,o)}return n}function Tn(t){let{sourceActivityId:e,currentLinks:i,desiredSpecs:n}=t,r=[],a=new Map;for(let c of n){let d=t.resolveActivityByCorrelative(c.correlativeId);if(d==null){r.push(c);continue}let u=Wa(d,c.type);a.has(u)||a.set(u,{target:d,type:c.type,lag:c.lag})}let o=new Map;for(let c of i)String(c.source)===String(e)&&o.set(Wa(c.target,c.type),c);let s=[],l=Tu(o,a,c=>c.target);for(let[c,d]of a){if(o.has(c))continue;let u=l.get(String(d.target))?.pop();if(!u)continue;let[p,f]=u;s.push({kind:vt.UPDATE,linkId:f.id,type:d.type,lag:d.lag}),o.delete(p),a.delete(c)}for(let[c,d]of o)a.has(c)||s.push({kind:vt.DELETE,linkId:d.id});for(let[c,d]of a){let u=o.get(c);u&&u.lag!==d.lag&&s.push({kind:vt.UPDATE,linkId:u.id,lag:d.lag})}for(let[c,d]of a)o.has(c)||s.push({kind:vt.CREATE,source:e,target:d.target,type:d.type,lag:d.lag});return{operations:s,unresolved:r}}function Va(t){let e=Math.sign(t)*Math.round(Math.abs(t));return Object.is(e,-0)?0:e}function ce(t,e){return Math.sign(t)*Math.round(Math.abs(t)*e)}var _u={rawInputToConstraintDate(t,e){let i=new Date(t);return i.setUTCHours(0,0,0,0),i.getTime()===t.getTime()?e.getClosestWorkTime({direction:z.FUTURE,date:t,unit:dt.HOUR}):e.isWorkTime(t,dt.HOUR)?t:i},computeLagBetweenTasks(t,e,i){return i.calculateDuration(t,e)}};function tl(t,e,i){switch(i){case M.FINISH_TO_START:return{sourceDate:t.endDate,targetDate:e.startDate};case M.START_TO_START:return{sourceDate:t.startDate,targetDate:e.startDate};case M.FINISH_TO_FINISH:return{sourceDate:t.endDate,targetDate:e.endDate};case M.START_TO_FINISH:return{sourceDate:t.startDate,targetDate:e.endDate}}}var el=_u;var _n=class{adapter;reporter;currentCalculationId=0;topoCache=new Ea;expandedLinksCache=new Oa;constructor(e,i=Cn){this.adapter=e,this.reporter=i}getCurrentCalculationId(){return this.currentCalculationId}invalidateTopoCache(){this.topoCache.invalidate()}invalidateExpandedLinksCache(){this.expandedLinksCache.invalidate()}invalidateAllCaches(){this.topoCache.invalidate(),this.expandedLinksCache.invalidate()}async schedule(e={}){let i=++this.currentCalculationId,n=eu(i,()=>this.currentCalculationId),r={plans:new Map,updatedIds:[],cycles:[],cancelled:!1};try{jS(this.adapter);let a=oi("schedule.total"),o=oi("schedule.expandParentLinks"),s=this.adapter.getAllLinks(),l=this.expandedLinksCache.get(s,this.adapter);Me(o);let c=l;if((await gn(n)).aborted)return{...r,cancelled:!0};let d=oi("schedule.scoping"),u=this.adapter.getAllIds(),p=WS(e,c,this.adapter),f=p.links,y=p.idSet;Me(d);let h=oi("schedule.topologicalSort"),m=KS(this.topoCache,u,c,y);if(Me(h),m.hasCycles)return Me(a),{...r,cycles:[m.cycleNodes]};if((await gn(n)).aborted)return{...r,cancelled:!0};let g=oi("schedule.processConstraints"),C=new Map;if(pu(m.ordered,this.adapter,C),Me(g),(await gn(n)).aborted)return{...r,cancelled:!0};let b=oi("schedule.asapPass"),E=f.some(F=>F._summaryTargetId!==void 0&&(F.type===M.FINISH_TO_FINISH||F.type===M.START_TO_FINISH)),P=await Js(m.ordered,f,this.adapter,e,n,C,E),N=E?await Js(m.ordered,f,this.adapter,e,n,P):P;if(Me(b),(await gn(n)).aborted)return{...r,cancelled:!0};let I=oi("schedule.alapPass"),R=await mu(m.reversed,f,N,this.adapter,e,n);if(Me(I),(await gn(n)).aborted)return{...r,cancelled:!0};let k=oi("schedule.diff"),O=[];for(let[F,U]of R){let $=this.adapter.getActivity(F);if(!$)continue;let ut=$.startDate.getTime()!==U.startDate.getTime(),q=$.endDate.getTime()!==U.endDate.getTime();(ut||q)&&O.push(F)}return Me(k),Me(a),{plans:R,updatedIds:O,cycles:[],cancelled:!1}}catch(a){throw this.reporter.error("[AutoScheduler] Error during scheduling",a),a}}},HS=!1;function BS(){let t=globalThis.__SCHEDULER_PHASE_LOG__;return typeof t=="boolean"?t:HS}function oi(t){return{name:t,startedAt:performance.now()}}function jS(t){let e=t;typeof e.clearCalendarCache=="function"&&e.clearCalendarCache()}function Me(t){if(!BS())return;let e=performance.now()-t.startedAt;console.log(`[scheduler] ${t.name} ${e.toFixed(1)}ms`)}function WS(t,e,i){let n=t.triggerId;if(n==null)return{idSet:null,links:e};let r=su(n,e);return VS(r,e,i)}function VS(t,e,i){let n=new Set(t.activityIds),r=new Set;for(let o of i.getAllActivities()){let s=String(o.id);o.constraintType===_.ALAP&&!n.has(s)&&(r.add(s),n.add(s))}if(r.size===0)return{idSet:n,links:t.links};let a=[...t.links];for(let o of e)(r.has(String(o.source))||r.has(String(o.target)))&&a.push(o);return{idSet:n,links:a}}function KS(t,e,i,n){let r=t.get(e,i);if(r.hasCycles){let o=n?Array.from(n):e;return Ee(o,i)}if(!n)return r;let a=iu(r.ordered,n);return{ordered:a,reversed:[...a].reverse(),hasCycles:!1,cycleNodes:[]}}function Eu(t,e,i){let n=e.getActivity(t);if(!n)return;let r=i?{...n,endDate:i.endDate}:n,a=e.calendarReader.getCalendar(String(n.calendarId));for(let o of e.getIncomingLinkIds(t)){let s=e.getLink(o);if(!s)continue;let l=e.getActivity(s.source);if(!l||l.constraintType===_.ALAP||xe(n.type)&&(s.type===M.START_TO_FINISH||s.type===M.FINISH_TO_FINISH))continue;let{sourceDate:d,targetDate:u}=tl(l,r,s.type),p=el.computeLagBetweenTasks(d,u,a);p!==s.lag&&e.setLinkField(s.id,Jt.LAG,p)}}function Pu(t,e){let i=e.getActivity(t);i&&xe(i.type)&&(i.durationHours=0)}function En(t){let e=0,i=!1;for(let n of t)n.ponderator>0&&(e+=n.ponderator/100*n.progress,i=!0);return i?e:null}function Ka(t){return Number(t.toFixed(2))}function Cr(t,e){let i=new Map;for(let n of YS(t))ku(n,t,e,i)}function Ru(t,e,i){let n=new Map;for(let r of t)ku(r,e,i,n)}function YS(t){let e=new Set;t.forEachActivity((n,r)=>{t.getChildren(r).length>0&&e.add(r)});let i=new Map;for(let n of e)i.set(n,GS(n,t));return[...e].sort((n,r)=>(i.get(r)??0)-(i.get(n)??0))}function GS(t,e){let i=0,n=t;for(;n&&n!=="0"&&e.getActivity(n);)i+=1,n=e.getParentId(n);return i}function ku(t,e,i,n){let r=e.getChildren(t);if(r.length===0)return;let a=[];for(let o of r){let s=e.getActivity(o);s&&a.push({progress:Number(s.progress??0),ponderator:Number(s.ponderator??0)})}il(t,a,e,i,n)}function il(t,e,i,n,r=new Map){let a=i.getActivity(t);if(!a)return;let o=En(e),l=o===null&&n===ct.COST&&$S(t,i,r)===!0?0:o;if(l===null){let c=i.getProgressFallback(t);c!==null&&i.setActivityField(t,T.PROGRESS,c);return}i.getProgressFallback(t)===null&&i.setProgressFallback(t,Number(a.progress??0)),i.setActivityField(t,T.PROGRESS,Ka(l))}function $S(t,e,i){let n=[...e.getChildren(t)],r=!1;for(;n.length>0;){let o=n.pop(),s=i.get(o);if(s===!1)return i.set(t,!1),!1;if(s!==void 0){r||=s===!0;continue}let l=e.getActivity(o);if(!l)continue;let c=e.getChildren(o);if(c.length>0){n.push(...c);continue}let d=qS(l);if(r||=d!==null,d===!1)return i.set(t,!1),!1}let a=r?!0:null;return i.set(t,a),a}function qS(t){let e=Tt(t);return e?t.type===L.MILESTONE||e.cost===0:null}function Lu(t,e,i){let n=[t];for(;n.length>0;){let r=n.pop();if(r===void 0)continue;let a=i.getChildren(r);a.length!==0&&(i.setProgressFallback(r,e),n.push(...a))}}function Xt(t,e){return(Number(t)||0)*(Number(e)||0)/100}var Dr={SKIP:"skip",FREEZE_WITHOUT_CONTRIBUTION:"freeze-when-no-contribution"};async function Ue(t,e,i=!0,n={}){let r=e?Tr(t,e):tv(t),a=i?n.progressMode??Dr.FREEZE_WITHOUT_CONTRIBUTION:Dr.SKIP;await zS(r,t,a,{recomputeRealWork:n.recomputeRealWork??!1,criterion:n.criterion})}function Ya(t,e){Ou(t,e,Dr.SKIP)}async function zS(t,e,i,n={recomputeRealWork:!1}){let r=new Map,a=200,o=0;for(let s of t)Ou(s,e,i,n.recomputeRealWork,n.criterion,r),o+=1,o%a===0&&await St()}function Tr(t,e){let i=new Set,n=new Map;for(let o of e)JS(o,t,i,n);if(i.size===0)return[];let r=Array.from(i),a=XS(r,n);return bu(r,a)}function JS(t,e,i,n){let r=e.getParentId(t);for(;r&&!W(r);){if(i.has(r))return;i.add(r);let a=e.getParentId(r);n.set(r,a),r=a}}function XS(t,e){let i=new Map;for(let n of t){if(i.has(n))continue;let r=[],a=new Set,o=n;for(;o&&!W(o)&&!i.has(o)&&!a.has(o);)r.push(o),a.add(o),o=e.get(o)??null;let s=o?i.get(o)??0:0;for(let l=r.length-1;l>=0;l-=1)s+=1,i.set(r[l],s)}return i}function ZS(t,e,i){let n=null,r=null,a=0,o=[];for(let s of t){let l=e.getActivity(s);if(!l)continue;let c=l.startDate.getTime(),d=l.endDate.getTime();(n===null||c<n)&&(n=c),(r===null||d>r)&&(r=d),i&&(a+=QS(l,e.getChildren(s).length>0)),o.push({progress:Number(l.progress??0),ponderator:Number(l.ponderator??0)})}return{minStart:n,maxEnd:r,realWorkSum:a,weightedChildren:o}}function Ou(t,e,i=Dr.FREEZE_WITHOUT_CONTRIBUTION,n=!1,r,a=new Map){let o=e.getActivity(t);if(!o)return;let s=e.getChildren(t);if(s.length===0)return;let l=ZS(s,e,n);if(l.minStart===null||l.maxEnd===null)return;let c=String(o.calendarId??""),d=e.calendarReader.getCalendar(c),u=new Date(l.minStart),p=new Date(l.maxEnd),f=d.calculateDuration(u,p);e.setActivityField(t,"startDate",u),e.setActivityField(t,"endDate",p),e.setActivityField(t,"durationHours",f),i!==Dr.SKIP&&il(t,l.weightedChildren,e,r,a),n&&e.setActivityField(t,"realWorkHours",l.realWorkSum)}function QS(t,e){return e?Number(t.realWorkHours)||0:Xt(t.workHours,t.progress)}function tv(t){let e=ev(t),i=iv(e,t);return bu(e,i)}function ev(t){let e=new Set;return t.forEachActivity(i=>{i.parentId!==null&&e.add(i.parentId)}),Array.from(e)}function iv(t,e){let i=new Map;for(let n of t)i.set(n,nv(n,e));return i}function nv(t,e){let i=0,n=t;for(;n&&!W(n)&&e.getActivity(n);)i+=1,n=e.getParentId(n);return i}function bu(t,e){return[...t].sort((i,n)=>(e.get(n)??0)-(e.get(i)??0))}var Nu={updateActivityDuration:Pu,updateTaskTiming:av("updateTaskTiming"),adjustLinkLagOnTaskMove:Eu,recordLastStartDate:rv};function rv(t,e){let i=e.getActivity(t);i&&e.setLastStartDate(t,i.startDate)}function si(t,e,i,n){for(let r of e){let a=r in Nu?Nu[r]:void 0;if(!a){console.warn(`[replay post-processors] unknown: ${r} \u2014 skipping. Add an entry in POST_PROCESSORS if a fixture needs it.`);continue}a(t,i,n??null)}}function av(t){return()=>{console.debug(`[replay post-processors] ${t}: not yet ported to adapter \u2014 no-op.`)}}function G(t,e){return e!==void 0?{ok:!0,value:t,raw:e}:{ok:!0,value:t}}function tt(t){return{ok:!1,reason:t}}function rt(){return{valid:!0}}function _t(t,e){return e!==void 0?{valid:!1,reason:t,notification:e}:{valid:!1,reason:t}}function Q(){return{allowed:!0}}function lt(t,e){return e!==void 0?{allowed:!1,reason:t,alertKey:e}:{allowed:!1,reason:t}}function ot(t,e={}){return{patch:t,needsAutoSchedule:e.autoSchedule??!1,postProcessors:e.postProcessors??[],...e.cascadeMutations!==void 0?{cascadeMutations:e.cascadeMutations}:{},...e.trackingEvents!==void 0?{trackingEvents:e.trackingEvents}:{}}}var kt={PROGRESS_ENTRY:"activity_progress_entry",PROGRESS_UPDATE_RADIO_BUTTON:"activity_progress_update_radio_button",DURATION_ENTRY:"activity_duration_entry",START_DATE_ENTRY:"activity_start_date_entry",END_DATE_ENTRY:"activity_end_date_entry",NAME_ENTRY:"activity_name_entry",DESCRIPTION_ENTRY:"activity_description_entry",CALENDAR_ASSIGNMENT:"activity_calendar_assignment",COST_BUDGETED_ENTRY:"activity_cost_budgeted_entry",COST_SPENT_ENTRY:"activity_cost_spent_entry",LABOR_HOURS_BUDGETED_ENTRY:"activity_labor_hours_budgeted_entry"};var Fu={targetField:"name",canEdit(){return Q()},parseInput(t){return typeof t!="string"?tt("not_a_string"):G(t)},validate(){return rt()},transform(t,e){return ot({name:e},{autoSchedule:!1,postProcessors:[]})},trackEvent:kt.NAME_ENTRY};var wu={targetField:"description",canEdit(){return Q()},parseInput(t){return typeof t!="string"?tt("not_a_string"):G(t.trim())},validate(){return rt()},transform(t,e){return ot({description:e},{autoSchedule:!1,postProcessors:[]})},trackEvent:kt.DESCRIPTION_ENTRY};function me(t){return t.constraintType??_.ASAP}var Ga=100;function li(t){return t.progress>=Ga}function Rt(t,e){return he(t.type,e.hasChildren(t.id))}function xu(t){return t.progress>0}function Mu(t){return t.hasLookaheadTasks}function Bi(t,e){return Math.round(Math.ceil(t*e*60)/60)}var Pn=t=>({endDate:t});var $a="UTC";function ci(t,e){if(e){let i=new Intl.DateTimeFormat("en-CA",{timeZone:e,year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(t),n=r=>Number(i.find(a=>a.type===r)?.value);return new Date(Date.UTC(n("year"),n("month")-1,n("day")))}return new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate()))}function qa(t,e){if(!e||e===$a){let p=new Date(t);return p.setUTCHours(23,59,0,0),p}let i=new Intl.DateTimeFormat("en-CA",{timeZone:e,year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(t),n=p=>Number(i.find(f=>f.type===p)?.value),r=n("year"),a=n("month"),o=n("day"),s=Date.UTC(r,a-1,o,23,59,0,0),l=new Intl.DateTimeFormat("en-CA",{timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}).formatToParts(new Date(s)),c=p=>Number(l.find(f=>f.type===p)?.value),u=Date.UTC(c("year"),c("month")-1,c("day"),c("hour")===24?0:c("hour"),c("minute"),c("second"))-s;return new Date(s-u)}function ov(t,e){let i=ci(e,$a);for(;!t.isWorkTime(i,dt.DAY);)i=new Date(i),i.setUTCDate(i.getUTCDate()+1),i=ci(i,$a);return i}function Er(t,e){return t.getClosestWorkTime({direction:z.FUTURE,date:e,unit:dt.HOUR})}function nl(t,e){let i=ov(t,e),n=new Date(i);return n.setUTCDate(n.getUTCDate()+1),n.setUTCHours(0,0,0,0),t.getClosestWorkTime({direction:z.PAST,date:n,unit:dt.HOUR})}function Uu(t,e){return e.isWorkTime(t,dt.HOUR)?new Date(t):e.getClosestWorkTime({direction:z.FUTURE,date:t,unit:dt.HOUR})}function Hu(t,e){if(e.isWorkTime(t,dt.HOUR))return new Date(t);let i=rl(t)?sv(t):t;return e.getClosestWorkTime({direction:z.PAST,date:i,unit:dt.HOUR})}function rl(t){return t.getUTCHours()===0&&t.getUTCMinutes()===0&&t.getUTCSeconds()===0&&t.getUTCMilliseconds()===0}function sv(t){let e=new Date(t);return e.setUTCDate(e.getUTCDate()+1),e}var _r=new Set([_.SNET,_.SNLT,_.MSO]),al=new Set([_.FNET,_.FNLT,_.MFO]),di=new Set([_.ASAP,_.ALAP]),za=_.SNET;function ge(t,e,i){let n=ci(t,$a);return!_r.has(i)&&!al.has(i)?n:_r.has(i)?Bu(n,e):ju(n,e)}function Bu(t,e){return Ku(t,Er(e,t))}function ju(t,e){return Ku(t,nl(e,t))}function Wu(t,e){return rl(t)?Bu(t,e):new Date(t)}function Vu(t,e){return rl(t)?ju(t,e):new Date(t)}function Ku(t,e){let i=new Date(t);return i.setUTCHours(e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()),i}var ui=()=>({constraintType:za});var ji=t=>({constraintDate:t}),Yu=t=>({constraintDate:t});var Gu={UPDATE_ACTIVITY_DURATION:"updateActivityDuration",UPDATE_TASK_TIMING:"updateTaskTiming",ADJUST_LINK_LAG_ON_TASK_MOVE:"adjustLinkLagOnTaskMove",RECORD_LAST_START_DATE:"recordLastStartDate"};var $u={NOT_A_NUMBER:"not_a_number",NOT_A_STRING:"not_a_string",NOT_AN_ARRAY:"not_an_array",NOT_AN_INTEGER:"not_an_integer",INVALID_DATE:"invalid_date",INVALID_CONSTRAINT_TYPE:"invalid_constraint_type",EMPTY_CALENDAR:"empty_calendar",EMPTY_CUSTOM_ID:"empty_custom_id",EXCEEDS_MAX_LENGTH:"exceeds_max_length"},Wi={UNCHANGED:"unchanged",OUT_OF_RANGE:"out_of_range",NEGATIVE_DURATION:"negative_duration",NOT_WORKING_DAY:"not_working_day",BEFORE_PARENT_START:"before_parent_start",BEFORE_START_DATE:"before_start_date",BEFORE_DATE_ORIGIN:"before_date_origin",CONSTRAINT_VIOLATION:"constraint_violation",MISSING_ID:"missing_id",UNKNOWN_CALENDAR:"unknown_calendar"},Ae={COMPLETED:"completed",SUMMARY:"summary",HAS_PROGRESS:"has_progress",HAS_LOOKAHEAD_TASKS:"has_lookahead_tasks",SIR_START_AFTER_PROGRESS:"sir_start_after_progress",DATA_DATE_UNAVAILABLE:"data_date_unavailable",DATA_DATE_ACTUAL_START_LOCKED:"data_date_actual_start_locked",DATA_DATE_ACTIVITY_COMPLETED:"data_date_activity_completed",DATA_DATE_UNITS_PERCENT_READ_ONLY:"data_date_units_percent_read_only",SECONDARY_CONSTRAINT_TYPE_REQUIRED:"secondary_constraint_type_required"},Ja={CANT_EDIT_COMPLETED:"cant_edit_completed_activity",SUMMARY_COLUMN_VALUE:"summary_column_value",CANT_EDIT_WITH_PROGRESS:"cant_edit_activity_with_progress",SIR_CANT_MOVE_START_AFTER_PROGRESS:"sir_cant_move_start_after_progress",CANT_EDIT_WITH_TASK:"cant_edit_actvity_with_task",DATA_DATE_EDIT_REJECTED:"data_date_edit_rejected",DATA_DATE_UNITS_PERCENT_READ_ONLY:"data_date_units_percent_read_only"};function Rn(t,e,i){return ca(t,e,i)}function kn(t,e,i){return da(t,e,i)}var zu={targetField:"durationHours",canEdit(t,e){return li(t)?lt("completed","cant_edit_completed_activity"):Rt(t,e)?lt("summary","summary_column_value"):Q()},parseInput(t,e,i){let n=parseFloat(String(t));return Number.isFinite(n)?G(Bi(n,i.hoursPerDay)):tt("not_a_number")},validate(t,e,i){return qu(i)?_t(Wi.NEGATIVE_DURATION):lv(e,i)?_t("unchanged"):rt()},transform(t,e,i){if(qu(e))return ot({},{autoSchedule:!1,postProcessors:[]});let n=cv(t,e,i),r=dv(t,e,i,n.violated);return{...ot(r,{autoSchedule:!0,postProcessors:[Gu.RECORD_LAST_START_DATE]}),...n.violated?{constraintWarning:kn(n.constraintType,n.constraintDate,Ju(t,e,i)??void 0)}:{}}},trackEvent:kt.DURATION_ENTRY};function qu(t){return Math.sign(t)===-1}function lv(t,e){return t===e}function cv(t,e,i){let n=i.calendars.getCalendar(t.calendarId);if(!n)return{violated:!1};let r=t.constraintType;if(r!==_.FNET&&r!==_.FNLT&&r!==_.MFO)return{violated:!1};let a=n.calculateEndDate(t.startDate,e);return Rn(r,t.constraintDate,a)}function dv(t,e,i,n=!1){let r={};n&&Object.assign(r,ui(),ji(t.startDate));let a=hr(t.durationHours,e);a&&(r.type=a),r.durationHours=e;let o=Ju(t,e,i);return o&&Object.assign(r,Pn(o)),r}function Ju(t,e,i){let n=i.calendars.getCalendar(t.calendarId);return n?n.calculateEndDate(t.startDate,e):null}var Ln=t=>({realWorkHours:t});var uv=0,pv=Ga,On={targetField:"progress",canEdit(t,e){return Rt(t,e)?lt("summary","summary_column_value"):Mu(t)?lt("has_lookahead_tasks","cant_edit_actvity_with_task"):Q()},parseInput(t){let e=parseFloat(String(t));return Number.isNaN(e)?tt("not_a_number"):G(e)},validate(t,e,i){return fv(i)?_t("out_of_range"):rt()},transform(t,e,i){let n=Ui(e),r=t.progress!==e&&n,a=yv(e),o=gv(t,e,i.hierarchy),s={progress:e,autoScheduling:n,...Ln(o.get(t.id)??0)},l=a?hv(t,e,n,i.hierarchy,o):[],c=a?Iv(t,e,i.hierarchy):[],d=l.length+c.length>0?[...l,...c]:void 0,u=[],p=a?vv(t,e):void 0;return ot(s,{autoSchedule:r,postProcessors:u,cascadeMutations:d,trackingEvents:p})},trackEvent:kt.PROGRESS_ENTRY};function fv(t){return t<uv||t>pv}function yv(t){return t===Ga||Ui(t)}function hv(t,e,i,n,r){return n.getDescendantIds(t.id).map(o=>({activityId:o,fields:mv(e,i,r.get(o)??0)}))}function mv(t,e,i){return{progress:t,autoScheduling:e,...Ln(i)}}function gv(t,e,i){let n=new Map,r=o=>{let s=0;for(let l of i.getChildHhInfo(o)){let c=i.hasChildren(l.id)?r(l.id):Xt(l.workHours,e);n.set(l.id,c),s+=c}return s},a=i.hasChildren(t.id)?r(t.id):Xt(t.workHours,e);return n.set(t.id,a),n}function Av(t,e){let i=[t.id,...e.getDescendantIds(t.id)],n=a=>e.getChildProgressInfo(a).some(o=>e.hasChildren(o.id)),r=a=>e.getAncestorIds(a).length;return i.filter(a=>n(String(a))).map(String).sort((a,o)=>r(o)-r(a))}function Iv(t,e,i){let n=new Map;n.set(t.id,e);for(let o of i.getDescendantIds(t.id))n.set(o,e);let r=[...Av(t,i),...i.getAncestorIds(t.id)],a=[];for(let o of r){let s=Sv(o,n,i);s!==null&&(n.set(o,s),a.push({activityId:o,fields:{progress:s}}))}return a}function Sv(t,e,i){let n=i.getChildProgressInfo(t).map(a=>({progress:e.has(a.id)?e.get(a.id):a.progress,ponderator:a.ponderator??0})),r=En(n);return r===null?null:Number(r.toFixed(2))}function vv(t,e){return[{name:kt.PROGRESS_UPDATE_RADIO_BUTTON,properties:{activity_id:t.id,activity_name:t.name,progress_updated:e}}]}var Xu={targetField:"cost",canEdit(t,e){return Rt(t,e)?lt("summary","summary_column_value"):Q()},parseInput(t){if(String(t).trim()==="")return G(0);let e=parseFloat(String(t));return Number.isFinite(e)?G(e):tt("not_a_number")},validate(){return rt()},transform(t,e,i){let n=Cv(t,e,i.hierarchy);return ot({cost:e},{autoSchedule:!1,postProcessors:[],cascadeMutations:n})},trackEvent:kt.COST_BUDGETED_ENTRY};function Cv(t,e,i){let n=new Map;n.set(t.id,e);let r=[];for(let a of i.getAncestorIds(t.id)){let o=0;for(let s of i.getChildCostInfo(a))o+=n.has(s.id)?n.get(s.id):s.cost;n.set(a,o),r.push({activityId:a,fields:{cost:o}})}return r}var Zu={targetField:"usedCost",canEdit(t,e){return Rt(t,e)?lt("summary","summary_column_value"):Q()},parseInput(t){if(String(t).trim()==="")return G(0);let e=parseFloat(String(t));return Number.isFinite(e)?G(e):tt("not_a_number")},validate(){return rt()},transform(t,e,i){let n=Dv(t,e,i.hierarchy);return ot({usedCost:e},{autoSchedule:!1,postProcessors:[],cascadeMutations:n})},trackEvent:kt.COST_SPENT_ENTRY};function Dv(t,e,i){let n=new Map;n.set(t.id,e);let r=[];for(let a of i.getAncestorIds(t.id)){let o=0;for(let s of i.getChildUsedCostInfo(a))o+=n.has(s.id)?n.get(s.id):s.usedCost;n.set(a,o),r.push({activityId:a,fields:{usedCost:o}})}return r}var Qu={targetField:"workHours",canEdit(t,e){return Rt(t,e)?lt("summary","summary_column_value"):Q()},parseInput(t){if(String(t).trim()==="")return G(0,t);let e=parseFloat(String(t));return Number.isFinite(e)?G(e):tt("not_a_number")},validate(){return rt()},transform(t,e,i,n){let r=tp(e,t.progress),a=String(n).trim()===""?[]:Tv(t,e,r,i.hierarchy);return ot({workHours:e,...Ln(r)},{autoSchedule:!1,postProcessors:[],cascadeMutations:a})},trackEvent:kt.LABOR_HOURS_BUDGETED_ENTRY};function tp(t,e){return Xt(t,e)}function Tv(t,e,i,n){let r=new Map,a=new Map;r.set(t.id,e),a.set(t.id,i);let o=[];for(let s of n.getAncestorIds(t.id)){let l=0,c=0;for(let d of n.getChildHhInfo(s)){let u=r.has(d.id)?r.get(d.id):d.workHours,p=a.has(d.id)?a.get(d.id):d.realWorkHours??tp(d.workHours,d.progress);l+=u,c+=p}r.set(s,l),a.set(s,c),o.push({activityId:s,fields:{workHours:l,...Ln(c)}})}return o}function bn(t,e){return t.getUTCFullYear()===e.getUTCFullYear()&&t.getUTCMonth()===e.getUTCMonth()&&t.getUTCDate()===e.getUTCDate()}function ol(t,e){return t.getTime()<e.getTime()}function pi(t){return t instanceof Date&&!Number.isNaN(t.getTime())}var Xa=t=>({durationHours:t});var _v="sir-apply",ep={targetField:"startDate",canEdit(t,e,i){return Rt(t,e)?lt("summary","summary_column_value"):xu(t)?i?.eventSource!==_v?lt("has_progress","cant_edit_activity_with_progress"):pi(i.newValue)?bn(t.startDate,i.newValue)?Q():li(t)?lt("completed","cant_edit_completed_activity"):Q():Q():Q()},parseInput(t,e,i){return pi(t)?G(ci(t,"UTC")):tt("invalid_date")},validate(t,e,i,n){if(bn(e,i))return _t("unchanged");let r=Ev(t,i,n);return r||rt()},transform(t,e,i){let n=i.calendars.getCalendar(t.calendarId);if(!n)throw new Error("startDatePipeline: no calendar resolved (integrity)");let r=Er(n,e),a=t.type===L.MILESTONE,o=a?r:n.calculateEndDate(r,t.durationHours),s=r;return{...ot({startDate:r,...Pn(o),...a?Xa(0):{},...ui(),...ji(s)},{autoSchedule:!0,postProcessors:["adjustLinkLagOnTaskMove"]}),constraintWarning:Pv(t,r,n)}},trackEvent:kt.START_DATE_ENTRY};function Ev(t,e,i){let n=i.hierarchy.getParentStartDateIfHasPredecessors(t.id);if(!n)return null;let r=ci(n,"UTC");return e.getTime()<r.getTime()?_t("before_parent_start"):null}function Pv(t,e,i){let n=i.calculateEndDate(e,t.durationHours),r=Oi(me(t),e,n),a=Rn(me(t),t.constraintDate,r);if(a.violated)return kn(a.constraintType,a.constraintDate,r)}var Rv=99.999,kv="sir-apply",np={targetField:"endDate",canEdit(t,e,i){return Rt(t,e)?lt("summary","summary_column_value"):Ov(t)&&!Lv(t.endDate,i)?lt("completed","cant_edit_completed_activity"):Q()},parseInput(t,e,i){if(!pi(t))return tt("invalid_date");let n=ci(t,"UTC"),r=i.calendars.getCalendar(e.calendarId);return r?r.isWorkTime(n,dt.DAY)?G(nl(r,n)):G(r.getClosestWorkTime({direction:"past",date:n,unit:dt.HOUR})):G(n)},validate(t,e,i,n){if(bn(t.endDate,i))return _t("unchanged");if(bv(i,t))return _t("before_date_origin");if(Nv(i,t))return _t("before_start_date");let r=Fv(i,t,n);return r||rt()},transform(t,e,i){let n=wv(t,e),r=xv(t,e,i,!!n);return{...ot(r,{autoSchedule:!0,postProcessors:["updateTaskTiming"]}),...n?{constraintWarning:n}:{}}},trackEvent:kt.END_DATE_ENTRY};function Lv(t,e){return e?.eventSource===kv&&pi(e.newValue)&&bn(t,e.newValue)}function Ov(t){return t.progress>=Rv}function bv(t,e){return e.dateOrigin?ol(t,e.dateOrigin):!1}function Nv(t,e){return ol(t,e.startDate)}function Fv(t,e,i){let n=i.calendars.getCalendar(e.calendarId);return n?n.isWorkTime(t,dt.DAY)?null:_t("not_working_day"):null}function wv(t,e){if(me(t)===_.MSO)return;let n=Oi(me(t),t.startDate,e),r=Rn(me(t),t.constraintDate,n);if(r.violated)return kn(r.constraintType,r.constraintDate,n)}function xv(t,e,i,n=!1){let r={};xe(t.type)&&!n&&ip(t)?Object.assign(r,ji(t.startDate)):(n||ip(t))&&Object.assign(r,ui(),ji(t.startDate));let s=Mv(t,e,i),l=hr(t.durationHours,s);return l&&(r.type=l),Object.assign(r,Xa(s)),r.endDate=e,r}function ip(t){return di.has(me(t))}function Mv(t,e,i){let n=i.calendars.getCalendar(t.calendarId);return n?n.calculateDuration(t.startDate,e):t.durationHours}var Uv=new Set(Object.values(_)),rp={targetField:"constraintType",canEdit(t,e){return li(t)?lt("completed","cant_edit_completed_activity"):Rt(t,e)?lt("summary","summary_column_value"):Q()},parseInput(t){let e=String(t).toLowerCase();return Hv(e)?G(e):tt("invalid_constraint_type")},validate(){return rt()},transform(t,e,i){let n=Bv(t,e,i);return ot(n,{autoSchedule:!0})}};function Hv(t){return Uv.has(t)}function Bv(t,e,i){let n=Wv(t,e);return{constraintType:e,...Yu(jv(t,e,n,i))}}function jv(t,e,i,n){if(t.type!==L.MILESTONE||!i||_r.has(e))return i;let r=n.calendars.getCalendar(String(t.calendarId));return r?ge(i,r,e):i}function Wv(t,e){return di.has(e)?null:_r.has(e)?t.startDate:al.has(e)?t.endDate:t.constraintDate}var ap={targetField:"constraintDate",canEdit(t,e){return li(t)?lt("completed","cant_edit_completed_activity"):Rt(t,e)?lt("summary","summary_column_value"):Q()},parseInput(t){return pi(t)?G(t):tt("invalid_date")},validate(){return rt()},transform(t,e,i){let n=op(t)?za:me(t),r=i.calendars.getCalendar(t.calendarId);if(!r)throw new Error("constraintDatePipeline: no calendar resolved (integrity)");let a=ge(e,r,n),o=Vv(t,a);return ot(o,{autoSchedule:!0})}};function Vv(t,e){return{constraintDate:e,...op(t)?ui():{}}}function op(t){return di.has(me(t))||!t.constraintType}var sp={targetField:B.CALENDAR_ID,canEdit(){return Q()},parseInput(t){if(t===null)return G(null);let e=String(t).trim();return Kv(e)?tt($u.EMPTY_CALENDAR):G(e)},validate(t,e,i,n){let r=i===null?n.getDefaultCalendarId():i;return Yv(t.calendarId,r)&&(i!==null||t.assignedDefaultCalendar)?_t(Wi.UNCHANGED):r===null||!n.hasCalendar(r)?_t(Wi.UNKNOWN_CALENDAR):rt()},transform(t,e,i){let n=e===null?i.getDefaultCalendarId():e;return ot(Gv(t,n,e===null,i),{autoSchedule:!0,postProcessors:[]})},trackEvent:kt.CALENDAR_ASSIGNMENT};function Kv(t){return t===""}function Yv(t,e){return t===e}function Gv(t,e,i,n){let r={calendarId:e,assignedDefaultCalendar:i},a=e===null?null:n.calendars.getCalendar(e);if(a){let o=a.isWorkTime(t.startDate,"hour"),s=a.getClosestWorkTime({date:o?lp(t.startDate):t.startDate,direction:"future",unit:"hour"});r.startDate=s;let l=$v(t,a);if(l&&(r.constraintDate=l),!t.autoScheduling)return r;Object.assign(r,Pn(a.calculateEndDate(s,t.durationHours)))}return r}function $v(t,e){return!t.constraintDate||!t.constraintType?null:dr({...t,constraintDate:lp(t.constraintDate)},{getClosestWorkTime:({date:i,dir:n})=>e.getClosestWorkTime({date:i,direction:n,unit:dt.HOUR})})}function lp(t){return new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()))}var cp={targetField:"customId",canEdit(t,e){return Rt(t,e)?lt("summary","summary_column_value"):Q()},parseInput(t){if(t==null)return tt("empty_custom_id");if(typeof t!="string")return tt("not_a_string");let e=t.trim();return e.length===0?tt("empty_custom_id"):e.length>20?tt("exceeds_max_length"):G(e)},validate(){return rt()},transform(t,e){return ot({customId:e},{autoSchedule:!1,postProcessors:[]})}};var dp={targetField:"subcontractId",canEdit(){return Q()},parseInput(t){if(t==null)return G(null);if(typeof t=="string"){let e=t.trim();if(e.length===0)return G(null);let i=Number(e);return!Number.isFinite(i)||!Number.isInteger(i)?tt("not_an_integer"):G(i)}return typeof t=="number"?!Number.isFinite(t)||!Number.isInteger(t)?tt("not_an_integer"):G(t):tt("not_an_integer")},validate(){return rt()},transform(t,e){return ot({subcontractId:e},{autoSchedule:!1,postProcessors:[]})}};function Pr(t){if(t==null)return null;if(typeof t=="object"){if(!("id"in t))return null;let e=t.id;return e==null?null:String(e)}return String(t)}function Za(t){return t.some(e=>Pr(e)===null)}var up={targetField:"responsableIds",canEdit(){return Q()},parseInput(t){return t==null?G([]):Array.isArray(t)?G(t):tt("not_an_array")},validate(t,e,i){return Za(i)?_t("missing_id"):rt()},transform(t,e){let i=e.map(Pr).filter(n=>n!==null);return ot({responsableIds:i},{autoSchedule:!1,postProcessors:[]})}};var pp={targetField:"tagIds",canEdit(){return Q()},parseInput(t){return t==null?G([]):Array.isArray(t)?G(t):tt("not_an_array")},validate(t,e,i){return Za(i)?_t("missing_id"):rt()},transform(t,e){let i=e.map(Pr).filter(n=>n!==null);return ot({tagIds:i},{autoSchedule:!1,postProcessors:[]})}};var Ki={TOTAL_FLOAT:"total_float",LONGEST_PATH:"longest_path"},It={DURATION:"duration",UNITS:"units",PHYSICAL:"physical"},Mt={TASK:"task",LEVEL_OF_EFFORT:"level_of_effort",START_MILESTONE:"start_milestone",FINISH_MILESTONE:"finish_milestone",WBS_SUMMARY:"wbs_summary",RESOURCE_DEPENDENT:"resource_dependent"},V={NOT_STARTED:"not_started",IN_PROGRESS:"in_progress",COMPLETED:"completed"},de={FIXED_DURATION_AND_UNITS:"fixed_duration_and_units",FIXED_DURATION_AND_UNITS_PER_TIME:"fixed_duration_and_units_per_time"};function Qa(t){return t==="start_on"||t==="mandatory_start"?"mso":t==="finish_on"||t==="mandatory_finish"?"mfo":t}function He(t){return t.remainingDurationHours!==null}var Ut={UNSTART:"unstart",UNCOMPLETE:"uncomplete",START_ON_PROGRESS:"start_on_progress",COMPLETE_ON_PROGRESS:"complete_on_progress",KEEP_IN_PROGRESS:"keep_in_progress",CLEAR_SECONDARY_CONSTRAINT:"clear_secondary_constraint"};function Rr(t,e){return e?.includes(t)??!1}var qv={asap:[],alap:["fnlt","snlt"],snet:["fnlt","snlt"],fnet:["fnlt","snlt"],snlt:["fnet","snet"],fnlt:["fnet","snet"],mso:[],mfo:[]};function sl(t){return t===null?[]:qv[t]}function Nn(t,e){return e===null||sl(t).includes(e)}var Zt=(t,e)=>({...ot({}),dataDatePatch:{[t]:e}}),to=t=>({...ot({}),dataDatePatch:t}),kr=(t,e)=>({...to(t),confirmation:e}),Lr=t=>t.p6===void 0?lt("data_date_unavailable"):Q(),fi=t=>({targetField:t,canEdit:Lr,parseInput(e){return e===null?G(null):!(e instanceof Date)||!Number.isFinite(e.getTime())?tt("invalid_date"):G(e)},validate(){return rt()},transform(e,i){return Zt(t,i)}}),hp=(t,e=Number.POSITIVE_INFINITY)=>({targetField:t,canEdit:Lr,parseInput(i){let n=typeof i=="number"||typeof i=="string"&&i.trim()!==""?Number(i):Number.NaN;return Number.isFinite(n)?G(n):tt("not_a_number")},validate(i,n,r){return r<0||r>e?_t("out_of_range"):rt()},transform(i,n){return Zt(t,n)}}),mp=(t,e)=>({targetField:t,canEdit:Lr,parseInput(i){return typeof i=="string"&&e.has(i)?G(i):tt("not_a_string")},validate(){return rt()},transform(i,n){return Zt(t,n)}}),zv=new Set(["not_started","in_progress","completed"]),Jv=new Set(["duration","units","physical"]),Xv=new Set(["snet","snlt","fnet","fnlt"]),Zv=(t,e)=>{let i=t.p6?.executionStatus;return i===e||i===void 0?Zt("executionStatus",e):i===V.NOT_STARTED?to(e===V.IN_PROGRESS?{actualStart:t.startDate}:{actualStart:t.startDate,actualFinish:t.endDate}):i===V.IN_PROGRESS?e===V.COMPLETED?Zt("actualFinish",t.endDate):kr({actualStart:null},Ut.UNSTART):e===V.IN_PROGRESS?kr({actualFinish:null},Ut.UNCOMPLETE):kr({actualStart:null,actualFinish:null},Ut.UNSTART)},fp=(t,e)=>{if(e!==null||t.p6?.actualStart==null)return Zt("actualStart",e);let n=t.p6?.actualFinish!=null;return kr(n?{actualStart:null,actualFinish:null}:{actualStart:null},Ut.UNSTART)},yp=(t,e)=>e!==null||t.p6?.actualFinish==null?Zt("actualFinish",e):kr({actualFinish:null},Ut.UNCOMPLETE),Or=(t,e)=>{let i=e.calendars.getCalendar(t.calendarId);if(!i)throw new Error("dataDatePipelines: no calendar resolved (integrity)");return i},gp={...fi("actualStart"),transform(t,e,i){if(e===null)return fp(t,null);let n=Or(t,i),r=t.p6?.actualStart==null;return fp(t,r?Wu(e,n):new Date(e))}},Ap={...fi("actualFinish"),transform(t,e,i){if(e===null)return yp(t,null);let n=Or(t,i),r=t.p6?.actualFinish==null;return yp(t,r?Vu(e,n):new Date(e))}},Ip={...fi("plannedStart"),transform(t,e,i){if(e===null)return Zt("plannedStart",null);let n=Or(t,i);return Zt("plannedStart",Uu(e,n))}},Sp={...fi("plannedFinish"),transform(t,e,i){if(e===null)return Zt("plannedFinish",null);let n=Or(t,i);return Zt("plannedFinish",Hu(e,n))}},vp=hp("remainingDurationHours"),Cp={...mp("executionStatus",zv),transform(t,e){return Zv(t,e)}},Dp=fi("expectedFinish"),Tp=fi("suspendDate"),_p=fi("resumeDate"),Ep={targetField:"secondaryConstraintType",canEdit:Lr,parseInput(t){return t===null||t===""?G(null):typeof t=="string"&&Xv.has(t)?G(t):tt("not_a_string")},validate(t,e,i){return Nn(t.constraintType,i)?rt():_t("constraint_violation")},transform(t,e){return e===null?to({secondaryConstraintType:null,secondaryConstraintDate:null}):t.p6?.secondaryConstraintType!=null?Zt("secondaryConstraintType",e):to({secondaryConstraintType:e,secondaryConstraintDate:e.startsWith("s")?t.startDate:t.endDate})}},Pp={...fi("secondaryConstraintDate"),canEdit(t,e){let i=Lr(t,e);return i.allowed?t.p6?.secondaryConstraintType==null?lt("secondary_constraint_type_required"):Q():i},transform(t,e,i){let n=t.p6?.secondaryConstraintType??null;if(e===null||n===null)return Zt("secondaryConstraintDate",e);let r=Or(t,i);return Zt("secondaryConstraintDate",ge(e,r,n))}},Rp=mp("percentCompleteType",Jv),kp=hp("physicalPercentComplete",100);var Qv=new Map([[T.TEXT,Fu],[T.DESCRIPTION,wu],[T.DURATION,zu],[T.PROGRESS,On],[T.COST,Xu],[T.USED_COST,Zu],[T.HH_WORK_TIME,Qu],[T.START_DATE,ep],[T.END_DATE,np],[T.CONSTRAINT_TYPE,rp],[T.CONSTRAINT_DATE,ap],[T.CALENDAR_ID,sp],[T.CUSTOM_ID,cp],[T.SUBCONTRACT_ID,dp],[T.RESPONSABLES,up],[T.TAGS,pp],[T.ACTUAL_START,gp],[T.ACTUAL_FINISH,Ap],[T.PLANNED_START,Ip],[T.PLANNED_FINISH,Sp],[T.REMAINING_DURATION_HOURS,vp],[T.EXECUTION_STATUS,Cp],[T.EXPECTED_FINISH,Dp],[T.SUSPEND_DATE,Tp],[T.RESUME_DATE,_p],[T.SECONDARY_CONSTRAINT_TYPE,Ep],[T.SECONDARY_CONSTRAINT_DATE,Pp],[T.PERCENT_COMPLETE_TYPE,Rp],[T.PHYSICAL_PERCENT_COMPLETE,kp]]);function Qt(t){return Qv.get(t)}var Lt={APPEND:"append",REPLACE:"replace"},eo={ACTION_BUTTON:"action-button"},io={SIR_AUTO_REJECT:"sir-auto-reject"},no={DATE_CHANGED:"date_changed",ACTIVITY_DELETED:"activity_deleted"},Yi={VIOLATION:"constraint_violation"},Kt={DISPATCH_MANY:"dispatch-many",INIT:"init",UNDO:"undo",REDO:"redo",P6_SETTINGS_UPDATE:"p6-settings-update",P6_ACTIVITY_UPDATE:"p6-activity-update",P6_SCHEDULE:"p6-schedule"};function Gi(t,e){if(!e||e.type!==sa.CONSTRAINT)return null;let i=e.data;return!i?.constraintType||!i.constraintDate?null:{kind:Yi.VIOLATION,activityId:t,constraintType:i.constraintType,constraintDate:i.constraintDate,projectedDate:i.projectedDate??i.constraintDate,messageKey:e.messageKey}}var Lp=["name","description","type","startDate","endDate","durationHours","constraintType","constraintDate","calendarId","assignedDefaultCalendar","autoScheduling","progress","cost","usedCost","workHours","realWorkHours","customId","subcontractId","responsableIds","tagIds"],Op=new Set(Lp),j0=new Set([...Lp,...Object.values(ln)]),bp=new Set(Object.values(ln));function ue(t,e,i,n){t.setActivityFieldDynamic(e,i,n)}function Np(t,e,i,n){t.setLinkFieldDynamic(e,i,n)}function Be(t){return{...t,startDate:new Date(t.startDate),endDate:new Date(t.endDate),constraintDate:ke(t.constraintDate),dateOrigin:ke(t.dateOrigin),newActivityIds:[...t.newActivityIds],pendingRequestIds:[...t.pendingRequestIds],responsableIds:[...t.responsableIds],tagIds:[...t.tagIds],baselinePoints:t.baselinePoints.map(e=>({...e,startDate:ke(e.startDate),endDate:ke(e.endDate)})),baselineSnapshot:tC(t.baselineSnapshot),criticalPath:eC(t.criticalPath),...t.p6===void 0?{}:{p6:S(t.p6)}}}function ke(t){return t===null?null:new Date(t)}function tC(t){return t===null?null:{...t,startDate:ke(t.startDate),endDate:ke(t.endDate)}}function eC(t){return t===null?null:{...t,earlyStart:ke(t.earlyStart),earlyFinish:ke(t.earlyFinish),lateStart:ke(t.lateStart),lateFinish:ke(t.lateFinish)}}var xp=200;function yi(t,e){let i=new Set([String(t)]);for(let n of e.cascadeMutations??[])i.add(String(n.activityId));return i}async function st(t,e){let i=new Map,n=0;for(let r of e){n+=1,n%xp===0&&await St();let a=t.getActivity(r);a&&i.set(r,et(a))}return i}function et(t){return Be(t)}function ro(t,e){let i=t.getActivity(e);return i?Be(i):null}function hi(t,e,i){Fp(t,e,i.patch),i.dataDateState!==void 0&&t.setActivityField(e,"p6",i.dataDateState);for(let n of i.cascadeMutations??[])Fp(t,n.activityId,n.fields)}function Fp(t,e,i){for(let[n,r]of Object.entries(i)){if(!Op.has(n))throw new Error(`applyFieldChanges: column write to non-writable field "${n}"`);ue(t,e,n,r)}}async function ao(t,e,i,n){let r=[],a=0;for(let o of i){a+=1,a%xp===0&&await St();let s=iC(t,e,o,n);s&&r.push(s)}return r}function iC(t,e,i,n){let r=t.getActivity(i);if(!r)return{id:i,kind:H.DELETED,after:null};let a=e.get(i);if(!a&&n?.has(i))return nC(i,n.get(i),r);let o=cl(a,r);return rC(o,n,i,r),a&&Object.keys(o).length===0?null:{id:i,kind:a?H.UPDATED:H.CREATED,fields:o,after:et(r)}}function nC(t,e,i){return e===i.correlativeId?null:{id:t,kind:H.UPDATED,fields:{correlativeId:{before:e,after:i.correlativeId}},after:et(i)}}function rC(t,e,i,n){if(!e?.has(i)||Object.hasOwn(t,"correlativeId"))return;let r=e.get(i);r!==n.correlativeId&&(t.correlativeId={before:r,after:n.correlativeId})}var aC=[B.CALENDAR_DURATION,B.BASELINE_VARIANCE_DAYS];function cl(t,e){let i={},n=t??{},r=e,a=new Set([...Object.keys(n),...Object.keys(r)]);for(let o of aC)a.delete(o);for(let o of a)(Object.hasOwn(n,o)!==Object.hasOwn(r,o)||!ll(n[o],r[o]))&&(i[o]={before:wp(n[o]),after:wp(r[o])});return i}function wp(t){return t===null||typeof t!="object"?t:S(t)}function ll(t,e){if(Object.is(t,e))return!0;if(t instanceof Date&&e instanceof Date)return t.getTime()===e.getTime();if(t==null||e==null)return!1;if(Array.isArray(t)||Array.isArray(e))return!Array.isArray(t)||!Array.isArray(e)||t.length!==e.length?!1:t.every((o,s)=>ll(o,e[s]));if(typeof t!="object"||typeof e!="object")return!1;let i=t,n=e,r=Object.keys(i),a=Object.keys(n);return r.length!==a.length?!1:r.every(o=>Object.hasOwn(n,o)&&ll(i[o],n[o]))}function oo(t,e,i){let n=new Set;n.add(t);for(let r of e)n.add(r);for(let r of i)n.add(r);return n}function dl(t,e){let i=new Set;for(let n of t)i.add(String(n));for(let n of e)i.add(n);return i}function mi(t,e,i,n,r){for(let a of e){if(i.has(a.activityId)||(r.add(a.activityId),n.has(a.activityId)))continue;let o=t.getActivity(a.activityId);if(!o)continue;let s=et(o);a.before!==void 0&&(s.correlativeId=a.before),n.set(a.activityId,s)}}var oC=/^(\d{4})\/(\d{1,2})\/(\d{1,2})\s+(\d{1,2}):(\d{2})$/;function je(t){if(t==null||t==="")throw new Error(`[parseFromBackend] expected a date string, got "${t}"`);if(t.includes("T")||t.endsWith("Z")){let s=new Date(t);if(Number.isNaN(s.getTime()))throw new Error(`[parseFromBackend] invalid ISO date "${t}"`);return s}let e=t.match(oC);if(!e)throw new Error(`[parseFromBackend] unsupported date format "${t}" (expected "YYYY/MM/DD H:MM" or ISO)`);let[,i,n,r,a,o]=e;return new Date(Date.UTC(Number(i),Number(n)-1,Number(r),Number(a),Number(o)))}function Fn(t,e,i,n){if(t.getTime()>i.getTime())return 0;if(e.getTime()<i.getTime()||t.getTime()===e.getTime())return 100;let r=n.calculateDuration(t,i),a=n.calculateDuration(t,e);return a===0?0:r*100/a}var sC=t=>t.type===L.PROJECT,lC=(t,e,i)=>{let n=t.calendarId,r=n!=null?i.calendarReader.getCalendar(String(n)):null;if(!r)return 0;let a=o=>o instanceof Date?o:je(String(o));return Fn(a(t.startDate),a(t.endDate),e,r)};function cC(t,e,i){let n=[],r=(o,s)=>{let l=i.getActivity(o);l&&l.expectedProgress!==s&&(i.setActivityField(o,"expectedProgress",s),n.push(String(o)))},a=o=>{let s=i.getActivity(o);if(!s)return 0;if(!sC(s)){let d=lC(s,e,i);return r(o,d),d}let l=0;for(let d of i.getChildren(o)){let u=a(d),p=i.getActivity(d),f=typeof p?.ponderator=="number"?p.ponderator:0;l+=u*f}let c=l/100;return r(o,c),c};for(let o of t)a(o);return n}function $i(t,e){let i=[];t.forEachActivity((n,r)=>{n.parentId===null&&i.push(r)}),cC(i,e,t)}var dC=t=>t.type===L.PROJECT,uC=t=>Tt(t),pC=(t,e,i,n)=>{let r=uC(t);if(!r)return 0;let a=(r.baseCalendarId!=null?i.getBaseCalendar(`${r.baseCalendarId}-base`):null)??(n?i.getBaseCalendar(n):null);return!a||!r.startDate||!r.endDate?0:Fn(r.startDate,r.endDate,e,a)};function ul(t,e,i,n=null){let r=[],a=(s,l)=>{let c=i.getActivity(s);c&&c.expectedProgressBaseline!==l&&(i.setActivityField(s,"expectedProgressBaseline",l),r.push(s))},o=s=>{let l=i.getActivity(s);if(!l)return 0;if(!dC(l)){let u=pC(l,e,i,n);return a(s,u),u}let c=0;for(let u of i.getChildrenIds(s)){let p=o(u),f=i.getActivity(u),y=typeof f?.ponderator=="number"?f.ponderator:0;c+=p*y}let d=c/100;return a(s,d),d};for(let s of t)o(s);return r}function wn(t,e,i=null){let n={getChildrenIds:a=>t.getChildren(String(a)).map(o=>String(o)),getActivity:a=>t.getActivity(a),setActivityField:(a,o,s)=>ue(t,a,o,s),getBaseCalendar:a=>t.calendarReader.getCalendar(a)},r=[];return t.forEachActivity((a,o)=>{a.parentId===null&&r.push(o)}),ul(r,e,n,i)}var pl=ze.BASELINE;function so(t){return t===ze.ACTUAL?ze.ACTUAL:pl}var Mp=t=>Math.round(t*100)/100;function fC(t,e){return(e===ze.BASELINE?t.expectedProgressBaseline:t.expectedProgress)??void 0}function yC(t,e){let i=Mp(t),n=Mp(e);return i>99.99?Wt.DONE:n>i?Wt.OVERDUE:t>0&&i>n?Wt.ADVANCEMENT:t===0&&e===0?Wt.WAITING:t>0&&i<n?Wt.DOING:Wt.WAITING}function We(t,e){let i=[];return t.forEachActivity((n,r)=>{let a=typeof n.progress=="number"?n.progress:0,o=yC(a,fC(n,e));n.status!==o&&(ue(t,r,T.STATUS,o),i.push(r))}),i}function Up(t){let e=t?.baselinePoints;return!Array.isArray(e)||e.length===0?null:e.find(i=>i.isVisibleVersion)??null}var Hp=100,hC=t=>Math.round(t*Hp)/Hp;function mC(t,e,i){if(i<=0)return null;let n=Up(t)?.endDate,r=t.endDate;if(!n||!r)return null;let a=r.getTime()>n.getTime(),o=n.getTime()>r.getTime();if(!a&&!o)return 0;let s=e.calculateDuration({startDate:a?n:r,endDate:a?r:n,task:t}),l=hC(s/i);return a?l:-l}function qi(t,e){let i=[];return t.forEachActivity((n,r)=>{let a=mC(n,t,e);n.baselineVarianceDays!==a&&(n.baselineVarianceDays=a,i.push(String(r)))}),i}function fl(t){let e=t instanceof Date?new Date(t.getTime()):t&&typeof t=="object"&&typeof t.valueOf=="function"?new Date(t.valueOf()):new Date(t),i=(r,a)=>o=>o===void 0?e[r]():(e[a](o),n),n={__isMomentShim:!0,clone:()=>fl(e),hours:i("getUTCHours","setUTCHours"),minutes:i("getUTCMinutes","setUTCMinutes"),seconds:i("getUTCSeconds","setUTCSeconds"),milliseconds:i("getUTCMilliseconds","setUTCMilliseconds"),valueOf:()=>e.getTime(),toDate:()=>new Date(e.getTime()),getTime:()=>e.getTime()};return n}fl.isMoment=t=>!!t&&typeof t=="object"&&t.__isMomentShim===!0;var pe=fl;function gC(t){return t&&t.constructor===Date?!!(t.getFullYear&&t.getMonth&&t.getDate):!1}function lo(t){return gC(t)&&!isNaN(t.getTime())}function w(t,e,i,n){if(!lo(new Date(e)))throw new Error(`Invalid date argument for calculateEndDate method. Date: ${e}, Activity: ${JSON.stringify(n)}`);let r=e;return t.calculateEndDate({start_date:new Date(r),duration:i,unit:"hour",task:n})}function ae(t){if(!lo(new Date(t.dateBaseToCalculate)))throw new Error("Invalid date argument for getClosestWorkTime method");let{dateBaseToCalculate:e,activityCalendar:i,direction:n,activity:r}=t;return i.$gantt.getClosestWorkTime({date:new Date(e),dir:n,unit:"hour",task:r})}var D=_;var X=Object.freeze({FS:xt.FINISH_TO_START,SS:xt.START_TO_START,FF:xt.FINISH_TO_FINISH,SF:xt.START_TO_FINISH});function zi(t){return Ha[String(Number(t))]??xt.START_TO_FINISH}var it=Object.freeze({FORWARD:"forward",BACKWARD:"backward"}),Ji=Object.freeze({GREATER:"greater",LESS:"less"}),Ie=Object.freeze({SOURCE:"$source"});var AC=t=>t?t.$level===1:!1,IC=t=>t.type===L.PROJECT,SC=t=>t.$level!==0,vC=t=>t.type===L.TASK,CC=t=>t.type===L.TASK||t.type===L.MILESTONE,qt={byFirstLevel:AC,filterByParentType:IC,avoidSubproject:SC,byTaskType:vC,byTaskTypeAndMilestone:CC};function Bp(t){let{gantt:e,pendingParentsWithNoLinks:i,calculations:n,linkProperty:r}=t;try{let a=DC({gantt:e,pendingParentsWithNoLinks:i});if(a.length===0)return new Set;let o=TC({gantt:e,subprojectsWithNoLinks:a}),s=_C({gantt:e,childrenIds:o,linkProperty:r,getArrayOfLinkedActivities:EC,calculations:n});return new Set(s.map(l=>l.id))}catch(a){throw a}}function DC(t){let{gantt:e,pendingParentsWithNoLinks:i}=t;return e.getTaskByTime().filter(qt.filterByParentType).filter(n=>i.has(n.id)).map(n=>n.id)}function TC(t){let{gantt:e,subprojectsWithNoLinks:i}=t,n=new Set;for(let r of i)e.getChildren(r).filter(s=>{let l=e.getTask(s),c=qt.byTaskTypeAndMilestone(l),d=Number(l.progress)<100;return c&&d}).forEach(s=>n.add(s));return[...n]}function _C(t){let{gantt:e,childrenIds:i,linkProperty:n,getArrayOfLinkedActivities:r,calculations:a}=t,o=[];for(let s of i){let l=e.getTask(s),c=l[n]||[];r({gantt:e,links:c,linkDirection:n===Ie.SOURCE?"target":"source"}).every(p=>a.has(p))&&o.push(l)}return o}function EC(t){let{gantt:e,links:i,linkDirection:n}=t,r=[];for(let a of i){let o=e.getLink(a);if(!o){`${a}`;continue}let s=Number(o[n]);r.push(s)}return r}function jp({gantt:t,linkProperty:e,direction:i}){try{let n=PC(t,e);if(i===it.FORWARD)return{chainStartActivities:n,activitiesStartChainButChildrenOfLinkedParents:null};if(i===it.BACKWARD)return RC(n,t,e)}catch(n){throw console.log("Critical Path",n),n}}function PC(t,e){return t.getTaskByTime().filter(qt.avoidSubproject).filter(qt.byTaskTypeAndMilestone).filter(i=>!i[e].length)}function RC(t,e,i){let n=[],r=new Set;return t.forEach(a=>{let o=Number(a.parent),s=e.getTask(o);s&&(s[i].length>0?r.add(a.id):s.constraint_type!==D.FNLT&&n.push(a))}),{chainStartActivities:n,activitiesStartChainButChildrenOfLinkedParents:r}}function Wp({gantt:t,direction:e,linkProperty:i}){try{let n=kC(t),r=new Set,a=new Set,o=new Set;e===it.BACKWARD&&bC(n).forEach(d=>{r.add(d.id)});let s=LC(n,e,i),l=OC(n,s);return s.forEach(c=>{a.add(c.id)}),l.forEach(c=>{o.add(c.id)}),{parentsWithFullProgress:r,pendingParentsWithNoLinks:a,pendingParentsWithLinks:o}}catch(n){throw n}}function kC(t){return t.getTaskByTime().filter(qt.filterByParentType).filter(qt.avoidSubproject)}function LC(t,e,i){return t.filter(n=>{let r=n[i];if(!Array.isArray(r))return!1;let a=r.length>0,o=n.constraint_type||"",s=o!==D.FNLT;if(e===it.FORWARD){let l=o!==D.SNET;return!a&&s&&l}else return!a&&s})}function OC(t,e){let i=new Set(e.map(n=>n.id));return t.filter(n=>!i.has(n.id))}function bC(t){return t.filter(e=>{let i=Number(e.progress);return Number.isNaN(i)?!1:i===100})}function Vp({pendingParentsWithLinks:t,gantt:e,direction:i}){try{let n=new Set;return t.forEach(r=>{let a=e.getTask(r),o=NC(i),s=FC(i),l=a[o];if(!Array.isArray(l))return;wC(e,l,s).forEach(d=>{n.add(d)})}),n}catch(n){throw n}}function NC(t){return t===it.FORWARD?Ie.SOURCE:"$target"}function FC(t){return t===it.FORWARD?"target":"source"}function wC(t,e,i){return e.map(n=>{let a=t.getLink(n)[i];return Number(a)})}var br={identifySecondLevelActivities:Bp,identifyInitialActivities:jp,identifyParentsWithAndWithoutLinks:Wp,identifyForbiddenActivities:Vp};function co(t){return t.length?t.reduce((e,i)=>i.ef>e.ef?i:e):!1}function yl({linkType:t,lag:e,predecessorTime:i,activityCalendar:n,activity:r}){return t===X.FS&&e===0?ae({predecessorTime:i,activityCalendar:n,direction:"future",activity:r}):Nr(i,t,n,r)}function Kp({duration:t,constraintDate:e,activityCalendar:i,activity:n}){let r=new Date(e);return{es:w(i,r,t,n),ef:r}}function Yp({duration:t,constraintDate:e,activityCalendar:i,activity:n}){let r=new Date(e),a=w(i,r,t,n);return{es:r,ef:a}}function Nr(t,e,i,n){if(![X.FS,X.SS,X.FF].includes(e))return t;let a=[X.FS,X.SS].includes(e)?"future":"past";return ae({dateBaseToCalculate:t,activityCalendar:i,direction:a,activity:n})}var hl=class{constructor(e,i,n,r){if(this.linkedActivitiesData=e,this.activity=i,this.gantt=n,this.linkCandidates=r,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 e=this.calculateLinks(),i=co(e),n=this.activity.constraint_type;return n===D.SNET?this.handleSNETConstraint(i):n===D.FNLT?this.handleFNLTConstraint(i):i}calculateLinks(){let e=[];for(let i of this.linkedActivitiesData){let n=i.linkType,r=zi(n),a=i.linkLag,o=i.es,s=i.ef,l=null;if(r===X.SS)l=this.calculateSSLink({lag:a,predecessorEs:o});else if(r===X.FF)l=this.calculateFFLink({lag:a,predecessorEf:s});else if(r===X.FS)l=this.calculateFSLink({lag:a,predecessorEf:s});else if(r===X.SF)l=this.calculateSFLink({lag:a,predecessorEs:o,predecessorEf:s});else continue;l&&(this.linkCandidates?.set(i.linkId,{targetId:String(this.activity.id),...l}),e.push(l))}return e}handleSNETConstraint(e){let i=Yp({duration:this.activity.duration,constraintDate:this.activity.constraint_date,activityCalendar:this.activityCalendar,activity:this.activity});return e&&e.ef>i.ef?e:i}handleFNLTConstraint(e){let i=Kp({duration:-this.activity.duration,constraintDate:this.activity.constraint_date,activityCalendar:this.activityCalendar,activity:this.activity});return e?e.ef>i.ef?i:e:i}calculateSSLink({lag:e,predecessorEs:i}){let n=yl({linkType:X.SS,lag:e,predecessorTime:i,activityCalendar:this.activityCalendar,activity:this.activity}),r=w(this.activityCalendar,n,e,this.activity);e>0&&(r=Nr(r,X.SS,this.activityCalendar,this.activity));let a=w(this.activityCalendar,r,this.activity.duration,this.activity);return{es:r,ef:a}}calculateFFLink({lag:e,predecessorEf:i}){let n=yl({linkType:X.FF,lag:e,predecessorTime:i,activityCalendar:this.activityCalendar,activity:this.activity}),r=w(this.activityCalendar,n,e,this.activity),a=w(this.activityCalendar,r,-this.activity.duration,this.activity);return e>0&&(a=Nr(a,X.FF,this.activityCalendar,this.activity)),{es:a,ef:r}}calculateFSLink({lag:e,predecessorEf:i}){let n=i;e===0&&(n=ae({dateBaseToCalculate:i,activityCalendar:this.activityCalendar,direction:"future",activity:this.activity}));let r=w(this.activityCalendar,n,e,this.activity),a=w(this.activityCalendar,r,this.activity.duration,this.activity);return{es:r,ef:a}}calculateSFLink({lag:e,predecessorEs:i}){let n=w(this.activityCalendar,i,e,this.activity),r=w(this.activityCalendar,n,-this.activity.duration,this.activity);return e>0&&(r=Nr(r,X.SF,this.activityCalendar,this.activity)),{es:r,ef:n}}},Gp=hl;var ml=class{constructor(e){this.linkedActivitiesData=e.linksWithActivityData,this.activity=e.activity,this.gantt=e.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 e=[];for(let i of this.linkedActivitiesData){let n=zi(i.linkType);if(i.type===L.TASK&&Number(i.progress)>0||i.type===L.PROJECT&&Number(i.progress)===100)continue;let r=i.linkLag,a=i.ls,o=i.lf;if(n===X.SS){let s={lag:r,workTime:a,lsDataCalculation:-r,lfDataCalculation:this.activity.duration},{ls:l,lf:c}=this.calculateSSLink(s);e.push({ls:l,lf:c})}if(n===X.FF){let s={lag:r,workTime:o,lsDataCalculation:-this.activity.duration,lfDataCalculation:-r},{ls:l,lf:c}=this.calculateFFLink(s);e.push({ls:l,lf:c})}if(n===X.FS){let s={lag:r,workTime:a,lsDataCalculation:-this.activity.duration,lfDataCalculation:-r},{ls:l,lf:c}=this.calculateFsLink(s);e.push({ls:l,lf:c})}if(n===X.SF){let s={lag:r,workTime:o,lsDataCalculation:-r,lfDataCalculation:this.activity.duration},{ls:l,lf:c}=this.calculateSFLink(s);e.push({ls:l,lf:c})}}if(this.activity.constraint_type===D.FNLT){let i=this.getMinLfFromLinks(e),n=this.calculateSfRestrictionDates();return i?this.getMinLfFromLinks([n,i]):n}else{let i=this.getMinLfFromLinks(e);if(i===!1){let n=this.gantt.getSubtaskDates();return{ls:w(this.activityCalendar,n.end_date,-this.activity.duration,this.activity),lf:n.end_date}}return i}}calculateFFLink({lag:e,workTime:i,lsDataCalculation:n,lfDataCalculation:r}){let a=null,o=null;if(e===0)return a=w(this.activityCalendar,i,r,this.activity),o=w(this.activityCalendar,a,n,this.activity),{ls:o,lf:a};let s=i;return e>0&&(s=this.getLastWorkingHour(s,this.activityCalendar,z.PAST)),a=w(this.activityCalendar,s,r,this.activity),o=w(this.activityCalendar,a,n,this.activity),{ls:o,lf:a}}calculateFsLink({lag:e,workTime:i,lsDataCalculation:n,lfDataCalculation:r,isMilestone:a=!1}){let o=null,s=null;if(e===0){let c=this.getLastWorkingHour(i,this.activityCalendar,z.PAST);return o=w(this.activityCalendar,c,r,this.activity),o=this.getLastWorkingHour(o,this.activityCalendar,z.PAST),s=w(this.activityCalendar,o,n,this.activity),{ls:s,lf:o}}let l=i;return a||(l=this.getLastWorkingHour(i,this.activityCalendar)),o=w(this.activityCalendar,l,r,this.activity),s=w(this.activityCalendar,o,n,this.activity),a||(o=this.getLastWorkingHour(o,this.activityCalendar,z.PAST)),{ls:s,lf:o}}calculateSFLink({lag:e,workTime:i,lsDataCalculation:n,lfDataCalculation:r}){let a=null,o=null,s=i;return o=w(this.activityCalendar,s,n,this.activity),a=w(this.activityCalendar,o,r,this.activity),{ls:o,lf:a}}calculateSSLink({lag:e,workTime:i,lsDataCalculation:n,lfDataCalculation:r,isMilestone:a=!1}){let o=null,s=null;if(e===0)return s=w(this.activityCalendar,i,n,this.activity),o=w(this.activityCalendar,s,r,this.activity),{ls:s,lf:o};let l=i;return e<0&&!a&&(l=this.getLastWorkingHour(l,this.activityCalendar,"future")),s=w(this.activityCalendar,l,n,this.activity),o=w(this.activityCalendar,s,r,this.activity),{ls:s,lf:o}}getMinLfFromLinks(e=[]){return e.length?e.reduce((i,n)=>n.lf<i.lf?n:i):!1}calculateSfRestrictionDates(){let e=this.activity.constraint_date,i=this.activity.duration;return{ls:w(this.activityCalendar,e,-i,this.activity),lf:e}}getLastWorkingHour(e,i,n=z.PAST){let r=e instanceof Date?e:new Date(e),a=pe(r).clone();return this.isActivityInInitHour(i,r)&&n===z.PAST&&(a=a.hours(0).minutes(0).seconds(0).milliseconds(0)),ae({dateBaseToCalculate:new Date(a),direction:n,activityCalendar:i,activity:this.activity})}isActivityInInitHour(e,i){let n=i instanceof Date?i:new Date(i),a=e.getWorkHours(n)[0];if(!a||!a.includes("-"))return!1;let o=a.split("-")[0];if(!o.includes(":"))return!1;let s=o.split(":");return s.length<2?!1:(o=parseInt(s[0],10),pe.isMoment(i)?i.hours()===o:n.getUTCHours()===o)}},$p=ml;function qp(t){let{parent:e,linkProperty:i,linkDirection:n,calculations:r,gantt:a,direction:o,linkCandidates:s}=t,l=e[i],c=xC(e),d=null;if(o===it.FORWARD){let u=MC(l,n,r,a);d=new Gp(u,e,a,s),d=d.calculate()}else{let u=UC(l,n,r,a);d=new $p({linksWithActivityData:u,activity:e,parentData:c,gantt:a}).calculate()}return d}function xC(t){return{duration:t.duration,calendarId:t.calendar_id}}function MC(t,e,i,n){return t.length===0?[]:t.map(r=>{let a=n.getLink(r);if(!a)return console.warn(`Link not found: ${r}`),null;let o=Number(a[e]),s=i.get(o);return s?{linkId:String(a.id),es:s.es,ef:s.ef,linkLag:a.lag,linkType:a.type}:(console.warn(`Calculations not found for activity: ${o}`),null)}).filter(Boolean)}function UC(t,e,i,n){return t.length===0?[]:t.map(r=>{let a=n.getLink(r);if(!a)return console.warn(`Link not found: ${r}`),null;let o=Number(a[e]),s=i.get(o);if(!s)return null;let l=n.getTask(o);return l?{ls:s.ls,lf:s.lf,linkLag:a.lag||0,linkType:a.type,progress:l.progress,type:l.type}:null}).filter(Boolean)}function Xp(t){let{activityData:e,calculations:i,singleParents:n,direction:r}=t;if(HC(e.id,i))return null;let a=BC(e.id,n),o=jC(a,i);return o.length===0?null:WC(o,r)}function HC(t,e){return e.has(t)}function BC(t,e){let i=e.get(t);return i?i.childrens:[]}function jC(t,e){return t.filter(i=>e.has(i)).map(i=>e.get(i))}function WC(t,e){if(e===it.FORWARD){let i=zp(t,"es"),n=Jp(t,"ef");return{es:i,ef:n}}else{let i=zp(t,"ls"),n=Jp(t,"lf");return{ls:i,lf:n}}}function zp(t,e){return t.reduce((i,n)=>n[e]<i[e]?n:i)[e]}function Jp(t,e){return t.reduce((i,n)=>n[e]>i[e]?n:i)[e]}var gl={parentWithLinks:qp,parentWithNoLinks:Xp};var Al=class{constructor(e){this.activity=e.activity,this.direction=e.direction,this.linkProperty=e.direction===it.FORWARD?"$target":Ie.SOURCE,this.linkDirection=e.direction===it.FORWARD?"source":"target",this.calculationsOfParentThatImpactChildrens=e.calculationsOfParentThatImpactChildrens,this.calculations=e.calculations,this.calculationOfParentsFromLinks=e.calculationOfParentsFromLinks,this.singleParents=e.singleParents,this.parentCalculationFromChildren=e.parentCalculationFromChildren,this.linkCandidates=e.linkCandidates,this.gantt=e.gantt}handleParentWithLinks(){try{let e=this.getArrayOfIdOfLinkedActivities(this.activity[this.linkProperty]);if(this.direction===it.BACKWARD){let n=[D.FNLT];if(this.shouldCalculateParentWithLinksBackward(n)){this.calculateAndStoreParentWithLinks(this.activity);return}if(this.shouldSetDatesToParentsWithLinks(n)){this.setDatesToParentsWithLinksBackward();return}}if(this.areAllLinksCalculated(e)&&this.calculationsOfParentThatImpactChildrens.has(this.activity.id)){this.direction===it.FORWARD&&this.setDatesToParentsWithLinks(),this.direction===it.BACKWARD&&this.setDatesToParentsWithLinksBackward();return}this.calculateAndStoreParentWithLinks(this.activity)}catch(e){throw e}}shouldCalculateParentWithLinksBackward(e){let i=e.includes(this.activity.constraint_type),n=!this.calculationOfParentsFromLinks.has(this.activity.id);return i&&n}calculateAndStoreParentWithLinks(e){let i=gl.parentWithLinks({parent:e,linkProperty:this.linkProperty,linkDirection:this.linkDirection,gantt:this.gantt,calculations:this.calculations,direction:this.direction,linkCandidates:this.linkCandidates});this.calculationsOfParentThatImpactChildrens.set(e.id,i),this.calculationOfParentsFromLinks.add(e.id)}areAllLinksCalculated(e){return e.every(i=>this.calculations.has(i))}shouldSetDatesToParentsWithLinks(e){let i=e.includes(this.activity.constraint_type),n=this.calculationOfParentsFromLinks.has(this.activity.id);return i&&n}handleParentWithNoLinks(){let e=gl.parentWithNoLinks({activityData:this.activity,gantt:this.gantt,singleParents:this.singleParents,calculations:this.calculations,direction:this.direction});e&&this.calculations.set(this.activity.id,e)}setDatesToParentsWithLinks(){if(!this.activity)throw new Error("Error trying to get parent",{cause:{parentActivity:this.activity}});let e=this.singleParents.get(this.activity.id)?.childrens,n=Array.from(this.calculations).filter(o=>e.includes(o[0])).map(o=>o[1]),{minEs:r,maxEf:a}=n.reduce((o,{es:s,ef:l})=>({minEs:new Date(Math.min(o.minEs.getTime(),new Date(s).getTime())),maxEf:new Date(Math.max(o.maxEf.getTime(),new Date(l).getTime()))}),{minEs:new Date(n[0].es),maxEf:new Date(n[0].ef)});this.calculations.set(this.activity.id,{es:r,ef:a}),this.parentCalculationFromChildren.add(this.activity.id)}setDatesToParentsWithLinksBackward(){if(!this.activity)throw new Error("Error trying to get parent",{cause:{parentActivity:this.activity}});let e=this.singleParents.get(this.activity.id)?.childrens,n=Array.from(this.calculations).filter(o=>e.includes(o[0])).map(o=>o[1]),{minLs:r,maxLf:a}=n.reduce((o,{ls:s,lf:l})=>({minLs:new Date(Math.min(o.minLs.getTime(),new Date(s).getTime())),maxLf:new Date(Math.max(o.maxLf.getTime(),new Date(l).getTime()))}),{minLs:new Date(n[0].ls),maxLf:new Date(n[0].lf)});this.calculations.set(this.activity.id,{ls:r,lf:a})}getArrayOfIdOfLinkedActivities(e,i=!1){return e.map(n=>{let a=this.gantt.getLink(n)[i||this.linkDirection];return Number(a)})}},Zp=Al;var Il=class{constructor({gantt:e,linkProperty:i}){this.gantt=e,this.linkProperty=i,this.structureOfParents=new Map,this.singleParents=new Map}identifyThirdLevelActivities(){try{let e=this.getFirstLevelParents();for(let i of e){let n=this.processEachActivity(i),{activitiesByLevel:r}=n,a=this.getAllLevels(r),o=this.getDeepestLevel(a),s=this.createResult(i,n,o,a);this.structureOfParents.set(i.id,s)}return{structureOfParents:this.structureOfParents,singleParents:this.singleParents}}catch(e){throw e}}getFirstLevelParents(){return this.gantt.getTaskByTime().filter(qt.byFirstLevel).filter(qt.filterByParentType)}processEachActivity(e){let i=new Set,n=new Set,r=new Map;return this.initializeParent(e),this.gantt.eachTask(a=>{this.processActivity(a,i,n,r)},e.id),{parentsIds:i,allTasks:n,activitiesByLevel:r}}initializeParent(e){let i=Number(e.id),n=!!e[this.linkProperty]?.length,r=e.$level;this.singleParents.set(i,{level:r,hasLink:n,childrens:[]})}processActivity(e,i,n,r){let a=Number(e.id),o=Number(e.parent);n.add(a),this.isProjectActivity(e)&&this.addParentInfo(e,i);let l=this.doesParentExist(o);o!=null&&l&&this.addChildToParent(o,a),this.addActivityToLevel(e,r)}isProjectActivity(e){return e.type===L.PROJECT}hasLink(e){return!!e[this.linkProperty]?.length}addParentInfo(e,i){let n=Number(e.id),r=e.$level,a=this.hasLink(e),o={level:r,hasLink:a,childrens:[]};i.add(n),this.singleParents.set(n,o)}doesParentExist(e){return this.singleParents.has(e)}addChildToParent(e,i){this.singleParents.get(e).childrens.push(i)}addActivityToLevel(e,i){let n=e.$level,r=Number(e.parent);i.has(n)||i.set(n,new Map);let a=i.get(n);a.has(r)||a.set(r,[]),a.get(r).push({id:Number(e.id),isParent:this.isProjectActivity(e),calculated:!1})}getAllLevels(e){return new Set(e.keys())}getDeepestLevel(e){return e.size===0?0:Math.max(...e)}createResult(e,i,n,r){let{activitiesByLevel:a,parentsIds:o,allTasks:s}=i;return{parent:e.id,isALinkedParent:this.hasLink(e),levels:r,allParentChildrens:o,allChildrens:s,childrensByLevel:a,currentResolutionLevel:n,canBeCalculated:!1}}},Qp=Il;var Sl=class{constructor(e,i){this.direction=i,this.gantt=e,this.linkProperty=this.direction===it.FORWARD?"$target":Ie.SOURCE,this.linkDirection=this.direction===it.FORWARD?"source":"target",this.projectDates=e.getSubtaskDates()}tryToCalculateLastLevelChildrens(){this.structureOfParents.forEach(e=>{let{currentResolutionLevel:i,childrensByLevel:n,isALinkedParent:r}=e;if(r)return;let a=n.get(i);for(let[o,s]of a)if(s.filter(c=>!this.calculations.has(c.id)).length===0){let c=this.gantt.getTask(o);this.calculateParentWithNoLinks(c,s);return}})}initActivitiesWaitingForCalculation(){try{this.gantt.getTaskByTime().filter(qt.avoidSubproject).forEach(e=>{this.activitiesWaitingForCalculation.add(e.id)})}catch(e){throw e}}identifyParentsWithAndWithoutLinks(){try{let{parentsWithFullProgress:e,pendingParentsWithNoLinks:i,pendingParentsWithLinks:n}=br.identifyParentsWithAndWithoutLinks({gantt:this.gantt,direction:this.direction,linkProperty:this.linkProperty});this.parentsWithFullProgress=e,this.pendingParentsWithNoLinks=i,this.pendingParentsWithLinks=n}catch(e){throw e}}identifyForbiddenActivitiesLinkedToParentsWithLinks(){try{this.forbiddenActivitiesLinkedToParentsWithLinks=br.identifyForbiddenActivities({pendingParentsWithLinks:this.pendingParentsWithLinks,gantt:this.gantt,direction:this.direction})}catch(e){throw e}}getArrayOfIdOfLinkedActivities(e,i=!1){return e.map(n=>{let a=this.gantt.getLink(n)[i||this.linkDirection];return Number(a)})}async identifyThirdLevelActivities(){try{let{structureOfParents:e,singleParents:i}=new Qp({gantt:this.gantt,linkProperty:this.linkProperty}).identifyThirdLevelActivities();this.structureOfParents=e,this.singleParents=i}catch(e){throw e}}processEachActivity(e){let i=new Set,n=new Set,r=new Map,a=new Map;return this.singleParents.set(Number(e.id),{level:e.$level,hasLink:!!e[this.linkProperty].length,childrens:[]}),new Promise((o,s)=>{this.gantt.eachTask(function(l){let c=Number(l.parent);if(n.add(l.id),l.type===L.PROJECT){let u={level:l.$level,hasLink:!!l[this.linkProperty].length,childrens:[]};i.add(l.id),this.singleParents.set(Number(l.id),u)}c&&this.singleParents.has(c)&&this.singleParents.get(c).childrens.push(l.id),r.has(l.$level)||r.set(l.$level,new Map);let d=r.get(l.$level);d.has(Number(l.parent))||d.set(Number(l.parent),[]),d.get(Number(l.parent)).push({id:l.id,isParent:l.type===L.PROJECT,calculated:!1})}.bind(this),e.id),o({parentsIds:i,allTasks:n,activitiesByLevel:r,singleParents:a})})}identifySecondLevelActivities(){try{let e=br.identifySecondLevelActivities({gantt:this.gantt,pendingParentsWithNoLinks:this.pendingParentsWithNoLinks,calculations:this.calculations,linkProperty:this.linkProperty});this.secondLevelActivities=new Set([...this.secondLevelActivities,...e])}catch(e){throw e}}identifyInitialActivities(){try{let{chainStartActivities:e,activitiesStartChainButChildrenOfLinkedParents:i}=br.identifyInitialActivities({gantt:this.gantt,linkProperty:this.linkProperty,direction:this.direction});this.chainStartActivities=e,i&&(this.activitiesStartChainButChildrenOfLinkedParents=i)}catch(e){throw new Error("Error in identifyInitialActivities",{cause:e})}}calculateSecondLevelActivities(){try{this.direction===it.FORWARD?this.recursiveCalculateEfAndEs(Array.from(this.secondLevelActivities),0,"secondLevel"):this.recursiveCalculateLfAndLs(Array.from(this.secondLevelActivities))}catch(e){throw e}}calculateStartAndFinishOfActivitiesThatStartChain(){try{this.chainStartActivities.forEach(e=>{if(!e||e.progress>100||e.type===L.PROJECT)return;let i=this.calculateStartAndFinishOfChainOrigin(e,this.direction);if(this.direction===it.FORWARD){let{es:n,ef:r}=i;this.calculations.set(e.id,{es:n,ef:r,text:e.text}),this.activitiesWaitingForCalculation.delete(e.id)}else{let{ls:n,lf:r}=i;this.calculations.set(e.id,{ls:n,lf:r,text:e.text}),this.activitiesWaitingForCalculation.delete(e.id)}})}catch(e){throw e}}buildDependencyGraph(e){let i=new Map,n=new Set(this.calculations.keys()),r=new Map;return e.forEach(a=>{a&&r.set(a.id,a)}),r.forEach((a,o)=>{if(n.has(o))return;let s=[];(a[this.linkDirection]||[]).forEach(c=>{let d=this.gantt.getLink(c);if(d){let u=Number(d[this.linkProperty]);s.push(u)}}),s=s.filter(c=>r.has(c)||n.has(c)),i.set(o,s)}),{graph:i,activityMap:r,calculatedActivities:n}}topologicalSort(e,i){let n=new Set,r=new Set,a=[],o=s=>{if(r.has(s))throw new Error("Cyclical dependency detected",{cause:{nodeId:s}});if(!n.has(s)&&!i.has(s)){r.add(s);let l=e.get(s)||[];for(let c of l)o(c);r.delete(s),n.add(s),a.push(s)}};for(let s of e.keys())!n.has(s)&&!i.has(s)&&o(s);return a.reverse()}calculateStartAndFinishOfChainOrigin(e=null,i=null){try{let n=e,r=Number(n.progress);r==="0.00"&&(r=0);let a=this.gantt.getCalendar(n.calendar_id);if(!a)throw new Error(`Error trying to get calendar with id: ${n.calendar_id}`);if((i||this.direction)===it.FORWARD){let s=n.start_date,l=n.end_date;return{es:s,ef:l}}else{if(r>=100)return{ls:pe(n.start_date).clone(),lf:pe(n.end_date).clone()};if(r===0)return this.calculateBackwardWhenZeroProgress(n,a);if(r<100&&r>0)return this.calculateWhenProgressIsBetweenZeroAndOneHundred(n,a)}}catch(n){throw n}}calculateBackwardWhenZeroProgress(e,i){let n=pe(e.start_date).clone(),r=pe(e.end_date).clone(),a=e.duration,o=[D.ASAP,D.ALAP,D.SNET,D.FNET],s=e.constraint_type||D.ASAP;if(o.includes(s))r=this.projectDates.end_date,n=w(i,r,-a,e);else{let l=[D.SNLT,D.MSO],c=[D.FNLT,D.MFO];l.includes(s)&&(n=e.constraint_date,r=w(i,n,a,e)),c.includes(s)&&(r=e.constraint_date,n=w(i,r,-a,e))}return{ls:n,lf:r}}calculateWhenProgressIsBetweenZeroAndOneHundred(e){let i=e.start_date,n=null,r=e.constraint_type||D.ASAP,a=this.projectDates.end_date,o=[D.ASAP,D.ALAP,D.SNET,D.FNET],s=[D.SNLT,D.FNLT];if(o.includes(r))n=Math.max(e.end_date,a);else if(r===D.MSO)n=e.end_date;else if(r===D.MFO||s.includes(r)){let l=Math.min(a,e.constraint_date);n=Math.max(l,e.end_date)}return{ls:i,lf:new Date(n)}}initializeActivitiesWithFullProgress(){try{Array.from(this.activitiesWaitingForCalculation).filter(n=>Number(this.gantt.getTask(n).progress)===100).map(n=>this.gantt.getTask(n)).forEach(n=>{let r=n.type===L.PROJECT;this.setDatesForActivityWithFullProgress(n),this.activitiesWaitingForCalculation.delete(n.id),r&&this.pendingParentsWithLinks.has(n.id)&&(this.parentCalculationFromChildren.add(n.id),this.calculationsOfParentThatImpactChildrens.set(n.id,{[this.direction===it.FORWARD?"es":"ls"]:n.start_date,[this.direction===it.FORWARD?"ef":"lf"]:n.end_date}),this.calculationOfParentsFromLinks.add(n.id))})}catch(e){throw e}}doCalculationForParentType(e){let i=new Zp({activity:e,direction:this.direction,calculationsOfParentThatImpactChildrens:this.calculationsOfParentThatImpactChildrens,calculations:this.calculations,calculationOfParentsFromLinks:this.calculationOfParentsFromLinks,singleParents:this.singleParents,parentCalculationFromChildren:this.parentCalculationFromChildren,linkCandidates:this.linkCandidates,gantt:this.gantt});this.pendingParentsWithLinks.has(e.id)?i.handleParentWithLinks():i.handleParentWithNoLinks()}},gi=Sl;function VC(t,e,i){let n={es:null,ef:null};if(!t)return n;if([D.SNET,D.SNLT].includes(e)){let r=new Date(t.constraint_date);n.es=r,n.ef=w(i,r,t.duration,t)}else if([D.FNLT,D.FNET].includes(e)){let r=new Date(t.constraint_date);n.es=w(i,r,-t.duration,t),n.ef=r}else if(e===D.MSO){let r=new Date(t.constraint_date);n.es=r,n.ef=w(i,r,t.duration,t)}else if(e===D.MFO){let r=new Date(t.constraint_date);n.es=w(i,r,-t.duration,t),n.ef=r}return n}var uo=VC;var vl=class{constructor(e){this.referenceActivity=e.activity,this.activityToCalculate=null,this.links=e.links,this.calculatedActivities=e.calculatedActivitiesMap,this.alapMap=e.calculatedAlapsMap,this.parentsWithLinks=e.parentsWithLinks,this.parentsCalculations=e.parentsCalculations,this.gantt=e.ganttInstance,this.linkCandidates=e.linkCandidates}getEsAndEfFromPreviousCalculatedActivities(e){return this.alapMap.has(e)?this.alapMap.get(Number(e)):this.calculatedActivities.get(Number(e))}calculateSucessorTimes(e,i,n=0,r,a=X.FS){let o=this.gantt.getCalendar(this.referenceActivity.calendar_id);if(!o)throw new Error(`Error trying to get calendar with id: ${this.referenceActivity.calendar_id}`);let s=e,l=null,c=null,d=this.referenceActivity.type===L.MILESTONE;return d||(a===X.FS&&r===0?s=ae({dateBaseToCalculate:s,activityCalendar:o,direction:"future",activity:this.referenceActivity}):s=this.mutateTheDateToFutureOrPastInBaseRestriction(e,a,o)),[X.FF,X.SF].includes(a)?(c=w(o,s,n,this.referenceActivity),l=w(o,c,i,this.referenceActivity),!d&&r>0&&(l=this.mutateTheDateToFutureOrPastInBaseRestriction(l,a,o))):(l=w(o,s,i,this.referenceActivity),!d&&r>0&&(l=this.mutateTheDateToFutureOrPastInBaseRestriction(l,a,o)),c=w(o,l,n,this.referenceActivity)),{es:l,ef:c}}calculateSS(e){let i=this.getEsAndEfFromPreviousCalculatedActivities(Number(e.source)),n=e.lag||0,a=this.referenceActivity.duration,o=e.lag||0;return this.calculateSucessorTimes(i.es,n,a,o,X.SS)}calculateFF(e){let i=this.getEsAndEfFromPreviousCalculatedActivities(Number(e.source)),r=-this.referenceActivity.duration,a=e.lag||0,o=e.lag||0;return this.calculateSucessorTimes(i.ef,r,a,o,X.FF)}calculateFS(e){let i=this.getEsAndEfFromPreviousCalculatedActivities(Number(e.source)),n=e.lag||0,a=this.referenceActivity.duration,o=e.lag||0;return this.calculateSucessorTimes(i.ef,n,a,o,X.FS)}calculateSF(e){let i=this.getEsAndEfFromPreviousCalculatedActivities(Number(e.source)),r=-this.referenceActivity.duration,a=e.lag||0,o=e.lag||0;return this.calculateSucessorTimes(i.es,r,a,o,X.SF)}mutateTheDateToFutureOrPastInBaseRestriction(e,i,n){if(![X.FS,X.SS,X.FF].includes(i))return e;let a=[X.FS,X.SS].includes(i)?"future":z.PAST;return ae({dateBaseToCalculate:e,activityCalendar:n,direction:a,activity:this.referenceActivity})}},tf=vl;var Fr=class extends tf{constructor(e){super(e)}calculate(){if(this.links.length===0)return new gi(this.gantt,"forward").calculateStartAndFinishOfChainOrigin(this.referenceActivity);let e=this.links.map(n=>{let r=this.gantt.getLink(n);if(!r)throw new Error("Link data not found",{cause:{linkId:n}});let a=this.calculateLink(r);return this.linkCandidates?.set(String(r.id),{targetId:String(this.referenceActivity.id),...a}),a}),i=Number(this.referenceActivity.parent);if(this.parentsWithLinks.has(i)){let n=this.gantt.getCalendar(this.referenceActivity.calendar_id),r=this.parentsCalculations.get(i).es,a=w(n,r,this.referenceActivity.duration,this.referenceActivity);e.push({es:r,ef:a})}return co(e)}calculateLink(e){return{0:()=>this.calculateFS(e),1:()=>this.calculateSS(e),2:()=>this.calculateFF(e),3:()=>this.calculateSF(e)}[e.type]()}};var Cl=class{constructor(e){this.gantt=e.gantt,this.direction=e.direction,this.pendingParentsWithNoLinks=e.pendingParentsWithNoLinks,this.pendingParentsWithLinks=e.pendingParentsWithLinks,this.calculationOfParentsFromLinks=e.calculationOfParentsFromLinks,this.singleParents=e.singleParents,this.calculations=e.calculations,this.activitiesStartChainButChildrenOfLinkedParents=e.activitiesStartChainButChildrenOfLinkedParents,this.linkProperty=e.linkProperty,this.linkDirection=e.linkDirection}checkActivitiesThatNowCanBeCalculated(e){let i=new Set,n=new Set(e);for(let r of e){let a=this.gantt.getTask(r);a.type===L.PROJECT?this.handleProjectActivity(r,a,i,n):this.handleNonProjectActivity(r,a,i,n)}return{activitiesThatCanBeCalculated:i,pendingActivities:n}}handleProjectActivity(e,i,n,r){let a=this.pendingParentsWithNoLinks.has(e),o=this.pendingParentsWithLinks.has(e),s=this.calculationOfParentsFromLinks.has(e);if(a){let l=this.singleParents.get(e)?.childrens;if(!l)return;l.every(d=>this.calculations.has(d))&&(n.add(e),r.delete(e));return}if(o&&s){let l=this.singleParents.get(e)?.childrens;if(!l)return;l.every(d=>this.calculations.has(d))&&(n.add(e),r.delete(e));return}o&&!s&&this.canCalculateParentActivity(i)&&(n.add(e),r.delete(e))}canCalculateParentActivity(e){let i=(e[this.linkProperty]||[]).length===0,n=e.constraint_type;return(this.direction===it.FORWARD?n===D.FNLT||n===D.SNLT:n===D.FNLT)&&i?!0:this.getArrayOfLinkedActivities(e[this.linkProperty]).every(o=>this.calculations.has(o))}handleNonProjectActivity(e,i,n,r){let a=Number(i.parent),o=this.pendingParentsWithLinks.has(a),s=this.calculationOfParentsFromLinks.has(a);if(o&&!s||this.direction===it.BACKWARD&&this.activitiesStartChainButChildrenOfLinkedParents.has(e)&&!s)return;if(i.$target.length===0&&i[Ie.SOURCE].length===0){n.add(e),r.delete(e);return}let l=this.getLinkedActivities(i[this.linkProperty]),c=l.every(d=>this.calculations.has(d.id));if(this.direction===it.BACKWARD&&(l.length===0||c)&&s){n.add(e),r.delete(e);return}c&&(n.add(e),r.delete(e))}getLinkedActivities(e){if(!Array.isArray(e))return[];let i=[];for(let n of e){let r=this.gantt.getLink(n);if(!r)continue;let a=r[this.linkDirection],o=this.gantt.getTask(a);o&&i.push(o)}return i}getArrayOfLinkedActivities(e){if(!Array.isArray(e))return[];let i=[];for(let n of e){let r=this.gantt.getLink(n);r&&i.push(Number(r[this.linkDirection]))}return i}},po=Cl;var Dl=(t,e)=>()=>e()===t;var Tl=t=>!t?.fullyParsed;var KC=16,Xi=async t=>performance.now()-t>KC?(await St(),performance.now()):t;var wr=async({pending:t,activityCalculator:e,calculateFn:i,shouldKeepPending:n,isCalculated:r,onActivityProcessed:a,isCurrent:o})=>{let s=new Set(t),l=performance.now();for(;s.size>0;){if(!o())return;l=await Xi(l);let{activitiesThatCanBeCalculated:c,pendingActivities:d}=e.checkActivitiesThatNowCanBeCalculated(s);if(c.size===0)break;for(let u of c){if(!o())return;l=await Xi(l),i([u])}for(let u of c){if(!o())return;n(u)&&d.add(u),a(u),r(u)&&d.delete(u)}s=d}};var _l=class extends gi{constructor(e){super(e,it.FORWARD),this.gantt=e,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.linkCandidates=new Map,this.calculationOfParentsFromLinks=new Set,this.parentCalculationFromChildren=new Set,this.forbiddenActivitiesLinkedToParentsWithLinks=new Set,this.activitiesStartChainButChildrenOfLinkedParents=new Set,this.identifyInitialActivities(),this.initActivitiesWaitingForCalculation()}async calculateAsync(e){this.identifyParentsWithAndWithoutLinks(),e()&&(this.identifyForbiddenActivitiesLinkedToParentsWithLinks(),e()&&(this.initializeActivitiesWithFullProgress(),e()&&(this.calculateStartAndFinishOfActivitiesThatStartChain(),e()&&(this.identifySecondLevelActivities(),e()&&(this.identifyThirdLevelActivities(),e()&&await this.iterativeCalculateEfAndEs(e))))))}async iterativeCalculateEfAndEs(e){let i=new po({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 wr({pending:this.activitiesWaitingForCalculation,activityCalculator:i,calculateFn:n=>this.calculateStartAndFinishTimes(n),shouldKeepPending:n=>this.calculationOfParentsFromLinks.has(n)&&!this.calculations.has(n),isCalculated:n=>this.calculations.has(n),onActivityProcessed:n=>this.activitiesWaitingForCalculation.delete(n),isCurrent:e})}calculateStartAndFinishTimes(e){e.forEach(i=>{let n=this.gantt.getTask(i);if(n.type===L.PROJECT)return this.doCalculationForParentType(n);if(!n)throw new Error("Error trying to get activity",{cause:{activityId:i}});let r=n.$target,a=n.constraint_type||D.ASAP,o=[D.SNET,D.SNLT,D.FNLT,D.FNET],s=[D.ASAP,D.ALAP,D.SNET,D.FNET,D.SNLT,D.FNLT],l=this.gantt.getCalendar(n.calendar_id);if(!l)throw new Error(`Error trying to get calendar with id: ${n.calendar_id}`);let c=Number(n.progress),d=null,u=null,p=null;if(c===100){this.setDatesForActivityWithFullProgress(n);return}c>0&&s.includes(a)?({es:d,ef:u}=this.getDatesForActivityWithZeroProgress(n),p=new Fr({links:r,activity:n,calculatedActivitiesMap:this.calculations,calculatedAlapsMap:this.alapMap,constraint:a,parentsWithLinks:this.pendingParentsWithLinks,parentsCalculations:this.calculationsOfParentThatImpactChildrens,ganttInstance:this.gantt,linkCandidates:this.linkCandidates}).calculate(),a===D.ASAP&&this.totalFloatForAsap.set(i,{es:p.es,ef:p.ef,text:n.text})):{es:d,ef:u}=new Fr({links:r,activity:n,calculatedActivitiesMap:this.calculations,calculatedAlapsMap:this.alapMap,constraint:a,parentsWithLinks:this.pendingParentsWithLinks,parentsCalculations:this.calculationsOfParentThatImpactChildrens,ganttInstance:this.gantt,linkCandidates:this.linkCandidates}).calculate(),a===D.ALAP&&this.alapMap.set(i,{es:n.start_date,ef:n.end_date,text:n.text});let f=uo(n,a,l);if(o.includes(a)&&(this.constraintsMap.set(i,f),this.totalFloatSnltFnlt.set(i,{es:d,ef:u}),{es:d,ef:u}=this.recalculateInBaseConstraint(a,f,{es:d,ef:u})),[D.MSO,D.MFO].includes(a))if(this.totalFloatForMsoMfo.set(i,{es:d,ef:u}),this.constraintsMap.set(i,f),n.progress===0)d=f.es,u=f.ef;else{let y=n.end_date;a===D.MFO&&(y=Math.max(f.ef,n.end_date)),d=n.start_date,u=y}this.calculations.set(i,{es:d,ef:u}),this.activitiesWaitingForCalculation.delete(i)})}getTheGreatesDateBetweenRestrictionAndEsEf(e,i,n=Ji.GREATER){if(n===Ji.GREATER)return i.ef>e.ef?i:e;if(n===Ji.LESS)return i.ef<e.ef?i:e}setDatesForActivityWithFullProgress(e){this.calculations.set(e.id,{es:e.start_date,ef:e.end_date})}getDatesForActivityWithZeroProgress(e){return{es:e.start_date,ef:e.end_date}}recalculateInBaseConstraint(e,i,n){let r=[D.SNET,D.FNET].includes(e)?Ji.GREATER:Ji.LESS,{es:a,ef:o}=this.getTheGreatesDateBetweenRestrictionAndEsEf(i,n,r);return{es:a,ef:o}}cleanAllActivityParentsFromLinks(e){return e.map(i=>{let n=this.gantt.getLink(i);if(!n)throw new Error("Error trying to get link",{cause:{linkId:i}});let r=n.source,a=n.target;if(!(!this.gantt.getTask(r)||this.gantt.getTask(r)?.type===L.PROJECT)&&!(!this.gantt.getTask(a)||this.gantt.getTask(a)?.type===L.PROJECT))return i}).filter(Boolean)}},ef=_l;var El=class{constructor(e){this.activity=e.activity,this.links=e.links,this.calculatedActivities=e.calculatedActivitiesMap,this.forwardPathCalculations=e.calculatedForwardActivitiesMap,this.gantt=e.ganttInstance}getForwardOrBackwardCalculations(e,i=null){return i===D.ALAP?this.forwardPathCalculations.get(e):this.calculatedActivities.get(e)}calculateSuccessorTimes(e,i,n=0,r,a=X.FS){let o=this.gantt.getCalendar(this.activity.calendar_id);if(!o)throw new Error(`Error trying to get calendar with id: ${this.activity.calendar_id}`);let s=e,l=this.activity.type===L.MILESTONE;if(l&&r===0){let d=w(o,s,i,this.activity),u=w(o,d,n,this.activity);return{ls:d,lf:u}}let c={lag:r,workTime:s,activityCalendar:o,lsDataCalculation:i,lfDataCalculation:n,isMilestone:l};if(a===X.FS){let{ls:d,lf:u}=this.calculateFsLink(c);return{ls:d,lf:u}}if(a===X.FF){let{ls:d,lf:u}=this.calculateFFLink(c);return{ls:d,lf:u}}if(a===X.SS){let{ls:d,lf:u}=this.calculateSSlink(c);return{ls:d,lf:u}}if(a===X.SF){let{ls:d,lf:u}=this.calculateSFLink(c);return{ls:d,lf:u}}}calculateSS(e,i=!1){let n=this.getValueForSS(e,i),r=-e.lag||0,a=this.activity.duration,o=e.lag;return this.calculateSuccessorTimes(n,r,a,o,X.SS)}calculateFF(e,i){let n=this.getForwardOrBackwardCalculations(Number(e.target)),r=i===D.ALAP?"ef":"lf",a=n[r],o=-this.activity.duration,s=-e.lag||0,l=e.lag;return this.calculateSuccessorTimes(a,o,s,l,X.FF)}calculateFS(e,i){let n="ls";n=i===D.ALAP?"es":"ls";let r=this.getForwardOrBackwardCalculations(Number(e.target),i),a=-this.activity.duration,o=e.lag||0,s=-e.lag||0;return this.calculateSuccessorTimes(r[n],a,s,o,X.FS)}calculateSF(e,i=!1){let n=i?this.getEarlyStartFromForwardPath(Number(e.target)).ef:this.getForwardOrBackwardCalculations(Number(e.target)).lf,r=-e.lag||0,a=this.activity.duration,o=e.lag;return this.calculateSuccessorTimes(n,r,a,o,X.SF)}getEarlyStartFromForwardPath(e){return this.forwardPathCalculations.get(e)}getValueForSS(e,i){return i?this.getEarlyStartFromForwardPath(Number(e.target)).es:this.getForwardOrBackwardCalculations(Number(e.target))["ls"]}calculateDate(e,i,n){let r=pe(i).clone();return w(e,new Date(r),n,this.activity)}getLastWorkingHour(e,i,n=z.PAST){let r=e instanceof Date?e:new Date(e),a=pe(r).clone();return this.isActivityInInitHour(i,r)&&n===z.PAST&&(a=a.hours(0).minutes(0).seconds(0).milliseconds(0)),ae({dateBaseToCalculate:new Date(a),direction:n,activityCalendar:i,activity:this.activity})}isActivityInInitHour(e,i){let n=i instanceof Date?i:new Date(i),a=e.getWorkHours(n)[0];if(!a||!a.includes("-"))return!1;let o=a.split("-")[0];if(!o.includes(":"))return!1;let s=o.split(":");return s.length<2?!1:(o=parseInt(s[0],10),pe.isMoment(i)?i.hours()===o:n.getUTCHours()===o)}calculateFsLink({lag:e,workTime:i,activityCalendar:n,lsDataCalculation:r,lfDataCalculation:a,isMilestone:o=!1}){let s=null,l=null;if(e===0){let d=this.getLastWorkingHour(i,n,z.PAST);return s=w(n,d,a,this.activity),s=this.getLastWorkingHour(s,n,z.PAST),l=w(n,s,r,this.activity),{ls:l,lf:s}}let c=i;return o||(c=this.getLastWorkingHour(i,n)),s=w(n,c,a,this.activity),l=w(n,s,r,this.activity),o||(s=this.getLastWorkingHour(s,n,z.PAST,!0)),{ls:l,lf:s}}calculateFFLink({lag:e,workTime:i,activityCalendar:n,lsDataCalculation:r,lfDataCalculation:a}){let o=null,s=null;if(e===0)return o=w(n,i,a,this.activity),s=w(n,o,r,this.activity),{ls:s,lf:o};let l=i;return e>0&&(l=this.getLastWorkingHour(l,n,z.PAST)),o=w(n,l,a,this.activity),s=w(n,o,r,this.activity),{ls:s,lf:o}}calculateSSlink({lag:e,workTime:i,activityCalendar:n,lsDataCalculation:r,lfDataCalculation:a,isMilestone:o=!1}){let s=null,l=null;if(e===0)return l=w(n,i,r,this.activity),s=w(n,l,a,this.activity),{ls:l,lf:s};let c=i;return e<0&&!o&&(c=this.getLastWorkingHour(c,n,"future")),l=w(n,c,r,this.activity),s=w(n,l,a,this.activity),{ls:l,lf:s}}calculateSFLink({lag:e,workTime:i,activityCalendar:n,lsDataCalculation:r,lfDataCalculation:a}){let o=null,s=null;return e===0?(s=w(n,i,r),o=w(n,s,a,this.activity),{ls:s,lf:o}):(s=w(n,i,r,this.activity),o=w(n,s,a,this.activity),{ls:s,lf:o})}},nf=El;var Pl=class extends nf{constructor(e){super(e),this.constraint=e.constraint||D.ASAP,this.parentsWithFullProgress=e.parentsWithFullProgress,this.parentsThatImpactChildrens=e.parentsThatImpactChildrens,this.projectDates=this.gantt.getSubtaskDates()}calculate(){if(this.links.length===0)return new gi(this.gantt,it.BACKWARD).calculateStartAndFinishOfChainOrigin(this.activity);let e=this.activity.progress>0&&this.activity.progress<100,i=this.gantt.getTask(this.activity.parent),n=!1;i&&(n=this.parentsThatImpactChildrens.has(Number(this.activity.parent)));let r=this.links.map(o=>{let s=this.gantt.getLink(o);if(!s)throw new Error("Link not found",{cause:{linkId:o}});if(!this.parentsWithFullProgress.has(Number(s.target)))return this.calculateLink(s)}).filter(o=>o);if(r.length!==0){let o=this.getMinLfFromLinks(r);if(r.push(this.calculateTheLsAndLfForTheActivity()),n){let d=this.parentsThatImpactChildrens.get(Number(this.activity.parent));r.push(this.calculateTheLsAndLfForTheActivity(d))}let s=this.getMinDateFromLinks(r),l=s.ls,c=s.lf;return e&&(l=this.activity.start_date,c=this.getMinCalculationLogic(s)),{ls:l,lf:c,minFromLinks:o}}if(n){r.push(this.calculateTheLsAndLfForTheActivity());let s=this.parentsThatImpactChildrens.get(Number(this.activity.parent)).lf,l=w(this.gantt.getCalendar(this.activity.calendar_id),s,-this.activity.duration,this.activity);r.push({ls:l,lf:s});let c=this.getMinDateFromLinks(r);return{ls:c.ls,lf:c.lf,minFromLinks:c}}let a=this.calculateTheLsAndLfForTheActivity();return{ls:a.ls,lf:a.lf,minFromLinks:a}}calculateTheLsAndLfForTheActivity(e=null){try{let i=this.activity.duration,n=this.gantt.getCalendar(this.activity.calendar_id);if(!n)throw new Error(`Calendar not found with id ${this.activity.calendar_id}`);let r=e?e.lf:this.projectDates.end_date;if(!r)throw new Error("End date not found for activity",{cause:{activityId:this.activity.id}});return{ls:w(n,r,-i,this.activity),lf:r}}catch(i){throw Error(i.message)}}SnetSnltMsoMinDate(e){let i=Math.min(e.lf,this.projectDates.end_date);return new Date(Math.max(i,this.activity.end_date))}calculateLink(e){let i=this.gantt.getTask(e.target);if(!i||i.progress>0&&i.type!==L.PROJECT)return;let n=this.getSpecialCalculationParamForConstraintLink(),r=this.getSpecialParamForSf(),a=this.getSpecialParamForFF();return{0:()=>this.calculateFS(e,n),1:()=>this.calculateSS(e),2:()=>this.calculateFF(e,a),3:()=>this.calculateSF(e,r)}[e.type]()}getSpecialCalculationParamForConstraintLink(){if(this.constraint===D.ALAP)return D.ALAP;if(this.constraint===D.FNET||this.constraint===D.SNET)return"snet-fnet";if(this.constraint===D.FNLT)return D.FNLT}getSpecialParamForSf(){return!![D.ALAP].includes(this.constraint)}getSpecialParamForFF(){return!![D.MFO,D.MSO].includes(this.constraint)}getMinCalculationLogic(e){if(this.constraint===D.ALAP)return this.getMinDateBasedOnConstraint(e);if(this.constraint===D.FNET)return this.getMinDateBasedOnConstraint(e);if(this.constraint===D.FNLT)return this.getMinDateBasedOnConstraint(e);if(this.constraint===D.MFO)return this.getMinDateBasedOnConstraint(e);if(this.constraint===D.SNET||this.constraint===D.SNLT||this.constraint===D.MSO)return this.SnetSnltMsoMinDate(e);if(this.constraint===D.ASAP)return this.getMinDateBasedOnConstraint(e)}getMinDateFromLinks(e){try{return this.constraint===D.ALAP||this.constraint===D.ASAP?e.reduce((n,r)=>r.lf<n.lf?r:n):e.reduce((i,n)=>n.ls<i.ls?n:i)}catch(i){throw new Error(`Function: getMinDateFromLinks in LinksConstraintCalculator - ${i.message}`)}}getMinLfFromLinks(e){return e.reduce((i,n)=>n.lf<i.lf?n:i)}getMinDateBasedOnConstraint(e,i=this.constraint){let n=Math.min(e.lf,this.projectDates.end_date),r=this.activity.end_date,a=this.activity.constraint_date;if(i===D.ASAP)return new Date(Math.max(n,r));if(i===D.FNET||i===D.FNLT){let o=Math.min(n,a);return new Date(Math.max(n,o))}if(i===D.ALAP)return new Date(Math.min(n,r))}},rf=Pl;function YC(t,e,i){let n={ls:null,lf:null};return i===D.MSO&&(n.ls=e.constraint_date,n.lf=w(t,n.ls,e.duration,e)),i===D.MFO&&(n.lf=e.constraint_date,n.ls=w(t,n.lf,-e.duration,e)),n}var af=YC;var Rl=class extends gi{constructor(e,i,n){super(e,it.BACKWARD),this.gantt=e,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=i,this.forwardConstraintsMap=n,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(e){this.identifyParentsWithAndWithoutLinks(),e()&&(this.identifyForbiddenActivitiesLinkedToParentsWithLinks(),e()&&(this.initializeActivitiesWithFullProgress(),e()&&(this.calculateStartAndFinishOfActivitiesThatStartChain(),e()&&(this.identifySecondLevelActivities(),e()&&(this.identifyThirdLevelActivities(),e()&&await this.iterativeCalculateLfAndLs(e))))))}async iterativeCalculateLfAndLs(e){let i=new po({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 wr({pending:this.activitiesWaitingForCalculation,activityCalculator:i,calculateFn:n=>this.calculateStartAndFinishTimes(n),shouldKeepPending:n=>this.calculationOfParentsFromLinks.has(n)&&!this.calculations.has(n),isCalculated:n=>this.calculations.has(n),onActivityProcessed:n=>this.activitiesWaitingForCalculation.delete(n),isCurrent:e})}setDatesToParentsWithLinks(e){if(!e)throw new Error("Error trying to get parent",{cause:{receivedParentData:e}});let i=this.singleParents.get(e.id).childrens,r=Array.from(this.calculations).filter(s=>i.includes(s[0])).map(s=>s[1]),{minLs:a,maxLf:o}=r.reduce((s,{ls:l,lf:c})=>({minLs:new Date(Math.min(s.minLs.getTime(),new Date(l).getTime())),maxLf:new Date(Math.max(s.maxLf.getTime(),new Date(c).getTime()))}),{minLs:new Date(r[0].ls),maxLf:new Date(r[0].lf)});this.calculations.set(e.id,{ls:a,lf:o})}calculateStartAndFinishTimes(e){e.forEach(i=>{let n=this.gantt.getTask(i);if(!n)throw new Error("Activity not found",{cause:{activityId:i}});let r=n.$source,a=n.constraint_type||D.ASAP,o=Number(n.progress);if(this.activitiesStartChainButChildrenOfLinkedParents.has(i)){if(this.calculationsOfParentThatImpactChildrens.has(Number(n.parent))&&this.calculationsOfParentThatImpactChildrens.get(Number(n.parent))===!1){let{ls:d,lf:u}=this.calculateStartAndFinishOfChainOrigin(n,this.direction);this.setCalculations(n,d,u);return}return this.doCalculationForActivitiesThatStartLinkButHisParentIsLinked(n)}if(n.type===L.PROJECT)return this.doCalculationForParentType(n);if(o===100){this.setDatesForActivityWithFullProgress(n);return}if(this.allLinkedActivitiesHasProgress(r,n)){this.setWhenAllLinkedActivitiesHasProgress(n);return}if(o>0&&o<100&&(a===D.MSO||a===D.MFO)){this.setWhenActivitiesHasProgressButLessThanOneHundred(n,a);return}if(a===D.MSO||a===D.MFO){this.recalculateInBaseRestriction(n,a);return}let{ls:s,lf:l,minFromLinks:c}=this.calculateLfandLsFromLinks(r,n,a,this.parentsWithFullProgress,this.calculationsOfParentThatImpactChildrens);(a===D.SNLT||a===D.FNLT)&&({ls:s,lf:l}=this.getTheLessLateInBasEsEfConstraint(n.id,{ls:s,lf:l},a)),this.setCalculations(n,s,l),this.minFromLinks.set(n.id,{ls:c.ls,lf:c.lf})})}getTheLessLateInBasEsEfConstraint(e,i,n){let r=this.forwardConstraintsMap.get(e);if(!r){let a=this.gantt.getTask(e),o=this.gantt.getCalendar(a.calendar_id);r=uo(a,n,o)}return i.lf<r.ef?i:{ls:r.es,lf:r.ef}}allLinkedActivitiesHasProgress(e){try{let i=!0;for(let n of e){let r=this.gantt.getLink(n);if(!r)continue;let a=this.gantt.getTask(r.target);a&&(a.type===L.PROJECT&&(i=!1),a.progress===0&&(i=!1))}return i}catch(i){throw new Error(i.message)}}setDatesForActivityWithFullProgress(e){this.setCalculations(e,e.start_date,e.end_date)}setWhenAllLinkedActivitiesHasProgress(e){let i=Number(e.parent),{ls:n,lf:r}=this.calculateStartAndFinishOfChainOrigin(e,it.BACKWARD);if(this.calculationsOfParentThatImpactChildrens.has(i)){n=e.start_date;let a=this.calculationsOfParentThatImpactChildrens.get(i);a&&typeof a=="object"&&a.lf!=null&&(r=new Date(Math.min(r,a.lf)))}this.setCalculations(e,n,r)}setWhenActivitiesHasProgressButLessThanOneHundred(e,i){if(i===D.MSO){this.setCalculations(e,e.start_date,e.end_date);return}if(i===D.MFO){let n=Math.min(e.constraint_date,this.projectDates.end_date),r=new Date(Math.max(n,e.end_date));this.setCalculations(e,e.start_date,r);return}}setCalculations(e,i,n){this.calculations.set(e.id,{ls:i,lf:n,text:e.text})}calculateLfandLsFromLinks(e,i,n,r,a){return new rf({links:e,activity:i,calculatedActivitiesMap:this.calculations,calculatedForwardActivitiesMap:this.forwardPathCalculations,constraint:n,parentsWithFullProgress:r,parentsThatImpactChildrens:a,ganttInstance:this.gantt}).calculate()}recalculateInBaseRestriction(e,i){try{let n=this.gantt.getCalendar(e.calendar_id);if(!n)throw new Error(`Error trying to get calendar with id: ${e.calendar_id}`);let r=af(n,e,i);this.constraintMap.set(e,r),this.setCalculations(e,r.ls,r.lf)}catch(n){throw new Error(n.message)}}cleanAllActivityParentsFromLinks(e){return e.map(i=>{let n=this.gantt.getLink(i).source,r=this.gantt.getLink(i).target;if(!(!this.gantt.getTask(n)||this.gantt.getTask(n)?.type===L.PROJECT)&&!(!this.gantt.getTask(r)||this.gantt.getTask(r)?.type===L.PROJECT))return i}).filter(Boolean)}doCalculationForActivitiesThatStartLinkButHisParentIsLinked(e){let i=Number(e.parent),n=this.calculationsOfParentThatImpactChildrens.get(i),r=0,a=0;if([D.ASAP,D.ALAP,D.SNET,D.FNET].includes(e.constraint_type))if(Number(e.progress)>0){let c=this.projectDates.end_date;a=new Date(Math.min(c,n.lf)),r=e.start_date}else a=n.lf,r=w(this.gantt.getCalendar(e.calendar_id),a,-e.duration,e);if([D.SNLT].includes(e.constraint_type)){let c=this.calculationsOfParentThatImpactChildrens.get(i),d=w(this.gantt.getCalendar(e.calendar_id),c.lf,-e.duration,e),u=e.constraint_date??d;r=new Date(Math.min(u.getTime(),d.getTime())),a=w(this.gantt.getCalendar(e.calendar_id),r,e.duration,e)}if([D.FNLT].includes(e.constraint_type)){let c=this.calculationsOfParentThatImpactChildrens.get(i),d=e.constraint_date??c.lf;r=new Date(Math.min(d.getTime(),c.lf.getTime())),a=w(this.gantt.getCalendar(e.calendar_id),r,e.duration,e)}[D.MSO].includes(e.constraint_type)&&(r=e.constraint_date,a=w(this.gantt.getCalendar(e.calendar_id),r,e.duration,e)),[D.MFO].includes(e.constraint_type)&&(a=e.constraint_date,r=w(this.gantt.getCalendar(e.calendar_id),a,-e.duration,e));let o=this.projectDates.end_date,s=[{ls:r,lf:a}];s.push({ls:w(this.gantt.getCalendar(e.calendar_id),o,-e.duration,e),lf:o});let l=this.getMinLfFromLinks(s);this.calculations.set(e.id,{ls:l.ls,lf:l.lf,text:e.text})}getMinLfFromLinks(e=[]){return e.length?e.reduce((i,n)=>n.lf<i.lf?n:i):!1}},of=Rl;function sf(){return null}var lf=({forward:t,backward:e,id:i,activity:n,gantt:r,projectDates:a})=>({totalFloat:{es:t.calculations.get(i)?.es||0,ef:t.calculations.get(i)?.ef||0,ls:e.calculations.get(i)?.ls||0,lf:e.calculations.get(i)?.lf||0,constraintsMap:t.constraintsMap.get(i),totalFloatSnltFnlt:t.totalFloatSnltFnlt.get(i),totalFloatForMsoMfo:t.totalFloatForMsoMfo.get(i),minFromLinks:e.minFromLinks.get(i),activity:n,gantt:r},freeFloat:{forwardMap:t.calculations||new Map,backwardMap:e.calculations||new Map,activity:n,projectDates:a,gantt:r}});var kl=class{constructor(e){this.gantt=e.gantt,this.activity=e.activity,this.es=e.es,this.ef=e.ef,this.ls=e.ls,this.lf=e.lf,this.constrainstMap=e.constraintsMap,this.totalFloatSnltFnlt=e.totalFloatSnltFnlt,this.totalFloatForMsoMfo=e.totalFloatForMsoMfo,this.minFromLinks=e.minFromLinks}getTotalFloat(){let{constraint_type:e}=this.activity,i=Number(this.activity.progress);if(i===100)return 0;if(e||(e=D.ASAP),e===D.ASAP||!e)return i===0?this.calculateAsap():this.calculateAsapWithProgress();if(e===D.ALAP)return i===0?this.calculateAlap():this.calculateAlapWithProgress();if(e===D.SNET||e===D.FNET)return i===0?this.calculateSnetFet():this.calculateSnetFnetSnltWithProgress();if(e===D.SNLT)return i===0?this.calculateSnltFnlt():this.calculateSnetFnetSnltWithProgress();if(e===D.FNLT)return i===0?this.calculateSnltFnlt():this.calculateFnltWithProgress();if(e===D.MSO||e===D.MFO)return i===0?this.calculateMsoMfo():this.calculateMsoMfoWithProgress()}calculateAsap(){let e=this.calculationWithCalendar(this.ls,this.es),i=this.calculationWithCalendar(this.lf,this.ef);return this.getMinValue(e,i)/this.gantt.config.hoursPerDay}calculateAsapWithProgress(){let e=this.calculationWithCalendar(this.lf,this.ef);if(this.minFromLinks){let i=this.calculationWithCalendar(this.minFromLinks.lf,this.ef);return this.getMinValue(e,i)/this.gantt.config.hoursPerDay}return e/this.gantt.config.hoursPerDay}calculateAlap(){let e=this.calculationWithCalendar(this.ls,this.es),i=this.calculationWithCalendar(this.lf,this.ef),n=this.getMinValue(e,i),r=this.calculationWithCalendar(this.lf,this.activity.end_date);return this.getMinValue(n,r)/this.gantt.config.hoursPerDay}calculateAlapWithProgress(){return this.calculationWithCalendar(this.lf,this.ef)/this.gantt.config.hoursPerDay}calculateSnetFnetSnltWithProgress(){let e=this.calculationWithCalendar(this.lf,this.ef);if(this.minFromLinks){let i=this.calculationWithCalendar(this.minFromLinks.lf,this.ef);return this.getMinValue(e,i)/this.gantt.config.hoursPerDay}return e/this.gantt.config.hoursPerDay}calculateFnltWithProgress(){let e=this.calculationWithCalendar(this.lf,this.ef),i=this.calculationWithCalendar(this.activity.constraint_date,this.ef);if(this.minFromLinks){let n=this.calculationWithCalendar(this.minFromLinks.lf,this.ef);return this.getMinValue(e,i,n)/this.gantt.config.hoursPerDay}return this.getMinValue(e,i)/this.gantt.config.hoursPerDay}calculateMsoMfoWithProgress(){return this.calculationWithCalendar(this.lf,this.ef)/this.gantt.config.hoursPerDay}calculateSnetFet(){let e=this.calculationWithCalendar(this.ls,this.es),i=this.calculationWithCalendar(this.lf,this.ef);return this.getMinValue(e,i)/this.gantt.config.hoursPerDay}calculateSnltFnlt(){let e=this.calculationWithCalendar(this.ls,this.es),i=this.calculationWithCalendar(this.lf,this.ef),n=this.getMinValue(e,i);if(!this.totalFloatSnltFnlt&&!this.constrainstMap)return this.getMinValue(e,i)/this.gantt.config.hoursPerDay;let r=0;return this.activity.constraint_type===D.SNLT?r=this.calculationWithCalendar(this.constrainstMap.es,this.totalFloatSnltFnlt.es):r=this.calculationWithCalendar(this.constrainstMap.ef,this.totalFloatSnltFnlt.ef),this.getMinValue(r,n)/this.gantt.config.hoursPerDay}calculateMsoMfo(){let e=this.calculationWithCalendar(this.ls,this.es),i=this.calculationWithCalendar(this.lf,this.ef),n=this.getMinValue(e,i);if(!this.totalFloatForMsoMfo&&!this.constrainstMap)return this.getMinValue(e,i)/this.gantt.config.hoursPerDay;let r=0;return this.activity.constraint_type===D.MSO?r=this.calculationWithCalendar(this.constrainstMap.es,this.totalFloatForMsoMfo.es):r=this.calculationWithCalendar(this.constrainstMap.ef,this.totalFloatForMsoMfo.ef),this.getMinValue(r,n)/this.gantt.config.hoursPerDay}getMinValue(...e){return Math.min(...e)}calculationWithCalendar(e,i){return this.gantt.getCalendar(this.activity.calendar_id).calculateDuration({start_date:new Date(i),end_date:new Date(e)})}},cf=kl;var Ll=class{constructor(e){this.gantt=e.gantt,this.activity=e.activity,this.forwardMap=e.forwardMap,this.backwardMap=e.backwardMap,this.projectDates=e.projectDates,this.linksFreeFloatArray=[],this.linksFreeFloatObject={},this.durationCache=new Map}getFreeFloat(){let e=Number(this.activity.progress),i=this.getConstraintType();return this.calculateFreeFloatOfLink(i),{activityFreeFloat:e===100?0:this.getFreeFloatBaseConstraint(i),linksFreeFloat:this.linksFreeFloatObject}}getFreeFloatBaseConstraint(e){return e===D.MSO||e===D.MFO?this.calculateMsoMfo(e):this.calculateGeneral(e)}calculateFreeFloatOfLink(e=D.ASAP){let i=this.activity.$source.map(n=>{let{LINK:r,LINK_TYPE:a}=this.getLinkData(n),o=this.gantt.getTask(r.target);if(!o)return{linkId:r.id,freeFloat:null,hasProgress:!1};let s=Number(o.progress)>0,{sucessorDateToCalculate:l,predecessorDateToCalculate:c}=this.getDatesFromSucessorAndPredecessor(a,e,o),d=this.calculationWithCalendar(l,c),u=this.parseHoursToDays(d)-this.parseHoursToDays(r.lag),p=Math.max(0,u);return this.linksFreeFloatObject[r.id]=p,{linkId:r.id,freeFloat:p,hasProgress:s}}).filter(n=>n.freeFloat!==null&&n.freeFloat!==void 0);return this.linksFreeFloatArray=i,i}calculateGeneral(e=D.ASAP){let i=this.getMinFloat(this.linksFreeFloatArray),n=this.calculateFreeFloatForEndOfProject(e),r=[D.SNLT,D.FNLT].includes(e)&&i===null?this.doCalculationForSnltFnlt(e,n,i):this.doGeneralCalculation(n,i);return Math.max(0,r)}getConstraintType(){let{constraint_type:e}=this.activity;return e||(e=D.ASAP),e}getDatesFromSucessorAndPredecessor(e,i,n){let r=n.constraint_type===D.ALAP,a=this.getSucessorAndPredecessorDates({constraint:i,isSuscessorAlap:r,sucessorId:n.id,predecessorId:this.activity.id}),o=new Date,s=new Date;return o=a[e].sucessor,s=a[e].predecessor,{sucessorDateToCalculate:o,predecessorDateToCalculate:s}}doGeneralCalculation(e,i){return i===null?e:this.getMinValue(i,e)}doCalculationForSnltFnlt(e,i,n){let r=this.calculateFreeFloatOfRestriction(e);return this.getMinValue(n,i,r)}calculateFreeFloatForEndOfProject(e){let i=e===D.ALAP?this.backwardMap.get(this.activity.id):this.forwardMap.get(this.activity.id);return this.parseHoursToDays(this.calculationWithCalendar(this.gantt.getSubtaskDates().end_date,e===D.ALAP?i?.lf:i?.ef))}calculateFreeFloatOfRestriction(e){let i=this.forwardMap.get(this.activity.id);return this.parseHoursToDays(this.calculationWithCalendar(this.activity.constraint_date,e===D.FNLT?i?.ef:i?.es))}getLinkData(e){let i=this.gantt.getLink(e)||{},n=zi(i.type);return{LINK:i,LINK_TYPE:n}}getSucessorAndPredecessorDates({constraint:e,isSuscessorAlap:i,sucessorId:n,predecessorId:r}){let a=(i?this.backwardMap:this.forwardMap).get(n),o=(e===D.ALAP?this.backwardMap:this.forwardMap).get(r),s=e===D.ALAP?o?.ls:o?.es,l=e===D.ALAP?o?.lf:o?.ef;return{fs:{sucessor:a?.ls??a?.es,predecessor:l},ss:{sucessor:a?.ls??a?.es,predecessor:s},ff:{sucessor:a?.lf??a?.ef,predecessor:l},sf:{sucessor:a?.lf??a?.ef,predecessor:s}}}calculateMsoMfo(e){let i=this.activity.constraint_date||new Date,n=this.forwardMap.get(this.activity.id),r=e===D.MSO?n?.es:n?.ef,a=this.calculationWithCalendar(i,r);return Math.max(0,this.parseHoursToDays(a))}getMinValue(...e){let i=e.filter(n=>n!=null);return i.length?Math.min(...i):0}calculationWithCalendar(e,i){if(!(e instanceof Date)||!(i instanceof Date)||!Number.isFinite(e.getTime())||!Number.isFinite(i.getTime()))return Number.NaN;let n=`${i.getTime()}_${e.getTime()}`;if(this.durationCache.has(n))return this.durationCache.get(n);let a=this.gantt.getCalendar(this.activity.calendar_id).calculateDuration({start_date:new Date(i),end_date:new Date(e)});return this.durationCache.set(n,a),a}parseHoursToDays(e){return e==null?0:e/this.gantt.config.hoursPerDay}getMinFloat(e){if(!e?.length)return null;let i=e.filter(n=>!n.hasProgress).map(n=>n.freeFloat);return i.length===0?null:Math.min(...i)}},df=Ll;var uf=t=>({totalFloat:new cf(t.totalFloat).getTotalFloat(),freeFloat:new df(t.freeFloat).getFreeFloat()});var Ol=async({activityIds:t,forward:e,backward:i,gantt:n,projectDates:r,isCurrent:a})=>{let o=performance.now(),s=new Map,l=new Map;for(let c of t){if(a&&!a())return{totalFloatMap:s,freeFloatMap:l};let d=n.getTask(c);if(!d)continue;let u=lf({forward:e,backward:i,id:c,activity:d,gantt:n,projectDates:r}),{totalFloat:p,freeFloat:f}=uf(u);s.set(c,p),l.set(c,f),o=await Xi(o)}return{totalFloatMap:s,freeFloatMap:l}};var bl=class{constructor(e){this.gantt=e,this.forwardPathCalculations=null,this.backwardPathCalculations=null,this.totalFloat=new Map,this.freeFloat=new Map,this.linkResidualHours=new Map,this.currentCalculationId=0}getCurrentCalculationId=()=>this.currentCalculationId;async calculate(e,i=()=>!0){let n=++this.currentCalculationId,r=Dl(n,this.getCurrentCalculationId),a=()=>r()&&i();try{let o=e||this.gantt;if(this.gantt=o||sf(),Tl(this.gantt))return!1;let s=new ef(this.gantt);if(await s.calculateAsync(a),!a())return!1;let l=s.calculations,c=s.constraintsMap,d=new of(this.gantt,l,c);if(await d.calculateAsync(a),!a())return!1;this.forwardPathCalculations=l,this.backwardPathCalculations=d.calculations;let u=await this.calculateLinkResidualHours(s.linkCandidates,l,a);if(!u||!a())return!1;this.linkResidualHours=u;let{totalFloatMap:p,freeFloatMap:f}=await this.calculateFloatsAsync(s,d,a);return a()?(this.totalFloat=p,this.freeFloat=f,this.gantt.refreshData(),!0):!1}catch(o){throw this.forwardPathCalculations?.size,o}}async calculateLinkResidualHours(e,i,n=()=>!0){let r=new Map,a=performance.now();for(let[o,s]of e){if(a=await Xi(a),!n())return null;let l=Number(s.targetId),c=this.gantt.getTask(l),d=i.get(l),u=s.ef,p=d?.ef,f=c&&this.gantt.getCalendar(c.calendar_id);if(!f||!(u instanceof Date)||!(p instanceof Date)||!Number.isFinite(u.getTime())||!Number.isFinite(p.getTime())){r.set(o,null);continue}let y=u.getTime(),m=p.getTime()>=y?f.calculateDuration({start_date:u,end_date:p}):-f.calculateDuration({start_date:p,end_date:u});r.set(o,Number.isFinite(m)?Object.is(m,-0)?0:m:null)}return r}async calculateFloatsAsync(e,i,n){try{let r=this.gantt.getSubtaskDates(),a=Array.from(this.forwardPathCalculations.keys());return await Ol({activityIds:a,forward:e,backward:i,gantt:this.gantt,projectDates:r,isCurrent:n})}catch(r){throw this.forwardPathCalculations?.size,r}}},pf=bl;var GC=t=>t===_.FNET||t===_.FNLT||t===_.MFO,$C=t=>new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()));function qC(t,e){let i=t.constraintDate;if(!i||!GC(t.constraintType))return i;let n=$C(i);if(i.getTime()!==n.getTime())return i;let r=e.getClosestWorkTime({date:n,dir:"future",task:t});return r.getUTCFullYear()===i.getUTCFullYear()&&r.getUTCMonth()===i.getUTCMonth()&&r.getUTCDate()===i.getUTCDate()?dr(t,e):i}function zC(t){let e=new Map,i=new Map,n=new Map;return{calculateEndDate:({start_date:r,duration:a})=>{let o=`${r.getTime()}|${a}`,s=e.get(o);if(s!==void 0)return new Date(s);let l=t.calculateEndDate(r,a);return e.set(o,l.getTime()),l},calculateDuration:({start_date:r,end_date:a})=>{let o=`${r.getTime()}|${a.getTime()}`,s=i.get(o);if(s!==void 0)return s;let l=t.calculateDuration(r,a);return i.set(o,l),l},getWorkHours:r=>t.getWorkHours(r),$gantt:{getClosestWorkTime:({date:r,dir:a,unit:o})=>{let s=o??"hour",l=`${r.getTime()}|${a}|${s}`,c=n.get(l);if(c!==void 0)return new Date(c);let d=t.getClosestWorkTime({date:r,direction:a,unit:s});return n.set(l,d.getTime()),d}}}}function JC(t){let e=new Map;t.forEachActivity((r,a)=>e.set(String(a),r));let i=new Map,n=(r,a)=>{let o=i.get(r);if(o!=null)return o;let l=e.get(r)?.parentId??null,c=0;return l!==null&&!a.has(r)&&(a.add(r),c=n(String(l),a)+1),i.set(r,c),c};for(let r of e.keys())n(r,new Set);return i}function XC(t){let e=new Set;t.forEachActivity((s,l)=>{e.add(String(l)),s.parentId!==null&&e.add(String(s.parentId))});let i=new Map;for(let s of e){let l=Number(s);Number.isSafeInteger(l)&&l!==0&&i.set(l,(i.get(l)??0)+1)}let n=new Map,r=new Map;for(let s of e){let l=Number(s);Number.isSafeInteger(l)&&l!==0&&i.get(l)===1&&(n.set(s,l),r.set(l,s))}let a=1,o=s=>{let l=String(s),c=n.get(l);if(c!==void 0)return c;for(;r.has(a);)a+=1;return n.set(l,a),r.set(a,l),a++};for(let s of e)o(s);return{toLegacy:o,toCanonical:s=>typeof s=="number"?r.get(s)??null:n.has(String(s))?String(s):null}}function ZC(t,e){let i=JC(t),n=new Map;return t.forEachActivity((r,a)=>{let o=String(a);n.set(o,{id:e.toLegacy(o),parent:r.parentId===null?0:e.toLegacy(r.parentId),$level:i.get(o)??0,$source:t.getOutgoingLinkIds(o),$target:t.getIncomingLinkIds(o),start_date:r.startDate,end_date:r.endDate,duration:r.durationHours,progress:r.progress,type:r.type,calendar_id:r.calendarId,constraint_type:r.constraintType,constraint_date:qC(r,t)})}),n}function QC(t){let e=new Map;for(let o of t.values()){let s=e.get(o.parent);s?s.push(o):e.set(o.parent,[o])}let i=[],n=new Set,r=[],a=o=>{if(o)for(let s=o.length-1;s>=0;s-=1)r.push(o[s])};for(a(e.get(0));r.length>0;){let o=r.pop();n.has(o)||(n.add(o),i.push(o),a(e.get(o.id)))}if(i.length<t.size)for(let o of t.values())n.has(o)||i.push(o);return i}function tD(t){let e=null,i=null;return t.forEachActivity(n=>{if(n.startDate){let r=n.startDate.getTime();e=e==null?r:Math.min(e,r)}if(n.endDate){let r=n.endDate.getTime();i=i==null?r:Math.max(i,r)}}),{start_date:new Date(e??0),end_date:new Date(i??0)}}async function ff(t,e){let i=new Map,n=c=>{let d=c==null?"__default__":String(c),u=i.get(d);if(u)return u;let p=t.calendarReader.getCalendar(String(c)),f=zC(p);return i.set(d,f),f},r=tD(t);await St();let a=XC(t),o=ZC(t,a);await St();let s=[...o.values()].sort((c,d)=>(c.start_date?.getTime()??0)-(d.start_date?.getTime()??0));await St();let l=QC(o);return{fullyParsed:!0,config:{hoursPerDay:e},getTask:c=>{let d=a.toCanonical(c);return d===null?null:o.get(d)??null},getLink:c=>{let d=t.getLink(c);return d?{...d,source:a.toLegacy(d.source),target:a.toLegacy(d.target),lag:d.lag}:null},getCalendar:n,getChildren:c=>{let d=a.toCanonical(c);return d===null?[]:t.getChildren(d).map(a.toLegacy)},eachTask:c=>{for(let d of l)c(d)},getTaskByTime:()=>s,getSubtaskDates:()=>r,getCanonicalActivityId:a.toCanonical,refreshData:()=>{}}}var Fl=1e3,eD=t=>typeof t!="number"||!Number.isFinite(t)?null:Object.is(t,-0)?0:t,iD=(t,e)=>typeof t!="number"||t<0?null:Nl(t,e);function nD(t){let e=iD(t.freeFloatDays,t.hoursPerDay),i=eD(t.residualHours);return{freeSlackHours:e,isCritical:i!==null&&i<=0&&t.sourceIsCritical&&t.targetIsCritical&&t.targetProgress===0}}async function rD(t,e){let i=new Map,n=0;for(let r of t.values())for(let a in r.linksFreeFloat)if(Object.hasOwn(r.linksFreeFloat,a)){if(++n>=Fl&&(n=0,await St(),!e()))return null;i.set(String(a),r.linksFreeFloat[a])}return e()?i:null}async function aD(t,e,i,n,r){let a=new Map,o=0;for(let s of e.forward?.keys()??[]){if(++o>=Fl&&(o=0,await St(),!r()))return null;let l=n(s);if(l===null)continue;let c=t.getActivity(l);c&&a.set(String(l),sD(s,Number(c.progress??0),e,i))}return r()?a:null}async function oD(t,e,i,n,r,a){let o=new Map,s=0;for(let l of t.getAllLinks()){if(++s>=Fl&&(s=0,await St(),!a()))return null;o.set(String(l.id),nD({freeFloatDays:e.get(String(l.id)),residualHours:i.get(String(l.id)),hoursPerDay:r,sourceIsCritical:n.get(l.source)?.isCritical===!0,targetIsCritical:n.get(l.target)?.isCritical===!0,targetProgress:t.getActivity(l.target)?.progress}))}return a()?o:null}var Nl=(t,e)=>{if(typeof t!="number"||!Number.isFinite(t)||!Number.isFinite(e)||e<=0)return null;let i=t*e;return Number.isFinite(i)?Object.is(i,-0)?0:i:null};function sD(t,e,i,n){let r=l=>{if(l==null)return null;let c=new Date(l);return Number.isFinite(c.getTime())?c:null},a=i.forward?.get(t),o=i.backward?.get(t),s=Nl(i.totalFloat.get(t),n);return{criticalPath:{earlyStart:r(a?.es),earlyFinish:r(a?.ef),lateStart:r(o?.ls),lateFinish:r(o?.lf),totalSlackHours:s},isCritical:e<100&&s!==null&&s<=0,freeSlackHours:Nl(i.freeFloat.get(t)?.activityFreeFloat,n)}}var fo=(t,e)=>t===e||t!==null&&e!==null&&t.getTime()===e.getTime();function wl(t,e,i){let n=t.getActivity(e),r=n?.criticalPath,a=i.criticalPath;n&&r&&fo(r.earlyStart,a.earlyStart)&&fo(r.earlyFinish,a.earlyFinish)&&fo(r.lateStart,a.lateStart)&&fo(r.lateFinish,a.lateFinish)&&Object.is(r.totalSlackHours,a.totalSlackHours)&&Object.is(n.isCritical,i.isCritical)&&Object.is(n.freeSlackHours,i.freeSlackHours)||t.setActivityFields(e,i)}function xl(t,e,i){let n=t.getLink(e);!n||Object.is(n.freeSlackHours,i.freeSlackHours)&&Object.is(n.isCritical,i.isCritical)||(t.setLinkField(e,"freeSlackHours",i.freeSlackHours),t.setLinkField(e,"isCritical",i.isCritical))}async function Ml(t,e,i=()=>!0){if(!i())return null;let n=await ff(t,e);if(!i())return null;let r=new pf(n);if(!await r.calculate(n,i)){if(!i())return null;throw new Error("critical path calculation aborted")}if(!i())return null;let o={forward:r.forwardPathCalculations,backward:r.backwardPathCalculations,totalFloat:r.totalFloat,freeFloat:r.freeFloat},s=await aD(t,o,e,n.getCanonicalActivityId,i);if(!s)return null;let l=await rD(o.freeFloat,i);if(!l)return null;let c=await oD(t,l,r.linkResidualHours,s,e,i);return c?{activities:s,links:c}:null}async function yf(t,e,i=()=>!0){let n=await Ml(t,e,i);if(!n||!i())return!1;for(let[r,a]of n.activities){if(!i())return!1;wl(t,r,a)}for(let[r,a]of n.links){if(!i())return!1;xl(t,r,a)}return!0}function xn(t){let e=[],i=[];t.forEachActivity((r,a)=>{r.parentId===null&&e.push(String(a))});let n=r=>{let a=t.getActivity(String(r));if(!a)return 0;let o=[...t.getChildren(String(r))],s;if(o.length===0){let l=Tt(a),c=l&&Number(l.cost)||0;s=(Number(a.progress)||0)/100*c}else{let l=0;for(let c of o)l+=n(String(c));s=l}return t.setActivityField(String(r),B.REAL_COST,s),i.push(String(r)),s};for(let r of e)n(r);return i}var hf=new Set;var mf=new Set(["activity-outdent","activity-indent"]);var xr=new Set([T.TEXT,T.DESCRIPTION,T.COST,T.USED_COST,T.CUSTOM_ID,T.RESPONSABLES,T.SUBCONTRACT_ID,T.TAGS]),lD=new Set([A.ACTIVITY_CLIPBOARD_CLEAR,A.ACTIVITY_CLIPBOARD_IMPORT,A.ACTIVITY_COPY,A.CELL_CLIPBOARD_CLEAR,A.CELL_COPY,A.SELECTION_TOGGLE,A.SELECTION_REPLACE,A.VISIBILITY_SET,A.FILTER_SET,A.SORT_SET,A.VIEW_ATTRIBUTES_SET,A.GROUP_SET,A.WBS_DEPTH_SET,A.SIR_SYNC,A.ACTIVITY_LOOKAHEAD_SYNC,A.PERSISTENCE_ACKNOWLEDGE,A.BASELINE_APPLY,A.PONDERATOR_CRITERION_SET,A.STATUS_CRITERIA_SET]),cD=new Set([A.ACTIVITY_CLIPBOARD_CLEAR,A.ACTIVITY_CLIPBOARD_IMPORT,A.ACTIVITY_COPY,A.CELL_CLIPBOARD_CLEAR,A.CELL_COPY,A.SELECTION_TOGGLE,A.SELECTION_REPLACE,A.VISIBILITY_SET,A.FILTER_SET,A.SORT_SET,A.VIEW_ATTRIBUTES_SET,A.GROUP_SET,A.WBS_DEPTH_SET]),gf=new Set(Object.values(ln));function If(t){return!cD.has(t.kind)}var dD=new Set;function uD(t){return t.kind===A.INLINE_EDIT||t.kind===A.CELL_PASTE_COPIED?xr.has(t.column):t.kind===A.BULK_EDIT?t.edits.every(e=>xr.has(e.column)):!1}function Ul(t){return t.kind===A.INLINE_EDIT||t.kind===A.CELL_PASTE_COPIED?gf.has(t.column):t.kind===A.BULK_EDIT&&t.edits.every(e=>gf.has(e.column))}function Hl(t,e){return!(lD.has(t.kind)||e.has(t.kind)||uD(t))}function Mr(t){return t.kind===A.ACTIVITY_LOOKAHEAD_SYNC?t.persistedProgress!==void 0:Hl(t,dD)}function Zi(t){return Ul(t)?!1:t.kind===A.ACTIVITY_LOOKAHEAD_SYNC?t.persistedProgress!==void 0:Hl(t,hf)}function Sf(t){return Ul(t)?!1:Hl(t,mf)}function Bl(t){return t.kind===A.ACTIVITY_SET_PROGRESS?!0:t.kind===A.INLINE_EDIT?t.column===T.PROGRESS:t.kind===A.BULK_EDIT?t.edits.some(e=>e.column===T.PROGRESS):t.kind===A.CELL_PASTE_COPIED?t.column===T.PROGRESS:!1}function pD(t){return Sf(t)&&Bl(t)}var Af=new Set([T.PROGRESS,T.HH_WORK_TIME,T.DURATION,T.COST,T.USED_COST,T.REAL_COST]);function fD(t){return t.kind===A.ACTIVITY_SET_PROGRESS?!0:t.kind===A.INLINE_EDIT||t.kind===A.CELL_PASTE_COPIED?Af.has(t.column):t.kind===A.BULK_EDIT?t.edits.some(e=>Af.has(e.column)):!1}var bt={AUTOSCHEDULE:"autoschedule",PARENT_BOUNDS:"parent-bounds",PARENT_PROGRESS:"parent-progress",REAL_WORK:"real-work",EXPECTED_PROGRESS:"expected-progress",REAL_COST:"real-cost",BASELINE_VARIANCE:"baseline-variance",CRITICAL_PATH:"critical-path"};function vf(t,e,i){let n=new Set;if(e.ran&&n.add(bt.AUTOSCHEDULE),n.add(bt.PARENT_BOUNDS),Ul(t))return n;fD(t)&&n.add(bt.PARENT_PROGRESS),Bl(t)&&n.add(bt.REAL_WORK);let r=!i.skipAutoSchedule;return r&&Sf(t)&&n.add(bt.EXPECTED_PROGRESS),r&&pD(t)&&n.add(bt.REAL_COST),Mr(t)&&n.add(bt.BASELINE_VARIANCE),r&&Zi(t)&&!i.skipCriticalPath&&n.add(bt.CRITICAL_PATH),n}function at(t,e=!0){return e&&t?.dataDate!=null}var yo=(t,e)=>{if(!(t instanceof Date)||!Number.isFinite(t.getTime()))throw new TypeError(`Outbuild P6 ${e} must be a valid Date`);return new Date(t.getTime())};function yD(t){if(t.type==="project")return;if(!Number.isFinite(t.durationHours)||t.durationHours<0)throw new TypeError("Outbuild P6 durationHours must be a non-negative finite number");let e=yo(t.startDate,"plannedStart"),i=yo(t.endDate,"plannedFinish"),n=t.durationHours;return{activityType:"task",actualStart:null,actualFinish:null,plannedStart:e,plannedFinish:i,remainingDurationHours:n,executionStatus:"not_started",expectedFinish:null,suspendDate:null,resumeDate:null,secondaryConstraintType:null,secondaryConstraintDate:null,percentCompleteType:It.PHYSICAL,physicalPercentComplete:0,actualDurationHours:0,atCompletionDurationHours:n,durationPercentComplete:0,unitsPercentComplete:0,schedulePercentComplete:0,remainingFloatHours:null,remainingEarlyStart:null,remainingEarlyFinish:null,remainingLateStart:null,remainingLateFinish:null,earlyStart:null,earlyFinish:null,lateStart:null,lateFinish:null,floatPath:null,floatPathOrder:null,longestPath:!1,originalDurationHours:n,actualLaborUnits:0,remainingLaborUnits:0,actualNonlaborUnits:0,remainingNonlaborUnits:0,primaryBaselineStart:null,primaryBaselineFinish:null,freeFloatHours:null}}function Mn(t){let e=yD(t);if(e!==void 0)return{...e,...ho(t,t.durationHours)}}var Cf=100,Df=0;function ho(t,e){if(t.progress===0)return{executionStatus:V.NOT_STARTED,actualStart:null,actualFinish:null,remainingDurationHours:e,physicalPercentComplete:Df,actualDurationHours:0,atCompletionDurationHours:e,durationPercentComplete:0};let i=yo(t.startDate,"actualStart");if(An(t.progress)){let n=e>0;return{executionStatus:V.COMPLETED,actualStart:i,actualFinish:yo(t.endDate,"actualFinish"),remainingDurationHours:0,physicalPercentComplete:Cf,actualDurationHours:e,atCompletionDurationHours:e,durationPercentComplete:n?Cf:Df}}return{executionStatus:V.IN_PROGRESS,actualStart:i,actualFinish:null,remainingDurationHours:e,physicalPercentComplete:t.progress,actualDurationHours:0,atCompletionDurationHours:e,durationPercentComplete:0}}function jl(t){return t.executionStatus===V.NOT_STARTED&&t.actualStart===null}function Tf(t,e){if(!(t.progress!==0)||!jl(e))return e;let n=ho(t,e.originalDurationHours),r=n.executionStatus===V.IN_PROGRESS&&e.remainingDurationHours!==null;return{...e,...n,...r?{remainingDurationHours:e.remainingDurationHours}:{}}}function _f(t,e){let i=e??void 0,n=hD(t,i);return()=>mD(t,i,n)}function hD(t,e){return e===void 0||at(e.settings,t.isDataDateEnabled())?new Map:new Map(t.getAllActivities().filter(i=>i.p6!==void 0&&Object.hasOwn(e.activities,i.id)).map(i=>[i.id,et(i)]))}function mD(t,e,i){if(!(e===void 0||at(e.settings,t.isDataDateEnabled())))for(let n of t.getAllActivities()){if(!Object.hasOwn(e.activities,n.id)){let o=Mn(n);o!==void 0&&t.setActivityField(n.id,"p6",o);continue}let r=i.get(n.id);if(r?.p6===void 0||n.p6===void 0)continue;let a=Pf(r,n);Object.keys(a).length!==0&&t.setActivityField(n.id,"p6",{...n.p6,...a})}}function Ef(t){if(t.dataDateSettings()===null||at(t.dataDateSettings(),t.isDataDateEnabled()))return;let e=t.peekWriteCapture();if(e!==null)for(let[i,n]of e.before){let r=t.getActivity(i);if(r?.p6===void 0||n.p6===void 0)continue;let a=Pf(n,r);Object.keys(a).length!==0&&t.setActivityField(r.id,"p6",{...r.p6,...a})}}function Pf(t,e){let i=t.durationHours!==e.durationHours;return{...t.startDate.getTime()!==e.startDate.getTime()?{plannedStart:new Date(e.startDate)}:{},...t.endDate.getTime()!==e.endDate.getTime()?{plannedFinish:new Date(e.endDate)}:{},...i?{originalDurationHours:e.durationHours}:{},...i||t.progress!==e.progress?gD(t,e,i):{}}}function gD(t,e,i){let n=e.p6;if(n.remainingDurationHours!==t.p6.remainingDurationHours)return{};let a=t.progress!==e.progress,o=a&&e.progress===0;if(jl(n)||o){let l=i?e.durationHours:n.originalDurationHours;return ho(e,l)}return!(n.actualStart!==null)||!a?{}:AD(n,e)}function AD(t,e){let i=t.percentCompleteType===It.PHYSICAL;if(!An(e.progress))return{...t.actualFinish===null?{}:{executionStatus:V.IN_PROGRESS,actualFinish:null},...i?{physicalPercentComplete:e.progress}:{}};let n=t.actualStart!==null&&e.endDate.getTime()>=t.actualStart.getTime();return t.actualFinish!==null||!n?{}:{executionStatus:V.COMPLETED,actualFinish:new Date(e.endDate),remainingDurationHours:0,physicalPercentComplete:100}}var Ct={INSERT:"insert",REMOVE:"remove",LINK_ADD:"link-add",LINK_REMOVE:"link-remove",LINK_FIELD:"link-field"},mo=class{_journal=null;begin(){this._journal={dirty:new Set,before:new Map,ops:[],linkFieldCaptured:new Set,correlativeBefore:new Map,scheduledBefore:new Map,progressFallbackBefore:new Map}}peek(){return this._journal}end(){this._journal=null}note(e,i){let n=this._journal;n&&(n.before.has(e)||n.before.set(e,Be(i)),n.dirty.add(e))}noteInsert(e){this._journal?.ops.push({kind:Ct.INSERT,activityId:e})}noteRemove(e,i){this._journal?.ops.push({kind:Ct.REMOVE,activityId:e,before:Be(i)})}noteLinkAdd(e){this._journal?.ops.push({kind:Ct.LINK_ADD,linkId:e})}noteLinkRemove(e,i){this._journal?.ops.push({kind:Ct.LINK_REMOVE,linkId:e,before:Rf(i)})}noteCorrelativeBefore(e,i){let n=this._journal;if(!n||n.correlativeBefore.has(e))return;let r=n.before.get(e)?.correlativeId;n.correlativeBefore.set(e,typeof r=="number"?r:i)}noteScheduledBefore(e,i){let n=this._journal;if(!n)return;let r=Be(i);n.scheduledBefore.has(e)||n.scheduledBefore.set(e,r),n.before.has(e)||n.before.set(e,r),n.dirty.add(e)}noteLinkField(e,i){let n=this._journal;!n||n.linkFieldCaptured.has(e)||(n.linkFieldCaptured.add(e),n.ops.push({kind:Ct.LINK_FIELD,linkId:e,before:Rf(i)}))}noteProgressFallback(e,i){let n=this._journal;!n||n.progressFallbackBefore.has(e)||n.progressFallbackBefore.set(e,i)}};function Rf(t){return{...t}}function Wl(t,e,i){let n=[];for(let r of i){let a=t.get(r);if(!a)continue;let o=a.pendingRequestIds??[];if(Ze({pendingRequestIds:o})&&e.getActivity(r)==null)for(let s of o)n.push({kind:io.SIR_AUTO_REJECT,activityId:r,sirId:s,reason:no.ACTIVITY_DELETED})}return n}function te(t){let e={id:String(t.id),source:String(t.source),target:String(t.target),type:t.type,lag:Number(t.lag),freeSlackHours:typeof t.freeSlackHours=="number"&&Number.isFinite(t.freeSlackHours)?t.freeSlackHours:null,isCritical:t.isCritical===!0};return t.proplannerId!=null&&(e.proplannerId=Number(t.proplannerId)),t.ganttId!=null&&(e.ganttId=Number(t.ganttId)),t.sectorId!=null&&(e.sectorId=Number(t.sectorId)),e}var Yt={BEFORE_DIFF:"before-diff",AFTER_DIFF:"after-diff"};async function J(t,e){let i=CD(t,e),n=new Map(e.beforeSnap),r=t.peekWriteCapture();if(r){let p=TD(r);DD(t,r,p,n,i)}let a=e.sirDetection,o=a===Yt.BEFORE_DIFF?Wl(n,t,i):[],s=vD(e.correlativeShifts,i),l=await ao(t,n,i,s),c=a===Yt.AFTER_DIFF?Wl(n,t,i):o,d=e.warnings??[],u=SD(e.links??[],r?ID(t,r):[]);return{source:e.source,activities:l,links:u,calendars:[],trackingEvents:e.trackingEvents??[],...c.length>0?{effects:c}:{},...d.length>0?{warnings:d}:{}}}function ID(t,e){let i=[];for(let n of e.ops){if(n.kind!==Ct.LINK_FIELD)continue;let r=t.getLink(n.linkId);if(!r)continue;let a={};for(let o of["freeSlackHours","isCritical"])Object.is(n.before[o],r[o])||(a[o]={before:n.before[o],after:r[o]});Object.keys(a).length!==0&&i.push({id:n.linkId,kind:H.UPDATED,fields:a,after:te(r)})}return i}function SD(t,e){let i=[],n=new Map;for(let r of t){let a=n.get(r.id);if(a===void 0){n.set(r.id,i.length),i.push(r);continue}let o=i[a];if((o.kind===H.UPDATED||o.kind===H.CREATED)&&r.kind===H.UPDATED){i[a]={...o,fields:{...o.fields,...r.fields},after:r.after};continue}i[a]=r}for(let r of e){let a=n.get(r.id);if(a===void 0){n.set(r.id,i.length),i.push(r);continue}let o=i[a];if(o.kind===H.DELETED)continue;let s=o.kind===H.CREATED?Object.fromEntries(Object.entries(r.fields??{}).map(([l,c])=>[l,{before:void 0,after:c.after}])):r.fields;i[a]={...o,fields:{...o.fields,...s},after:r.after}}return i}function vD(t,e){if(!t||t.length===0)return;let i=new Map;for(let n of t)i.set(n.activityId,n.before),e.add(n.activityId);return i}function CD(t,e){let i=new Set;for(let n of e.touchedIds)i.add(n);for(let n of e.scheduledIds)i.add(n);if(e.includeAllIds)for(let n of t.getAllIds())i.add(n);return i}function DD(t,e,i,n,r){for(let a of e.dirty){if(i.has(a)||n.has(a))continue;let o=e.before.get(a),s=t.getActivity(a);!o||!s||Object.keys(cl(o,s)).length!==0&&(n.set(a,o),r.add(a))}}function TD(t){return new Set(t.ops.filter(e=>e.kind===Ct.INSERT).map(e=>e.activityId))}function go(t,e,i,n=new Map){if(!t||t==="0")return;let r=i.getChildren(t);if(r.length===0)return;let a=new Map,o=new Set,s=0;for(let u of r){let p=ED(String(u),e,i,n);a.set(String(u),p.magnitude),s+=p.magnitude,p.hasActiveBaseline&&o.add(String(u))}let l=s?100/s:0,d=e!==ct.COST&&o.size>0?100/o.size:0;for(let u of r){let p=i.getActivity(u);if(!p)continue;let f=_D(String(u),p,a,o,s,l,d);f!==null&&i.setActivityField(u,T.PONDERATOR,f)}}function _D(t,e,i,n,r,a,o){return e.type===L.PROJECT||Tt(e)?r?a*(i.get(t)??0):n.has(t)?o:0:!Array.isArray(e.baselinePoints)||e.baselinePoints.length===0?0:null}function ED(t,e,i,n){let r=[{id:t,expanded:!1}];for(;r.length>0;){let{id:a,expanded:o}=r.pop();if(n.has(a))continue;let s=i.getActivity(a),l=Tt(s);if(s?.type!==L.PROJECT){n.set(a,{magnitude:l&&s?.type!==L.MILESTONE?PD(l,e):0,hasActiveBaseline:l!==null});continue}let c=i.getChildren(a);if(!o){r.push({id:a,expanded:!0}),c.forEach(u=>{r.push({id:String(u),expanded:!1})});continue}let d={magnitude:0,hasActiveBaseline:l!==null};for(let u of c){let p=n.get(String(u));d.magnitude+=p.magnitude,d.hasActiveBaseline||=p.hasActiveBaseline}n.set(a,d)}return n.get(t)}function PD(t,e){return e===ct.COST?Vl(t.cost):e===ct.WORK_HOURS?Vl(t.workHours):Vl(t.durationDays)}function Vl(t){let e=typeof t=="string"?parseFloat(t):t;return typeof e=="number"&&Number.isFinite(e)?e:0}function kf(t,e){let i=t.peekWriteCapture();if(!i)return;let n=new Map,r=new Map;for(let o of i.ops)o.kind===Ct.REMOVE&&r.set(o.activityId,o.before.parentId);let a=(o,s)=>{let l=o;for(;l!==null&&!W(l);){let c=n.get(l);if(c===!0||c===s)break;n.set(l,s),l=r.has(l)?r.get(l)??null:t.getParentId(l)}};for(let[o,s]of i.before){let l=t.getActivity(o);if(!(l&&s.parentId!==l.parentId)||!l)continue;let d=Tt(s)!==null||Kl(o,t);a(s.parentId,d),a(l.parentId,!1)}for(let o of i.ops)if(o.kind===Ct.REMOVE)Tt(o.before)&&a(o.before.parentId,!0);else if(o.kind===Ct.INSERT){let s=t.getActivity(o.activityId);s&&Kl(s.id,t)&&a(s.parentId,!1)}for(let[o,s]of n)(s||Kl(o,t))&&go(o,e,t)}function Kl(t,e){let i=[t];for(;i.length>0;){let n=i.pop();if(n===void 0)continue;let r=e.getActivity(n);if(r&&Tt(r))return!0;i.push(...e.getChildren(n))}return!1}var Dt={ROOTS:"roots"};async function nt(t,e){e.action.kind===A.ACTIVITY_LOOKAHEAD_CONVERT||kf(t.adapter,t.sector.activityCreter??ct.DURATION);let n=wD(t.adapter),r=RD(t.adapter,e),a=bD(t.adapter,r),o=FD(r,n,Of(t.adapter));a&&o.add(bt.AUTOSCHEDULE),o.has(bt.AUTOSCHEDULE)&&await WD(t.adapter,r);let s=a?await ND(t):o.has(bt.AUTOSCHEDULE)?await UD(t,r.autoscheduleFrom,r.preventSummaryTargetPullback):jD();return await VD(t.adapter,r,s.scheduledIds,o,n,t.sector.activityCreter??ct.DURATION),await YD(t,o,e.now),Ef(t.adapter),s}function RD(t,e){let i=kD(t,e.autoscheduleFrom);return i===e.autoscheduleFrom?e:{...e,autoscheduleFrom:i}}function kD(t,e){if(e===Dt.ROOTS)return Dt.ROOTS;let i=LD(t);if(i.size===0)return e;if(e!==null&&i.add(String(e)),i.size!==1)return Dt.ROOTS;let[n]=i;return n===void 0||!t.activityExists(n)||t.hasChildren(n)?Dt.ROOTS:n}function LD(t){let e=new Set,i=t.peekWriteCapture();if(!i)return e;for(let n of i.ops){if(n.kind===Ct.LINK_REMOVE){e.add(String(n.before.target));continue}if(n.kind===Ct.LINK_ADD){let r=t.getLink(n.linkId);r&&e.add(String(r.target));continue}if(n.kind===Ct.LINK_FIELD){e.add(String(n.before.target));let r=t.getLink(n.linkId);r&&e.add(String(r.target))}}return e}async function Lf(t,e,i){if(t.activityId!==void 0&&!i.adapter.activityExists(t.activityId))return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};if(Of(i.adapter)&&!OD(i.adapter))return{ok:!1,reason:v.MANUAL_SCHEDULING_ACTIVE};let n=await st(i.adapter,new Set(i.adapter.getAllIds()));i.scheduler.invalidateAllCaches();let r=t.activityId===void 0?i.adapter.getRootIds():[t.activityId],{scheduledIds:a}=await nt({adapter:i.adapter,scheduler:i.scheduler,sector:i.sector,defaultBaseCalendarId:i.defaultBaseCalendarId,runAutomaticP6Schedule:i.runAutomaticP6Schedule},{action:t,autoscheduleFrom:t.activityId??Dt.ROOTS,recomputeParentsFrom:r,now:i.now,options:e});return{ok:!0,changes:await J(i.adapter,{source:t,beforeSnap:n,touchedIds:r,scheduledIds:a,hoursPerDay:i.sector.hoursPerDay})}}function Of(t){return at(t.dataDateSettings(),t.isDataDateEnabled())}function OD(t){return t.dataDateSettings()?.scheduleAutomaticallyOnDateChange===!0}function bD(t,e){let i=t.dataDateSettings();return at(i,t.isDataDateEnabled())&&i?.scheduleAutomaticallyOnDateChange===!0&&e.autoscheduleFrom!==null&&e.options.skipAutoSchedule!==!0}async function ND(t){if(t.runAutomaticP6Schedule===void 0)throw new Error("Automatic P6 scheduling is not configured");return{scheduledIds:[...await t.runAutomaticP6Schedule()],warnings:[]}}function FD(t,e,i){let n=t.autoscheduleFrom!==null,r=!t.options.skipAutoSchedule&&n&&!i,a=i?{...t.options,skipCriticalPath:!0}:t.options,o=new Set(vf(t.action,{requested:n,ran:r},a));return(t.recomputeParentProgress||e.affectedParents.size>0)&&o.add(bt.PARENT_PROGRESS),o}function wD(t){let e=new Set,i=new Set,n=t.peekWriteCapture();if(!n)return{affectedParents:e,dirtySeeds:i};let r=a=>{if(a===null||W(a))return;let o=String(a);e.add(o);let s=t.getChildren(o)[0];s!==void 0&&i.add(s)};return xD(t,n.ops,r),MD(t,n.before,i,r),{affectedParents:e,dirtySeeds:i}}function xD(t,e,i){for(let n of e)if(n.kind===Ct.INSERT){let r=t.getActivity(n.activityId);r&&i(r.parentId)}else n.kind===Ct.REMOVE&&i(n.before.parentId)}function MD(t,e,i,n){for(let[r,a]of e){let o=t.getActivity(r);if(!o)continue;let s=!Object.is(a.progress,o.progress),l=!Object.is(a.ponderator,o.ponderator),c=!Object.is(a.parentId,o.parentId);(s||l)&&(n(o.parentId),i.add(String(r))),c&&(n(a.parentId),n(o.parentId),i.add(String(r)))}}async function UD(t,e,i=!1){let n=e===Dt.ROOTS?{}:{triggerId:e};i&&(n.preventSummaryTargetPullback=!0);let r=await t.scheduler.schedule(n),a=BD(t.adapter,r.updatedIds),o=HD(t.adapter,r);return Ar(t.adapter,r),{...a,warnings:o}}function HD(t,e){let i=[];for(let n of e.plans.values()){let r=n.earliestSchedulingStart;if(!r||n.startDate>=r)continue;let a=t.getActivity(n.activityId);!a?.constraintType||!a.constraintDate||i.push({kind:Yi.VIOLATION,activityId:a.id,constraintType:a.constraintType,constraintDate:a.constraintDate,projectedDate:r,messageKey:Yi.VIOLATION})}return i}function BD(t,e){let i=[];for(let n of e){let r=String(n);i.push(r);let a=t.getActivity(r);a&&t.noteScheduledBefore(r,a)}return{scheduledIds:i,warnings:[]}}function jD(){return{scheduledIds:[],warnings:[]}}async function WD(t,e){let i=e.collectDirty?e.collectDirty([]):dl(e.recomputeParentsFrom,[]);i.size!==0&&await Ue(t,i,!1)}async function VD(t,e,i,n,r,a){n.has(bt.PARENT_PROGRESS)&&KD(t,r.affectedParents);let o=e.collectDirty?e.collectDirty(i):dl(e.recomputeParentsFrom,i);for(let s of r.dirtySeeds)o.add(s);await Ue(t,o,n.has(bt.PARENT_PROGRESS),{recomputeRealWork:n.has(bt.REAL_WORK),criterion:a,progressMode:"freeze-when-no-contribution"})}function KD(t,e){for(let i of e){if(t.hasChildren(i))continue;let n=t.getProgressFallback(i);n!==null&&(t.setActivityField(i,"progress",n),t.setProgressFallback(i,null))}}async function YD(t,e,i){e.has(bt.EXPECTED_PROGRESS)&&i!==null&&(GD(t.adapter)&&wn(t.adapter,i,t.defaultBaseCalendarId??null),$i(t.adapter,i),We(t.adapter,t.sector.statusCriteria)),e.has(bt.REAL_COST)&&xn(t.adapter),e.has(bt.BASELINE_VARIANCE)&&qi(t.adapter,t.sector.hoursPerDay),e.has(bt.CRITICAL_PATH)&&await yf(t.adapter,t.sector.hoursPerDay)}function GD(t){let e=!1;return t.forEachActivity(i=>{Tt(i)&&(e=!0)}),e}var $D=new Set([T.CONSTRAINT_TYPE,T.CONSTRAINT_DATE]),qD=new Set([_.MSO,_.MFO]);function Un(t){return $D.has(t)}function Ao(t){return t===T.CONSTRAINT_DATE}function Io(t,e,i,n){let r=i.getActivity(t);if(!r)return!1;let a=r.constraintType;if(!a||di.has(a)||qD.has(a))return!1;let o=Yl(r.startDate),s=Yl(i.getLastStartDate(t));if(!s||!o||o.getTime()!==s.getTime())return!1;let l=zD(e,a,String(r.calendarId??""),n),c=Yl(r.constraintDate);return JD(c,l)?!1:(i.setActivityField(t,"constraintDate",l),!0)}function zD(t,e,i,n){if(t===null)return null;let r=n.getCalendar(i);return r?ge(t,r,e):t}function Yl(t){if(t instanceof Date)return t;if(typeof t=="string"||typeof t=="number"){let e=new Date(t);return Number.isNaN(e.getTime())?null:e}return null}function JD(t,e){return t===null&&e===null?!0:t===null||e===null?!1:t.getTime()===e.getTime()}async function So(t,{postMutationArgs:e,revertTargets:i,revert:n}){let{scheduledIds:r}=await nt(t,bf(e)),a=!1;for(let{activityId:o,priorConstraintDate:s}of i){let l=n(o,s);a=a||l}if(a){let o=await nt(t,bf(e));r=ZD(r,o.scheduledIds)}return Zi(e.action)&&await nt(t,XD(e)),{scheduledIds:r}}function bf(t){return{...t,options:{...t.options,skipCriticalPath:!0}}}function XD(t){return{action:t.action,autoscheduleFrom:null,recomputeParentsFrom:[],now:null,options:t.options}}function ZD(t,e){let i=new Set(t);for(let n of e)i.add(n);return[...i]}function Hn(t,e,i){let n=i?t.getIncomingLinkIds(e):t.getOutgoingLinkIds(e),r=[];for(let a of n){let o=t.getLink(a);o&&r.push(o)}return r}function Ai(t,e,i){let n=[];for(let{op:r,finalLinkId:a,rejected:o}of t){if(o!==null)continue;if(r.kind===vt.CREATE){if(!a)continue;let u=i.getLink(a);if(!u)continue;let p=e.get(a);if(p){let f={};String(p.source)!==String(u.source)&&(f.source={before:String(p.source),after:String(u.source)}),String(p.target)!==String(u.target)&&(f.target={before:String(p.target),after:String(u.target)}),p.type!==u.type&&(f.type={before:p.type,after:u.type}),Number(p.lag)!==Number(u.lag)&&(f.lag={before:Number(p.lag),after:Number(u.lag)}),Object.keys(f).length>0&&n.push({id:String(a),kind:H.UPDATED,fields:f,after:te(u)});continue}n.push({id:String(a),kind:H.CREATED,fields:{source:{before:void 0,after:String(u.source)},target:{before:void 0,after:String(u.target)},type:{before:void 0,after:u.type},lag:{before:void 0,after:Number(u.lag)}},after:te(u)});continue}if(r.kind===vt.DELETE){if(i.getLink(r.linkId))continue;let u=e.get(r.linkId);n.push({id:String(r.linkId),kind:H.DELETED,fields:u?{source:{before:String(u.source),after:void 0},target:{before:String(u.target),after:void 0},type:{before:u.type,after:void 0},lag:{before:Number(u.lag),after:void 0}}:void 0,after:null});continue}let s=e.get(r.linkId),l=i.getLink(r.linkId);if(!l)continue;let c={};s&&String(s.source)!==String(l.source)&&(c.source={before:String(s.source),after:String(l.source)}),s&&String(s.target)!==String(l.target)&&(c.target={before:String(s.target),after:String(l.target)}),s&&s.type!==l.type&&(c.type={before:s.type,after:l.type}),s&&Number(s.lag)!==Number(l.lag)&&(c.lag={before:Number(s.lag),after:Number(l.lag)}),!(s!==void 0&&Object.keys(c).length===0)&&n.push({id:String(r.linkId),kind:H.UPDATED,fields:c,after:te(l)})}return n}function Bn(t,e){let i=new Map;if(!t.getActivity(e))return i;for(let n of t.getIncomingLinkIds(e)){let r=t.getLink(n);r&&i.set(String(r.id),Number(r.lag))}return i}function jn(t,e,i){let n=[];if(!e.getActivity(i))return n;for(let r of e.getIncomingLinkIds(i)){let a=e.getLink(r);if(!a)continue;let o=t.get(String(a.id));o===void 0||o===Number(a.lag)||n.push({id:String(a.id),kind:H.UPDATED,fields:{lag:{before:o,after:Number(a.lag)}},after:te(a)})}return n}function Nf(t,e){typeof t=="string"&&t.length>0&&e.releaseCustomId(t)}function Wn(t,e){return bp.has(e)?t.p6?.[e]:Reflect.get(t,e)}var ee={MOVE:"move",RESIZE_START:"resize-start",RESIZE_END:"resize-end"},QD=()=>({constantStart:null,variableStartOffset:null,constantEnd:null,variableEndOffset:null}),Gl=(t,e)=>t===null?e:Math.min(t,e),$l=(t,e)=>t===null?e:Math.max(t,e);function wf(t,e,i){let n=[...new Set(e.kind===ee.MOVE?e.activityIds.map(String):[String(e.activityId)])];if(n.length===0)throw new Error("[ScheduleCore] date gesture has no participants");let r=tT(t,e,n);return eT(t,n,r),{getDates(a,o){if(i(),!Number.isFinite(o))throw new Error("[ScheduleCore] invalid date gesture edge");let s=r.get(String(a));if(!s)return null;let l=nT(s,o),c=rT(s,o);if(l===null||c===null)throw new Error(`[ScheduleCore] incomplete date gesture bounds for ${String(a)}`);return{startTimeMs:l,endTimeMs:c}}}}function tT(t,e,i){let n=new Map,r=e.kind===ee.MOVE?String(e.anchorActivityId):null,a=r===null?null:Ff(t,r);if(r!==null&&!i.includes(r))throw new Error("[ScheduleCore] move anchor is not a participant");for(let o of i){let s=Ff(t,o);if(e.kind===ee.MOVE){let l=a.startDate.getTime();n.set(o,{constantStart:null,variableStartOffset:s.startDate.getTime()-l,constantEnd:null,variableEndOffset:s.endDate.getTime()-l})}else e.kind===ee.RESIZE_START?n.set(o,{constantStart:null,variableStartOffset:0,constantEnd:s.endDate.getTime(),variableEndOffset:null}):n.set(o,{constantStart:s.startDate.getTime(),variableStartOffset:null,constantEnd:null,variableEndOffset:0})}return n}function eT(t,e,i){let n=Tr(t,new Set(e));for(let r of n){let a=QD();for(let o of t.getChildren(r)){let s=i.get(o);if(s){iT(a,s);continue}let l=t.getActivity(o);if(!l)throw new Error(`[ScheduleCore] missing child ${o} while previewing parent ${r}`);a.constantStart=Gl(a.constantStart,l.startDate.getTime()),a.constantEnd=$l(a.constantEnd,l.endDate.getTime())}i.set(r,a)}}function Ff(t,e){let i=t.getActivity(e);if(!i)throw new Error(`[ScheduleCore] missing date gesture activity ${e}`);if(t.hasChildren(e))throw new Error(`[ScheduleCore] summary activity ${e} cannot be dragged directly`);return i}function iT(t,e){e.constantStart!==null&&(t.constantStart=Gl(t.constantStart,e.constantStart)),e.variableStartOffset!==null&&(t.variableStartOffset=Gl(t.variableStartOffset,e.variableStartOffset)),e.constantEnd!==null&&(t.constantEnd=$l(t.constantEnd,e.constantEnd)),e.variableEndOffset!==null&&(t.variableEndOffset=$l(t.variableEndOffset,e.variableEndOffset))}function nT(t,e){if(t.variableStartOffset===null)return t.constantStart;let i=e+t.variableStartOffset;return t.constantStart===null?i:Math.min(t.constantStart,i)}function rT(t,e){if(t.variableEndOffset===null)return t.constantEnd;let i=e+t.variableEndOffset;return t.constantEnd===null?i:Math.max(t.constantEnd,i)}function Qi(t,e,i,n=!0){return t!==void 0&&at(e,n)?i===ee.RESIZE_END?t.executionStatus===V.COMPLETED?lt("data_date_activity_completed","data_date_edit_rejected"):Q():t.actualStart===null?Q():lt("data_date_actual_start_locked","data_date_edit_rejected"):Q()}var aT=new Set([Ae.HAS_PROGRESS,Ae.COMPLETED]),oT={[T.START_DATE]:ee.MOVE,[T.END_DATE]:ee.RESIZE_END};function vo(t,e,i,n,r=!0){let a=e.p6;if(!(a!==void 0&&at(i,r))||!t.allowed&&!aT.has(t.reason))return t;if(n===T.PROGRESS&&a.percentCompleteType===It.UNITS)return lt(Ae.DATA_DATE_UNITS_PERCENT_READ_ONLY,Ja.DATA_DATE_UNITS_PERCENT_READ_ONLY);let s=oT[n];return s===void 0?Q():Qi(a,i,s,r)}var sT=100,lT=2;function Mf(t,e,i,n,r){let{progress:a}=n,o=n.writesProgress?{activityPercentComplete:a}:{};if(e.executionStatus===V.COMPLETED)return a>=100?i:Vn(i,{actualFinish:null,...o},Ut.UNCOMPLETE);if(e.executionStatus===V.IN_PROGRESS)return a<100?Vn(i,o):xf(i,{actualFinish:t.endDate,...o},o,n,r);if(a===0)return i;let s={actualStart:t.startDate};return a<100?Vn(i,{...s,...o},Ut.START_ON_PROGRESS):xf(i,{...s,actualFinish:t.endDate,...o},{...s,...o},n,r)}function xf(t,e,i,n,r){return n.explicitCompletion||Rr(Ut.COMPLETE_ON_PROGRESS,r)?Vn(t,e):Rr(Ut.KEEP_IN_PROGRESS,r)?Vn(t,i):{...Vn(t,e,Ut.COMPLETE_ON_PROGRESS),confirmationAlternative:{kind:Ut.KEEP_IN_PROGRESS,effects:i}}}function Vn(t,e,i){return Object.keys(e).length===0?t:{...t,dataDatePatch:e,...i===void 0?{}:{confirmation:i}}}function zl(t){switch(t.percentCompleteType){case It.PHYSICAL:return ql(t.physicalPercentComplete);case It.UNITS:return ql(t.unitsPercentComplete);default:return cT(t)}}function cT(t){if(t.remainingDurationHours===null)return null;if(t.originalDurationHours===0)return t.executionStatus===V.COMPLETED?100:0;let e=(t.originalDurationHours-t.remainingDurationHours)/t.originalDurationHours;return ql(Math.min(100,Math.max(0,e*sT)))}function ql(t){return Number(t.toFixed(lT))}function Kn(t,e,i,n,r){let a=t.canEdit(e,i.ctx.hierarchy,r);return i.dataDateCapability===null?a:vo(a,e,i.dataDateSettings,n,i.dataDateEnabled)}function Hf(t,e){return e?{...t,dataDatePatch:{...t.dataDatePatch,...e.dataDatePatch}}:t}function dT(t){return t.eventSource==="sir-apply"&&t.edits.some(e=>e.column==="actualStart"||e.column==="actualFinish")}function Bf(t){if(!dT(t))return t.edits.map(n=>[n]);let e=new Map;for(let n of t.edits){if(n.column!=="actualStart"&&n.column!=="actualFinish")continue;let r=String(n.activityId),a=e.get(r)??[];a.push(n),e.set(r,a)}let i=new Map;for(let n of e.values())n.length!==2||n[0].column===n[1].column||n.every(r=>r.newValue instanceof Date)&&(i.set(n[0],n),i.set(n[1],[]));return t.edits.flatMap(n=>{let r=i.get(n);return r?.length===0?[]:[r??[n]]})}function jf(t,e){let i=new Map;for(let n of uT(t)){let r=e.ctx.activityReader.getActivity(n);if(!r)continue;let a=Qi(r.p6,e.dataDateSettings,ee.RESIZE_START,e.dataDateEnabled);a.allowed||i.set(n,Xl(a))}return i}function uT(t){let e=new Map;for(let n of t){let r=String(n.activityId),a=e.get(r)??new Set;a.add(n.column),e.set(r,a)}let i=new Set;for(let[n,r]of e)r.has(T.START_DATE)&&r.has(T.END_DATE)&&i.add(n);return i}function Xl(t){return{accepted:!1,reason:t.reason,...t.alertKey?{alertKey:t.alertKey}:{}}}var pT={patch:{},needsAutoSchedule:!1,postProcessors:[]};function Wf(t,e,i,n,r){return n.dataDateCapability!==null&&at(n.dataDateSettings,n.dataDateEnabled)?Rt(t,n.ctx.hierarchy)?{accepted:!1,reason:Ae.SUMMARY,alertKey:"summary_column_value"}:t.p6===void 0?null:tn(t,i??pT,n,T.PROGRESS,r,{progress:e,explicitCompletion:!0,writesProgress:i!==null}):null}function tn(t,e,i,n,r,a){let o=hT(t,yT(t,e,n),i,n,r,a);if(o===null)return Jl(v.INVALID_VALUE);if("accepted"in o)return o;if(o.dataDatePatch===void 0)return Uf(o);if(t.p6===void 0||i.dataDateCapability===null)return Jl(v.INVALID_VALUE);if(o.confirmation!==void 0&&!Rr(o.confirmation,r))return{accepted:!1,reason:v.CONFIRMATION_REQUIRED,confirmation:{kind:o.confirmation,activityId:t.id,effects:o.dataDatePatch,...o.confirmationAlternative===void 0?{}:{alternative:o.confirmationAlternative}}};try{let l=i.dataDateCapability.prepareActivityUpdate(t.p6,o.dataDatePatch,o.patch.constraintType??t.constraintType),c=CT(t,l.next,i),d=fT(t,{...o,patch:{...o.patch,...c.patch},dataDateState:c.p6},l.next,i,n);return Uf(at(i.dataDateSettings,i.dataDateEnabled)?{...d,needsAutoSchedule:!0}:d)}catch{return Jl(v.INVALID_VALUE)}}function fT(t,e,i,n,r){if(r===T.PROGRESS||t.p6===void 0||!at(n.dataDateSettings,n.dataDateEnabled))return e;let a=zl(i);return a===null||a===t.progress||a===zl(t.p6)||!On.canEdit(t,n.ctx.hierarchy).allowed?e:{...e,patch:{...e.patch,progress:a}}}function Uf(t){return{accepted:!0,changes:t}}function Jl(t){return{accepted:!1,reason:t}}function yT(t,e,i){let n=t.p6,r=e.patch.constraintType;return!(i===T.CONSTRAINT_TYPE&&n!==void 0&&r!==void 0)||Nn(r,n.secondaryConstraintType)?e:{...e,dataDatePatch:{secondaryConstraintType:null,secondaryConstraintDate:null},confirmation:Ut.CLEAR_SECONDARY_CONSTRAINT}}function hT(t,e,i,n,r,a){let o=t.p6;return o!==void 0&&i.dataDateCapability!==null&&at(i.dataDateSettings,i.dataDateEnabled)?n===T.PHYSICAL_PERCENT_COMPLETE?gT(t,o,e):n===T.PROGRESS?mT(t,o,e,r,a):n===T.DURATION?AT(o,e):n===T.END_DATE?IT(t,o,e,i):n===T.START_DATE?vT(o,e,i):e:e}function mT(t,e,i,n,r){let a=i.patch.progress,o=r??(typeof a=="number"?{progress:a,explicitCompletion:!1,writesProgress:!0}:void 0);return o===void 0?i:Mf(t,e,i,o,n)}function gT(t,e,i){let n=i.dataDatePatch?.physicalPercentComplete;return e.executionStatus!==V.NOT_STARTED||n===void 0||n<=0?i:{...i,dataDatePatch:{actualStart:t.startDate,physicalPercentComplete:n},confirmation:Ut.START_ON_PROGRESS}}function AT(t,e){let i=e.patch.durationHours;return typeof i!="number"?null:t.executionStatus===V.NOT_STARTED?{...e,dataDatePatch:{originalDurationHours:i,remainingDurationHours:i}}:{...e,patch:{durationHours:i},dataDatePatch:{originalDurationHours:i}}}function IT(t,e,i,n){let r=Qi(e,n.dataDateSettings,ee.RESIZE_END,n.dataDateEnabled);if(!r.allowed)return Xl(r);let a=i.patch.endDate,o=n.ctx.calendars.getCalendar(t.calendarId);if(!(a instanceof Date)||o===null)return null;let s=n.dataDateCapability?.prepareFinishEdit(e,a,o);return s==null?null:{...i,patch:ST(i.patch),dataDatePatch:s}}function ST(t){let{constraintType:e,constraintDate:i,...n}=t;return n}function vT(t,e,i){let n=Qi(t,i.dataDateSettings,ee.MOVE,i.dataDateEnabled);return n.allowed?e:Xl(n)}function CT(t,e,i){let n=i.dataDateSettings,r=i.ctx.calendars.getCalendar(t.calendarId);if(!at(n,i.dataDateEnabled)||r===null)return{p6:e,patch:{}};let a=i.dataDateCapability.projectLocalActivity(t.p6,e,{calendar:r,dataDate:n.dataDate,totalFloatMethod:n.totalFloatMethod});return{p6:a.p6,patch:{...a.startDate===void 0?{}:{startDate:a.startDate},...a.endDate===void 0?{}:{endDate:a.endDate}}}}async function Vf(t,e,i){let{adapter:n,ctx:r,scheduler:a,sector:o}=i,s=Qt(t.column);if(!s)return{ok:!1,reason:v.NO_PIPELINE_FOR_COLUMN};t.column===T.DURATION&&a.invalidateExpandedLinksCache();let l=r.activityReader.getActivity(t.activityId);if(!l)return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};let c=Kn(s,l,i,t.column);if(!c.allowed)return{ok:!1,reason:c.reason??v.CANNOT_EDIT,alertKey:c.alertKey};let d=s.parseInput(t.newValue,l,r);if(!d.ok)return{ok:!1,reason:d.reason??v.PARSE_ERROR};let u=Wn(l,s.targetField),p=s.validate(l,u,d.value,r);if(!p.valid)return{ok:!1,reason:p.reason??v.INVALID,alertKey:p.notification?.messageKey};if(t.column===T.CUSTOM_ID&&d.value!==null){let O=n.getActivity(t.activityId),F=O?O.customId:null,U=typeof F=="string"?F:null;if(i.customIdTracker.isCustomIdInUse(String(d.value),U))return{ok:!1,reason:v.CUSTOM_ID_DUPLICATE}}let f=s.transform(l,d.value,r,d.raw),y=tn(l,f,i,t.column,e.confirmations);if(!y.accepted)return{ok:!1,reason:y.reason,...y.alertKey?{alertKey:y.alertKey}:{},...y.confirmation?{confirmation:y.confirmation}:{}};let h=y.changes,m=yi(t.activityId,h),g=await st(n,m),C=Bn(n,String(t.activityId)),b=l.constraintDate;hi(n,t.activityId,h),si(t.activityId,h.postProcessors??[],n,g.get(String(t.activityId))??null);let E=jn(C,n,String(t.activityId));if(t.column===T.CUSTOM_ID){let O=g.get(String(t.activityId)),F=O?O.customId:null,U=typeof F=="string"?F:null,$=typeof d.value=="string"?d.value:null;U!==$&&i.customIdTracker.trackCustomIdChange(U,$)}let P=()=>({action:t,autoscheduleFrom:h.needsAutoSchedule?String(t.activityId):null,recomputeParentsFrom:[],collectDirty:O=>oo(t.activityId,m,O),now:i.now,options:e}),N=Un(t.column),{scheduledIds:I}=await(N?So({adapter:n,scheduler:a,sector:i.sector,defaultBaseCalendarId:i.defaultBaseCalendarId,runAutomaticP6Schedule:i.runAutomaticP6Schedule},{postMutationArgs:P(),revertTargets:Ao(t.column)?[]:[{activityId:t.activityId,priorConstraintDate:b}],revert:(O,F)=>Io(O,F,n,r.calendars)}):nt({adapter:n,scheduler:a,sector:i.sector,defaultBaseCalendarId:i.defaultBaseCalendarId,runAutomaticP6Schedule:i.runAutomaticP6Schedule},P())),R=(h.trackingEvents??[]).map(O=>({name:O.name,properties:O.properties??{}}));s.trackEvent&&!(t.column===T.PROGRESS&&Number(d.value)<=0)&&R.unshift({name:s.trackEvent,properties:{activity_name:l.name,activity_id:l.id,activity_index:l.correlativeId}});let k=Gi(t.activityId,h.constraintWarning);return{ok:!0,changes:await J(n,{source:t,beforeSnap:g,touchedIds:m,scheduledIds:I,sirDetection:Yt.BEFORE_DIFF,links:E,trackingEvents:R,...k?{warnings:[k]}:{},hoursPerDay:o.hoursPerDay})}}function Co(t){return ua(t)}function Do(t,e){return Object.hasOwn(t,e)}function DT(t){if(t.kind===A.LINK_CREATE)return Co(t.type)?t.lag===void 0||Number.isFinite(t.lag)?null:v.INVALID_LINK_LAG:v.INVALID_LINK_TYPE;if(t.kind===A.LINK_UPDATE){if(Do(t,"type")&&!Co(t.type))return v.INVALID_LINK_TYPE;if(Do(t,"lag")&&!Number.isFinite(t.lag))return v.INVALID_LINK_LAG}return null}function TT(t){return t.kind===ft.CREATE?Co(t.type)?t.lag===void 0||Number.isFinite(t.lag)?null:v.INVALID_LINK_LAG:v.INVALID_LINK_TYPE:t.kind===ft.UPDATE?Do(t,"type")&&!Co(t.type)?v.INVALID_LINK_TYPE:!Do(t,"lag")||Number.isFinite(t.lag)?null:v.INVALID_LINK_LAG:t.kind===ft.DELETE?null:v.INVALID_VALUE}function _T(t){for(let e of t){let i=TT(e);if(i!==null)return i}return null}function ET(t,e){let i=new Set,n=new Map;for(let r of t){if(r.kind===ft.CREATE){i.add(String(r.source)),i.add(String(r.target));continue}let a=e.getLink(r.linkId);a&&(i.add(String(a.source)),i.add(String(a.target)),r.kind===ft.UPDATE&&(r.source!==void 0&&i.add(String(r.source)),r.target!==void 0&&i.add(String(r.target))),n.set(r.linkId,{...a}))}return{activityIds:i,links:n}}function PT(t,e,i,n,r=!1){return t.map((a,o)=>{let s=a.kind===ft.CREATE?n?.get(o):void 0,l=Re(a,{port:e,newLinkId:s?()=>s:i.next,rejectParentLinkMutations:r});return{op:a,finalLinkId:l.applied?l.linkId:null,rejected:l.applied?null:l.rejected??v.INVALID}})}function RT(t){return new Map([...t].map(([e,i])=>[String(e),i]))}async function Kf(t,e,i){let n=DT(t);return n!==null?{ok:!1,reason:n}:Ur([FT(t,i.sector.hoursPerDay)],t,e,i,t.kind===A.LINK_CREATE&&t.linkId?new Map([[0,t.linkId]]):void 0)}async function Yf(t,e,i){let n=_T(t.operations);if(n!==null)return{ok:!1,reason:n};let{hoursPerDay:r}=i.sector,a=t.operations.map(s=>OT(s,r)),o=kT(t.operations);return Ur(a,t,e,i,o)}function kT(t){let e=new Map;return t.forEach((i,n)=>{i.kind===ft.CREATE&&i.linkId&&e.set(n,i.linkId)}),e.size>0?e:void 0}function LT(t,e){if(t===void 0)return;let i=new Map,n=new Set,r=()=>{let a=e.linkIdGen.next();for(;e.adapter.getLink(a)!==null||e.isLinkIdReserved(String(a))||n.has(String(a));)a=e.linkIdGen.next();return a};for(let[a,o]of t){let s=e.adapter.getLink(o)!==null||e.isLinkIdReserved(String(o))||n.has(String(o)),l=s?r():o;s||e.linkIdGen.bump(o),n.add(String(l)),i.set(a,l)}return i}function OT(t,e){return t.kind===ft.CREATE?{kind:ft.CREATE,source:t.source,target:t.target,type:t.type,lag:ce(t.lag??0,e)}:t.kind===ft.UPDATE?{kind:ft.UPDATE,linkId:t.linkId,source:t.source,target:t.target,type:t.type,lag:t.lag===void 0?void 0:ce(t.lag,e)}:{kind:ft.DELETE,linkId:t.linkId}}async function Ur(t,e,i,n,r){let{adapter:a,scheduler:o,sector:s,linkIdGen:l}=n;o.invalidateAllCaches();let{activityIds:c,links:d}=ET(t,a),u=await st(a,c),p=PT(t,a,l,LT(r,n),i.rejectParentLinkMutations);if(t.length===1&&p[0]&&p[0].rejected!==null&&e.kind!==A.INLINE_EDIT)return{ok:!1,reason:p[0].rejected};let f=bT(p,d,a),{scheduledIds:y,warnings:h}=await nt({adapter:a,scheduler:o,sector:n.sector,defaultBaseCalendarId:n.defaultBaseCalendarId,runAutomaticP6Schedule:n.runAutomaticP6Schedule},{action:e,autoscheduleFrom:f,recomputeParentsFrom:c,now:n.now,options:i}),m=Ai(p,d,a);return{ok:!0,linkVerdicts:p.map((g,C)=>g.rejected===null?{operationIndex:C,kind:g.op.kind,ok:!0,linkId:String(g.finalLinkId)}:{operationIndex:C,kind:g.op.kind,ok:!1,reason:g.rejected}),__beforeLinks:RT(d),changes:await J(a,{source:e,beforeSnap:u,touchedIds:c,scheduledIds:y,links:m,warnings:h,hoursPerDay:s.hoursPerDay})}}function bT(t,e,i){for(let n of t){if(n.rejected!==null)continue;let r=NT(n.op,e,i);if(r!==null)return i.hasChildren(r)?Dt.ROOTS:String(r)}return null}function NT(t,e,i){return t.kind===ft.CREATE?t.target:t.kind===ft.DELETE?e.get(t.linkId)?.target??null:i.getLink(t.linkId)?.target??null}function FT(t,e){return t.kind===A.LINK_CREATE?{kind:ft.CREATE,source:t.source,target:t.target,type:t.type,lag:ce(t.lag??0,e)}:t.kind===A.LINK_UPDATE?{kind:ft.UPDATE,linkId:t.linkId,source:t.source,target:t.target,type:t.type,lag:t.lag===void 0?void 0:ce(t.lag,e)}:{kind:ft.DELETE,linkId:t.linkId}}async function Gf(t,e,i){let{adapter:n,sector:r}=i;if(typeof t.newValue!="string")return{ok:!1,reason:v.INVALID_VALUE};if(!n.getActivity(t.activityId))return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};let o=t.column===T.CUSTOM_PREDECESSORS,{specs:s,errors:l}=ja(t.newValue,{daysPerWeek:r.hoursPerWeek/r.hoursPerDay});if(l.length>0)return{ok:!1,reason:v.INVALID_VALUE};let c=s.map(y=>({...y,lag:ce(Va(y.lag),r.hoursPerDay)})),d=new Map;n.forEachActivity(y=>{y.correlativeId!=null&&d.set(String(y.correlativeId),y.id)});let u=y=>d.get(y)??null,p=Hn(n,t.activityId,o),f=o?Dn({targetActivityId:t.activityId,currentLinks:p,desiredSpecs:c,resolveActivityByCorrelative:u}):Tn({sourceActivityId:t.activityId,currentLinks:p,desiredSpecs:c,resolveActivityByCorrelative:u});return Ur(f.operations,t,e,i)}var fe={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 Nt(t){t.invalidateVisualOrderIds?.();let e=[];t.forEachActivity(a=>{W(a.parentId)&&e.push(a)}),e.sort(zf);let i=[];$f(i,e);let n=[],r=0;for(;i.length>0;){let a=i.pop();if(a.correlativeId!==r){let s=typeof a.correlativeId=="number"?a.correlativeId:void 0;n.push({activityId:String(a.id),before:s}),s!==void 0&&t.noteCorrelativeBefore?.(String(a.id),s),wT(a,r)}r+=1;let o=yr(String(a.id),t);o.sort(zf),$f(i,o)}return n}function $f(t,e){for(let i=e.length-1;i>=0;i-=1)t.push(e[i])}function qf(t){let e=t.correlativeId,i=typeof e=="number"?e:Number(e);return Number.isFinite(i)?i:Bs}var zf=(t,e)=>qf(t)-qf(e);function wT(t,e){t.correlativeId=e}function Zl(t,e){if(!t||t==="0")return;let i=String(t);for(;i!==null;){let{workHours:n,realWorkHours:r}=Zf(i,e);e.setActivityField(i,B.WORK_HOURS,n),e.setActivityField(i,B.REAL_WORK_HOURS,r);let a=e.getActivity(i);if(!a)break;let o=a.parentId;if(!o||W(o))break;i=o}}function Jf(t,e){let i=e.getActivity(t);if(!i)return;let n=i.parentId;!n||W(n)||Zl(n,e)}function Xf(t,e,i){for(let n of t){if(i.hasChildren(n))continue;let r=i.getActivity(n);r&&i.setActivityField(n,B.REAL_WORK_HOURS,Xt(Hr(r,B.WORK_HOURS),Hr(r,B.PROGRESS)))}for(let n of e)i.setActivityField(n,B.REAL_WORK_HOURS,Zf(n,i).realWorkHours)}function Zf(t,e){let i=0,n=0;for(let r of e.getChildren(t)){let a=e.getActivity(r);if(!a)continue;let o=Hr(a,B.WORK_HOURS);i+=o,n+=xT(r,a,o,e)}return{workHours:i,realWorkHours:n}}function Hr(t,e){let i=t[e];return typeof i=="number"&&Number.isFinite(i)?i:0}function xT(t,e,i,n){return n.hasChildren(t)?Hr(e,B.REAL_WORK_HOURS):Xt(i,Hr(e,B.PROGRESS))}function Ql(t,e){if(!t||t==="0")return;let i=String(t);for(;i!==null;){let n=e.getChildren(i),r=0;for(let s of n){let l=e.getActivity(s);l&&(r+=MT(l,B.USED_COST))}e.setActivityField(i,B.USED_COST,r);let a=e.getActivity(i);if(!a)break;let o=a.parentId;if(!o||W(o))break;i=o}}function Qf(t,e){let i=e.getActivity(t);if(!i)return;let n=i.parentId;!n||W(n)||Ql(n,e)}function MT(t,e){let i=t[e];return typeof i=="number"&&Number.isFinite(i)?i:0}function tc(t,e){if(!t||t==="0")return;let i=String(t);for(;i!==null;){let n=e.getChildren(i),r=0;for(let s of n){let l=e.getActivity(s);l&&(r+=UT(l,B.COST))}e.setActivityField(i,B.COST,r);let a=e.getActivity(i);if(!a)break;let o=a.parentId;if(!o||W(o))break;i=o}}function ty(t,e){let i=e.getActivity(t);if(!i)return;let n=i.parentId;!n||W(n)||tc(n,e)}function UT(t,e){let i=t[e];return typeof i=="number"&&Number.isFinite(i)?i:0}var To=Object.freeze({proplannerId:null,description:"",type:L.TASK,progress:0,constraintType:_.ASAP,constraintDate:null,autoScheduling:!0,assignedDefaultCalendar:!1,dateOrigin:null,cost:0,usedCost:0,realCost:0,workHours:0,realWorkHours:0,ponderator:0,hasCustomPonderator:!1,correlativeId:0,customId:null,subcontractId:null,isLookahead:!1,hasLookaheadTasks:!1,newActivityIds:[],hasNewActivities:!1,pendingRequestIds:[],responsableIds:[],tagIds:[],baselinePoints:[],baselineSnapshot:null,baselineVarianceDays:null,recursiveDurationHours:0,isCritical:!1,freeSlackHours:null,expectedProgress:null,expectedProgressBaseline:null,status:null,criticalPath:null}),ey="New Master Plan",iy="New Activity";var HT=["name","description","type","startDate","durationHours","constraintType","constraintDate","calendarId","assignedDefaultCalendar","autoScheduling","progress","cost","usedCost","realCost","workHours","realWorkHours","ponderator","hasCustomPonderator","customId","subcontractId","responsableIds","tagIds","isLookahead"],_o=new Set(HT);function BT(t){let e=Object.getPrototypeOf(t);if(e!==null&&e!==Object.prototype)throw new Error("activity-create: override bag must be a plain object with no custom prototype");for(let i of Reflect.ownKeys(t))if(typeof i=="symbol"||!_o.has(i))throw new Error(`activity-create: rejected override key "${String(i)}" \u2014 not a creation-writable canonical field`);return t}function ny(t,e){let i=t.parentId!=null?e.getActivity(t.parentId):null,n=BT(t.activityOverrides??{}),r=t.numTasksInGantt===0?ey:iy,a=n.name??r,o=n.durationHours??t.sector.hoursPerDay,s=n.calendarId??t.sector.defaultCalendar,l=jT(i,t.fallbackStartDate,n.startDate),c={...To,...n,id:t.id,parentId:t.parentId,uniqueCorrelativeId:t.nextUniqueCorrelativeId,name:a,durationHours:o,calendarId:s,startDate:l,endDate:l},d=n.startDate?new Date(c.startDate):e.getClosestWorkTime({date:c.startDate,dir:z.FUTURE,task:c});if(!n.startDate&&i&&xe(i.type)){let f=new Date(i.startDate);f.setUTCHours(0,0,0,0);let y=new Date(d);y.setUTCHours(0,0,0,0),y.getTime()!==f.getTime()&&(d=e.getClosestWorkTime({date:f,dir:z.FUTURE,task:c}))}let u=e.calculateEndDate({startDate:d,durationHours:c.durationHours,task:c});return{newTask:{...c,startDate:d,endDate:u,calendarDuration:Pe({type:c.type,startDate:d,endDate:u}),newActivityIds:[...c.newActivityIds],pendingRequestIds:[...c.pendingRequestIds],responsableIds:[...c.responsableIds],tagIds:[...c.tagIds],baselinePoints:[...c.baselinePoints]}}}function jT(t,e,i){return i?new Date(i):t?new Date(t.startDate):e?new Date(e):new Date}function Yn(t,e,i,n){let r=e,a=r==="0",o=Br(t,r);if(n!==void 0){let l=o.find(c=>c.id===n);if(l){let c=wt(l),d=o.map(wt).filter(p=>p<c);return d.length===0?c-1:(Math.max(...d)+c)/2}}if(i!==void 0){let l=o.find(c=>c.id===i);if(l){let c=wt(l),d=o.map(wt).filter(p=>p>c);if(d.length===0)return c+1;let u=Math.min(...d);return(c+u)/2}}return o.length===0?0:Math.max(...o.map(wt))+1}var en=Number.MAX_SAFE_INTEGER,ry=Number.MAX_SAFE_INTEGER-1;function wt(t){let e=t.correlativeId,i=typeof e=="number"?e:Number(e);return Number.isFinite(i)?i:en}function Br(t,e){return yr(e,t)}function ay(t,e,i){let n=t,r=Le(t,i);for(;r!=null&&e.has(r);)n=r,r=Le(r,i);return n}function Ii(t,e,i){let n=new Set([t]),r=re(i.getActivity(t)?.parentId);for(;r!=="0"&&!n.has(r);){if(e.has(r))return!0;n.add(r),r=re(i.getActivity(r)?.parentId)}return!1}function Le(t,e){let i=e.getActivity(t);if(!i)return null;let n=re(i.parentId),r=le(n,e),a=r.findIndex(o=>String(o)===String(t));return a<=0?null:r[a-1]??null}function oy(t,e,i,n){let r=le(e,t).filter(l=>String(l)!==String(n)).map(l=>t.getActivity(l)).filter(l=>l!==null);if(r.length===0)return 0;let a=r.map(wt);if(i<=0)return a[0]-1;if(i>=a.length)return a[a.length-1]+1;let o=a[i-1],s=a[i];return(o+s)/2}var WT=new Set([...[..._o].filter(t=>t!==B.DURATION_HOURS),"durationDays"]);function Eo(t,e){if(t===void 0)return{ok:!0,value:{}};let i=Object.getPrototypeOf(t);if(i!==null&&i!==Object.prototype)return{ok:!1,reason:v.INVALID_VALUE};for(let a of Reflect.ownKeys(t))if(typeof a=="symbol"||!WT.has(a))return{ok:!1,reason:v.INVALID_VALUE};let{durationDays:n,...r}=t;return n!==void 0&&(!Number.isFinite(n)||n<0)?{ok:!1,reason:v.INVALID_VALUE}:{ok:!0,value:{...r,...n===0&&(r.type===void 0||r.type===L.TASK)?{type:L.MILESTONE}:{},...n===void 0?{}:{durationHours:Bi(n,e)}}}}function jt(t,e){Zl(t,e),Ql(t,e),tc(t,e)}function Po(t,e){let i=new Set,n=[];for(let r of t){let a=String(r);i.has(a)||(i.add(a),n.push(a))}for(;n.length>0;){let r=n.pop(),a=e.getChildren(r);for(let o of a){let s=String(o);i.has(s)||(i.add(s),n.push(s))}}return i}function Ro(t,e){let i=new Set;for(let n of t){for(let r of e.getOutgoingLinkIds(n))i.add(String(r));for(let r of e.getIncomingLinkIds(n))i.add(String(r))}return[...i]}function VT(t){return t?{type:t.type,startDate:new Date(t.startDate),endDate:new Date(t.endDate),durationHours:t.durationHours,expectedProgressBaseline:t.expectedProgressBaseline,constraintType:t.constraintType,constraintDate:t.constraintDate?new Date(t.constraintDate):null,progress:t.progress}:null}function KT(t,e,i){let n=t.startDate;return!i||!(n instanceof Date)?{}:{endDate:i(n,e)}}function Si(t){if(t.remainingChildIds.length>0)return null;let e=t.parent,i=t.defaultDurationHours,n=Number.isFinite(i),r=VT(t.promotionSnapshot)??(n?{type:mn,durationHours:i,progress:0,autoScheduling:!0,constraintType:_.ASAP,constraintDate:null,hasNewActivities:!1,...KT(e,i,t.computeEndDate)}:{type:mn});if(t.idsRemoved&&t.idsRemoved.size>0){let o=Array.isArray(e.newActivityIds)?e.newActivityIds:[];if(o.length>0){let s=o.filter(l=>!t.idsRemoved.has(l)&&!t.idsRemoved.has(String(l)));s.length!==o.length&&(r.newActivityIds=s)}}e.hasLookaheadTasks&&(r.isLookahead=!0);let a=YT(e,r);return t.dataDateCapability&&a&&Object.assign(r,t.dataDateCapability.parentDemoted({activity:a,hasCompleteSchedulingState:t.hasCompleteSchedulingState===!0,promotionSnapshot:t.promotionSnapshot})),{parentId:String(e.id),fields:r}}function YT(t,e){let i=e.startDate??t.startDate,n=e.endDate??t.endDate,r=e.durationHours??t.durationHours,a=e.progress??t.progress,o=e.type??t.type;return!(i instanceof Date)||!(n instanceof Date)||typeof r!="number"||typeof a!="number"?null:{type:o,startDate:i,endDate:n,durationHours:r,progress:a}}function ko(t){if(t.idsRemoved.size===0)return null;let e=t.parent.newActivityIds;if(!Array.isArray(e)||e.length===0)return null;let i=e,n=i.filter(r=>!t.idsRemoved.has(r)&&!t.idsRemoved.has(String(r)));return n.length===i.length?null:{parentId:String(t.parent.id),fields:{newActivityIds:[...n],hasNewActivities:n.length>0}}}var sy=200;async function ly(t,e,i){let{adapter:n,scheduler:r,customIdTracker:a,sector:o}=i;if(r.invalidateAllCaches(),t.activityIds.length===0)return{ok:!1,reason:v.ACTIVITY_IDS_EMPTY};for(let R of t.activityIds)if(!n.getActivity(R))return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};let s=t.activityIds.filter(R=>{let k=n.getActivity(R);return!(k?.correlativeId===0&&k.type===L.PROJECT)}),l=Po(s,n),c=Ro(l,n),d=new Set;for(let R of t.activityIds){let k=n.getActivity(R);if(!k)continue;let O=k.parentId;if(W(O))continue;let F=String(O);l.has(F)||d.add(F)}let u=new Set([...l,...d]),p=await st(n,u),f=new Map;for(let R of c){let k=n.getLink(R);k&&f.set(R,{...k})}let y=new Set,h=0;for(let R of l){h+=1,h%sy===0&&await St();let k=n.getActivity(R);if(!k)continue;let O=W(k.parentId)?null:n.getActivity(String(k.parentId)),F=O?.hasNewActivities===!0&&O.newActivityIds.some($=>String($)===String(R));(k.isNewActivity===!0||F)&&y.add(R);let U=k.customId;typeof U=="string"&&U.length>0&&a.releaseCustomId(U)}for(let R of c)n.removeLink(R);let m=jr(n,l),g=0;for(let R of l)g+=1,g%sy===0&&await St(),n.removeActivity(R);for(let R of d){let k=n.getActivity(R);if(!k)continue;GT(k,y,n);let O=n.getChildren(R),F=Si({parent:k,remainingChildIds:O.map(String),defaultDurationHours:o.hoursPerDay,promotionSnapshot:n.getPromotionSnapshot(R),computeEndDate:(U,$)=>n.calculateEndDate({startDate:U,durationHours:$,task:k}),idsRemoved:l,dataDateCapability:i.dataDateCapability,hasCompleteSchedulingState:i.hasCompleteSchedulingState});if(!F){Ya(R,n);continue}if(n.setActivityFields(R,F.fields),k.customId==null||k.customId===""){let U=Le(R,n),$=U?n.getActivity(U)?.customId:null,ut=a.generateCustomIdForRestoredChild(typeof $=="string"&&$?$:null);n.setActivityField(R,B.CUSTOM_ID,ut)}}for(let R of d)jt(R,n);let C=Nt(n),{scheduledIds:b}=await nt({adapter:n,scheduler:r,sector:i.sector,defaultBaseCalendarId:i.defaultBaseCalendarId,runAutomaticP6Schedule:i.runAutomaticP6Schedule},{action:t,autoscheduleFrom:Dt.ROOTS,recomputeParentsFrom:d,now:i.now,options:e}),E={name:fe.ACTIVITY_DELETION,properties:{activity_ids:[...t.activityIds],cascade_count:l.size}};t.eventSource!==void 0&&(E.properties.event_source=t.eventSource);let P=new Map;for(let[R,k]of f)P.set(R,k);let N=new Map;for(let R of l){let k=p.get(String(R));k&&N.set(String(R),k)}let I=await J(n,{source:t,beforeSnap:p,touchedIds:u,scheduledIds:b,sirDetection:Yt.AFTER_DIFF,links:Se(f),trackingEvents:[E],hoursPerDay:o.hoursPerDay,correlativeShifts:C});return{ok:!0,changes:m.length>0?{...I,viewState:m}:I,__beforeSnap:N,__beforeLinks:P}}function GT(t,e,i){let n=ko({parent:t,idsRemoved:e});if(n)for(let[r,a]of Object.entries(n.fields))ue(i,n.parentId,r,a)}function jr(t,e){let i=[];for(let n of e){let r=t.isChecked(n),a=t.isVisible(n);!r&&a||i.push({activityId:String(n),...r?{checked:{before:!0,after:!1}}:{},...a?{}:{visible:{before:!1,after:!0}}})}return i}function Se(t){let e=[];for(let[i,n]of t.entries())e.push({id:i,kind:H.DELETED,fields:{source:{before:String(n.source),after:void 0},target:{before:String(n.target),after:void 0},type:{before:n.type,after:void 0},lag:{before:Number(n.lag),after:void 0}},after:null});return e}var Gn={CREATE:"create",REPARENT:"reparent"};function $T(t,e={}){let i=t.type;if(i!==L.TASK&&i!==L.MILESTONE)return null;let n=t.startDate,r=t.endDate;return!(n instanceof Date)||!(r instanceof Date)?null:{type:i,startDate:new Date(n),endDate:new Date(r),durationHours:Number(t.durationHours??0),expectedProgressBaseline:typeof t.expectedProgressBaseline=="number"?t.expectedProgressBaseline:null,constraintType:t.constraintType??null,constraintDate:t.constraintDate instanceof Date?new Date(t.constraintDate):null,progress:Number(t.progress??0),...e}}function cy(t){let e=t.getParent(t.parentId);if(!e)return null;let i=t.isCurrentlyLeaf!==void 0?t.isCurrentlyLeaf&&ii(e.type):qT(e),n=Array.isArray(e.newActivityIds)?e.newActivityIds:[],a={isLookahead:!1,hasNewActivities:!0,newActivityIds:n.some(s=>String(s)===String(t.newChildId))?[...n]:[...n,t.newChildId]},o=i?t.dataDateCapability?.parentPromoted(e):void 0;return e.customId!=null&&e.customId!==""&&(a.customId=null),i&&(a.type=Gs,o&&Object.assign(a,o.activityPatch),(t.promotionSource??Gn.CREATE)===Gn.CREATE&&(a.constraintType=_.ASAP,a.constraintDate=null)),{parentId:t.parentId,fields:a,promotionSnapshot:$T(e,o?.snapshotPatch)}}function qT(t){return ii(t.type)&&(!Array.isArray(t.newActivityIds)||t.newActivityIds.length===0)}function vi(t,e){let n=e.adapter.getActivity(t.parentId)?.customId??null,r=cy({...t,getParent:o=>e.adapter.getActivity(o)??null,dataDateCapability:e.dataDateCapability});if(!r)return{applied:!1,removedLinks:new Map};let a=r.fields.type===L.PROJECT?zT(t.parentId,e):new Map;for(let[o,s]of Object.entries(r.fields))ue(e.adapter,r.parentId,o,s);return r.promotionSnapshot&&e.adapter.setPromotionSnapshot(r.parentId,r.promotionSnapshot),r.fields.customId===null&&e.customIdTracker.releaseCustomId(n),{applied:!0,removedLinks:a}}function zT(t,e){let i=new Map,n=new Set([...e.adapter.getIncomingLinkIds(t),...e.adapter.getOutgoingLinkIds(t)]);for(let r of n){let a=e.adapter.getLink(r);a&&(i.set(String(r),{...a}),e.adapter.removeLink(r))}return i}async function Ci(t,e,i={}){let{adapter:n,scheduler:r,sector:a,calendars:o,activityIdGen:s,uidGen:l}=e;i.skipCacheInvalidation||r.invalidateAllCaches();let c=JT(t,n);if(!c.ok)return c;let{parent:d,anchorSiblingId:u,isRoot:p}=c,f=ZT(t.activityId,n,s,e.isActivityIdReserved),y=l.next(),h={id:f,parentId:p?null:t.parentId,sector:{id:a.id,hoursPerDay:a.hoursPerDay,defaultCalendar:n_(o)},numTasksInGantt:n.activityCount(),nextUniqueCorrelativeId:y,activityOverrides:t.overrides??{}},g=ny(h,{getActivity:R=>n.getActivity(R),calculateEndDate:R=>n.calculateEndDate(R),getClosestWorkTime:R=>n.getClosestWorkTime(R)}).newTask;e.dataDateCapability!==null&&Object.assign(g,e.dataDateCapability.activityCreated({activity:g,hasCompleteSchedulingState:e.hasCompleteSchedulingState})),g.realWorkHours=Xt(g.workHours,g.progress),t_(g,t,e,u,d,i);let C=i.insertionCorrelativeId??Yn(n,p?"0":t.parentId,t.afterSiblingId,t.beforeSiblingId);g.correlativeId=C;let b=new Set([f]);d&&b.add(d.id);let E=d!==null&&n.getChildren(d.id).length===0,P=i.skipBeforeSnap?new Map:await st(n,b);n.addActivity(g);let N=d?vi({parentId:d.id,newChildId:f,isCurrentlyLeaf:E},e).removedLinks:new Map;i.skipRollupCascades||(Jf(f,n),Qf(f,n),ty(f,n));let I=e_(n,f,b,i);return{ok:!0,newId:f,parent:d,newActivity:g,beforeSnap:P,initialTouched:b,correlativeShifts:I,removedParentLinks:N}}function JT(t,e){let i=W(t.parentId),n=i?null:e.getActivity(t.parentId);if(!i&&!n)return{ok:!1,reason:v.PARENT_NOT_FOUND};if(n!==null&&Ze(n))return{ok:!1,reason:v.PARENT_FROZEN_BY_SIR};if(t.afterSiblingId!==void 0&&t.beforeSiblingId!==void 0)return{ok:!1,reason:v.ANCHOR_SIBLING_CONFLICT};let o=t.afterSiblingId??t.beforeSiblingId,s=XT(t,e,i,o);return s||{ok:!0,parent:n,anchorSiblingId:o,isRoot:i}}function XT(t,e,i,n){if(n===void 0)return null;let r=e.getActivity(n);if(!r)return{ok:!1,reason:v.ANCHOR_SIBLING_NOT_FOUND};let a=i?"0":t.parentId;return(r.parentId==null?"0":String(r.parentId))!==a?{ok:!1,reason:v.ANCHOR_SIBLING_WRONG_PARENT}:null}function ZT(t,e,i,n){let r=()=>{let a=i.next();for(;e.activityExists(a)||n(String(a));)a=i.next();return a};return t===void 0||e.activityExists(t)||n(String(t))?r():(i.bump(t),t)}function QT(t){let e=t.overrides?.customId;return typeof e=="string"?e:void 0}function t_(t,e,i,n,r,a){let{adapter:o,customIdTracker:s}=i,l=QT(e);if(l!==void 0){if(l.length===0)return;if(!s.isCustomIdInUse(l)){s.registerCustomId(l);return}}let c=a.customIdReferenceId??n,d=c!==void 0,u=d?o.getActivity(c):r;t.customId=s.generateCustomIdForNewChild({activity:u??{},useActivityCustomIdAsReference:d})}function e_(t,e,i,n){if(n.skipCorrelativeRecompute)return[];let r=Nt(t).filter(a=>a.activityId!==String(e));for(let a of r)i.add(a.activityId);return r}async function i_(t,e,i,n,r){let{newId:a,newActivity:o,beforeSnap:s,initialTouched:l,correlativeShifts:c,removedParentLinks:d}=i,u={name:fe.ACTIVITY_CREATION,properties:{parent_id:e.parentId,activity_id:a,created_duration:o.durationHours}};return e.eventSource!==void 0&&(u.properties.event_source=e.eventSource),J(t,{source:e,beforeSnap:s,touchedIds:l,scheduledIds:n,correlativeShifts:c,trackingEvents:[u],links:Se(new Map(d)),hoursPerDay:r})}async function dy(t,e,i){let{adapter:n,scheduler:r,sector:a}=i,o=Eo(t.overrides,a.hoursPerDay);if(!o.ok)return o;let s=await Ci({...t,overrides:o.value},i);if(!s.ok)return s;let{newId:l}=s,c=s.newActivity.autoScheduling;n.setActivityField(l,"autoScheduling",!1);let d;try{d=await nt({adapter:n,scheduler:r,sector:i.sector,defaultBaseCalendarId:i.defaultBaseCalendarId,runAutomaticP6Schedule:i.runAutomaticP6Schedule},{action:t,autoscheduleFrom:l,recomputeParentsFrom:[l],preventSummaryTargetPullback:!0,now:i.now,options:e})}finally{n.setActivityField(l,"autoScheduling",c)}let{scheduledIds:u}=d;return{ok:!0,changes:await i_(n,t,s,u,a.hoursPerDay),...s.removedParentLinks.size>0?{__beforeLinks:new Map(s.removedParentLinks)}:{}}}function n_(t){for(let i of t.values())if(i.is_default)return i.id;let e=t.values().next();return!e.done&&e.value?e.value.id:"global"}async function fy(t,e,i){let n=r_(t,i);if(n)return{ok:!1,reason:n};let r=o_(t,i);if(!r.ok)return r;let a=t.mode===Lt.REPLACE?new Set(i.adapter.getAllIds().map(E=>String(E))):new Set,o=t.mode===Lt.REPLACE?await st(i.adapter,a):new Map,s=t.mode===Lt.REPLACE?p_(i):new Map,l=t.mode===Lt.REPLACE?jr(i.adapter,a):[];i.scheduler.invalidateAllCaches();let c=[];if(t.mode===Lt.REPLACE){for(let E of s.keys()){let P=Re({kind:ft.DELETE,linkId:E},{port:i.adapter});if(!P.applied)return{ok:!1,reason:P.rejected??v.INVALID};c.push({op:{kind:ft.DELETE,linkId:E},finalLinkId:E,rejected:null})}for(let E of a){let P=i.adapter.getActivity(E)?.customId;typeof P=="string"&&P.length>0&&i.customIdTracker.releaseCustomId(P),i.adapter.removeActivity(E)}}let d=await u_(t,r.plan.items,i);if(!d.ok)return d;for(let[E,P]of d.removedParentLinks)s.set(E,P),c.push({op:{kind:ft.DELETE,linkId:E},finalLinkId:E,rejected:null});let u=yy(t)?[]:Nt(i.adapter),p=new Set(r.plan.items.map(E=>String(E.activityId))),f=u.filter(E=>!p.has(E.activityId)),y=t.mode===Lt.REPLACE?new Set(a):new Set;mi(i.adapter,u,p,o,y);for(let E of r.plan.items)y.add(String(E.activityId));let h=r.plan.links.map(E=>({operation:{kind:ft.CREATE,source:E.source,target:E.target,type:E.type,lag:ce(E.lag??0,i.sector.hoursPerDay)},linkId:E.linkId})),m=Ua(h,{port:i.adapter,preserved:s,rejectParentLinkMutations:e.rejectParentLinkMutations??!1});if(!m.applied)return{ok:!1,reason:m.rejected??v.INVALID};for(let{operation:E,linkId:P}of h)c.push({op:E,finalLinkId:P,rejected:null});let g=r.plan.items.map(E=>E.activityId),{scheduledIds:C}=await nt({adapter:i.adapter,scheduler:i.scheduler,sector:i.sector,defaultBaseCalendarId:i.defaultBaseCalendarId,runAutomaticP6Schedule:i.runAutomaticP6Schedule},{action:t,autoscheduleFrom:t.items.length>0||t.links.length>0?Dt.ROOTS:null,recomputeParentsFrom:g,now:i.now,options:e}),b=await J(i.adapter,{source:t,beforeSnap:o,touchedIds:y,scheduledIds:C,links:Ai(c,s,i.adapter),hoursPerDay:i.sector.hoursPerDay,correlativeShifts:f,...t.mode===Lt.REPLACE?{sirDetection:Yt.AFTER_DIFF}:{}});return{ok:!0,changes:l.length>0?{...b,viewState:l}:b,...t.mode===Lt.REPLACE||s.size>0?{...t.mode===Lt.REPLACE?{__beforeSnap:o}:{},__beforeLinks:f_(s)}:{}}}function r_(t,e){if(t.mode!==Lt.APPEND&&t.mode!==Lt.REPLACE)return v.INVALID;let i=new Set,n=new Set;for(let a of t.items){if(a.batchId.length===0||i.has(a.batchId))return v.INVALID;if(i.add(a.batchId),a.index!==void 0&&(!Number.isInteger(a.index)||a.index<0))return v.INVALID;if(a.activityId!==void 0){let o=String(a.activityId);if(o.length===0||o==="0"||n.has(o))return v.INVALID;n.add(o)}}for(let a of t.items)if(!ic(a.parent,!0,t.mode,i,e))return v.PARENT_NOT_FOUND;if(a_(t.items))return v.INVALID;let r=new Set;for(let a of t.links){if(!Object.values(M).includes(a.type))return v.INVALID_LINK_TYPE;if(a.lag!==void 0&&!Number.isFinite(a.lag))return v.INVALID_LINK_LAG;if(!ic(a.source,!1,t.mode,i,e)||!ic(a.target,!1,t.mode,i,e))return v.ACTIVITY_NOT_FOUND;if(a.linkId!==void 0){let o=String(a.linkId);if(o.length===0||r.has(o))return v.INVALID;r.add(o)}}return null}function ic(t,e,i,n,r){return typeof t=="string"?t==="0"?e:i===Lt.APPEND&&r.adapter.getActivity(String(t))!==null:t!==null&&t.batchId.length>0&&n.has(t.batchId)}function a_(t){let e=new Map;for(let n of t)typeof n.parent!="string"&&e.set(n.batchId,n.parent.batchId);let i=new Set;for(let n of t){let r=new Set,a=n.batchId;for(;a!==void 0&&!i.has(a);){if(r.has(a))return!0;r.add(a),a=e.get(a)}for(let o of r)i.add(o)}return!1}function o_(t,e){let i=new Map;for(let d of t.items){let u=Eo(d.overrides,e.sector.hoursPerDay);if(!u.ok)return u;i.set(d.batchId,u.value)}let n=new Map,r=new Set;for(let d of t.items){let u=s_(d.activityId,t.mode,r,e);r.add(String(u)),n.set(d.batchId,u)}let a=new Set,o=t.links.map(d=>{let u=l_(d.linkId,t.mode,a,e);return a.add(String(u)),u}),s=c_(t,n,e),l=[];for(let d of t.items){let u=n.get(d.batchId),p=s.get(d.batchId);if(u===void 0||p===void 0)return{ok:!1,reason:v.INVALID};let f=typeof d.parent=="string"?null:d.parent.batchId,y=typeof d.parent=="string"?d.parent:n.get(d.parent.batchId);if(y===void 0)return{ok:!1,reason:v.PARENT_NOT_FOUND};l.push({input:d,activityId:u,parentId:y,parentBatchId:f,insertionCorrelativeId:p,overrides:i.get(d.batchId)??{}})}let c=[];for(let[d,u]of t.links.entries()){let p=py(u.source,n),f=py(u.target,n),y=o[d];if(p===null||f===null||y===void 0)return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};c.push({source:p,target:f,type:u.type,lag:u.lag??0,linkId:y})}return{ok:!0,plan:{items:l,links:c}}}function s_(t,e,i,n){if(t!==void 0&&(e===Lt.REPLACE||n.adapter.getActivity(t)===null&&!n.isActivityIdReserved(String(t)))&&!i.has(String(t)))return n.activityIdGen.bump(t),t;let a=n.activityIdGen.next();for(;i.has(String(a))||e===Lt.APPEND&&(n.adapter.getActivity(a)!==null||n.isActivityIdReserved(String(a)));)a=n.activityIdGen.next();return a}function l_(t,e,i,n){if(t!==void 0&&(e===Lt.REPLACE||n.adapter.getLink(t)===null&&!n.isLinkIdReserved(String(t)))&&!i.has(String(t)))return n.linkIdGen.bump(t),t;let a=n.linkIdGen.next();for(;i.has(String(a))||e===Lt.APPEND&&(n.adapter.getLink(a)!==null||n.isLinkIdReserved(String(a)));)a=n.linkIdGen.next();return a}function c_(t,e,i){if(yy(t)){let s=i.adapter.activityCount();return new Map(t.items.map((l,c)=>[l.batchId,s+c]))}let n=new Set(Array.from(e.values(),s=>String(s))),r=new Map;for(let s of t.items){let l=e.get(s.batchId);if(l===void 0)continue;let c=typeof s.parent=="string"?s.parent:e.get(s.parent.batchId);if(c===void 0)continue;let d=String(c),u=r.get(d);u||(u={existing:t.mode===Lt.REPLACE||typeof s.parent!="string"&&e.has(s.parent.batchId)?[]:Br(i.adapter,d).sort((h,m)=>wt(h)-wt(m)||String(h.id).localeCompare(String(m.id))).map(h=>String(h.id)),newIdsByTarget:new Map},r.set(d,u));let p=s.index===void 0?u.existing.length:Math.min(s.index,u.existing.length),f=u.newIdsByTarget.get(p)??[];f.push(String(l)),u.newIdsByTarget.set(p,f)}let a=new Map,o=new Map(Array.from(e,([s,l])=>[String(l),s]));for(let s of r.values()){let l=[];for(let d=0;d<=s.existing.length;d+=1){for(let p of s.newIdsByTarget.get(d)??[])l.push(p);let u=s.existing[d];u!==void 0&&l.push(u)}let c=0;for(;c<l.length;){if(!n.has(l[c])){c+=1;continue}let d=c;for(;c<l.length&&n.has(l[c]);)c+=1;let u=c-d,p=d>0?uy(l[d-1],i):null,f=c<l.length?uy(l[c],i):null;for(let y=0;y<u;y+=1){let h=l[d+y],m=o.get(h);m!==void 0&&a.set(m,d_(p,f,y+1,u))}}}return a}function yy(t){return t.mode===Lt.APPEND&&t.items.every(e=>e.parent==="0"&&e.index===void 0)}function uy(t,e){let i=e.adapter.getActivity(t);return i?wt(i):0}function d_(t,e,i,n){return t!==null&&e!==null&&e>t?t+(e-t)*i/(n+1):t!==null?t+i:e!==null?e-(n-i+1):i-1}async function u_(t,e,i){let n=new Map,r=new Map,a=[];for(let s of e){if(s.parentBatchId===null){a.push(s);continue}let l=n.get(s.parentBatchId)??[];l.push(s),n.set(s.parentBatchId,l)}for(let s=0;s<a.length;s+=1){let l=a[s],c=await Ci({kind:A.ACTIVITY_CREATE,parentId:l.parentId,activityId:l.activityId,overrides:l.overrides,...t.eventSource===void 0?{}:{eventSource:t.eventSource}},i,{skipCorrelativeRecompute:!0,skipBeforeSnap:!0,skipCacheInvalidation:!0,skipRollupCascades:!0,insertionCorrelativeId:l.insertionCorrelativeId});if(!c.ok)return c;for(let[d,u]of c.removedParentLinks)r.set(d,u);for(let d of n.get(l.input.batchId)??[])a.push(d)}if(a.length!==e.length)return{ok:!1,reason:v.INVALID};let o=new Set;for(let s=a.length-1;s>=0;s-=1){let l=a[s].parentId;l==="0"||o.has(String(l))||(o.add(String(l)),jt(l,i.adapter))}return{ok:!0,removedParentLinks:r}}function py(t,e){return typeof t=="string"?t:e.get(t.batchId)??null}function p_(t){return new Map(t.adapter.getAllLinks().map(e=>[String(e.id),{...e}]))}function f_(t){return new Map(Array.from(t,([e,i])=>[String(e),i]))}function hy(t,e){let{adapter:i}=e,n=t.activityId,r=i.getActivity(n);if(!r)return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};let a=r.pendingRequestIds??[],o=t.pendingRequests.map(c=>c.id);i.setActivityField(t.activityId,"pendingRequestIds",o);let s=i.getActivity(n);if(!s)return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};let l={id:n,kind:H.UPDATED,fields:{pendingRequestIds:{before:a,after:o}},after:et(s)};return{ok:!0,changes:{source:t,activities:[l],links:[],calendars:[],trackingEvents:[]}}}function my(t){let e=new Map;for(let i of t){let n=i.proplannerId;typeof n=="number"&&Number.isSafeInteger(n)&&n>0&&e.set(n,String(i.id))}return e}function gy(t,e,i){let n=new Set(e.map(({id:r})=>String(r)));for(let r of t)if((r.proplannerId==null||r.proplannerId===0)&&!n.has(String(r.id)))throw new Error(`persistence-acknowledge: missing ${i} proplannerId for "${String(r.id)}"`)}function y_(t,e,i,n,r,a){let o=String(t.id);if(o.length===0||r.has(o))throw new Error(`persistence-acknowledge: duplicate or empty ${e} id "${o}"`);if(!Number.isSafeInteger(t.proplannerId)||t.proplannerId<=0)throw new Error(`persistence-acknowledge: invalid ${e} proplannerId ${String(t.proplannerId)}`);if(a.has(t.proplannerId))throw new Error(`persistence-acknowledge: duplicate ${e} proplannerId ${String(t.proplannerId)}`);let s=i(o);if(!s.exists)throw new Error(`persistence-acknowledge: unknown ${e} id "${o}"`);if(s.current!==null&&s.current!==0&&s.current!==t.proplannerId)throw new Error(`persistence-acknowledge: ${e} "${o}" already has proplannerId ${String(s.current)}`);let l=n.get(t.proplannerId);if(l!==void 0&&l!==o)throw new Error(`persistence-acknowledge: ${e} proplannerId ${String(t.proplannerId)} already belongs to "${l}"`);r.add(o),a.add(t.proplannerId)}function Ay(t,e,i,n){let r=new Set,a=new Set;for(let o of t)y_(o,e,i,n,r,a)}async function Iy(t,e){let i=t.filter(s=>{let l=e.adapter.getActivity(String(s.activityId));return l!==null&&l.progress!==s.progress}),n=new Set(i.map(s=>String(s.activityId))),r=Tr(e.adapter,n),a=new Set(n);for(let s of r)a.add(String(s));let o=await st(e.adapter,a);return e.adapter.batchUpdate(()=>{for(let s of i){let l=String(s.activityId);e.adapter.setActivityField(l,"progress",s.progress),e.adapter.setActivityField(l,"autoScheduling",Ui(s.progress))}Ru(r,e.adapter),Xf(n,r,e.adapter)}),[...await ao(e.adapter,o,a)]}async function Sy(t,e){let i=t.activities??[],n=t.links??[],r=e.adapter.getAllActivities(),a=e.adapter.getAllLinks(),o=t.checkpoint?.activities??r,s=t.checkpoint?.links??a,l=new Map(o.map(y=>[String(y.id),y])),c=new Map(s.map(y=>[String(y.id),y])),d=my(o),u=my(s);Ay(i,"activity",y=>{let h=l.get(y);return{exists:h!==void 0,current:h?.proplannerId??null}},d),Ay(n,"link",y=>{let h=c.get(y);return{exists:h!==void 0,current:h?.proplannerId??null}},u),gy(o,i,"activity"),gy(s,n,"link");let p=[],f=[];return e.adapter.batchUpdate(()=>{for(let y of i){let h=e.adapter.getActivity(y.id);if(!h||h.proplannerId===y.proplannerId)continue;let m=h.proplannerId;e.adapter.setActivityField(y.id,"proplannerId",y.proplannerId),p.push({id:y.id,kind:H.UPDATED,fields:{proplannerId:{before:m,after:y.proplannerId}},after:{...h,proplannerId:y.proplannerId}})}for(let y of n){let h=e.adapter.getLink(y.id);if(!h||h.proplannerId===y.proplannerId)continue;let m=h.proplannerId;e.adapter.setLinkProplannerId(y.id,y.proplannerId),f.push({id:y.id,kind:H.UPDATED,fields:{proplannerId:{before:m,after:y.proplannerId}},after:{...h,proplannerId:y.proplannerId}})}}),{ok:!0,changes:{source:t,activities:p,links:f,calendars:[],trackingEvents:[]}}}async function vy(t,e,i){if(h_(t))return{ok:!1,reason:v.INVALID_VALUE};let n=[...new Set(t.activityIds.map(String))];if(t.acknowledgePersistedLookahead===!0&&n.some(s=>!i.isActivityIdReserved(s)))return{ok:!1,reason:v.INVALID};let a=n.map(s=>i.adapter.getActivity(s));if(a.some(s=>!s))return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};let o=[];for(let[s,l]of n.entries()){let c=a[s];if(!c)continue;let d={};c.isLookahead!==t.isLookahead&&(d.isLookahead={before:c.isLookahead,after:t.isLookahead},i.adapter.setActivityField(l,"isLookahead",t.isLookahead)),c.hasLookaheadTasks!==t.hasLookaheadTasks&&(d.hasLookaheadTasks={before:c.hasLookaheadTasks,after:t.hasLookaheadTasks},i.adapter.setActivityField(l,"hasLookaheadTasks",t.hasLookaheadTasks)),Object.keys(d).length!==0&&o.push({id:l,kind:H.UPDATED,fields:d,after:{...c,isLookahead:t.isLookahead,hasLookaheadTasks:t.hasLookaheadTasks}})}return t.persistedProgress!==void 0&&(await Iy([{activityId:n[0],progress:t.persistedProgress}],i)).length>0?(await nt({adapter:i.adapter,scheduler:i.scheduler,sector:i.sector,defaultBaseCalendarId:i.defaultBaseCalendarId,runAutomaticP6Schedule:i.runAutomaticP6Schedule},{action:t,autoscheduleFrom:t.persistedProgress===0?n[0]:null,recomputeParentsFrom:[],now:i.now,options:e}),{ok:!0,changes:await J(i.adapter,{source:t,beforeSnap:new Map,touchedIds:[],scheduledIds:[],hoursPerDay:i.sector.hoursPerDay})}):{ok:!0,changes:{source:t,activities:o,links:[],calendars:[],trackingEvents:[]}}}function h_(t){let e=t.persistedProgress;return e!==void 0&&(t.activityIds.length!==1||!Number.isFinite(e)||e<0||e>100)}function Dy(t,e){let i=new Map(t.map(a=>[a.id,et(a)])),n=new Map;for(let a of t){if(a.parentId===null)continue;let o=n.get(a.parentId)??[];o.push(a),n.set(a.parentId,o)}let r=new Map;for(let a of[...t].reverse()){let o=n.get(a.id)??[],s=o.length>0,l=s?o.reduce((y,h)=>y+Cy(r,h.id),0):m_(a,e);if(r.set(a.id,l),!s)continue;let c=l>0,d=e!==ct.COST;for(let y of o){let h=nc(i,y.id),m=c?100*Cy(r,y.id)/l:d?100/o.length:0;i.set(y.id,{...h,ponderator:m})}let u=o.map(y=>nc(i,y.id)),p=En(u),f=nc(i,a.id);i.set(a.id,{...f,progress:Ka(p??0)})}return i}function m_(t,e){return t.type===L.PROJECT?0:e===ct.COST?t.cost:e===ct.WORK_HOURS?t.workHours:t.durationHours}function Cy(t,e){let i=t.get(e);if(i===void 0)throw new Error(`Missing conversion magnitude ${e}`);return i}function nc(t,e){let i=t.get(e);if(!i)throw new Error(`Missing conversion snapshot ${e}`);return i}function ac(t,e){let{adapter:i}=e,n=new Set(t.conversionRootIds.map(p=>String(p)));if(n.size===0)throw new Error("Conversion requires at least one root");for(let p of n)E_(p,i);let r=i.getVisualOrderIds().filter(p=>n.has(p)&&!Ii(p,n,i)),a=r.map(p=>g_(p,i,t.criterion??e.sector.activityCreter??ct.DURATION)),o=a.map(({conversionRootId:p,convertedActivities:f})=>({conversionRootId:p,convertedActivities:f})),s=a.flatMap(p=>p.milestoneMoves),l=a.flatMap(p=>p.activityIdsToDelete),c=a.map(p=>p.formerParent),d=new Set(l),u=Ro(d,i);return{sourceStateRevision:e.stateRevision,conversionRootIds:r,conversionGroups:o,milestoneMoves:s,activityIdsToDelete:l,linkIdsToDelete:u,formerParents:c}}async function Ey(t,e,i){if(t.expectedStateRevision!==i.stateRevision)return{ok:!1,reason:v.STALE_STATE_REVISION};let n=ac(t,i);if(!P_(n,i.adapter))return{ok:!1,reason:v.HIERARCHY_CYCLE};let{adapter:r,scheduler:a}=i;a.invalidateAllCaches();let o=await v_(n,r);C_(n,i),Py(n,r),D_(n,o.deletedIds,r);let s=T_(n,r);mi(r,s,o.deletedIds,o.beforeSnap,o.touchedIds);let{scheduledIds:l}=await nt({adapter:r,scheduler:a,sector:i.sector,defaultBaseCalendarId:i.defaultBaseCalendarId,runAutomaticP6Schedule:i.runAutomaticP6Schedule},{action:t,autoscheduleFrom:"roots",recomputeParentsFrom:o.touchedIds,now:i.now,options:e,recomputeParentProgress:!0}),c=await J(r,{source:t,beforeSnap:o.beforeSnap,touchedIds:o.touchedIds,scheduledIds:l,sirDetection:"after-diff",links:Se(o.beforeLinks),hoursPerDay:i.sector.hoursPerDay,correlativeShifts:s});return __(n,o,c)}function g_(t,e,i){let n=rc(t,e),r=Po([t],e);if(r.delete(t),r.size===0)throw new Error(`Conversion root ${t} has no descendants`);let a=e.getVisualOrderIds().filter(u=>r.has(u)).map(u=>rc(u,e));_y(n);for(let u of a)_y(u);let o=a.filter(u=>u.type!==L.MILESTONE),s=a.filter(u=>u.type===L.MILESTONE),l=A_(n,o),c=Dy([n,...o],i),d=c.get(n.id);if(!d)throw new Error(`Missing conversion snapshot ${n.id}`);return{conversionRootId:t,convertedActivities:[...c.values()].filter(u=>u.id!==t).map(u=>I_(u,l)),milestoneMoves:S_(n,s),activityIdsToDelete:o.map(u=>u.id),formerParent:{activity:d,hasConvertedActivities:o.length>0}}}function A_(t,e){let i=new Map;e.length>0&&i.set(t.id,Ty(t));for(let n of e)i.set(n.id,Ty(n));return i}function I_(t,e){let i=et(t),n=re(t.parentId),r=e.get(n);return i.parentId=r===void 0?null:String(r),i}function S_(t,e){let i=[],n=re(t.parentId),r=t.id;for(let a of e)i.push({activityId:a.id,parentId:n,afterSiblingId:r}),r=a.id;return i}async function v_(t,e){let i=new Set(t.activityIdsToDelete),n=new Set([...t.conversionRootIds,...t.activityIdsToDelete,...t.milestoneMoves.map(({activityId:r})=>r),...t.milestoneMoves.map(({parentId:r})=>r).filter(r=>r!=="0")]);return{deletedIds:i,touchedIds:n,beforeSnap:await st(e,n),beforeLinks:R_(t.linkIdsToDelete,e),viewStateChanges:jr(e,i)}}function C_(t,e){for(let i of t.activityIdsToDelete){let n=e.adapter.getActivity(i)?.customId;n&&e.customIdTracker.releaseCustomId(n)}}function Py(t,e){for(let i of t.milestoneMoves)e.setActivityFields(i.activityId,{parentId:i.parentId,correlativeId:Yn(e,i.parentId,i.afterSiblingId,void 0)});for(let i of t.linkIdsToDelete)e.removeLink(i);for(let i of[...t.activityIdsToDelete].reverse())e.removeActivity(i);for(let{activity:i}of t.formerParents)e.setActivityField(i.id,B.TYPE,L.TASK)}function D_(t,e,i){for(let{activity:n,hasConvertedActivities:r}of t.formerParents){let a=rc(n.id,i),o=ko({parent:a,idsRemoved:e});i.setActivityFields(n.id,{progress:n.progress,isLookahead:n.isLookahead||r,hasLookaheadTasks:n.hasLookaheadTasks||r,...o?.fields??{}}),i.setProgressFallback(n.id,null)}}function T_(t,e){for(let{activity:i}of t.formerParents)jt(i.parentId,e);return Nt(e)}function __(t,e,i){let n=new Map;for(let r of e.deletedIds){let a=e.beforeSnap.get(r);a&&n.set(r,a)}return{ok:!0,changes:e.viewStateChanges.length===0?i:{...i,viewState:e.viewStateChanges},conversionGroups:t.conversionGroups.map(({conversionRootId:r,convertedActivities:a})=>({conversionRootId:r,convertedActivities:a.map(o=>et(o))})),__beforeSnap:n,__beforeLinks:e.beforeLinks}}function E_(t,e){let i=e.getActivity(t);if(!i)throw new Error(`Conversion root ${t} was not found`);if(i.type===L.PROJECT&&i.correlativeId===0)throw new Error(`Conversion root ${t} is the visual project root`)}function rc(t,e){let i=e.getActivity(t);if(!i)throw new Error(`Conversion activity ${t} is missing`);return i}function Ty(t){if(t.proplannerId==null)throw new Error(`Conversion activity ${t.id} has no persisted identifier`);return t.proplannerId}function _y(t){if(!Number.isFinite(t.startDate.getTime()))throw new Error(`Conversion activity ${t.id} has invalid startDate`);if(!Number.isFinite(t.endDate.getTime()))throw new Error(`Conversion activity ${t.id} has invalid endDate`)}function P_(t,e){let i=e.fork();return Py(t,i),ri({port:e,proposedPort:i,currentLinks:e.getAllLinks(),proposedLinks:i.getAllLinks()}).ok}function R_(t,e){let i=new Map;for(let n of t){let r=e.getLink(n);r&&i.set(n,{...r})}return i}function $n(t,e){let i=new Set;for(let r of t)i.add(String(r));let n=[];for(let r of e.getAllLinks()){let a=String(r.source),o=String(r.target);!i.has(a)&&!i.has(o)||ky(r,e)&&n.push(String(r.id))}return n}function ky(t,e){let i=String(t.source),n=String(t.target);return Ry(n,i,e)||Ry(i,n,e)}function Lo(t,e){return[...t].filter(([,i])=>ky(i,e)).map(([i])=>String(i))}function Ry(t,e,i){let n=String(t),r=new Set;for(;n!=null;){if(r.has(n))return!1;r.add(n);let a=i.getActivity(n);if(!a)return!1;let o=a.parentId;if(o===null||W(o))return!1;let s=o;if(s===e)return!0;n=s}return!1}function Oo(t,e){let i=t.getAllLinks();return!ri({port:t,currentLinks:i,proposedLinks:i,proposal:{reparented:e}}).ok}function bo(t,e){let i=new Set;if(t.length===0)return i;let n=new Map(t.map(a=>[a.activityId,a.newParentId]));if(!Oo(e,n))return i;let r=new Map;for(let a of t){let o=new Map(r);if(o.set(a.activityId,a.newParentId),Oo(e,o)){i.add(a.activityId);continue}r.set(a.activityId,a.newParentId)}return i}async function Ly(t,e,i){let{adapter:n,scheduler:r,sector:a}=i;r.invalidateAllCaches();let o=n.getActivity(t.activityId);if(!o)return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};let s=W(t.parentId);if(!s&&!n.getActivity(t.parentId))return{ok:!1,reason:v.PARENT_NOT_FOUND};if(!s&&(t.parentId===t.activityId||n.isChildOf(t.parentId,t.activityId)))return{ok:!1,reason:v.CANNOT_MOVE_INTO_OWN_DESCENDANT};if(t.afterSiblingId!==void 0&&t.beforeSiblingId!==void 0)return{ok:!1,reason:v.ANCHOR_SIBLING_CONFLICT};let l=t.afterSiblingId??t.beforeSiblingId;if(l!==void 0){let I=n.getActivity(l);if(!I)return{ok:!1,reason:v.ANCHOR_SIBLING_NOT_FOUND};if((I.parentId===null?"0":String(I.parentId))!==t.parentId)return{ok:!1,reason:v.ANCHOR_SIBLING_WRONG_PARENT}}let c=o.parentId,d=re(c),u=String(t.parentId),p=d!==u;if(p){let I=new Map([[t.activityId,s?null:t.parentId]]);if(Oo(n,I))return{ok:!1,reason:v.HIERARCHY_CYCLE}}let f=new Set([t.activityId]);p?(d!=="0"&&f.add(d),u!=="0"&&f.add(u)):d!=="0"&&f.add(d);let y=await st(n,f),h=new Map;p&&n.setActivityField(t.activityId,B.PARENT,u);let m=Yn(n,t.parentId,t.afterSiblingId,t.beforeSiblingId);if(n.setActivityField(t.activityId,B.CORRELATIVE_ID,m),p){if(!s){let I=n.getActivity(t.parentId);if(I){let R=ii(I.type)&&n.getChildren(t.parentId).filter(O=>O!==t.activityId).length===0,k=vi({parentId:t.parentId,newChildId:t.activityId,isCurrentlyLeaf:R,promotionSource:Gn.REPARENT},i);if(k.applied)for(let[O,F]of k.removedLinks)h.set(O,F)}}if(d!=="0"){let I=n.getActivity(d);if(I){let R=n.getChildren(d),k=Si({parent:I,remainingChildIds:R.map(String),defaultDurationHours:a.hoursPerDay,promotionSnapshot:n.getPromotionSnapshot(d),computeEndDate:(O,F)=>n.calculateEndDate({startDate:O,durationHours:F,task:I}),idsRemoved:new Set([t.activityId]),dataDateCapability:i.dataDateCapability,hasCompleteSchedulingState:i.hasCompleteSchedulingState});if(k){n.setActivityFields(d,k.fields);let O=Le(d,n),F=O?n.getActivity(O)?.customId:null,U=typeof F=="string"&&F?F:null,$=i.customIdTracker.generateCustomIdForRestoredChild(U);n.setActivityField(d,B.CUSTOM_ID,$)}}}}p&&(d!=="0"&&jt(d,n),s||jt(t.parentId,n));let g=Nt(n);for(let I of g){if(f.add(I.activityId),y.has(I.activityId))continue;let R=n.getActivity(I.activityId);if(!R)continue;let k=et(R);I.before!==void 0&&(k.correlativeId=I.before),y.set(I.activityId,k)}let C=p&&d!=="0"?n.getChildren(d).map(String):[],{scheduledIds:b}=await nt({adapter:n,scheduler:r,sector:i.sector,defaultBaseCalendarId:i.defaultBaseCalendarId,runAutomaticP6Schedule:i.runAutomaticP6Schedule},{action:t,autoscheduleFrom:t.activityId,recomputeParentsFrom:[t.activityId,t.parentId,...C],now:i.now,options:e,recomputeParentProgress:p}),E=p?$n([t.activityId],n):[],P=Lo(h,n),N={name:fe.ACTIVITY_MOVE,properties:{activity_id:t.activityId,new_parent_id:t.parentId,after_sibling_id:t.afterSiblingId??null,before_sibling_id:t.beforeSiblingId??null,invalid_link_ids:[...new Set([...P,...E.map(String)])]}};return t.eventSource!==void 0&&(N.properties.event_source=t.eventSource),{ok:!0,changes:await J(n,{source:t,beforeSnap:y,touchedIds:f,scheduledIds:b,sirDetection:Yt.BEFORE_DIFF,links:Se(h),trackingEvents:[N],hoursPerDay:a.hoursPerDay}),...h.size>0?{__beforeLinks:h}:{}}}function No(t,e){let i=new Set(t),n=[],r=[],a=new Set,o=new Set(i),s=[...t].sort((d,u)=>{let p=e.getActivity(d),f=e.getActivity(u),y=p?wt(p):en,h=f?wt(f):en;return y-h});for(let d of s){if(!e.getActivity(d)){n.push({activityId:d,reason:v.ACTIVITY_NOT_FOUND}),o.delete(d);continue}if(Ii(d,a,e))continue;let p=Gd(d,o,e);if(p==null){n.push({activityId:d,reason:v.INDENT_NO_ELIGIBLE_SIBLING}),o.delete(d);continue}let f=e.getActivity(d)?.parentId,y=W(f)?"0":String(f);r.push({activityId:d,newParentId:p,oldParentId:y}),a.add(d)}let l=bo(r,e);for(let d of l)n.push({activityId:d,reason:v.HIERARCHY_CYCLE});let c=r.filter(d=>!l.has(d.activityId));return{moves:r,cyclicMoveIds:l,allowedMoves:c,failed:n}}async function Oy(t,e,i){let{adapter:n,scheduler:r,sector:a}=i;if(r.invalidateAllCaches(),t.activityIds.length===0)return{ok:!1,reason:v.ACTIVITY_IDS_EMPTY};let o=new Set,s=[],l=No(t.activityIds,n),c=[...l.failed];for(let P of l.moves)o.add(String(P.activityId)),o.add(String(P.newParentId)),P.oldParentId!=="0"&&o.add(String(P.oldParentId));let d=l.allowedMoves,u=await st(n,o);for(let{activityId:P,newParentId:N}of d)n.setActivityField(P,B.PARENT,N),n.setActivityField(P,B.CORRELATIVE_ID,ry),s.push(P);let p=new Set,f=new Map;for(let{activityId:P,newParentId:N}of d){if(p.has(N))continue;p.add(N);let I=n.getActivity(N);if(!I)continue;let R=I.customId,k=ii(I.type)&&n.getChildren(N).filter(U=>!s.includes(U)).length===0,O=I.hasNewActivities&&I.newActivityIds.some(U=>String(U)===String(P)),F=vi({parentId:N,newChildId:P,isCurrentlyLeaf:k,promotionSource:Gn.REPARENT},i);if(F.applied){for(let[U,$]of F.removedLinks)f.set(U,$);O||(n.setActivityField(N,B.HAS_NEW_ACTIVITIES,!1),n.setActivityField(N,B.NEW_ACTIVITIES_ARRAY,[]))}n.setActivityField(N,B.CONSTRAINT_TYPE,_.ASAP),n.setActivityField(N,B.CONSTRAINT_DATE,null),n.setActivityField(N,B.CUSTOM_ID,null),F.applied||Nf(R,i.customIdTracker)}let y=new Set;for(let P of d)P.oldParentId!=="0"&&y.add(P.oldParentId),y.add(P.newParentId);for(let P of y)jt(P,n);let h=Nt(n);for(let P of h){if(o.add(P.activityId),u.has(P.activityId))continue;let N=n.getActivity(P.activityId);if(!N)continue;let I=et(N);P.before!==void 0&&(I.correlativeId=P.before),u.set(P.activityId,I)}let m=Lo(f,n),g=$n(s,n);for(let P of g){let N=n.getLink(P);N&&(f.set(P,{...N}),n.removeLink(P))}let{scheduledIds:C}=await nt({adapter:n,scheduler:r,sector:i.sector,defaultBaseCalendarId:i.defaultBaseCalendarId,runAutomaticP6Schedule:i.runAutomaticP6Schedule},{action:t,autoscheduleFrom:null,recomputeParentsFrom:s,now:i.now,options:e}),b={name:fe.ACTIVITY_INDENT,properties:{activity_ids:s,failed:c.map(P=>({activity_id:P.activityId,reason:P.reason})),invalid_link_ids:[...new Set([...m,...g.map(String)])]}};t.eventSource!==void 0&&(b.properties.event_source=t.eventSource);let E=await J(n,{source:t,beforeSnap:u,touchedIds:o,scheduledIds:C,links:Se(f),trackingEvents:[b],hoursPerDay:a.hoursPerDay});return{ok:!0,activityVerdicts:t.activityIds.map(P=>{let N=c.find(I=>String(I.activityId)===String(P));return N?{activityId:String(P),ok:!1,reason:N.reason}:{activityId:String(P),ok:!0}}),changes:E,__beforeLinks:f}}async function by(t,e,i){let{adapter:n,scheduler:r,sector:a}=i;if(r.invalidateAllCaches(),t.activityIds.length===0)return{ok:!1,reason:v.ACTIVITY_IDS_EMPTY};let o=new Set(t.activityIds),s=new Map,l=new Map;for(let I of t.activityIds){let R=I;n.getActivity(R)&&(s.set(R,js(R,n)),l.set(R,ay(R,o,n)))}let c=new Set,d=[],u=[],p=new Set,f=[],y=new Set,h=[...t.activityIds].sort((I,R)=>{let k=n.getActivity(I),O=n.getActivity(R),F=k?wt(k):en,U=O?wt(O):en;return F-U});for(let I of h){let R=I,k=n.getActivity(R);if(!k){d.push({activityId:R,reason:v.ACTIVITY_NOT_FOUND});continue}if(Ii(R,y,n))continue;let O=k.parentId;if(W(O)){d.push({activityId:R,reason:v.OUTDENT_ROOT_LEVEL_NOT_EDITABLE});continue}let F=String(O),U=n.getActivity(F);if(!U){d.push({activityId:R,reason:v.ACTIVITY_NOT_FOUND});continue}let $=U.parentId;if(W($)){d.push({activityId:R,reason:v.OUTDENT_ROOT_LEVEL_NOT_EDITABLE});continue}let ut=String($),q=js(F,n)+1,At=l.get(R);if(At!=null&&o.has(At)){let Pt=s.get(At)??-1,ie=s.get(R)??-1;Pt>=0&&ie>=0&&(q+=ie-Pt)}f.push({activityId:R,grandparentKey:ut,oldParentKey:F,targetIndexInGrandparent:q}),y.add(R),c.add(String(R)),c.add(String(F)),ut!=="0"&&c.add(String(ut)),p.add(F)}let m=bo(f.map(I=>({activityId:I.activityId,newParentId:I.grandparentKey})),n);for(let I of m)d.push({activityId:I,reason:v.HIERARCHY_CYCLE});let g=f.filter(I=>!m.has(I.activityId)),C=await st(n,c);for(let I of g){n.setActivityField(I.activityId,B.PARENT,I.grandparentKey);let R=oy(n,I.grandparentKey,I.targetIndexInGrandparent,I.activityId);n.setActivityField(I.activityId,B.CORRELATIVE_ID,R),u.push(I.activityId)}for(let I of p){let R=n.getActivity(I);if(!R)continue;let k=n.getChildren(I),O=Si({parent:R,remainingChildIds:k.map(String),defaultDurationHours:a.hoursPerDay,promotionSnapshot:n.getPromotionSnapshot(I),computeEndDate:(q,At)=>n.calculateEndDate({startDate:q,durationHours:At,task:R}),idsRemoved:new Set(g.filter(q=>q.oldParentKey===I).map(q=>q.activityId)),dataDateCapability:i.dataDateCapability,hasCompleteSchedulingState:i.hasCompleteSchedulingState});if(!O){Ya(I,n);continue}n.setActivityFields(I,O.fields);let F=Le(I,n),U=F?n.getActivity(F)?.customId:null,$=typeof U=="string"&&U?U:null,ut=i.customIdTracker.generateCustomIdForRestoredChild($);n.setActivityField(I,B.CUSTOM_ID,ut)}let b=new Set;for(let I of p)b.add(String(I));for(let I of g)I.grandparentKey!=="0"&&b.add(String(I.grandparentKey));for(let I of b)jt(I,n);let E=Nt(n);for(let I of E){if(c.add(I.activityId),C.has(I.activityId))continue;let R=n.getActivity(I.activityId);if(!R)continue;let k=et(R);I.before!==void 0&&(k.correlativeId=I.before),C.set(I.activityId,k)}let{scheduledIds:P}=await nt({adapter:n,scheduler:r,sector:i.sector,defaultBaseCalendarId:i.defaultBaseCalendarId,runAutomaticP6Schedule:i.runAutomaticP6Schedule},{action:t,autoscheduleFrom:u.length>0?Dt.ROOTS:null,recomputeParentsFrom:u,now:i.now,options:e}),N={name:fe.ACTIVITY_OUTDENT,properties:{activity_ids:u.map(String),failed:d.map(I=>({activity_id:String(I.activityId),reason:I.reason}))}};return t.eventSource!==void 0&&(N.properties.event_source=t.eventSource),{ok:!0,activityVerdicts:t.activityIds.map(I=>{let R=d.find(k=>String(k.activityId)===String(I));return R?{activityId:String(I),ok:!1,reason:R.reason}:{activityId:String(I),ok:!0}}),changes:await J(n,{source:t,beforeSnap:C,touchedIds:c,scheduledIds:P,trackingEvents:[N],hoursPerDay:a.hoursPerDay})}}async function Ny(t,e,i){let{adapter:n,scheduler:r,sector:a}=i,o=n.getActivity(t.activityId);if(!o)return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};if(!fr(t.type))return{ok:!1,reason:v.INVALID_VALUE};let s=n.getChildren(t.activityId),l=t.type===L.PROJECT;if(l!==s.length>0)return{ok:!1,reason:v.INVALID_VALUE};let c=new Set(n.getAllIds()),d=await st(n,c);r.invalidateAllCaches();let u=l&&o.type!==L.PROJECT?vi({parentId:t.activityId,newChildId:s[0],isCurrentlyLeaf:!0},i).removedLinks:new Map;!l&&o.type===L.PROJECT&&k_(t.activityId,i),t.type!==L.PROJECT?(L_(t.activityId,t.type,i),O_(t.activityId,i)):jt(t.activityId,n);let p=b_(t.activityId,i);for(let[y,h]of u)p.set(y,h);let{scheduledIds:f}=await nt({adapter:n,scheduler:r,sector:a,defaultBaseCalendarId:i.defaultBaseCalendarId,runAutomaticP6Schedule:i.runAutomaticP6Schedule},{action:t,autoscheduleFrom:t.activityId,recomputeParentsFrom:[t.activityId],recomputeParentProgress:!0,now:i.now,options:e});return{ok:!0,changes:await J(n,{source:t,beforeSnap:d,touchedIds:c,scheduledIds:f,sirDetection:Yt.BEFORE_DIFF,links:Se(p),hoursPerDay:a.hoursPerDay}),__beforeLinks:new Map(p)}}function k_(t,e){let i=e.adapter.getActivity(t);if(!i)return;let n=Si({parent:i,remainingChildIds:[],defaultDurationHours:e.sector.hoursPerDay,promotionSnapshot:e.adapter.getPromotionSnapshot(t),computeEndDate:(r,a)=>e.adapter.calculateEndDate({startDate:r,durationHours:a,task:i}),dataDateCapability:e.dataDateCapability,hasCompleteSchedulingState:e.hasCompleteSchedulingState});n&&e.adapter.setActivityFields(t,n.fields)}function L_(t,e,i){let n=i.adapter.getActivity(t);if(!n)return;i.adapter.setActivityField(t,B.TYPE,e);let r=e===L.MILESTONE?0:n.durationHours===0?i.sector.hoursPerDay:n.durationHours;r!==n.durationHours&&i.adapter.setActivityField(t,B.DURATION_HOURS,r);let a=i.adapter.getActivity(t);if(!a)return;let o=i.adapter.calculateEndDate({startDate:a.startDate,durationHours:r,task:a});i.adapter.setActivityField(t,B.END_DATE,o)}function O_(t,e){if(e.adapter.getActivity(t)?.customId)return;let n=Le(t,e.adapter),r=n?e.adapter.getActivity(n)?.customId:null,a=e.customIdTracker.generateCustomIdForRestoredChild(r||null);e.adapter.setActivityField(t,B.CUSTOM_ID,a)}function b_(t,e){let i=new Map;for(let n of $n([t],e.adapter)){let r=e.adapter.getLink(n);r&&(i.set(String(n),{...r}),e.adapter.removeLink(n))}return i}async function Fy(t,e,i){let{adapter:n,ctx:r,scheduler:a,sector:o}=i;if(t.newValue!==0&&t.newValue!==100)return{ok:!1,reason:v.INVALID_PROGRESS_VALUE};let s=r.activityReader.getActivity(t.activityId);if(!s)return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};let l=Qt(T.PROGRESS);if(!l)throw new Error("[ScheduleCore] progressPipeline not registered \u2014 cannot dispatch activity-set-progress");let c=l.canEdit(s,r.hierarchy);if(!c.allowed&&!w_(t,c))return{ok:!1,reason:c.reason,...c.alertKey?{alertKey:c.alertKey}:{}};let d=l.transform(s,t.newValue,r,t.newValue),u=Wf(s,t.newValue,c.allowed?d:null,i,e.confirmations);if(u!==null&&!u.accepted)return x_(u);let p=u===null?d:u.changes,f=u===null||c.allowed,y=yi(t.activityId,p),h=await st(n,y);hi(n,t.activityId,p),f&&Lu(t.activityId,t.newValue,n),si(t.activityId,p.postProcessors??[],n);let m=N_(t.activityId,p,i),{scheduledIds:g}=await nt({adapter:n,scheduler:a,sector:i.sector,defaultBaseCalendarId:i.defaultBaseCalendarId,runAutomaticP6Schedule:i.runAutomaticP6Schedule},{action:t,autoscheduleFrom:m,recomputeParentsFrom:[],collectDirty:C=>oo(t.activityId,y,C),now:i.now,options:e});return{ok:!0,changes:await J(n,{source:t,beforeSnap:h,touchedIds:y,scheduledIds:g,trackingEvents:F_(p),hoursPerDay:o.hoursPerDay})}}function N_(t,e,i){return e.needsAutoSchedule?i.ctx.hierarchy.hasChildren(t)?Dt.ROOTS:t:null}function F_(t){return(t.trackingEvents??[]).map(e=>({name:e.name,properties:e.properties??{}}))}function w_(t,e){return t.origin===eo.ACTION_BUTTON&&(e.reason===Ae.HAS_LOOKAHEAD_TASKS||e.reason===Ae.SUMMARY)}function x_(t){return{ok:!1,reason:t.reason,...t.alertKey?{alertKey:t.alertKey}:{},...t.confirmation?{confirmation:t.confirmation}:{}}}function M_(t){return t===T.START_DATE||t===T.END_DATE}async function wy(t,e,i){let n=U_(t,i);if(n!==null)return{ok:!1,reason:n};let{adapter:r,scheduler:a,sector:o}=i,s=[],l=new Map,c=new Set,d=[],u=[],p=[],f=!1;for(let h of t.edits){let m=H_(h,i,e);if(s.push(m.verdict),!m.verdict.ok||!m.changes)continue;let g=yi(h.activityId,m.changes);B_(l,g,i);for(let P of g)c.add(P);let C=Bn(r,h.activityId),b=ro(r,String(h.activityId));hi(r,h.activityId,m.changes),si(h.activityId,m.changes.postProcessors??[],r,b),u.push(...jn(C,r,h.activityId)),f||=!!m.changes.needsAutoSchedule;for(let P of m.changes.trackingEvents??[])d.push({name:P.name,properties:P.properties??{}});let E=Gi(h.activityId,m.changes.constraintWarning);E&&p.push(E)}let{scheduledIds:y}=await nt({adapter:r,scheduler:a,sector:i.sector,defaultBaseCalendarId:i.defaultBaseCalendarId,runAutomaticP6Schedule:i.runAutomaticP6Schedule},{action:t,autoscheduleFrom:f?Dt.ROOTS:null,recomputeParentsFrom:c,now:i.now,options:e});return{ok:!0,verdicts:s,changes:await J(r,{source:t,beforeSnap:l,touchedIds:c,scheduledIds:y,sirDetection:Yt.BEFORE_DIFF,links:u,trackingEvents:d,warnings:p,hoursPerDay:o.hoursPerDay})}}function U_(t,e){return t.edits.some(r=>!M_(r.column))?v.INVALID_VALUE:t.edits.some(r=>e.ctx.activityReader.getActivity(r.activityId)===null)?v.ACTIVITY_NOT_FOUND:null}function H_(t,e,i){let{ctx:n}=e,r=t.activityId,a=Qt(t.column);if(!a)throw new Error(`[ScheduleCore] no pipeline registered for column "${t.column}"`);let o=n.activityReader.getActivity(t.activityId);if(!o)throw new Error(`[ScheduleCore] activity "${t.activityId}" not found`);let s=Kn(a,o,e,t.column);if(!s.allowed)return{verdict:{activityId:r,ok:!1,reason:s.reason??v.CANNOT_EDIT,...s.alertKey?{alertKey:s.alertKey}:{}},changes:null};let l=a.parseInput(t.newValue,o,n);if(!l.ok)return{verdict:{activityId:r,ok:!1,reason:l.reason??v.PARSE_ERROR},changes:null};let c=Reflect.get(o,a.targetField),d=a.validate(o,c,l.value,n);if(!d.valid)return{verdict:{activityId:r,ok:!1,reason:d.reason??v.INVALID,...d.notification?.messageKey?{alertKey:d.notification.messageKey}:{}},changes:null};let u=a.transform(o,l.value,n,l.raw),p=tn(o,u,e,t.column,i.confirmations);return p.accepted?{verdict:{activityId:r,ok:!0},changes:p.changes}:{verdict:{activityId:r,ok:!1,reason:p.reason,...p.alertKey?{alertKey:p.alertKey}:{},...p.confirmation?{confirmation:p.confirmation}:{}},changes:null}}function B_(t,e,i){let n=new Set;for(let r of e)t.has(r)||n.add(r);if(n.size!==0)for(let r of n){let a=i.adapter.getActivity(r);a&&t.set(r,et(a))}}var oc=T.CUSTOM_ID,j_="sir-apply";async function Fo(t,e,i){let{adapter:n,scheduler:r,sector:a}=i;t.edits.some(k=>k.column===T.DURATION)&&r.invalidateExpandedLinksCache();let s=[],l=new Map,c=new Map,d=new Set,u=new Set,p=[],f=[],y=[],h=new Set,m=new Map,g=new Map,C=!1,b=jf(t.edits,i);for(let k of Bf(t)){let O=k[0],F=b.get(String(O.activityId));if(F!==void 0&&(O.column===T.START_DATE||O.column===T.END_DATE)){s.push({activityId:O.activityId,ok:!1,reason:F.reason,...F.alertKey?{alertKey:F.alertKey}:{}});continue}let $=q_(k,i,t.eventSource,e);for(let yt of k)s.push($.verdict);if(!$.verdict.ok||!$.changes)continue;let ut=Gi(O.activityId,$.changes.constraintWarning);ut&&y.push(ut);let q=yi(O.activityId,$.changes);Z_(l,q,i);for(let yt of q)u.add(yt);X_(c,O,l),Ao(O.column)&&d.add(String(O.activityId)),K_(m,O);let At=Bn(n,O.activityId),Pt=ro(n,String(O.activityId)),ie=z_(O,i),Gt=$.changes;hi(n,O.activityId,Gt),si(O.activityId,$.changes.postProcessors??[],n,Pt),W_(h,y,O),V_(g,O,n.getActivity(O.activityId)),J_(O,ie,i),f.push(...jn(At,n,O.activityId)),C||=!!$.changes.needsAutoSchedule;for(let yt of $.changes.trackingEvents??[])p.push({name:yt.name,properties:yt.properties??{}})}let E=t.eventSource===j_?s.find(k=>!k.ok&&k.reason!==Wi.UNCHANGED):void 0;if(E&&!E.ok)return{ok:!1,reason:E.reason??v.INVALID,...E.alertKey?{alertKey:E.alertKey}:{}};let P={action:t,autoscheduleFrom:C?Dt.ROOTS:null,recomputeParentsFrom:u,now:i.now,options:e},N=Y_(m,g,l,y,h,i),I=c.size>0,{scheduledIds:R}=await(I?So({adapter:n,scheduler:r,sector:a,defaultBaseCalendarId:i.defaultBaseCalendarId,runAutomaticP6Schedule:i.runAutomaticP6Schedule},{postMutationArgs:P,revertTargets:[...c].filter(([k])=>!d.has(k)).map(([k,O])=>({activityId:k,priorConstraintDate:O})),revert:(k,O)=>Io(k,O,n,i.ctx.calendars)}):nt({adapter:n,scheduler:r,sector:a,defaultBaseCalendarId:i.defaultBaseCalendarId,runAutomaticP6Schedule:i.runAutomaticP6Schedule},P));return{ok:!0,verdicts:s,changes:await J(n,{source:t,beforeSnap:l,touchedIds:u,scheduledIds:R,sirDetection:Yt.BEFORE_DIFF,links:f,trackingEvents:p,warnings:N,hoursPerDay:a.hoursPerDay})}}function W_(t,e,i){if(!Un(i.column))return;let n=String(i.activityId);for(let r of e)String(r.activityId)===n&&t.add(r)}function V_(t,e,i){!Un(e.column)||!i||t.set(String(e.activityId),{constraintType:i.constraintType,constraintDate:i.constraintDate?new Date(i.constraintDate.getTime()):null})}function K_(t,e){if(e.column!==T.START_DATE&&e.column!==T.END_DATE)return;let i=String(e.activityId),n=t.get(i)??new Set;n.add(e.column),t.set(i,n)}function Y_(t,e,i,n,r,a){let o=new Set,s=[],l=new Set;for(let[c,d]of t){if(!d.has(T.START_DATE)||!d.has(T.END_DATE))continue;let u=e.get(c);if(u){a.adapter.setActivityFields(c,u);for(let m of r)String(m.activityId)===c&&l.add(m);continue}let p=i.get(c),f=a.adapter.getActivity(c);if(!p?.constraintType||!p.constraintDate||!f)continue;let y=Oi(p.constraintType,f.startDate,f.endDate),h=G_(p.constraintType,p.constraintDate,y);if(o.add(c),h){a.adapter.setActivityField(c,"constraintType",_.SNET),a.adapter.setActivityField(c,"constraintDate",new Date(f.startDate.getTime()));let m=Gi(c,da(p.constraintType,p.constraintDate,y));m&&s.push(m);continue}a.adapter.setActivityField(c,"constraintType",p.constraintType),a.adapter.setActivityField(c,"constraintDate",p.constraintDate)}return[...n.filter(c=>!l.has(c)&&!o.has(String(c.activityId))),...s]}function G_(t,e,i){return t===_.MSO||t===_.MFO?e.getTime()!==i.getTime():ca(t,e,i).violated}function $_(t,e,i){let{ctx:n}=e,r=t.activityId,a=Qt(t.column);if(!a)return{verdict:{activityId:r,ok:!1,reason:v.NO_PIPELINE_FOR_COLUMN},changes:null};let o=n.activityReader.getActivity(t.activityId);if(!o)return{verdict:{activityId:r,ok:!1,reason:v.ACTIVITY_NOT_FOUND},changes:null};let s=Kn(a,o,e,t.column,{eventSource:i,newValue:t.newValue});if(!s.allowed)return{verdict:{activityId:r,ok:!1,reason:s.reason??v.CANNOT_EDIT,...s.alertKey?{alertKey:s.alertKey}:{}},changes:null};let l=a.parseInput(t.newValue,o,n);if(!l.ok)return{verdict:{activityId:r,ok:!1,reason:l.reason??v.PARSE_ERROR},changes:null};let c=Wn(o,a.targetField),d=a.validate(o,c,l.value,n);if(!d.valid)return{verdict:{activityId:r,ok:!1,reason:d.reason??v.INVALID,...d.notification?.messageKey?{alertKey:d.notification.messageKey}:{}},changes:null};if(t.column===oc&&l.value!==null){let p=e.adapter.getActivity(t.activityId),f=p?p.customId:null,y=typeof f=="string"?f:null;if(e.customIdTracker.isCustomIdInUse(String(l.value),y))return{verdict:{activityId:r,ok:!1,reason:v.CUSTOM_ID_DUPLICATE},changes:null}}let u=a.transform(o,l.value,n,l.raw);return{verdict:{activityId:r,ok:!0},changes:u}}function q_(t,e,i,n){let r=t[0],a=t.map(d=>$_(d,e,i)),o=a.find(d=>!d.verdict.ok);if(o)return o;let s=a[0].changes,l=Hf(s,a[1]?.changes),c=tn(e.ctx.activityReader.getActivity(r.activityId),l,e,r.column,n.confirmations);return c.accepted?{verdict:{activityId:r.activityId,ok:!0},changes:c.changes}:{verdict:{activityId:r.activityId,ok:!1,reason:c.reason,...c.alertKey?{alertKey:c.alertKey}:{},...c.confirmation?{confirmation:c.confirmation}:{}},changes:null}}function z_(t,e){if(t.column!==oc)return null;let i=e.adapter.getActivity(t.activityId),n=i?i.customId:null;return typeof n=="string"?n:null}function J_(t,e,i){if(t.column!==oc)return;let n=i.adapter.getActivity(t.activityId),r=n?n.customId:null,a=typeof r=="string"?r:null;e!==a&&i.customIdTracker.trackCustomIdChange(e,a)}function X_(t,e,i){if(!Un(e.column))return;let n=String(e.activityId);if(t.has(n))return;let r=i.get(n);r&&t.set(n,r.constraintDate??null)}function Z_(t,e,i){let n=new Set;for(let r of e)t.has(r)||n.add(r);if(n.size!==0)for(let r of n){let a=i.adapter.getActivity(r);a&&t.set(r,et(a))}}var Ht={INVALID_BASELINE_POINT:"invalid_baseline_point",UNKNOWN_CONSTRAINT:"unknown_constraint",PROGRESS_OUT_OF_RANGE:"progress_out_of_range",ORPHAN_ACTIVITY:"orphan_activity",INVALID_LINK:"invalid_link",DUPLICATE_LINK:"duplicate_link"},Q_=[Ht.INVALID_BASELINE_POINT,Ht.UNKNOWN_CONSTRAINT,Ht.PROGRESS_OUT_OF_RANGE,Ht.ORPHAN_ACTIVITY,Ht.INVALID_LINK,Ht.DUPLICATE_LINK],qn=()=>{};function xy(){let t=new Map,e=new Map;return{record:(r,a)=>{t.set(r,(t.get(r)??0)+1);let o=e.get(r)??[];o.length<10&&!o.includes(a)&&(o.push(a),e.set(r,o))},snapshot:()=>Object.freeze(Q_.flatMap(r=>{let a=t.get(r);return a===void 0?[]:[Object.freeze({code:r,count:a,sampleIds:Object.freeze([...e.get(r)??[]])})]}))}}function My(t){return typeof t=="string"&&t.length>0?je(t):t instanceof Date?t:null}function sc(t){let e=typeof t=="number"?t:typeof t=="string"&&t.trim()!==""?Number(t):Number.NaN;return!Number.isFinite(e)||e<0?null:e}function wo(t,e,i,n=!1){let r=sc(t.duration),a=sc(t.cost),o=sc(t.hh_work);if(r===null||a===null||o===null)return i&&i.record(Ht.INVALID_BASELINE_POINT,i.sampleId),e.warn(`[baseline] dropping point with non-finite/negative magnitude \u2014 duration=${JSON.stringify(t.duration)}, cost=${JSON.stringify(t.cost)}, hh_work=${JSON.stringify(t.hh_work)}`),null;let s=My(t.start_date),l=My(t.end_date),c=n&&r===0&&s!==null&&l!==null&&l<s;return c&&e.warn("[baseline] normalizing inverted zero-duration milestone to one instant"),{startDate:s,endDate:c?s:l,durationDays:r,cost:a,workHours:o,versionId:typeof t.sectorbaselineversionId=="number"?t.sectorbaselineversionId:null,isActiveVersion:!!t.sectorbaselineversion?.active,isVisibleVersion:!!t.sectorbaselineversion?.visible,baseCalendarId:t.baseCalendarId!=null?String(t.baseCalendarId):null,hoursPerDay:typeof t.hoursPerDay=="number"?t.hoursPerDay:null,hoursPerWeek:typeof t.hoursPerWeek=="number"?t.hoursPerWeek:null}}function Uy(t,e,i,n=qn){let r=new Map;t.forEachActivity((s,l)=>{let c=s.proplannerId;typeof c=="number"&&r.set(c,l)});let a=new Map;for(let s of e){let l=s.activityId;if(typeof l!="number"){n(Ht.INVALID_BASELINE_POINT,String(l??"unknown"));continue}let c=r.get(l);if(c===void 0){n(Ht.INVALID_BASELINE_POINT,String(l));continue}let d=a.get(c);d?d.push(s):a.set(c,[s])}let o=[];for(let[s,l]of a){let c=t.getActivity(s)?.type===L.MILESTONE;t.setActivityField(s,"baselinePoints",l.map(d=>wo(d,i,{record:n,sampleId:s},c)).filter(d=>d!==null)),o.push(s)}return t.forEachActivity((s,l)=>{if(a.has(l))return;let c=s.baselinePoints;Array.isArray(c)&&c.length>0&&(t.setActivityField(l,"baselinePoints",[]),o.push(l))}),o}function tE(t){let e=Tt(t);return e?{startDate:e.startDate,endDate:e.endDate,durationDays:e.durationDays,cost:e.cost,workHours:e.workHours}:null}function Hy(t){let e=[];return t.forEachActivity((i,n)=>{let r=tE(i);if(!r){i.baselineSnapshot!==null&&(t.setActivityField(n,"baselineSnapshot",null),e.push(n));return}t.setActivityField(n,"baselineSnapshot",r),e.push(n)}),e}function xo(t,e,i,n,r=null,a=qn){let o=new Set;for(let s of Uy(t,e,n,a))o.add(s);if(i)for(let s of wn(t,i,r))o.add(s);for(let s of Hy(t))o.add(s);for(let s of xn(t))o.add(s);return[...o]}function Mo(t,e){let i=new Map;e.forEachActivity((n,r)=>{e.setActivityField(r,T.PONDERATOR,0)}),e.forEachActivity((n,r)=>{e.getChildren(r).length>0&&go(String(r),t,e,i)})}function Uo(t,e){Mo(e,t.adapter),Cr(t.adapter,e),t.now&&(wn(t.adapter,t.now,t.defaultBaseCalendarId??null),$i(t.adapter,t.now)),xn(t.adapter),t.now&&We(t.adapter,t.sector.statusCriteria)}function By(t){return JSON.stringify(t.adapter.getAllIds().map(e=>{let i=t.adapter.getActivity(e)?.baselinePoints.find(n=>n.isActiveVersion);return i?[String(e),i.versionId,i.startDate?.getTime()??null,i.endDate?.getTime()??null,i.durationDays,i.cost,i.workHours,i.baseCalendarId,i.hoursPerDay,i.hoursPerWeek]:[String(e),null]}))}async function jy(t,e){let i=await st(e.adapter,new Set(e.adapter.getAllIds())),n=By(e),r=xo(e.adapter,t.points,e.now,e.reporter,e.defaultBaseCalendarId??null,void 0);return qi(e.adapter,e.sector.hoursPerDay),By(e)!==n&&Uo(e,e.sector.activityCreter??ct.DURATION),{ok:!0,changes:await J(e.adapter,{source:t,beforeSnap:i,touchedIds:r,scheduledIds:[],hoursPerDay:e.sector.hoursPerDay})}}function eE(t){return Object.values(ct).includes(t)}async function Wy(t,e){if(!eE(t.criterion))return{ok:!1,reason:v.INVALID_VALUE};let i=new Set(e.adapter.getAllIds()),n=await st(e.adapter,i);return Uo(e,t.criterion),e.sector.activityCreter=t.criterion,{ok:!0,changes:await J(e.adapter,{source:t,beforeSnap:n,touchedIds:i,scheduledIds:[],hoursPerDay:e.sector.hoursPerDay})}}async function Vy(t,e){let i=so(t.criteria),n=new Set(e.adapter.getAllIds()),r=await st(e.adapter,n),a=We(e.adapter,i);return e.sector.statusCriteria=i,{ok:!0,changes:await J(e.adapter,{source:t,beforeSnap:r,touchedIds:a,scheduledIds:[],hoursPerDay:e.sector.hoursPerDay})}}async function Yy(t,e,i){let n=new Map,r=new Set;for(let o of i.adapter.getAllActivities()){if(!iE(o,i))continue;let s=i.ctx.calendars.getCalendar(o.calendarId);if(!s)continue;let l=s.isWorkTime(o.startDate,dt.HOUR)?nE(o.startDate):o.startDate,c=s.getClosestWorkTime({date:l,direction:z.FUTURE,unit:dt.HOUR}),d=s.calculateEndDate(c,o.durationHours);if(Ky(c,o.startDate)&&Ky(d,o.endDate))continue;let u=String(o.id);n.set(u,et(o)),r.add(u),i.adapter.setActivityFields(u,{startDate:c,endDate:d})}let{scheduledIds:a}=await nt({adapter:i.adapter,scheduler:i.scheduler,sector:i.sector,defaultBaseCalendarId:i.defaultBaseCalendarId,runAutomaticP6Schedule:i.runAutomaticP6Schedule},{action:t,autoscheduleFrom:Dt.ROOTS,recomputeParentsFrom:r,now:i.now,options:e});return{ok:!0,changes:await J(i.adapter,{source:t,beforeSnap:n,touchedIds:r,scheduledIds:a,hoursPerDay:i.sector.hoursPerDay})}}function iE(t,e){return!he(t.type,e.adapter.hasChildren(t.id))}function Ky(t,e){return t.getTime()===e.getTime()}function nE(t){return new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()))}var Gy=["name","description","type","startDate","durationHours","constraintType","constraintDate","calendarId","cost","hasCustomPonderator","subcontractId","responsableIds","tagIds"];function Ho(t){let e={};for(let i of Gy)Object.assign(e,{[i]:S(t[i])});return e}function rE(t,e){let i=[],n=r=>{e.has(String(r))&&i.push(r);for(let a of t.getChildren(r))n(a)};for(let r of t.getRootIds())n(r);return i}function qy(t,e){let i=new Set(e.adapter.checkedIds().map(String));if(i.size===0)return{ok:!1,reason:v.NO_ACTIVITY_SELECTION};let n=rE(e.adapter,i);e.clipboard.value={activities:n.map(a=>{let o=e.adapter.getActivity(a);if(o===null)throw new Error(`Selected activity ${a} is missing`);return{originalId:a,originalParentId:o.parentId??"0",overrides:Ho(o)}}),links:e.adapter.getAllLinks().filter(a=>i.has(String(a.source))&&i.has(String(a.target))).map(a=>S(a))};let r=fa({kind:A.SELECTION_REPLACE,activityIds:[]},{adapter:e.adapter});return r.ok?{...r,changes:{...r.changes,source:t}}:r}function zy(t){return{ok:!0,changes:{source:t,activities:[],links:[],calendars:[],trackingEvents:[]}}}function Jy(t,e){return e.value=null,zy(t)}function $y(t,e){if(t===void 0||e===void 0)return t;let i=new Set(e);return t.filter(n=>i.has(n))}function aE(t,e,i){let n=S(t);n.calendarId!=null&&!e.calendars.has(n.calendarId)&&delete n.calendarId,i?.subcontractIds!==void 0&&n.subcontractId!=null&&!i.subcontractIds.includes(n.subcontractId)&&(n.subcontractId=null);let o=$y(n.responsableIds,i?.responsableIds);o!==void 0&&(n.responsableIds=[...o]);let s=$y(n.tagIds,i?.tagIds);return s!==void 0&&(n.tagIds=[...s]),n}function oE(t){let e=new Set(t.activities.map(i=>String(i.originalId)));return t.links.some(i=>!e.has(String(i.source))||!e.has(String(i.target)))}function Xy(t,e){let{snapshot:i,references:n}=t;return i.activities.length===0?{ok:!1,reason:v.CLIPBOARD_EMPTY}:oE(i)?{ok:!1,reason:v.CLIPBOARD_SNAPSHOT_INVALID}:(e.clipboard.value={activities:i.activities.map(r=>({originalId:r.originalId,originalParentId:r.originalParentId,overrides:aE(r.overrides,e,n)})),links:i.links.map(r=>S(r))},zy(t))}function sE(t,e){let i=e.getActivity(t);return i?i.parentId==null?e.getRootIds().length===1?{ok:!0,parentId:i.id,beforeSiblingId:e.getChildren(i.id)[0]}:{ok:!0,parentId:"0",afterSiblingId:t}:e.hasChildren(i.id)?{ok:!0,parentId:i.id,beforeSiblingId:e.getChildren(i.id)[0]}:{ok:!0,parentId:String(i.parentId),afterSiblingId:t}:{ok:!1,reason:v.ANCHOR_SIBLING_NOT_FOUND}}var Zy=()=>({ok:!1,reason:v.ACTIVITY_PASTE_INVARIANT_FAILED});async function Qy(t,e,i){let n=i.activityClipboard.value;if(n===null)return{ok:!1,reason:v.CLIPBOARD_EMPTY};let r=sE(t.destination.afterSiblingId,i.adapter);if(!r.ok)return r;let a=await st(i.adapter,new Set),o=new Set,s=new Map,l=[],c;for(let h of n.activities){let m=s.get(h.originalParentId),g=m===void 0?c??r.afterSiblingId:void 0,C=m===void 0&&g===void 0?r.beforeSiblingId:void 0,b=await Ci({kind:A.ACTIVITY_CREATE,parentId:m??r.parentId,...g===void 0?{}:{afterSiblingId:g},...C===void 0?{}:{beforeSiblingId:C},overrides:S(h.overrides),eventSource:t.eventSource},i,{skipCorrelativeRecompute:!0,skipBeforeSnap:!0,customIdReferenceId:t.destination.afterSiblingId});if(!b.ok)return b;s.set(h.originalId,b.newId),l.push(b.newId),m===void 0&&(c=b.newId)}let d=Nt(i.adapter),u=new Set(l.map(String));mi(i.adapter,d,u,a,o);for(let h of l)o.add(String(h));let p=[];for(let h of n.links){let m=s.get(h.source),g=s.get(h.target);if(m===void 0||g===void 0)return Zy();let C={kind:vt.CREATE,source:m,target:g,type:h.type,lag:h.lag},b=Re(C,{port:i.adapter,newLinkId:i.linkIdGen.next});if(!b.applied)return Zy();p.push({op:C,finalLinkId:b.linkId,rejected:null})}let{scheduledIds:f}=await nt({adapter:i.adapter,scheduler:i.scheduler,sector:i.sector,defaultBaseCalendarId:i.defaultBaseCalendarId,runAutomaticP6Schedule:i.runAutomaticP6Schedule},{action:t,autoscheduleFrom:l[0]??null,recomputeParentsFrom:l,now:i.now,options:e}),y=Ai(p,new Map,i.adapter);return{ok:!0,changes:await J(i.adapter,{source:t,beforeSnap:a,touchedIds:o,scheduledIds:f,links:y,hoursPerDay:i.sector.hoursPerDay})}}var lE=200,th={skipCorrelativeRecompute:!0,skipBeforeSnap:!0,skipCacheInvalidation:!0,skipRollupCascades:!0};async function eh(t,e,i){let n=cE(t.activityIds,i.adapter);if(!n.ok)return n;if(dE(n.runs,i.adapter))return{ok:!1,reason:v.PARENT_FROZEN_BY_SIR};i.scheduler.invalidateAllCaches();let a=await st(i.adapter,new Set),o={originalToNew:new Map,createdIds:[],createdParentIds:[]};for(let p of n.runs){let f=p.originals.at(-1);if(!f)continue;let y=f.id;for(let h of p.originals)y=await yE(h,p.parentId,y,t,i,o)}mE(o,i);let s=Nt(i.adapter),l=new Set(o.createdIds.map(String)),c=new Set;fE(i.adapter,s,l,a),mi(i.adapter,s,l,a,c);for(let p of o.createdIds)c.add(String(p));let d=gE(o,i),{scheduledIds:u}=await nt({adapter:i.adapter,scheduler:i.scheduler,sector:i.sector,defaultBaseCalendarId:i.defaultBaseCalendarId,runAutomaticP6Schedule:i.runAutomaticP6Schedule},{action:t,autoscheduleFrom:o.createdIds.length>0?Dt.ROOTS:null,recomputeParentsFrom:o.createdIds,preventSummaryTargetPullback:!0,now:i.now,options:e});return{ok:!0,changes:await J(i.adapter,{source:t,beforeSnap:a,touchedIds:c,scheduledIds:u,links:Ai(d,new Map,i.adapter),hoursPerDay:i.sector.hoursPerDay})}}function cE(t,e){if(t.length===0)return{ok:!1,reason:v.ACTIVITY_IDS_EMPTY};let i=new Set,n=[];for(let o of t){let s=String(o);if(i.has(s))continue;let l=e.getActivity(s);if(!l)return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};i.add(s),n.push(l)}let r=n.filter(o=>!Ii(o.id,i,e));return e.getRootIds().length===1&&r.some(o=>o.parentId==null)?{ok:!1,reason:v.SOLE_SCHEDULE_ROOT}:{ok:!0,runs:uE(r,e)}}function dE(t,e){let i=new Set;for(let n of t){if(n.parentId==="0"||i.has(String(n.parentId)))continue;i.add(String(n.parentId));let r=e.getActivity(n.parentId);if(r&&Ze(r))return r}return null}function uE(t,e){let i=new Map;for(let r of t){let a=re(r.parentId),o=i.get(a)??[];o.push(r),i.set(a,o)}let n=[];for(let[r,a]of i){let o=r==="0"?"0":r,s=new Map(ih(e,r).map((d,u)=>[String(d.id),u])),l=d=>s.get(String(d.id))??-1,c=[...a].sort((d,u)=>l(d)-l(u));for(let d of pE(c,l))n.push({parentId:o,originals:d})}return n}function pE(t,e){let i=[],n=null;for(let r of t){let a=e(r),o=i.at(-1);o&&n!==null&&a===n+1?o.push(r):i.push([r]),n=a}return i}function fE(t,e,i,n){let r=t.peekWriteCapture();if(r)for(let a of e){if(i.has(a.activityId)||n.has(a.activityId))continue;let o=r.before.get(a.activityId);o&&n.set(a.activityId,o)}}function ih(t,e){return Br(t,e).sort((i,n)=>wt(i)-wt(n)||String(i.id).localeCompare(String(n.id)))}async function yE(t,e,i,n,r,a){let o=await Ci({kind:A.ACTIVITY_CREATE,parentId:e,afterSiblingId:i,overrides:Ho(t),...n.eventSource===void 0?{}:{eventSource:n.eventSource}},r,{...th,customIdReferenceId:t.id});if(!o.ok)throw lc("create",o.reason);return nh(a,t,o.newId,e),await hE(t,o.newId,n,r,a),o.newId}async function hE(t,e,i,n,r){let a=new $t;a.enqueue({original:t,newParentId:e});let o=0;for(;!a.isEmpty();){let{original:s,newParentId:l}=a.dequeue();for(let c of ih(n.adapter,String(s.id))){let d=await Ci({kind:A.ACTIVITY_CREATE,parentId:l,overrides:Ho(c),...i.eventSource===void 0?{}:{eventSource:i.eventSource}},n,th);if(!d.ok)throw lc("create",d.reason);nh(r,c,d.newId,l),a.enqueue({original:c,newParentId:d.newId}),o+=1,o%lE===0&&await St()}}}function lc(t,e){return new Error(`[ScheduleCore] activity-duplicate: unexpected ${t} rejection after preflight passed (${e})`)}function nh(t,e,i,n){t.originalToNew.set(String(e.id),i),t.createdIds.push(i),t.createdParentIds.push(n)}function mE(t,e){let i=new Set;for(let n of[...t.createdParentIds].reverse())n==="0"||i.has(String(n))||(i.add(String(n)),jt(n,e.adapter))}function gE(t,e){let i=[];for(let n of t.originalToNew.keys())for(let r of e.adapter.getOutgoingLinkIds(n)){let a=e.adapter.getLink(r);if(!a)continue;let o=t.originalToNew.get(String(a.source)),s=t.originalToNew.get(String(a.target));if(o===void 0||s===void 0)continue;let l={kind:vt.CREATE,source:o,target:s,type:a.type,lag:a.lag},c=Re(l,{port:e.adapter,newLinkId:e.linkIdGen.next});if(!c.applied)throw lc("link",c.rejected??v.INVALID);i.push({op:l,finalLinkId:c.linkId,rejected:null})}return i}var zn={FIELD:"field",LINKS:"links"};function AE(t,e,i){return Hn(t,e,i).map(n=>({otherActivityId:i?n.source:n.target,type:n.type,lag:n.lag}))}function cc(t){return{ok:!0,changes:{source:t,activities:[],links:[],calendars:[],trackingEvents:[]}}}function rh(t,e){let i=e.adapter.getActivity(t.activityId);if(!i)return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};if(t.column===T.CUSTOM_PREDECESSORS||t.column===T.CUSTOM_SUCESSORS)return e.clipboard.value={kind:zn.LINKS,specs:AE(e.adapter,t.activityId,t.column===T.CUSTOM_PREDECESSORS)},cc(t);let n=Qt(t.column);if(!n)return{ok:!1,reason:v.NO_PIPELINE_FOR_COLUMN};let r=Wn(i,n.targetField);if(t.column===T.DURATION&&!Number.isFinite(r))return{ok:!1,reason:v.INVALID_VALUE};let a=t.column===T.DURATION?r/e.hoursPerDay:S(r);return e.clipboard.value={kind:zn.FIELD,raw:a,sourceColumn:t.column,text:t.copiedText??null},cc(t)}function ah(t,e){return e.value=null,cc(t)}var oh=new Set([T.TAGS,T.RESPONSABLES,T.SUBCONTRACT_ID,T.CONSTRAINT_TYPE,T.CALENDAR_ID]);function IE(t,e){return t===e?!1:oh.has(t)||oh.has(e)}function SE(t,e){return e===void 0||t!==null&&(t.text===null||t.text===e)?null:e}function vE(t,e,i){let n=t!==null&&t.kind===zn.FIELD?t:null,r=SE(n,i);return r!==null?{ok:!0,newValue:r}:t!==null&&t.kind!==zn.FIELD?{ok:!1,reason:v.INVALID_VALUE}:n===null?{ok:!1,reason:v.CLIPBOARD_EMPTY}:IE(n.sourceColumn,e)?{ok:!1,reason:v.CELL_PASTE_COLUMN_MISMATCH}:{ok:!0,newValue:n.raw}}function CE(t){return String(t)}function DE(t,e){let i=e;return t.activityExists(i)?i:null}function TE(t,e,i,n){let r=i.specs.map(l=>({correlativeId:CE(l.otherActivityId),type:l.type,lag:l.lag})),a=Hn(n.adapter,t,e),o=l=>DE(n.adapter,l);return(e?Dn({targetActivityId:t,currentLinks:a,desiredSpecs:r,resolveActivityByCorrelative:o}):Tn({sourceActivityId:t,currentLinks:a,desiredSpecs:r,resolveActivityByCorrelative:o})).operations}async function _E(t,e,i,n){if(e===null)return{ok:!1,reason:v.CLIPBOARD_EMPTY};if(e.kind!==zn.LINKS)return{ok:!1,reason:v.INVALID_VALUE};if(t.activityIds.some(c=>e.specs.some(d=>String(d.otherActivityId)===String(c))))return{ok:!1,reason:ht.SELF_LINK};let a=t.column===T.CUSTOM_PREDECESSORS,o=t.activityIds.flatMap(c=>TE(c,a,e,n)),s=o.filter(c=>c.kind===vt.CREATE).map(c=>({operation:c,linkId:n.linkIdGen.next()})),l=vr(s,{port:n.adapter,rejectParentLinkMutations:i.rejectParentLinkMutations??!1});return l.applied?Ur(o,t,i,n):{ok:!1,reason:l.rejected??v.INVALID}}async function sh(t,e,i){let n=i.cellClipboard.value;if(t.activityIds.length===0)return{ok:!1,reason:v.ACTIVITY_IDS_EMPTY};if(t.activityIds.some(l=>!i.adapter.activityExists(l)))return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};if(t.column===T.CUSTOM_PREDECESSORS||t.column===T.CUSTOM_SUCESSORS)return _E(t,n,e,i);if(!Qt(t.column))return{ok:!1,reason:v.NO_PIPELINE_FOR_COLUMN};let a=t.column,o=vE(n,a,t.clipboardText);if(!o.ok)return o;let s=await Fo({kind:A.BULK_EDIT,edits:t.activityIds.map(l=>({activityId:l,column:a,newValue:o.newValue})),...t.eventSource===void 0?{}:{eventSource:t.eventSource}},e,i);return s.ok?{...s,changes:{...s.changes,source:t}}:s}async function lh(t,e,i){return t.kind===A.ACTIVITY_COPY?qy(t,{adapter:i.adapter,clipboard:i.activityClipboard}):t.kind===A.CALENDAR_RECONCILE?Yy(t,e,i):t.kind===A.ACTIVITY_CLIPBOARD_CLEAR?Jy(t,i.activityClipboard):t.kind===A.ACTIVITY_CLIPBOARD_IMPORT?Xy(t,{clipboard:i.activityClipboard,calendars:i.calendars}):t.kind===A.ACTIVITY_PASTE_COPIED?Qy(t,e,i):t.kind===A.ACTIVITY_DUPLICATE?eh(t,e,i):t.kind===A.CELL_COPY?rh(t,{adapter:i.adapter,clipboard:i.cellClipboard,hoursPerDay:i.sector.hoursPerDay}):t.kind===A.CELL_CLIPBOARD_CLEAR?ah(t,i.cellClipboard):t.kind===A.CELL_PASTE_COPIED?sh(t,e,i):t.kind===Xe?fy(t,e,i):t.kind===A.PERSISTENCE_ACKNOWLEDGE?Sy(t,i):t.kind===A.BASELINE_APPLY?jy(t,i):t.kind===A.PONDERATOR_CRITERION_SET?Wy(t,i):t.kind===A.STATUS_CRITERIA_SET?Vy(t,i):t.kind===A.LINK_CREATE||t.kind===A.LINK_UPDATE||t.kind===A.LINK_DELETE?Kf(t,e,i):t.kind===A.LINKS_BATCH?Yf(t,e,i):t.kind===A.ACTIVITY_CREATE?dy(t,e,i):t.kind===A.ACTIVITY_DELETE?ly(t,e,i):t.kind===A.ACTIVITY_MOVE?Ly(t,e,i):t.kind===A.ACTIVITY_INDENT?Oy(t,e,i):t.kind===A.ACTIVITY_OUTDENT?by(t,e,i):t.kind===A.ACTIVITY_TYPE_SET?Ny(t,e,i):t.kind===A.ACTIVITY_SET_PROGRESS?Fy(t,e,i):t.kind===A.DATES_BATCH?wy(t,e,i):t.kind===A.BULK_EDIT?Fo(t,e,i):t.kind===A.SELECTION_TOGGLE?Ed(t,dc(i)):t.kind===A.SELECTION_REPLACE?fa(t,dc(i)):t.kind===A.VISIBILITY_SET?Pd(t,dc(i)):t.kind===A.FILTER_SET?Wd(t,{adapter:i.adapter,hoursPerDay:i.sector.hoursPerDay}):t.kind===A.SORT_SET?qd(t,{adapter:i.adapter}):t.kind===A.VIEW_ATTRIBUTES_SET?Xd(t,{adapter:i.adapter,hoursPerDay:i.sector.hoursPerDay}):t.kind===A.GROUP_SET?Zd(t,{adapter:i.adapter,hoursPerDay:i.sector.hoursPerDay}):t.kind===A.WBS_DEPTH_SET?Qd(t,{adapter:i.adapter,hoursPerDay:i.sector.hoursPerDay}):t.kind===A.SIR_SYNC?hy(t,i):t.kind===A.ACTIVITY_LOOKAHEAD_SYNC?vy(t,e,i):t.kind===A.ACTIVITY_LOOKAHEAD_CONVERT?Ey(t,e,i):t.kind===A.SCHEDULE_AUTO_SCHEDULE?Lf(t,e,i):t.kind===A.INLINE_EDIT&&(t.column===T.CUSTOM_PREDECESSORS||t.column===T.CUSTOM_SUCESSORS)?Gf(t,e,i):t.kind!==A.INLINE_EDIT?tu(t,`[ScheduleCore] dispatch kind "${t.kind}" not supported yet`):Vf(t,e,i)}function dc(t){return{adapter:t.adapter}}var EE=new Set(["startDate","endDate","constraintDate"]);function ch(t,e){return EE.has(t)&&typeof e=="string"?new Date(e):e}var Oe={MINUTE:"minute"};function dh(t,e={}){let i=e.defaultUnit??dt.HOUR;return{getCalendar(n){let r=t.getCalendar(String(n));return r?PE(r,i):null}}}function PE(t,e){return{getClosestWorkTime(i){return t.getClosestWorkTime({date:i.date,dir:i.direction,unit:i.unit})},calculateEndDate(i,n){let r=e===dt.HOUR&&!Number.isInteger(n),a=i.getUTCSeconds()*1e3+i.getUTCMilliseconds(),o=r&&a!==0&&t.isWorkTime({date:i,unit:Oe.MINUTE}),s=o?new Date(i.getTime()-a):i,l=r?RE(t,s,n):t.calculateEndDate({start_date:s,duration:n,unit:e});if(!o)return l;let c=uh(t,l);return new Date(c.getTime()+a)},calculateDuration(i,n){return t.calculateDuration({start_date:i,end_date:n,unit:e})},isWorkTime(i,n){return t.isWorkTime({date:i,unit:n})},getWorkHours(i){return t.getWorkHours(i)}}}function RE(t,e,i){let n=Math.round(Math.abs(i)*60);if(!(n>0&&t.isWorkTime({date:e,unit:Oe.MINUTE})))return t.calculateEndDate({start_date:e,duration:i*60,unit:Oe.MINUTE});let a=e,o=n,s=i<0?-1:1;for(;o>0;){let l=s<0?new Date(a.getTime()-1):a;t.isWorkTime({date:l,unit:Oe.MINUTE})||(a=s<0?t.getClosestWorkTime({date:l,dir:z.PAST,unit:Oe.MINUTE}):uh(t,a));let c=kE(t,a,Math.min(o,60),s);a=c.end,o-=c.minutes}return a}function kE(t,e,i,n){let r=t.calculateEndDate({start_date:e,duration:n*i,unit:Oe.MINUTE});if(r.getTime()===e.getTime()+n*i*6e4)return{end:r,minutes:i};let o=0,s=i-1,l=e;for(;o<s;){let c=Math.ceil((o+s)/2),d=t.calculateEndDate({start_date:e,duration:n*c,unit:Oe.MINUTE});d.getTime()===e.getTime()+n*c*6e4?(o=c,l=d):s=c-1}if(o===0)throw new Error("Calendar cannot calculate a working-minute prefix");return{end:l,minutes:o}}function uh(t,e){if(t.isWorkTime({date:e,unit:Oe.MINUTE}))return e;let i=t.calculateEndDate({start_date:e,duration:1,unit:dt.DAY}),n=new Date(i);n.setUTCHours(0,0,0,0);let r=t.getClosestWorkTime({date:n,dir:z.FUTURE,unit:Oe.MINUTE}),a=t.getClosestWorkTime({date:e,dir:z.FUTURE,unit:Oe.MINUTE});return new Date(Math.min(a.getTime(),r.getTime()))}function LE(t){return Array.isArray?Array.isArray(t):t&&t.length!==void 0&&t.pop&&t.push}function nn(t){return t&&typeof t=="object"?!!(t.getFullYear&&t.getMonth&&t.getDate):!1}function rn(t){return nn(t)&&!isNaN(t.getTime())}var OE={}.constructor.toString();function bE(t){var e=t.constructor.toString();return e!==OE}function NE(t){return t.$$typeof&&t.$$typeof.toString().includes("react.")}function ve(t){var e,i;if(t&&typeof t=="object")switch(!0){case nn(t):i=new Date(t);break;case LE(t):for(i=new Array(t.length),e=0;e<t.length;e++)i[e]=ve(t[e]);break;default:if(bE(t))i=Object.create(t);else{if(NE(t))return i=t,i;i={}}for(e in t)Object.prototype.hasOwnProperty.apply(t,[e])&&(i[e]=ve(t[e]));break}return i||t}function Jn(t,e,i){for(var n in e)(t[n]===void 0||i)&&(t[n]=e[n]);return t}function ph(t){return typeof t<"u"}var Bo;function uc(){return Bo||(Bo=new Date().valueOf()),Bo++,Bo}function oe(t,e){return t.bind?t.bind(e):function(){return t.apply(e,arguments)}}var wE=(t,e,i)=>{t=t.replace(/%[a-zA-Z]/g,r=>{switch(r){case"%d":return`"+to_fixed(date.get${e?"UTC":""}Date())+"`;case"%m":return`"+to_fixed((date.get${e?"UTC":""}Month()+1))+"`;case"%j":return`"+date.get${e?"UTC":""}Date()+"`;case"%n":return`"+(date.get${e?"UTC":""}Month()+1)+"`;case"%y":return`"+to_fixed(date.get${e?"UTC":""}FullYear()%100)+"`;case"%Y":return`"+date.get${e?"UTC":""}FullYear()+"`;case"%D":return`"+locale.date.day_short[date.get${e?"UTC":""}Day()]+"`;case"%l":return`"+locale.date.day_full[date.get${e?"UTC":""}Day()]+"`;case"%M":return`"+locale.date.month_short[date.get${e?"UTC":""}Month()]+"`;case"%F":return`"+locale.date.month_full[date.get${e?"UTC":""}Month()]+"`;case"%h":return`"+to_fixed((date.get${e?"UTC":""}Hours()+11)%12+1)+"`;case"%g":return`"+((date.get${e?"UTC":""}Hours()+11)%12+1)+"`;case"%G":return`"+date.get${e?"UTC":""}Hours()+"`;case"%H":return`"+to_fixed(date.get${e?"UTC":""}Hours())+"`;case"%i":return`"+to_fixed(date.get${e?"UTC":""}Minutes())+"`;case"%a":return`"+(date.get${e?"UTC":""}Hours()>11?"pm":"am")+"`;case"%A":return`"+(date.get${e?"UTC":""}Hours()>11?"PM":"AM")+"`;case"%s":return`"+to_fixed(date.get${e?"UTC":""}Seconds())+"`;case"%W":return'"+to_fixed(getISOWeek(date))+"';case"%w":return'"+to_fixed(getWeek(date))+"';default:return r}});let n=new Function("date","to_fixed","locale","getISOWeek","getWeek",`return "${t}";`);return r=>n(r,i.date.to_fixed,i.locale,i.date.getISOWeek,i.date.getWeek)},xE=(t,e,i)=>{let n="var temp=date.match(/[a-zA-Z]+|[0-9]+/g);",r=t.match(/%[a-zA-Z]/g);for(let s=0;s<r.length;s++)switch(r[s]){case"%j":case"%d":n+=`set[2]=temp[${s}]||1;`;break;case"%n":case"%m":n+=`set[1]=(temp[${s}]||1)-1;`;break;case"%y":n+=`set[0]=temp[${s}]*1+(temp[${s}]>50?1900:2000);`;break;case"%g":case"%G":case"%h":case"%H":n+=`set[3]=temp[${s}]||0;`;break;case"%i":n+=`set[4]=temp[${s}]||0;`;break;case"%Y":n+=`set[0]=temp[${s}]||0;`;break;case"%a":case"%A":n+=`set[3]=set[3]%12+((temp[${s}]||'').toLowerCase()=='am'?0:12);`;break;case"%s":n+=`set[5]=temp[${s}]||0;`;break;case"%M":n+=`set[1]=locale.date.month_short_hash[temp[${s}]]||0;`;break;case"%F":n+=`set[1]=locale.date.month_full_hash[temp[${s}]]||0;`;break}let a="set[0],set[1],set[2],set[3],set[4],set[5]";e&&(a=` Date.UTC(${a})`);let o=new Function("date","locale",`var set=[0,0,1,0,0,0]; ${n} return new Date(${a});`);return s=>o(s,i.locale)},fh={date_to_str:wE,str_to_date:xE},ME=(t,e,i)=>n=>t.replace(/%[a-zA-Z]/g,r=>{switch(r){case"%d":return e?i.date.to_fixed(n.getUTCDate()):i.date.to_fixed(n.getDate());case"%m":return e?i.date.to_fixed(n.getUTCMonth()+1):i.date.to_fixed(n.getMonth()+1);case"%j":return e?n.getUTCDate():n.getDate();case"%n":return e?n.getUTCMonth()+1:n.getMonth()+1;case"%y":return e?i.date.to_fixed(n.getUTCFullYear()%100):i.date.to_fixed(n.getFullYear()%100);case"%Y":return e?n.getUTCFullYear():n.getFullYear();case"%D":return e?i.locale.date.day_short[n.getUTCDay()]:i.locale.date.day_short[n.getDay()];case"%l":return e?i.locale.date.day_full[n.getUTCDay()]:i.locale.date.day_full[n.getDay()];case"%M":return e?i.locale.date.month_short[n.getUTCMonth()]:i.locale.date.month_short[n.getMonth()];case"%F":return e?i.locale.date.month_full[n.getUTCMonth()]:i.locale.date.month_full[n.getMonth()];case"%h":return e?i.date.to_fixed((n.getUTCHours()+11)%12+1):i.date.to_fixed((n.getHours()+11)%12+1);case"%g":return e?(n.getUTCHours()+11)%12+1:(n.getHours()+11)%12+1;case"%G":return e?n.getUTCHours():n.getHours();case"%H":return e?i.date.to_fixed(n.getUTCHours()):i.date.to_fixed(n.getHours());case"%i":return e?i.date.to_fixed(n.getUTCMinutes()):i.date.to_fixed(n.getMinutes());case"%a":return e?n.getUTCHours()>11?"pm":"am":n.getHours()>11?"pm":"am";case"%A":return e?n.getUTCHours()>11?"PM":"AM":n.getHours()>11?"PM":"AM";case"%s":return e?i.date.to_fixed(n.getUTCSeconds()):i.date.to_fixed(n.getSeconds());case"%W":return e?i.date.to_fixed(i.date.getUTCISOWeek(n)):i.date.to_fixed(i.date.getISOWeek(n));case"%w":return i.date.to_fixed(i.date.getWeek(n));default:return r}}),UE=(t,e,i)=>n=>{let r=[0,0,1,0,0,0],a=n.match(/[a-zA-Z]+|[0-9]+/g),o=t.match(/%[a-zA-Z]/g);for(let s=0;s<o.length;s++)switch(o[s]){case"%j":case"%d":r[2]=a[s]||1;break;case"%n":case"%m":r[1]=(a[s]||1)-1;break;case"%y":r[0]=a[s]*1+(a[s]>50?1900:2e3);break;case"%g":case"%G":case"%h":case"%H":r[3]=a[s]||0;break;case"%i":r[4]=a[s]||0;break;case"%Y":r[0]=a[s]||0;break;case"%a":case"%A":r[3]=r[3]%12+((a[s]||"").toLowerCase()==="am"?0:12);break;case"%s":r[5]=a[s]||0;break;case"%M":r[1]=i.locale.date.month_short_hash[a[s]]||0;break;case"%F":r[1]=i.locale.date.month_full_hash[a[s]]||0;break}return e?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])},yh={date_to_str:ME,str_to_date:UE};function hh(t){var e=/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:?\d{2})?)?$/;function i(s){var l=new Date(s);return isNaN(l.getTime())?null:l}var n=null;function r(){try{new Function("canUseCsp = false;")}catch{n=!0}}function a(){var s=!1;return t.config.csp==="auto"?(n===null&&r(),s=n):s=t.config.csp,s}var o={_isoDateDetected:!1,_isoDateOnly:!1,formatISODate:function(s){return s.toISOString()},formatISODateOnly:function(s){return s.getUTCFullYear()+"-"+t.date.to_fixed(s.getUTCMonth()+1)+"-"+t.date.to_fixed(s.getUTCDate())},init:function(){for(var s=t.locale,c=s.date.month_short,d=s.date.month_short_hash={},l=0;l<c.length;l++)d[c[l]]=l;for(var c=s.date.month_full,d=s.date.month_full_hash={},l=0;l<c.length;l++)d[c[l]]=l},date_part:function(s){return s.setUTCHours(0,0,0,0),s},time_part:function(s){return s.valueOf()/1e3%86400},week_start:function(s){var l=s.getUTCDay();return t.config.start_on_monday&&(l===0?l=6:l--),this.date_part(this.add(s,-1*l,"day"))},month_start:function(s){return s.setUTCDate(1),this.date_part(s)},quarter_start:function(s){this.month_start(s);var l=s.getUTCMonth(),c;return l>=9?c=9:l>=6?c=6:l>=3?c=3:c=0,s.setUTCMonth(c),s},year_start:function(s){return s.setUTCMonth(0),this.month_start(s)},day_start:function(s){return this.date_part(s)},hour_start:function(s){return s.getUTCMinutes()&&s.setUTCMinutes(0),this.minute_start(s),s},minute_start:function(s){return s.getUTCSeconds()&&s.setUTCSeconds(0),s.getUTCMilliseconds()&&s.setUTCMilliseconds(0),s},_add_days:function(s,l,c){return s.setUTCDate(s.getUTCDate()+l),s},add:function(s,l,c){var d=new Date(s.valueOf());switch(c){case"day":d=this._add_days(d,l,s);break;case"week":d=this._add_days(d,l*7,s);break;case"month":d.setUTCMonth(d.getUTCMonth()+l);break;case"year":d.setUTCFullYear(d.getUTCFullYear()+l);break;case"hour":d.setTime(d.getTime()+l*60*60*1e3);break;case"minute":d.setTime(d.getTime()+l*60*1e3);break;default:return this["add_"+c](s,l,c)}return d},add_quarter:function(s,l){return this.add(s,l*3,"month")},to_fixed:function(s){return s<10?"0"+s:s},copy:function(s){return new Date(s.valueOf())},date_to_str:function(s,l){var c=fh;return a()&&(c=yh),c.date_to_str(s,l,t)},str_to_date:function(s,l){var c=fh;return a()&&(c=yh),c.str_to_date(s,l,t)},getISOWeek:function(s){return t.date._getWeekNumber(s,!0)},_getWeekNumber:function(s,l){if(!s)return!1;var c=s.getUTCDay();l&&c===0&&(c=7);var d=new Date(s.valueOf());d.setUTCDate(s.getUTCDate()+(4-c));var u=d.getUTCFullYear(),p=Math.round((d.getTime()-Date.UTC(u,0,1))/864e5),f=1+Math.floor(p/7);return f},getWeek:function(s){return t.date._getWeekNumber(s,t.config.start_on_monday)},getUTCISOWeek:function(s){return t.date.getISOWeek(s)},parseDate:function(s,l){if(s&&!s.getFullYear){var c=!l||l==="parse_date"||l==="xml_date",d=c&&(t.defined(t.templates.xml_date)||t.templates.parse_date&&!t.templates.parse_date._ganttAuto);if(!d&&typeof s=="string"&&e.test(s)){var u=s.indexOf("T")!==-1,p=i(s);if(p)return o._isoDateDetected?u&&(o._isoDateOnly=!1):(o._isoDateDetected=!0,o._isoDateOnly=!u),p}typeof l!="function"&&(typeof l=="string"?l==="parse_date"||l==="xml_date"?l=t.defined(t.templates.xml_date)?t.templates.xml_date:t.templates.parse_date:l=t.defined(t.templates[l])?t.templates[l]:t.date.str_to_date(l,!0):l=t.defined(t.templates.xml_date)?t.templates.xml_date:t.templates.parse_date),s?s=l(s):s=null}return s}};return o}function pc(t,e,i,n,r){return this.date=t,this.unit=e,this.task=i,this.id=n,this.calendar=r,this}function fc(t,e,i,n,r,a){return this.date=t,this.dir=e,this.unit=i,this.task=n,this.id=r,this.calendar=a,this}function yc(t,e,i,n,r,a,o){return this.start_date=t,this.duration=e,this.unit=i,this.step=n,this.task=r,this.id=a,this.calendar=o,this}function HE(t,e,i,n){return this.start_date=t,this.end_date=e,this.task=i,this.calendar=n,this.unit=null,this.step=null,this}var mh=function(t){return{getWorkHoursArguments:function(){var e=arguments[0];if(nn(e)?e={date:e}:e=Jn({},e),!rn(e.date))throw t.assert(!1,"Invalid date argument for getWorkHours method"),new Error("Invalid date argument for getWorkHours method");return e},setWorkTimeArguments:function(){return arguments[0]},unsetWorkTimeArguments:function(){return arguments[0]},isWorkTimeArguments:function(){var e=arguments[0];if(e instanceof pc)return e;var i;if(e.date?i=new pc(e.date,e.unit,e.task,null,e.calendar):i=new pc(arguments[0],arguments[1],arguments[2],null,arguments[3]),i.unit=i.unit||t.config.duration_unit,!rn(i.date))throw t.assert(!1,"Invalid date argument for isWorkTime method"),new Error("Invalid date argument for isWorkTime method");return i},getClosestWorkTimeArguments:function(e){var i=arguments[0];if(i instanceof fc)return i;var n;if(nn(i)?n=new fc(i):n=new fc(i.date,i.dir,i.unit,i.task,null,i.calendar),i.id&&(n.task=i),n.dir=i.dir||"any",n.unit=i.unit||t.config.duration_unit,!rn(n.date))throw t.assert(!1,"Invalid date argument for getClosestWorkTime method"),new Error("Invalid date argument for getClosestWorkTime method");return n},_getStartEndConfig:function(e){var i=HE,n;if(e instanceof i)return e;if(nn(e)?n=new i(arguments[0],arguments[1],arguments[2],arguments[3]):(n=new i(e.start_date,e.end_date,e.task),e.id!==null&&e.id!==void 0&&(n.task=e)),n.unit=n.unit||t.config.duration_unit,n.step=n.step||t.config.duration_step,n.start_date=n.start_date||n.start||n.date,!rn(n.start_date))throw t.assert(!1,"Invalid start_date argument for getDuration method"),new Error("Invalid start_date argument for getDuration method");if(!rn(n.end_date))throw t.assert(!1,"Invalid end_date argument for getDuration method"),new Error("Invalid end_date argument for getDuration method");return n},getDurationArguments:function(e,i,n,r){return this._getStartEndConfig.apply(this,arguments)},hasDurationArguments:function(e,i,n,r){return this._getStartEndConfig.apply(this,arguments)},calculateEndDateArguments:function(e,i,n,r){var a=arguments[0];if(a instanceof yc)return a;var o;if(nn(a)?o=new yc(arguments[0],arguments[1],arguments[2],void 0,arguments[3],void 0,arguments[4]):o=new yc(a.start_date,a.duration,a.unit,a.step,a.task,null,a.calendar),a.id!==null&&a.id!==void 0&&(o.task=a,o.unit=null,o.step=null),o.unit=o.unit||t.config.duration_unit,o.step=o.step||t.config.duration_step,!rn(o.start_date))throw t.assert(!1,"Invalid start_date argument for calculateEndDate method"),new Error("Invalid start_date argument for calculateEndDate method");return o}}};function gh(){}gh.prototype={_getIntervals:function(t){for(var e=[],i=0;i<t.length;i+=2)e.push({start:t[i],end:t[i+1]});return e},_toHoursArray:function(t){var e=[];function i(a){var o=String(a);return o.length<2&&(o="0"+o),o}function n(a){var o=Math.floor(a/3600),s=a-o*60*60,l=Math.floor(s/60);return o+":"+i(l)}for(var r=0;r<t.length;r++)e.push(n(t[r].start)+"-"+n(t[r].end));return e},_intersectHourRanges:function(t,e){var r=[],i=t.length>e.length?t:e,n=t===i?e:t;i=i.slice(),n=n.slice();for(var r=[],a=0;a<i.length;a++)for(var o=i[a],s=0;s<n.length;s++){var l=n[s];l.start<o.end&&l.end>o.start&&(r.push({start:Math.max(o.start,l.start),end:Math.min(o.end,l.end)}),o.end>l.end&&(n.splice(s,1),s--,a--))}return r},_mergeAdjacentIntervals:function(t){var e=t.slice();e.sort(function(a,o){return a.start-o.start});for(var i=e[0],n=1;n<e.length;n++){var r=e[n];r.start<=i.end?(r.end>i.end&&(i.end=r.end),e.splice(n,1),n--):i=r}return e},_mergeHoursConfig:function(t,e){return this._mergeAdjacentIntervals(this._intersectHourRanges(t,e))},merge:function(t,e){let i=ve(t.getConfig()),n=ve(e.getConfig()),r=i.parsed,a=n.parsed;r.customWeeks=i.customWeeks,a.customWeeks=n.customWeeks;var o={hours:this._toHoursArray(this._mergeHoursConfig(r.hours,a.hours)),dates:{},customWeeks:{}};let s=(c,d)=>{for(let u in c.dates){let p=c.dates[u];+u>1e3&&(o.dates[u]=!1);for(let f in d.dates){let y=d.dates[f];if(f==u&&(o.dates[u]=!!(p&&y)),Array.isArray(p)){let h=Array.isArray(y)?y:d.hours;o.dates[u]=this._toHoursArray(this._mergeHoursConfig(p,h))}}}};if(s(r,a),s(a,r),r.customWeeks)for(var l in r.customWeeks)o.customWeeks[l]=r.customWeeks[l];if(a.customWeeks)for(var l in a.customWeeks)o.customWeeks[l]?o.customWeeks[l+"_second"]=a.customWeeks[l]:o.customWeeks[l]=a.customWeeks[l];return o}};var hc=class{constructor(){this.clear()}getItem(e,i,n){if(this._cache.has(e)){let a=this._cache.get(e)[n.getUTCFullYear()];if(a&&a.has(i))return a.get(i)}return-1}setItem(e,i,n,r){if(!e||!i)return;let a=this._cache,o=r.getUTCFullYear(),s;a.has(e)?s=a.get(e):(s=[],a.set(e,s));let l=s[o];l||(l=s[o]=new Map),l.set(i,n)}clear(){this._cache=new Map}},mc=class{constructor(){this.clear()}getItem(e,i,n){let r=this._cache;if(r&&r[e]){let a=r[e];if(a===void 0)return-1;let o=a[n.getUTCFullYear()];if(o&&o[i]!==void 0)return o[i]}return-1}setItem(e,i,n,r){if(!e||!i)return;let a=this._cache;if(!a)return;a[e]||(a[e]=[]);let o=a[e],s=r.getUTCFullYear(),l=o[s];l||(l=o[s]={}),l[i]=n}clear(){this._cache={}}},gc=class{constructor(e){this.getMinutesPerWeek=i=>{let n=i.valueOf();if(this._weekCache.has(n))return this._weekCache.get(n);let r=this._calendar,a=this._calendar.$gantt,o=0,s=a.date.week_start(new Date(i));for(let l=0;l<7;l++)o+=r.getHoursPerDay(s)*60,s=a.date.add(s,1,"day");return this._weekCache.set(n,o),o},this.getMinutesPerMonth=i=>{let n=i.valueOf();if(this._monthCache.has(n))return this._monthCache.get(n);let r=this._calendar,a=this._calendar.$gantt,o=0,s=a.date.week_start(new Date(i)),l=a.date.add(s,1,"month").valueOf();for(;s.valueOf()<l;)o+=r.getHoursPerDay(s)*60,s=a.date.add(s,1,"day");return this._monthCache.set(n,o),o},this.clear=()=>{this._weekCache=new Map,this._monthCache=new Map},this.clear(),this._calendar=e}};function BE(){return typeof Map<"u"?new hc:new mc}var Ac=class{constructor(){this.clear()}_getCacheObject(e,i,n){let r=this._cache;r[i]||(r[i]=[]);let a=r[i];a||(a=r[i]={});let o=a[n];o||(o=a[n]={});let s=e.getUTCFullYear(),l=o[s];return l||(l=o[s]={durations:{},endDates:{}}),l}_endDateCacheKey(e,i){return String(e)+"-"+String(i)}_durationCacheKey(e,i){return String(e)+"-"+String(i)}getEndDate(e,i,n,r,a){let o=this._getCacheObject(e,n,r),s=e.valueOf(),l=this._endDateCacheKey(s,i),c;if(o.endDates[l]===void 0){let d=a(),u=d.valueOf();o.endDates[l]=u,o.durations[this._durationCacheKey(s,u)]=i,c=d}else c=new Date(o.endDates[l]);return c}getDuration(e,i,n,r,a){let o=this._getCacheObject(e,n,r),s=e.valueOf(),l=i.valueOf(),c=this._durationCacheKey(s,l),d;if(o.durations[c]===void 0){let u=a();o.durations[c]=u.valueOf(),d=u}else d=o.durations[c];return d}clear(){this._cache={}}};function Ic(t,e){this.argumentsHelper=e,this.$gantt=t,this._workingUnitsCache=BE(),this._largeUnitsCache=new gc(this),this._dateDurationCache=new Ac,this._worktime=null,this._cached_timestamps={},this._cached_timestamps_count=0}Ic.prototype={units:["year","month","week","day","hour","minute"],_clearCaches:function(){this._workingUnitsCache.clear(),this._largeUnitsCache.clear(),this._dateDurationCache.clear()},_getUnitOrder:function(t){for(var e=0,i=this.units.length;e<i;e++)if(this.units[e]==t)return e},_resetTimestampCache:function(){this._cached_timestamps={},this._cached_timestamps_count=0},_timestamp:function(t){this._cached_timestamps_count>1e6&&this._resetTimestampCache();var e=null;if(t.day||t.day===0)e=t.day;else if(t.date){var i=String(t.date.valueOf());this._cached_timestamps[i]?e=this._cached_timestamps[i]:(e=Date.UTC(t.date.getUTCFullYear(),t.date.getUTCMonth(),t.date.getUTCDate()),this._cached_timestamps[i]=e,this._cached_timestamps_count++)}return e},_checkIfWorkingUnit:function(t,e){if(!this["_is_work_"+e]){let i=this.$gantt.date[`${e}_start`](new Date(t)),n=this.$gantt.date.add(i,1,e);return this.hasDuration(i,n)}return this["_is_work_"+e](t)},_is_work_day:function(t){var e=this._getWorkHours(t);return Array.isArray(e)?e.length>0:!1},_is_work_hour:function(t){for(var e=this._getWorkHours(t),i=t.getUTCHours(),n=0;n<e.length;n++)if(i>=e[n].startHour&&i<e[n].endHour)return!0;return!1},_getTimeOfDayStamp:function(t,e){var i=t.getUTCHours();return!t.getUTCHours()&&!t.getUTCMinutes()&&e&&(i=24),i*60*60+t.getUTCMinutes()*60},_is_work_minute:function(t){for(var e=this._getWorkHours(t),i=this._getTimeOfDayStamp(t),n=0;n<e.length;n++)if(i>=e[n].start&&i<e[n].end)return!0;return!1},_nextDate:function(t,e,i){return this.$gantt.date.add(t,i,e)},_getWorkUnitsBetweenGeneric:function(t,e,i,n){var r=this.$gantt.date,a=new Date(t),o=new Date(e);n=n||1;var s=0,l=null,c,d,u=!1;c=r[i+"_start"](new Date(a)),c.valueOf()!=a.valueOf()&&(u=!0);var p=!1;d=r[i+"_start"](new Date(e)),d.valueOf()!=e.valueOf()&&(p=!0);for(var f=!1;a.valueOf()<o.valueOf();){if(l=this._nextDate(a,i,n),f=l.valueOf()>o.valueOf(),this._isWorkTime(a,i))(u||p&&f)&&(c=r[i+"_start"](new Date(a)),d=r.add(c,n,i)),u?(u=!1,l=this._nextDate(c,i,n),s+=(d.valueOf()-a.valueOf())/(d.valueOf()-c.valueOf())):p&&f?(p=!1,s+=(o.valueOf()-a.valueOf())/(d.valueOf()-c.valueOf())):s++;else{var y=this._getUnitOrder(i),h=this.units[y-1];h&&!this._isWorkTime(a,h)&&(l=this._getClosestWorkTimeFuture(a,h))}a=l}return s},_getMinutesPerHour:function(t){var e=this._getTimeOfDayStamp(t),i=this._getTimeOfDayStamp(this._nextDate(t,"hour",1));i===0&&(i=1440*60);for(var n=this._getWorkHours(t),r=0;r<n.length;r++){var a=n[r];if(e>=a.start&&i<=a.end)return 60;if(e<a.end&&i>a.start){var o=Math.min(i,a.end)-Math.max(e,a.start);return o/60}}return 0},_getMinutesPerDay:function(t){var e=this._getWorkHours(t),i=0;return e.forEach(function(n){i+=n.durationMinutes}),i},getHoursPerDay:function(t){var e=this._getWorkHours(t),i=0;return e.forEach(function(n){i+=n.durationHours}),i},_getWorkUnitsForRange:function(t,e,i,n){var r=0,a=new Date(t),o=new Date(e),s;for(i=="minute"?s=oe(this._getMinutesPerDay,this):s=oe(this.getHoursPerDay,this);a.valueOf()<o.valueOf();){if(o-a>1e3*60*60*24*32&&a.getUTCDate()===0){var l=this._largeUnitsCache.getMinutesPerMonth(a);i=="hour"&&(l=l/60),r+=l,a=this.$gantt.date.add(a,1,"month");continue}else if(o-a>1e3*60*60*24*16){var c=this.$gantt.date.week_start(new Date(a));if(a.valueOf()===c.valueOf()){var l=this._largeUnitsCache.getMinutesPerWeek(a);i=="hour"&&(l=l/60),r+=l,a=this.$gantt.date.add(a,7,"day");continue}}r+=s(a),a=this._nextDate(a,"day",1)}return r/n},_getMinutesBetweenSingleDay:function(t,e){for(var i=this._getIntervalTimestamp(t,e),n=this._getWorkHours(t),r=0,a=0;a<n.length;a++){var o=n[a];if(i.end>=o.start&&i.start<=o.end){var s=Math.max(o.start,i.start),l=Math.min(o.end,i.end);r+=(l-s)/60,i.start=l}}return Math.floor(r)},_getMinutesBetween:function(t,e,i,n){var r=new Date(t),a=new Date(e);n=n||1;var o=new Date(r),s=this.$gantt.date.add(this.$gantt.date.day_start(new Date(r)),1,"day");if(a.valueOf()<=s.valueOf())return this._getMinutesBetweenSingleDay(t,e);var l=this.$gantt.date.day_start(new Date(a)),c=a,d=this._getMinutesBetweenSingleDay(o,s),u=this._getMinutesBetweenSingleDay(l,c),p=this._getWorkUnitsForRange(s,l,i,n),f=d+p+u;return f},_getHoursBetween:function(t,e,i,n){var r=new Date(t),a=new Date(e);n=n||1;var o=new Date(r),s=this.$gantt.date.add(this.$gantt.date.day_start(new Date(r)),1,"day");if(a.valueOf()<=s.valueOf())return Math.round(this._getMinutesBetweenSingleDay(t,e)/60);var l=this.$gantt.date.day_start(new Date(a)),c=a,d=this._getMinutesBetweenSingleDay(o,s,i,n)/60,u=this._getMinutesBetweenSingleDay(l,c,i,n)/60,p=this._getWorkUnitsForRange(s,l,i,n),f=d+p+u;return Math.round(f)},getConfig:function(){return this._worktime},_setConfig:function(t){this._worktime=t,this._parseSettings(),this._clearCaches()},_parseSettings:function(){var t=this.getConfig();t.parsed={dates:{},hours:null,haveCustomWeeks:!1,customWeeks:{},customWeeksRangeStart:null,customWeeksRangeEnd:null,customWeeksBoundaries:[]},t.parsed.hours=this._parseHours(t.hours);for(var e in t.dates)t.parsed.dates[e]=this._parseHours(t.dates[e]);if(t.customWeeks){var i=null,n=null;for(var e in t.customWeeks){var r=t.customWeeks[e];if(r.from&&r.to){var a=r.from,o=r.to;(!i||i>a.valueOf())&&(i=a.valueOf()),(!n||n<o.valueOf())&&(n=o.valueOf()),t.parsed.customWeeksBoundaries.push({from:a.valueOf(),fromReadable:new Date(a),to:o.valueOf(),toReadable:new Date(o),name:e}),t.parsed.haveCustomWeeks=!0;var s=t.parsed.customWeeks[e]={from:r.from,to:r.to,hours:this._parseHours(r.hours),dates:{}};if(r.days&&!r.dates){r.dates=r.dates||{};for(var e=0;e<r.days.length;e++)r.dates[e]=r.days[e],r.days[e]instanceof Array||(r.dates[e]=!!r.days[e]);delete r.days}for(var l in r.dates)s.dates[l]=this._parseHours(r.dates[l])}}t.parsed.customWeeksRangeStart=i,t.parsed.customWeeksRangeEnd=n}},_tryChangeCalendarSettings:function(t){var e=JSON.stringify(this.getConfig());return t(),this.hasWorkTime()?!0:(this._setConfig(JSON.parse(e)),this._clearCaches(),!1)},_arraysEqual:function(t,e){if(t===e)return!0;if(!t||!e||t.length!=e.length)return!1;for(var i=0;i<t.length;++i)if(t[i]!==e[i])return!1;return!0},_compareSettings:function(t,e){if(!this._arraysEqual(t.hours,e.hours))return!1;var i=Object.keys(t.dates),n=Object.keys(e.dates);if(i.sort(),n.sort(),!this._arraysEqual(i,n))return!1;for(var r=0;r<i.length;r++){var a=i[r],o=t.dates[a],s=e.dates[a];if(o!==s&&!(Array.isArray(o)&&Array.isArray(s)&&this._arraysEqual(o,s)))return!1}return!0},equals:function(t){if(!(t instanceof Ic))return!1;var e=this.getConfig(),i=t.getConfig();if(!this._compareSettings(e,i))return!1;if(e.parsed.haveCustomWeeks&&i.parsed.haveCustomWeeks){if(e.parsed.customWeeksBoundaries.length!=i.parsed.customWeeksBoundaries.length)return!1;for(var n in e.parsed.customWeeks){var r=e.parsed.customWeeks[n],a=i.parsed.customWeeks[n];if(!a||!this._compareSettings(r,a))return!1}}else if(e.parse.haveCustomWeeks!==i.parsed.haveCustomWeeks)return!1;return!0},getWorkHours:function(){var t=this.argumentsHelper.getWorkHoursArguments.apply(this.argumentsHelper,arguments);return this._getWorkHours(t.date,!1)},_getWorkHours:function(t,e){var i=this.getConfig();if(e!==!1&&(i=i.parsed),!t)return i.hours;let n=new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()));var r=this._timestamp({date:n});if(i.haveCustomWeeks&&i.customWeeksRangeStart<=r&&i.customWeeksRangeEnd>r){for(var a=0;a<i.customWeeksBoundaries.length;a++)if(i.customWeeksBoundaries[a].from<=r&&i.customWeeksBoundaries[a].to>r){i=i.customWeeks[i.customWeeksBoundaries[a].name];break}}var o=!0;return i.dates[r]!==void 0?o=i.dates[r]:i.dates[t.getUTCDay()]!==void 0&&(o=i.dates[t.getUTCDay()]),o===!0?i.hours:o||[]},_getIntervalTimestamp:function(t,e){var i={start:0,end:0};i.start=t.getUTCHours()*60*60+t.getUTCMinutes()*60+t.getUTCSeconds();var n=e.getUTCHours();return!n&&!e.getUTCMinutes()&&!e.getUTCSeconds()&&t.valueOf()<e.valueOf()&&(n=24),i.end=n*60*60+e.getUTCMinutes()*60+e.getUTCSeconds(),i},_parseHours:function(t){if(Array.isArray(t)){var e=[];t.forEach(function(s){typeof s=="number"?e.push(s*60*60):typeof s=="string"&&s.split("-").map(function(l){return l.trim()}).forEach(function(l){var c=l.split(":").map(function(u){return u.trim()}),d=parseInt(c[0]*60*60);c[1]&&(d+=parseInt(c[1]*60)),c[2]&&(d+=parseInt(c[2])),e.push(d)})});for(var i=[],n=0;n<e.length;n+=2){var r=e[n],a=e[n+1],o=a-r;i.push({start:r,end:a,startHour:Math.floor(r/3600),startMinute:Math.floor(r/60),endHour:Math.ceil(a/3600),endMinute:Math.ceil(a/60),durationSeconds:o,durationMinutes:o/60,durationHours:o/3600})}return i}else return t},setWorkTime:function(t){return this._tryChangeCalendarSettings(oe(function(){var e=t.hours!==void 0?t.hours:!0,i=this._timestamp(t),n=this.getConfig();if(i!==null?n.dates[i]=e:t.customWeeks||(n.hours=e),t.customWeeks){if(n.customWeeks||(n.customWeeks={}),typeof t.customWeeks=="string")i!==null?n.customWeeks[t.customWeeks].dates[i]=e:t.customWeeks||(n.customWeeks[t.customWeeks].hours=e);else if(typeof t.customWeeks=="object"&&t.customWeeks.constructor===Object)for(var r in t.customWeeks)n.customWeeks[r]=t.customWeeks[r]}this._parseSettings(),this._clearCaches()},this))},unsetWorkTime:function(t){return this._tryChangeCalendarSettings(oe(function(){if(!t)this.reset_calendar();else{var e=this._timestamp(t);e!==null&&delete this.getConfig().dates[e]}this._parseSettings(),this._clearCaches()},this))},_isWorkTime:function(t,e){var i=-1,n=null;return n=String(t.valueOf()),i=this._workingUnitsCache.getItem(e,n,t),i==-1&&(i=this._checkIfWorkingUnit(t,e),this._workingUnitsCache.setItem(e,n,i,t)),i},isWorkTime:function(){var t=this.argumentsHelper.isWorkTimeArguments.apply(this.argumentsHelper,arguments);return this._isWorkTime(t.date,t.unit)},calculateDuration:function(){var t=this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper,arguments);if(!t.unit)return!1;var e=this;return this._dateDurationCache.getDuration(t.start_date,t.end_date,t.unit,t.step,function(){return e._calculateDuration(t.start_date,t.end_date,t.unit,t.step)})},_calculateDuration:function(t,e,i,n){var r=0,a=1;if(t.valueOf()>e.valueOf()){var o=e;e=t,t=o,a=-1}return i=="hour"&&n==1?r=this._getHoursBetween(t,e,i,n):i=="minute"&&n==1?r=this._getMinutesBetween(t,e,i,n):r=this._getWorkUnitsBetweenGeneric(t,e,i,n),a*Math.round(r)},hasDuration:function(){var t=this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper,arguments),e=t.start_date,i=t.end_date,n=t.unit,r=t.step;if(!n)return!1;var a=new Date(e),o=new Date(i);for(r=r||1;a.valueOf()<o.valueOf();){if(this._isWorkTime(a,n))return!0;a=this._nextDate(a,n,r)}return!1},calculateEndDate:function(){var t=this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper,arguments),e=t.start_date,i=t.duration,n=t.unit,r=t.step;if(!n)return!1;var a=t.duration>=0?1:-1;i=Math.abs(i*1);var o=this;return this._dateDurationCache.getEndDate(e,i,n,r*a,function(){return o._calculateEndDate(e,i,n,r*a)})},_calculateEndDate:function(t,e,i,n){if(!i)return!1;if(n==1&&i=="minute")return this._calculateMinuteEndDate(t,e,n);if(n==-1&&i=="minute")return this._subtractMinuteDate(t,e,n);if(n==1&&i=="hour")return this._calculateHourEndDate(t,e,n);var r=this._addInterval(t,e,i,n,null);return r.end},_addInterval:function(t,e,i,n,r){for(var a=0,o=t;a<e&&!(r&&r(o));){var s=this._nextDate(o,i,n),l=new Date(s.valueOf()+1);n>0&&(l=new Date(s.valueOf()-1));var c=this._isWorkTime(l,i);c&&a++,o=s}return{end:o,start:t,added:a}},_addHoursUntilDayEnd:function(t,e){for(var i=this.$gantt.date.add(this.$gantt.date.day_start(new Date(t)),1,"day"),n=0,r=e,a=this._getIntervalTimestamp(t,i),o=this._getWorkHours(t),s=0;s<o.length&&n<e;s++){var l=o[s];if(a.end>=l.start&&a.start<=l.end){var c=Math.max(l.start,a.start),d=Math.min(l.end,a.end),u=(d-c)/3600;u>r&&(u=r,d=c+r*60*60);var p=Math.round((d-c)/3600);n+=p,r-=p,a.start=d}}var f=i;return n===e&&(f=new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),0,0,a.start))),{added:n,end:f}},_calculateHourEndDate:function(t,e,i){var n=new Date(t),r=0;i=i||1,e=Math.abs(e*1);var a=this._addHoursUntilDayEnd(n,e);r=a.added,n=a.end;var o=e-r;if(o){for(var s=n;r<e;){var l=this._nextDate(s,"day",i);l.setUTCHours(0),l.setUTCMinutes(0),l.setUTCSeconds(0);var c=0;if(i>0?c=this.getHoursPerDay(new Date(l.valueOf()-1)):c=this.getHoursPerDay(new Date(l.valueOf()+1)),r+c>=e)break;r+=c,s=l}n=s}if(r<e){var o=e-r;a=this._addHoursUntilDayEnd(n,o),n=a.end}return n},_addMinutesUntilHourEnd:function(t,e){if(t.getUTCMinutes()===0)return{added:0,end:new Date(t)};for(var i=this.$gantt.date.add(this.$gantt.date.hour_start(new Date(t)),1,"hour"),n=0,r=e,a=this._getIntervalTimestamp(t,i),o=this._getWorkHours(t),s=0;s<o.length&&n<e;s++){var l=o[s];if(a.end>=l.start&&a.start<=l.end){var c=Math.max(l.start,a.start),d=Math.min(l.end,a.end),u=(d-c)/60;u>r&&(u=r,d=c+r*60);var p=Math.round((d-c)/60);r-=p,n+=p,a.start=d}}var f=i;return n===e&&(f=new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),0,0,a.start))),{added:n,end:f}},_subtractMinutesUntilHourStart:function(t,e){for(var i=this.$gantt.date.hour_start(new Date(t)),n=0,r=e,a=i.getUTCHours()*60*60+i.getUTCMinutes()*60+i.getUTCSeconds(),o=t.getUTCHours()*60*60+t.getUTCMinutes()*60+t.getUTCSeconds(),s=this._getWorkHours(t),l=s.length-1;l>=0&&n<e;l--){var c=s[l];if(o>c.start&&a<=c.end){var d=Math.min(o,c.end),u=Math.max(a,c.start),p=(d-u)/60;p>r&&(p=r,u=d-r*60);var f=Math.abs(Math.round((d-u)/60));r-=f,n+=f,o=u}}var y=i;return n===e&&(y=new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),0,0,o))),{added:n,end:y}},_subtractMinuteDate:function(t,e,i){var n=this.getClosestWorkTime({date:t,dir:"past",unit:"minute"}),r=0;i=i||-1,e=Math.abs(e*1),e=Math.round(e);let a=this._isMinutePrecision(n),o=this._subtractMinutesUntilHourStart(n,e);r+=o.added,n=o.end;for(var s=0,l=[],c=0;r<e;){var d=this.$gantt.date.day_start(new Date(n)),u=!1;n.valueOf()===d.valueOf()&&(d=this.$gantt.date.add(d,-1,"day"),u=!0);var p=new Date(Date.UTC(d.getUTCFullYear(),d.getUTCMonth(),d.getUTCDate(),23,59,59,999)).valueOf();p!==s&&(l=this._getWorkHours(d),c=this._getMinutesPerDay(d),s=p);var f=e-r,y=this._getTimeOfDayStamp(n,u);if(!l.length||!c){n=this.$gantt.date.add(n,-1,"day");continue}if(l[l.length-1].end<=y&&f>c){r+=c,n=this.$gantt.date.add(n,-1,"day");continue}for(var h=!1,m=null,g=null,C=l.length-1;C>=0;C--)if(l[C].start<y-1&&l[C].end>=y-1){h=!0,m=l[C],g=l[C-1];break}if(h)if(y===m.end&&f>=m.durationMinutes)r+=m.durationMinutes,n=this.$gantt.date.add(n,-m.durationMinutes,"minute");else if(!a&&f<=y/60-m.startMinute)r+=f,n=this.$gantt.date.add(n,-f,"minute");else if(a)f<=y/60-m.startMinute?(r+=f,n=this.$gantt.date.add(n,-f,"minute")):(r+=y/60-m.startMinute,g?n=new Date(Date.UTC(n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate(),0,0,g.end)):n=this.$gantt.date.day_start(n));else{var b=this._getMinutesPerHour(n);b<=f?(r+=b,n=this._nextDate(n,"hour",i)):(o=this._subtractMinutesUntilHourStart(n,f),r+=o.added,n=o.end)}else if(n.getUTCHours()===0&&n.getUTCMinutes()===0&&n.getUTCSeconds()===0){var E=this._getClosestWorkTimePast(n,"hour");if(E.valueOf()===n.valueOf()){var E=this.$gantt.date.add(n,-1,"day"),P=this._getWorkHours(E);if(P.length){var N=P[P.length-1];E.setUTCSeconds(N.durationSeconds)}}n=E}else n=this._getClosestWorkTimePast(new Date(n-1),"hour")}if(r<e){var I=e-r;o=this._subtractMinutesUntilHourStart(n,I),r+=o.added,n=o.end}return n},_calculateMinuteEndDate:function(t,e,i){var n=new Date(t),r=0;i=i||1,e=Math.abs(e*1),e=Math.round(e);var a=this._addMinutesUntilHourEnd(n,e);r+=a.added,n=a.end;for(var o=0,s=[],l=0,c=this._isMinutePrecision(n);r<e;){var d=this.$gantt.date.day_start(new Date(n)).valueOf();d!==o&&(s=this._getWorkHours(n),l=this._getMinutesPerDay(n),o=d);var u=e-r,p=this._getTimeOfDayStamp(n);if(!s.length||!l){n=this.$gantt.date.add(this.$gantt.date.day_start(n),1,"day");continue}if(s[0].start>=p&&u>=l){if(r+=l,u==l){n=new Date(Date.UTC(n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate(),0,0,s[s.length-1].end));break}else n=this.$gantt.date.add(n,1,"day"),n=this.$gantt.date.day_start(n);continue}for(var f=!1,y=null,h=0;h<s.length;h++)if(s[h].start<=p&&s[h].end>p){f=!0,y=s[h];break}if(f)if(p===y.start&&u>=y.durationMinutes)r+=y.durationMinutes,n=this.$gantt.date.add(n,y.durationMinutes,"minute");else if(u<=y.endMinute-p/60)r+=u,n=this.$gantt.date.add(n,u,"minute");else{var m=this._getMinutesPerHour(n);m<=u?(r+=m,c?n=this.$gantt.date.add(n,m,"minute"):n=this._nextDate(n,"hour",i)):(a=this._addMinutesUntilHourEnd(n,u),r+=a.added,n=a.end)}else n=this._getClosestWorkTimeFuture(n,"hour")}if(r<e){var g=e-r;a=this._addMinutesUntilHourEnd(n,g),r+=a.added,n=a.end}return n},getClosestWorkTime:function(){var t=this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper,arguments);return this._getClosestWorkTime(t.date,t.unit,t.dir)},_getClosestWorkTime:function(t,e,i){var n=new Date(t);if(this._isWorkTime(n,e))return n;if(n=this.$gantt.date[e+"_start"](n),i=="any"||!i){var r=this._getClosestWorkTimeFuture(n,e),a=this._getClosestWorkTimePast(n,e);Math.abs(r-t)<=Math.abs(t-a)?n=r:n=a}else i=="past"?n=this._getClosestWorkTimePast(n,e):n=this._getClosestWorkTimeFuture(n,e);return n},_getClosestWorkTimeFuture:function(t,e){return this._getClosestWorkTimeGeneric(t,e,1)},_getClosestWorkTimePast:function(t,e){var i=this._getClosestWorkTimeGeneric(t,e,-1);return this.$gantt.date.add(i,1,e)},_findClosestTimeInDay:function(t,e,i){var n=new Date(t),r=null,a=!1;this._getWorkHours(n).length||(n=this._getClosestWorkTime(n,"day",e<0?"past":"future"),e<0&&(n=new Date(n.valueOf()-1),a=!0),i=this._getWorkHours(n));var o=this._getTimeOfDayStamp(n);if(a&&(o=this._getTimeOfDayStamp(new Date(n.valueOf()+1),a)),e>0){for(var s=0;s<i.length;s++)if(i[s].start>=o){r=new Date(Date.UTC(n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate(),0,0,i[s].start));break}}else for(var s=i.length-1;s>=0;s--)if(i[s].end<=o){r=new Date(Date.UTC(n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate(),0,0,i[s].end));break}else if(i[s].end>o&&i[s].start<=o){r=new Date(Date.UTC(n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate(),0,0,o));break}return r},_getClosestWorkMinute:function(t,e,i){var n=new Date(t),r=this._getWorkHours(n),a=this._findClosestTimeInDay(n,i,r);return a||(i>0?(n=this.calculateEndDate(n,i,e),n=this.$gantt.date.day_start(n)):(n=this.calculateEndDate(n,i,"day"),n=this.$gantt.date.day_start(n),n=this.$gantt.date.add(n,1,"day"),n=new Date(n.valueOf()-1)),r=this._getWorkHours(n),a=this._findClosestTimeInDay(n,i,r)),i<0&&(a=this.$gantt.date.add(a,-1,e)),a},_getClosestWorkTimeGeneric:function(t,e,i){if(e==="hour"||e==="minute")return this._getClosestWorkMinute(t,e,i);for(var n=this._getUnitOrder(e),r=this.units[n-1],a=t,o=3e3,s=0;!this._isWorkTime(a,e)&&!(r&&!this._isWorkTime(a,r)&&(i>0?a=this._getClosestWorkTimeFuture(a,r):a=this._getClosestWorkTimePast(a,r),this._isWorkTime(a,e)));){if(s++,s>o)return this.$gantt.assert(!1,"Invalid working time check"),!1;a=this.$gantt.date.add(a,i,e),this.$gantt.date[e+"_start"]&&(a=this.$gantt.date[e+"_start"](a))}return a},hasWorkTime:function(){var t=this.getConfig(),e=t.dates,i=[0,1,2,3,4,5,6];for(var n in t.dates);var r=this._checkWorkHours(t.hours),a=!1;return i.forEach((function(o){if(!a){var s=e[o];s===!0?a=r:Array.isArray(s)&&(a=this._checkWorkHours(s))}}).bind(this)),a},_checkWorkHours:function(t){if(t.length===0)return!1;for(var e=!1,i=0;i<t.length;i+=2)t[i]!==t[i+1]&&(e=!0);return e},_isMinutePrecision:function(t){let e=!1;return this._getWorkHours(t).forEach(function(i){(i.startMinute%60||i.endMinute%60)&&(e=!0)}),e}};var Wr={isLegacyResourceCalendarFormat:function(t){if(!t)return!1;for(var e in t)if(t[e]&&typeof t[e]=="object")return!0;return!1},getResourceProperty:function(t){var e=t.resource_calendars,i=t.resource_property;if(this.isLegacyResourceCalendarFormat(e))for(var n in t){i=n;break}return i},getCalendarIdFromLegacyConfig:function(t,e){if(e)for(var i in e){var n=e[i];if(t[i]){var r=n[t[i]];if(r)return r}}return null}};function jE(){function t(r){return r.map(function(a){return a&&a.resource_id?a.resource_id:a}).sort().join("-")}var e={};function i(r,a){return a.mergeCalendars(r.map(function(o){var s=o&&o.resource_id?o.resource_id:o;return a.getResourceCalendar(s)}))}function n(r,a){var o=t(r);if(r.length){if(r.length===1)return a.getResourceCalendar(o).id;if(e[o])return e[o].id;var s=i(r,a);return e[o]=s,a.addCalendar(s)}else return null}return{getCalendarIdFromMultipleResources:n}}var WE=jE();function Ah(t){this.$gantt=t,this._calendars={},this._legacyConfig=void 0,this.$gantt.attachEvent("onGanttReady",(function(){this.$gantt.config.resource_calendars&&(this._isLegacyConfig=Wr.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))}Ah.prototype={_calendars:{},_convertWorkTimeSettings:function(t){let e=t.days;if(typeof e=="object"&&!Array.isArray(e)&&e!==null){let i={};if(e?.weekdays)for(let n=0;n<7;n++)i[n]=e.weekdays[n];e?.dates&&Object.entries(e.dates).forEach(([n,r])=>{i[new Date(n).valueOf()]=r}),Object.entries(i).forEach(([n,r])=>{r instanceof Array||(i[n]=!!r)}),t={...t,dates:i}}else if(e&&!t.dates){t.dates=t.dates||{};for(let i=0;i<e.length;i++)t.dates[i]=e[i],e[i]instanceof Array||(t.dates[i]=!!e[i])}return delete t.days,t},mergeCalendars:function(){var t=[],e=arguments;if(Array.isArray(e[0]))t=e[0].slice();else for(var i=0;i<arguments.length;i++)t.push(arguments[i]);var n=new gh,r;return t.forEach((function(a){r?r=this._createCalendarFromConfig(n.merge(r,a)):r=a}).bind(this)),this.createCalendar(r)},_createCalendarFromConfig:function(t){var e=new Ic(this.$gantt,mh(this.$gantt));e.id=String(uc());var i=this._convertWorkTimeSettings(t);if(i.customWeeks)for(var n in i.customWeeks)i.customWeeks[n]=this._convertWorkTimeSettings(i.customWeeks[n]);return e._setConfig(i),e},createCalendar:function(t){var e;t||(t={}),t.getConfig?e=ve(t.getConfig()):t.worktime?e=ve(t.worktime):e=ve(t);var i=ve(this.defaults.fulltime.worktime);return Jn(e,i),this._createCalendarFromConfig(e)},getCalendar:function(t){t=t||"global";var e=this._calendars[t];return e||(this.createDefaultCalendars(),e=this._calendars[t]),e},getCalendars:function(){var t=[];for(var e in this._calendars)t.push(this.getCalendar(e));return t},_getOwnCalendar:function(t){var e=this.$gantt.config;if(t[e.calendar_property])return this.getCalendar(t[e.calendar_property]);if(e.resource_calendars){var i,n,r;if(this._legacyConfig===!1?r=e.resource_property:r=Wr.getResourceProperty(e),Array.isArray(t[r])&&t[r].length)e.dynamic_resource_calendars?n=WE.getCalendarIdFromMultipleResources(t[r],this):i=this.getResourceCalendar(t[r]);else if(this._legacyConfig===void 0&&(this._legacyConfig=Wr.isLegacyResourceCalendarFormat(e.resource_calendars)),this._legacyConfig)var n=Wr.getCalendarIdFromLegacyConfig(t,e.resource_calendars);else if(r&&t[r]&&e.resource_calendars[t[r]])var i=this.getResourceCalendar(t[r]);if(n&&(i=this.getCalendar(n)),i)return i}return null},getResourceCalendar:function(t){if(t==null)return this.getCalendar();var e=null;typeof t=="number"||typeof t=="string"?e=t:e=t.id||t.key;var i=this.$gantt.config,n=i.resource_calendars,r=null;if(Array.isArray(t)&&t.length===1&&(typeof t[0]=="object"?e=t[0].resource_id:e=t[0]),n){if(this._legacyConfig===void 0&&(this._legacyConfig=Wr.isLegacyResourceCalendarFormat(i.resource_calendars)),this._legacyConfig){for(var a in n)if(n[a][e]){r=n[a][e];break}}else var r=n[e];if(r)return this.getCalendar(r)}return this.getCalendar()},getTaskCalendar:function(t){var e=this.$gantt,i;if(t==null)return this.getCalendar();if((typeof t=="number"||typeof t=="string")&&e.isTaskExists(t)?i=e.getTask(t):i=t,!i)return this.getCalendar();var n=this._getOwnCalendar(i),r=!!e.getState().group_mode;if(!n&&e.config.inherit_calendar&&e.isTaskExists(i.parent)){for(var a=i;e.isTaskExists(a.parent)&&(a=e.getTask(a.parent),!(e.isSummaryTask(a)&&(n=this._getOwnCalendar(a),n))););r&&!n&&t.$effective_calendar&&(n=this.getCalendar(t.$effective_calendar))}return n||this.getCalendar()},addCalendar:function(t){if(!this.isCalendar(t)){var e=t.id;t=this.createCalendar(t),t.id=e}if(t._tryChangeCalendarSettings(function(){})){var i=this.$gantt.config;return t.id=t.id||uc(),this._calendars[t.id]=t,i.worktimes||(i.worktimes={}),i.worktimes[t.id]=t.getConfig(),t.id}else return this.$gantt.callEvent("onCalendarError",[{message:"Invalid calendar settings, no worktime available"},t]),null},deleteCalendar:function(t){var e=this.$gantt.config;return t&&this._calendars[t]?(delete this._calendars[t],e.worktimes&&e.worktimes[t]&&delete e.worktimes[t],!0):!1},restoreConfigCalendars:function(t){for(var e in t)if(!this._calendars[e]){var i=t[e],n=this.createCalendar(i);n.id=e,this.addCalendar(n)}},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 t=this.$gantt.config;this.restoreConfigCalendars(this.defaults),this.restoreConfigCalendars(t.worktimes)},isCalendar:function(t){var e=[t.isWorkTime,t.setWorkTime,t.getWorkHours,t.unsetWorkTime,t.getClosestWorkTime,t.calculateDuration,t.hasDuration,t.calculateEndDate];return e.every(function(i){return i instanceof Function})}};function Sc(t,e){this.argumentsHelper=e,this.$gantt=t}Sc.prototype={getWorkHours:function(){return[0,24]},setWorkTime:function(){return!0},unsetWorkTime:function(){return!0},isWorkTime:function(){return!0},getClosestWorkTime:function(e){var e=this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper,arguments);return e.date},calculateDuration:function(){var t=this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper,arguments),e=t.start_date,i=t.end_date,n=t.unit,r=t.step;return this._calculateDuration(e,i,n,r)},_calculateDuration:function(t,e,i,n){var r=this.$gantt.date,a={week:1e3*60*60*24*7,day:1e3*60*60*24,hour:1e3*60*60,minute:1e3*60},o=0;if(a[i])o=Math.round((e-t)/(n*a[i]));else{for(var s=new Date(t),l=new Date(e);s.valueOf()<l.valueOf();)o+=1,s=r.add(s,n,i);s.valueOf()!=e.valueOf()&&(o+=(l-s)/(r.add(s,n,i)-s))}return Math.round(o)},hasDuration:function(){var t=this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper,arguments),e=t.start_date,i=t.end_date,n=t.unit;return n?(e=new Date(e),i=new Date(i),e.valueOf()<i.valueOf()):!1},hasWorkTime:function(){return!0},equals:function(t){return t instanceof Sc},calculateEndDate:function(){var t=this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper,arguments),e=t.start_date,i=t.duration,n=t.unit,r=t.step;return this.$gantt.date.add(e,r*i,n)}};function Ih(t){this.$gantt=t.$gantt,this.argumentsHelper=mh(this.$gantt),this.calendarManager=t,this.$disabledCalendar=new Sc(this.$gantt,this.argumentsHelper)}Ih.prototype={_getCalendar:function(t){var e;if(!this.$gantt.config.work_time)e=this.$disabledCalendar;else{var i=this.calendarManager;t.task?e=i.getTaskCalendar(t.task):t.id?e=i.getTaskCalendar(t):t.calendar&&(e=t.calendar),e||(e=i.getTaskCalendar())}return e},getWorkHours:function(t){t=this.argumentsHelper.getWorkHoursArguments.apply(this.argumentsHelper,arguments);var e=this._getCalendar(t);return e.getWorkHours(t.date)},setWorkTime:function(t,e){return t=this.argumentsHelper.setWorkTimeArguments.apply(this.argumentsHelper,arguments),e||(e=this.calendarManager.getCalendar()),e.setWorkTime(t)},unsetWorkTime:function(t,e){return t=this.argumentsHelper.unsetWorkTimeArguments.apply(this.argumentsHelper,arguments),e||(e=this.calendarManager.getCalendar()),e.unsetWorkTime(t)},isWorkTime:function(t,e,i,n){var r=this.argumentsHelper.isWorkTimeArguments.apply(this.argumentsHelper,arguments);return n=this._getCalendar(r),n.isWorkTime(r)},getClosestWorkTime:function(t){t=this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper,arguments);var e=this._getCalendar(t);return e.getClosestWorkTime(t)},calculateDuration:function(){var t=this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper,arguments),e=this._getCalendar(t);return e.calculateDuration(t)},hasDuration:function(){var t=this.argumentsHelper.hasDurationArguments.apply(this.argumentsHelper,arguments),e=this._getCalendar(t);return e.hasDuration(t)},calculateEndDate:function(e){var e=this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper,arguments),i=this._getCalendar(e);return i.calculateEndDate(e)}};var VE=function(t,e){return{getWorkHours:function(i){return e.getWorkHours(i)},setWorkTime:function(i){return e.setWorkTime(i)},unsetWorkTime:function(i){e.unsetWorkTime(i)},isWorkTime:function(i,n,r){return e.isWorkTime(i,n,r)},getClosestWorkTime:function(i){return e.getClosestWorkTime(i)},calculateDuration:function(i,n,r){return e.calculateDuration(i,n,r)},_hasDuration:function(i,n,r){return e.hasDuration(i,n,r)},calculateEndDate:function(i,n,r,a){return e.calculateEndDate(i,n,r,a)},mergeCalendars:oe(t.mergeCalendars,t),createCalendar:oe(t.createCalendar,t),addCalendar:oe(t.addCalendar,t),getCalendar:oe(t.getCalendar,t),getCalendars:oe(t.getCalendars,t),getResourceCalendar:oe(t.getResourceCalendar,t),getTaskCalendar:oe(t.getTaskCalendar,t),deleteCalendar:oe(t.deleteCalendar,t)}},KE={create:VE};function Sh(t){var e=new Ah(t),i=new Ih(e),n=KE.create(e,i);Jn(t,n)}var vh={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 Ch(t={}){let e=t.config||{},i={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},e),locale:t.locale||vh,templates:t.templates||{},getTask:t.getTask||function(n){return null},isTaskExists:t.isTaskExists||function(n){return!1},isSummaryTask:t.isSummaryTask||function(n){return!1},getState:function(){return{group_mode:!1}},callEvent:function(n,r){let a=t.onEvent;return a&&a(n,r),!0},attachEvent:function(){return 0},checkEvent:function(){return!1},detachEvent:function(){},defined:ph,mixin:Jn,copy:ve,assert:function(n,r){if(!n){if(t.throwOnAssert)throw new Error("[calendar] "+r);t.silent!==!0&&console.error("[calendar]",r)}},$services:{getService:function(){return null}},$ui:{getView:function(){return null}}};return i._correct_dst_change=function(n){return n},i.date=hh(i),i.date.init(),Sh(i),i}function YE(t={}){let e=Ch(t);return{addCalendar:function(i){return e.addCalendar(i)},deleteCalendar:function(i){return e.deleteCalendar(i)},getCalendar:function(i){return e.getCalendar(i)},getCalendars:function(){return e.getCalendars()},mergeCalendars:function(){return e.mergeCalendars.apply(e,arguments)},getTaskCalendar:function(i){return e.getTaskCalendar(i)},getResourceCalendar:function(i){return e.getResourceCalendar(i)},setWorkTime:function(i){return e.setWorkTime(i)},unsetWorkTime:function(i){return e.unsetWorkTime(i)},isWorkTime:function(){return e.isWorkTime.apply(e,arguments)},getClosestWorkTime:function(){return e.getClosestWorkTime.apply(e,arguments)},getWorkHours:function(){return e.getWorkHours.apply(e,arguments)},calculateDuration:function(){return e.calculateDuration.apply(e,arguments)},calculateEndDate:function(){return e.calculateEndDate.apply(e,arguments)},_internals:e}}var Dh={createCalendar:YE};var kJ=3600*1e3;function Ph(t){return{getActivity(e){return t.getActivity(e)}}}var{createCalendar:GE}=Dh,Vr="__replay_default__";function $E(t){if(!t||t.length===0||typeof t[0]=="string")return t;let e=t.map(Number);if(e.some(a=>Number.isNaN(a)))return t;let i=e[0],n=e[e.length-1];return e.every((a,o)=>a===i+o)?[`${i}:00-${n+1}:00`]:t}var Th={hours:["8:00-16:00"],days:[!1,!0,!0,!0,!0,!0,!1]},_h="__main_global__",qE={hours:["8:00-12:00","13:00-17:00"],days:[!1,!0,!0,!0,!0,!0,!1]};function Eh(t){return!t||t.hours===void 0||t.hours.length>0||t.days?.some(e=>Array.isArray(e)&&e.length>0)===!0?!0:Object.values(t.dates??{}).some(e=>Array.isArray(e)&&e.length>0)}function zE(t){let e={};if(Array.isArray(t.days))for(let n=0;n<t.days.length;n+=1)e[n]=t.days[n];if(t.dates)for(let[n,r]of Object.entries(t.dates))e[n]=r;let i={hours:$E(t.hours),dates:e};return t.customWeeks&&(i.customWeeks=t.customWeeks),i}function jo(t){let e=GE({config:{work_time:!0}});e.addCalendar({id:Vr,worktime:Th}),e.addCalendar({id:_h,worktime:qE});let i=new Set(t.filter(d=>!Eh(d.worktime)).map(d=>String(d.id))),n=t.filter(d=>Eh(d.worktime));for(let d of n)e.addCalendar({id:d.id,worktime:d.worktime?zE(d.worktime):Th});let r=dh(e),a=r.getCalendar(Vr),o=r.getCalendar(_h);if(!a||!o)throw new Error("[replay-calendar] fallback calendars failed to register in work-calendar instance");let s=new Set([Vr]);for(let d of n)s.add(String(d.id));let l=new Map;return{reader:{getCalendar(d){let u=String(d),p=l.get(u);if(p)return p;let f=a;return s.has(u)?f=r.getCalendar(d)??a:i.has(u)&&(f=o),l.set(u,f),f}}}}function Rh(t){return{hasChildren(e){return t.hasChildren(e)},getParentStartDateIfHasPredecessors(e){let i=t.getActivity(e);if(!i)return null;let n=t.getParent(i.id);return!n||t.getIncomingLinkIds(n.id).length===0?null:n.startDate},getDescendantIds(e){return JE(t,e).map(i=>String(i))},getAncestorIds(e){let i=[],n=t.getActivity(e);for(;n;){let r=n.parentId;if(r===null)break;let a=t.getActivity(r);if(!a)break;i.push(String(r)),n=a}return i},getChildProgressInfo(e){return t.getChildren(e).map(n=>{let r=t.getActivity(n);return{id:n,progress:Number(r?.progress??0),ponderator:Number(r?.ponderator??0)}})},getChildHhInfo(e){return t.getChildren(e).map(n=>{let r=t.getActivity(n);return{id:n,workHours:Number(r?.workHours??0),progress:Number(r?.progress??0),realWorkHours:Number(r?.realWorkHours??0)}})},getChildUsedCostInfo(e){return t.getChildren(e).map(n=>{let r=t.getActivity(n);return{id:n,usedCost:Number(r?.usedCost??0)}})},getChildCostInfo(e){return t.getChildren(e).map(n=>{let r=t.getActivity(n);return{id:n,cost:Number(r?.cost??0)}})}}}function JE(t,e){let i=[],n=new $t;for(let r of t.getChildren(e))n.enqueue(r);for(;!n.isEmpty();){let r=n.dequeue();i.push(r);for(let a of t.getChildren(r))n.enqueue(a)}return i}var Wo=class{_cache={closestWorkTime:new Map,endDate:new Map,duration:new Map};reader;constructor(e){this.reader=e.reader}resolveCalendar(e){let i=kh(e);return this.reader.getCalendar(i??Vr)}getClosestWorkTime(e){let i=`${Cc(e.task)}|${e.dir}|${e.date.getTime()}`;return vc(this._cache.closestWorkTime,i,()=>this.resolveCalendar(e.task).getClosestWorkTime({direction:e.dir,date:e.date,unit:dt.HOUR}))}isWorkTime(e){return this.resolveCalendar(e.task).isWorkTime(e.date,dt.MINUTE)}calculateEndDate(e){let i=`${Cc(e.task)}|${e.startDate.getTime()}|${e.durationHours}`;return vc(this._cache.endDate,i,()=>this.resolveCalendar(e.task).calculateEndDate(e.startDate,e.durationHours))}calculateDuration(e){let i=`${Cc(e.task)}|${e.startDate.getTime()}|${e.endDate.getTime()}`;return vc(this._cache.duration,i,()=>this.resolveCalendar(e.task).calculateDuration(e.startDate,e.endDate))}clearCache(){this._cache.closestWorkTime.clear(),this._cache.endDate.clear(),this._cache.duration.clear()}};function vc(t,e,i){let n=t.get(e);if(n!==void 0)return n;let r=i();return t.set(e,r),r}var XE="__default__";function kh(t){if(!t)return null;let e=t.calendarId;return e==null?null:String(e)}function Cc(t){return kh(t)??XE}var Vo=class{constructor(e){this.activities=e}activities;_childrenByParent=new Map;_roots=[];_dirty=!1;markDirty(){this._dirty=!0}getChildren(e){return this._dirty&&(this.rebuild(),this._dirty=!1),this._childrenByParent.get(String(e))??[]}hasChildren(e){return this._dirty&&(this.rebuild(),this._dirty=!1),(this._childrenByParent.get(String(e))?.length??0)>0}getRootIds(){return this._dirty&&(this.rebuild(),this._dirty=!1),[...this._roots]}isChildOf(e,i){let n=this.activities.get(e)?.parentId,r=0,a=this.activities.size;for(;n&&!W(n);){if(n===i)return!0;if(++r>a)return!1;n=this.activities.get(n)?.parentId}return!1}getParent(e){let i=this.activities.get(e)?.parentId;return!i||W(i)?null:this.activities.get(i)??null}getParentId(e){return this.activities.get(e)?.parentId??null}addChild(e,i){if(this._dirty)return;if(W(e)){this._roots.push(i);return}let n=String(e),r=this._childrenByParent.get(n);r?r.push(i):this._childrenByParent.set(n,[i])}rebuild(){this._childrenByParent.clear(),this._roots=[];for(let i of this.activities.values()){if(W(i.parentId)){this._roots.push(i.id);continue}let n=String(i.parentId),r=this._childrenByParent.get(n)??[];r.push(i.id),this._childrenByParent.set(n,r)}let e=(i,n)=>{let r=this.activities.get(i),a=this.activities.get(n);return r&&a?yn(r,a):String(i).localeCompare(String(n))};this._roots.sort(e);for(let i of this._childrenByParent.values())i.sort(e)}};var Ko=class{checkedSet=new Set;hiddenSet=new Set;activeFilter=null;activeOrder=null;isChecked(e){return this.checkedSet.has(e)}isVisible(e){return!this.hiddenSet.has(e)}hiddenIds(){return[...this.hiddenSet]}getActiveFilter(){return this.activeFilter}setActiveFilter(e){this.activeFilter=e}getActiveOrder(){return this.activeOrder}setActiveOrder(e){this.activeOrder=e}checkedIds(){return[...this.checkedSet]}checkedCount(){return this.checkedSet.size}setChecked(e,i){return i===this.checkedSet.has(e)?!1:(i?this.checkedSet.add(e):this.checkedSet.delete(e),!0)}setVisible(e,i){return i===!this.hiddenSet.has(e)?!1:(i?this.hiddenSet.delete(e):this.hiddenSet.add(e),!0)}forget(e){this.checkedSet.delete(e),this.hiddenSet.delete(e)}hydrate(e){this.checkedSet=new Set(e.checkedIds??[]),this.hiddenSet=new Set(e.hiddenIds??[]),this.activeFilter=null,this.activeOrder=null}snapshot(){return{checked:new Set(this.checkedSet),hidden:new Set(this.hiddenSet),activeFilter:this.activeFilter,activeOrder:this.activeOrder}}restore(e){this.checkedSet=new Set(e.checked),this.hiddenSet=new Set(e.hidden),this.activeFilter=e.activeFilter,this.activeOrder=e.activeOrder}};function Ec(t,e,i,n,r,a){return{valueId:e,id:t,label:i,color:n,level:r,sequence:a,children:new Map,activities:[]}}function Lh(t,e,i,n,r){let{attributeKey:a,startLevel:o,depth:s}=e;for(let l of t){let c=i.assignmentByActivityId.get(String(l.id)),d=c===void 0?[]:Nd(i,c,o,s),u=d.length===0?[xi]:d,p=n;u.forEach((f,y)=>{let h=p.children.get(f);if(h===void 0){let m=i.valueById.get(f);h=Ec(r?Aa(p.id,a,f):ga(a,f),f,m?.label??(f===xi?ya:f),m?.color??null,n.level+1+y,m?.sequence??Number.MAX_SAFE_INTEGER),p.children.set(f,h)}p=h}),p.activities.push(l)}return n}function Oh(t){let e=t.activities.length;for(let i of t.children.values())e+=Oh(i);return e}function Dc(t,e){let i=[...t.children.values()];return i.sort((n,r)=>n.valueId===xi?1:r.valueId===xi?-1:n.sequence!==r.sequence?n.sequence-r.sequence:n.valueId.localeCompare(r.valueId)),e===Vt.DESCENDING&&i.reverse(),i}var ZE=1,QE=Number.POSITIVE_INFINITY;function Tc(t){return{kind:pn.ACTIVITY,activityId:String(t.id)}}function tP(t,e,i){let n=[],r=new Map;for(let a of e){if(!t.has(String(a.id)))continue;let o=i(a.id),s=o===null?null:String(o);if(s===null||!t.has(s)){n.push(a);continue}let l=r.get(s);l===void 0?r.set(s,[a]):l.push(a)}return{roots:n,childrenOf:r}}function bh(t,e){let{roots:i,childrenOf:n}=tP(t,e.activitiesInVisualOrder,e.parentOf),r=e.wbsDepth??QE,a=l=>n.get(String(l.id))??[],o=l=>{let c=[],d=u=>{for(let p of u){let f=a(p);f.length===0?c.push(p):d(f)}};return d(l),c},s=(l,c)=>{if(c>r){let d=o(l),u=e.comparator===null?d:Da(d,e.comparator,e.orderMode,()=>!1);for(let p of u)e.rows.push(Tc(p));return}for(let d of l){e.rows.push(Tc(d));let u=a(d);u.length>0&&s(u,c+1)}};s(i,ZE)}function eP(t,e){let i=new Set(t.map(n=>String(n.id)));for(let n of t){let r=e.parentOf(n.id);for(;r!==null;)i.add(String(r)),r=e.parentOf(r)}bh(i,e)}function iP(t,e){let{rows:i}=e;if(e.group.includeWbs){eP(t.activities,{activitiesInVisualOrder:e.activitiesInVisualOrder,parentOf:e.parentOf,wbsDepth:e.wbsDepth,comparator:e.comparator,orderMode:e.orderMode,rows:i});return}for(let n of Da([...t.activities],e.comparator,e.orderMode,e.hasChildren))i.push({kind:pn.ACTIVITY,activityId:String(n.id)})}function _c(t,e,i,n){let{group:r,rows:a}=n;if(a.push({kind:pn.GROUP,id:t.id,label:t.label,level:t.level,color:t.color,activityCount:Oh(t)}),r.collapsedIds.has(t.id))return;for(let s of Dc(t,e))_c(s,e,i,n);if(t.activities.length===0)return;let o=r.secondary;if(i&&o!=null&&n.secondaryCatalog!=null){let s=Lh(t.activities,o,n.secondaryCatalog,Ec(t.id,"","",null,t.level,0),!0);for(let l of Dc(s,o.direction))_c(l,o.direction,!1,n);return}iP(t,n)}function Nh(t){let e=t.activitiesInVisualOrder.filter(s=>t.isVisible(s.id));if(t.group===null||t.catalog===null){if(t.wbsDepth===null)return e.map(Tc);let s=[];return bh(new Set(e.map(l=>String(l.id))),{activitiesInVisualOrder:e,parentOf:t.parentOf,wbsDepth:t.wbsDepth,comparator:t.comparator,orderMode:t.orderMode,rows:s}),s}let{group:i,catalog:n}=t,r=Lh(e,i,n,Ec("","","",null,-1,0),!1),a=[],o={group:i,activitiesInVisualOrder:t.activitiesInVisualOrder,parentOf:t.parentOf,hasChildren:t.hasChildren,comparator:t.comparator,orderMode:t.orderMode,wbsDepth:t.wbsDepth,secondaryCatalog:t.secondaryCatalog,rows:a};for(let s of Dc(r,i.direction))_c(s,i.direction,!0,o);return a}var Yo=class t{catalogs=new Map;group=null;wbsDepth=null;getCatalog(e){return this.catalogs.get(e)??null}getCatalogMap(){return this.catalogs}setCatalogs(e){let i=new Map;for(let n of e)i.set(n.key,Od(n));this.catalogs=i}getGroup(){return this.group}setGroup(e){this.group=e}getWbsDepth(){return this.wbsDepth}setWbsDepth(e){this.wbsDepth=e}clone(){let e=new t;return e.catalogs=new Map(this.catalogs),e.group=this.group===null?null:S(this.group),e.wbsDepth=this.wbsDepth,e}};var nP={settings:null,projectState:null,latestRunLog:null},Xn=class t{_activities=new Map;_missingSchedulingStateCount=0;_lastStartDate=new Map;_promotionSnapshot=new Map;_progressFallback=new Map;_links=new Map;_outgoing=new Map;_incoming=new Map;_hierarchy;_buildOrderComparator;_cache={ids:null,visualOrderIds:null,visualRows:null,orderComparator:null};_writeCapture=new mo;_viewState=new Ko;_viewAttributes=new Yo;_filterProjection=null;_viewStateBefore=null;_lastStartDateBefore=null;_promotionSnapshotBefore=null;_missingSchedulingStateCountBefore=null;_dataDate=nP;_dataDateBefore=null;_calendar;_flags;_calendarSnapshot;_isDataDateEnabled;constructor(e,i=()=>null,n=()=>!0){this._buildOrderComparator=i,this._isDataDateEnabled=n,this._calendarSnapshot=S(e.calendars);for(let r of e.activities)this._activities.set(r.id,r);for(let r of this._activities.values())Di(r)&&(this._missingSchedulingStateCount+=1);for(let r of e.links){let a={...r,freeSlackHours:r.freeSlackHours??null,isCritical:r.isCritical===!0};this._links.set(String(r.id),a),this._indexLink(a)}this._calendar=new Wo(jo(this._calendarSnapshot)),this._flags=aP(e),this._hierarchy=new Vo(this._activities),this._hierarchy.rebuild()}fork(){let e=new t({activities:this.getAllActivities().map(Be),links:this.getAllLinks().map(i=>({...i})),calendars:S(this._calendarSnapshot)},this._buildOrderComparator,this._isDataDateEnabled);return e._viewState.restore(S(this._viewState.snapshot())),e._lastStartDate=new Map(Array.from(this._lastStartDate,([i,n])=>[i,new Date(n)])),e._promotionSnapshot=new Map(Array.from(this._promotionSnapshot,([i,n])=>[i,S(n)])),e._progressFallback=new Map(this._progressFallback),e._flags=S(this._flags),e._filterProjection=S(this._filterProjection),e._viewAttributes=this._viewAttributes.clone(),e._dataDate=S(this._dataDate),e}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}hasCompleteSchedulingState(){return this._missingSchedulingStateCount===0}restoreFork(e){this._activities=e._activities,this._missingSchedulingStateCount=e._missingSchedulingStateCount,this._lastStartDate=e._lastStartDate,this._promotionSnapshot=e._promotionSnapshot,this._progressFallback=e._progressFallback,this._links=e._links,this._outgoing=e._outgoing,this._incoming=e._incoming,this._hierarchy=e._hierarchy,this._cache=e._cache,this._calendar=e._calendar,this._flags=e._flags,this._viewState=e._viewState,this._viewAttributes=e._viewAttributes,this._filterProjection=e._filterProjection,this._dataDate=e._dataDate}dataDateSettings(){return this._dataDate.settings}isDataDateEnabled(){return this._isDataDateEnabled()}dataDateProjectState(){return this._dataDate.projectState}dataDateLatestRunLog(){return this._dataDate.latestRunLog}setDataDateSettings(e){this._captureDataDateOnce(),this._dataDate={...this._dataDate,settings:S(e)}}setDataDateProjectState(e){this._captureDataDateOnce(),this._dataDate={...this._dataDate,projectState:S(e)}}setDataDateLatestRunLog(e){this._captureDataDateOnce(),this._dataDate={...this._dataDate,latestRunLog:S(e)}}_captureDataDateOnce(){this._writeCapture.peek()!==null&&this._dataDateBefore===null&&(this._dataDateBefore=this._dataDate)}getVisualOrderIds(){return this._cache.visualOrderIds?this._cache.visualOrderIds:(this._cache.visualOrderIds=Yd(this).map(e=>String(e.id)),this._cache.visualOrderIds)}invalidateVisualOrderIds(){this._cache.visualOrderIds=null,this.invalidateVisualRows()}forEachActivity(e){for(let[i,n]of this._activities)e(n,i)}getParentId(e){return this._hierarchy.getParentId(e)}getActivity(e){return this._activities.get(String(e))??null}getLastStartDate(e){return this._lastStartDate.get(String(e))??null}setLastStartDate(e,i){this._captureLastStartDateOnce(),this._lastStartDate.set(String(e),i)}getPromotionSnapshot(e){return this._promotionSnapshot.get(String(e))??null}setPromotionSnapshot(e,i){this._capturePromotionSnapshotOnce(),this._promotionSnapshot.set(String(e),i)}getProgressFallback(e){return this._progressFallback.get(String(e))??null}setProgressFallback(e,i){let n=String(e),r=this._progressFallback.get(n)??null;Object.is(r,i)||(this._writeCapture.noteProgressFallback(n,r),i===null?this._progressFallback.delete(n):this._progressFallback.set(n,i))}_capturePromotionSnapshotOnce(){this._writeCapture.peek()!==null&&this._promotionSnapshotBefore===null&&(this._promotionSnapshotBefore=new Map(this._promotionSnapshot))}_captureLastStartDateOnce(){this._writeCapture.peek()!==null&&this._lastStartDateBefore===null&&(this._lastStartDateBefore=new Map(this._lastStartDate))}getLink(e){return this._links.get(String(e))??null}activityExists(e){return this._activities.has(String(e))}isChecked(e){return this._viewState.isChecked(String(e))}isVisible(e){return this._viewState.isVisible(String(e))}checkedIds(){return this._viewState.checkedIds()}hiddenIds(){return this._viewState.hiddenIds()}setChecked(e,i){return this._captureViewStateOnce(),this._viewState.setChecked(String(e),i)}setVisible(e,i){this._captureViewStateOnce();let n=this._viewState.setVisible(String(e),i);return n&&this.invalidateVisualRows(),n}getActiveFilter(){return this._viewState.getActiveFilter()}setActiveFilter(e){this._captureViewStateOnce(),this._viewState.setActiveFilter(e),this._filterProjection=null,this.invalidateVisualRows()}getFilterProjection(){return this._filterProjection}setFilterProjection(e){this._filterProjection=e}getActiveOrder(){return this._viewState.getActiveOrder()}setActiveOrder(e){this._captureViewStateOnce(),this._viewState.setActiveOrder(e),this.invalidateDerivedOrder()}getOrderComparator(){let e=this._viewState.getActiveOrder();return e===null?(this._cache.orderComparator=null,null):this._cache.orderComparator?this._cache.orderComparator:(this._cache.orderComparator=this._buildOrderComparator(e,this._viewAttributes.getCatalogMap()),this._cache.orderComparator)}getOrderMode(){return this._viewState.getActiveOrder()?.mode??we.STANDARD}invalidateDerivedOrder(){this._cache.orderComparator=null,this._cache.visualOrderIds=null,this.invalidateVisualRows()}getViewAttributeCatalogMap(){return this._viewAttributes.getCatalogMap()}setViewAttributeCatalogs(e){this._viewAttributes.setCatalogs(e),this.invalidateDerivedOrder()}getGroup(){return this._viewAttributes.getGroup()}setGroup(e){this._viewAttributes.setGroup(e),this.invalidateVisualRows()}getWbsDepth(){return this._viewAttributes.getWbsDepth()}setWbsDepth(e){this._viewAttributes.setWbsDepth(e),this.invalidateVisualRows()}invalidateVisualRows(){this._cache.visualRows=null}getVisualRows(){if(this._cache.visualRows)return this._cache.visualRows;let e=this._viewAttributes.getGroup(),i=e===null?null:this._viewAttributes.getCatalog(e.attributeKey),n=e?.secondary==null?null:this._viewAttributes.getCatalog(e.secondary.attributeKey),r=[];for(let a of this.getVisualOrderIds()){let o=this.getActivity(a);o!==null&&r.push(o)}return this._cache.visualRows=Nh({activitiesInVisualOrder:r,isVisible:a=>this.isVisible(a),parentOf:a=>this.getParentId(a),hasChildren:a=>this.hasChildren(a),group:e,catalog:i,secondaryCatalog:n,comparator:this.getOrderComparator(),orderMode:this.getOrderMode(),wbsDepth:this._viewAttributes.getWbsDepth()}),this._cache.visualRows}hydrateViewState(e){this._viewState.hydrate(e),this._filterProjection=null,this.invalidateDerivedOrder()}_captureViewStateOnce(){this._writeCapture.peek()!==null&&this._viewStateBefore===null&&(this._viewStateBefore=this._viewState.snapshot())}getOutgoingLinkIds(e){return this._outgoing.get(String(e))??Fh}getIncomingLinkIds(e){return this._incoming.get(String(e))??Fh}getChildren(e){return this._hierarchy.getChildren(e)}hasChildren(e){return this._hierarchy.hasChildren(e)}isChildOf(e,i){return this._hierarchy.isChildOf(e,i)}getParent(e){return this._hierarchy.getParent(e)}getRootIds(){return this._hierarchy.getRootIds()}getClosestWorkTime(e){return this._calendar.getClosestWorkTime(e)}isWorkTime(e){return this._calendar.isWorkTime(e)}calculateEndDate(e){return this._calendar.calculateEndDate(e)}calculateDuration(e){return this._calendar.calculateDuration(e)}clearCalendarCache(){this._calendar.clearCache()}get calendarReader(){return this._calendar.reader}batchUpdate(e){e()}updateActivity(e){}getLiveActivity(e){return this.getActivity(e)}getFlags(){return{...this._flags,allCheckedTaskIds:this._viewState.checkedIds()}}getProjectEnd(){return null}beginWriteCapture(){this._writeCapture.begin(),this._viewStateBefore=null,this._lastStartDateBefore=null,this._promotionSnapshotBefore=null,this._missingSchedulingStateCountBefore=this._missingSchedulingStateCount,this._dataDateBefore=null}peekWriteCapture(){return this._writeCapture.peek()}endWriteCapture(){this._writeCapture.end(),this._viewStateBefore=null,this._lastStartDateBefore=null,this._promotionSnapshotBefore=null,this._missingSchedulingStateCountBefore=null,this._dataDateBefore=null}setActivityField(e,i,n){let r=this.getActivity(e);if(!r)return;let a=Di(r);this._writeCapture.note(String(e),r),r[i]=n,this._updateSchedulingStateCount(a,r),Rc(r,i),i===B.PARENT&&this._hierarchy.markDirty(),Pc(i)&&(this._cache.visualOrderIds=null)}setActivityFieldDynamic(e,i,n){let r=this.getActivity(e);if(!r)return;if(!Object.hasOwn(r,i))throw new Error(`setActivityFieldDynamic: unknown CoreActivity field "${i}"`);let a=Di(r);this._writeCapture.note(String(e),r),Reflect.set(r,i,ch(i,n)),this._updateSchedulingStateCount(a,r),Rc(r,i),i===B.PARENT&&this._hierarchy.markDirty(),Pc(i)&&(this._cache.visualOrderIds=null)}setActivityFields(e,i){let n=this.getActivity(e);if(!n)return;let r=Di(n);this._writeCapture.note(String(e),n);let a=!1;for(let o of Object.keys(i))Reflect.set(n,o,Reflect.get(i,o)),Rc(n,o),o===B.PARENT&&(a=!0),Pc(o)&&(this._cache.visualOrderIds=null);this._updateSchedulingStateCount(r,n),a&&this._hierarchy.markDirty()}addLink(e){this._writeCapture.noteLinkAdd(String(e.id));let i=this._links.get(String(e.id));i&&this._deindexLink(i);let n={...e,freeSlackHours:e.freeSlackHours??null,isCritical:e.isCritical===!0};this._links.set(String(e.id),n),this._indexLink(n)}_indexLink(e){wh(this._outgoing,String(e.source),e.id),wh(this._incoming,String(e.target),e.id)}_deindexLink(e){let i=this._outgoing.get(String(e.source));i&&this._outgoing.set(String(e.source),kc(i,e.id));let n=this._incoming.get(String(e.target));n&&this._incoming.set(String(e.target),kc(n,e.id))}_removeLinkRef(e,i,n){let r=e.get(i);r&&e.set(i,kc(r,n))}_insertLinkRefInOrder(e,i,n){let r=new Set;for(let s of this._links.keys()){if(String(s)===String(n))break;r.add(String(s))}let a=[...e.get(i)??[]],o=a.findIndex(s=>!r.has(String(s)));a.splice(o<0?a.length:o,0,n),e.set(i,a)}setLinkField(e,i,n){let r=this.getLink(e);r&&(this._writeCapture.noteLinkField(String(e),r),r[i]=n)}setLinkEndpoints(e,i,n){let r=this.getLink(e);if(!r)return;let a=String(r.source)!==String(i),o=String(r.target)!==String(n);!a&&!o||(this._writeCapture.noteLinkField(String(e),r),a&&(this._removeLinkRef(this._outgoing,String(r.source),r.id),r.source=i,this._insertLinkRefInOrder(this._outgoing,String(i),r.id)),o&&(this._removeLinkRef(this._incoming,String(r.target),r.id),r.target=n,this._insertLinkRefInOrder(this._incoming,String(n),r.id)))}setLinkFieldDynamic(e,i,n){let r=this.getLink(e);if(r){if(i===Jt.SOURCE){this.setLinkEndpoints(e,String(n),r.target);return}if(i===Jt.TARGET){this.setLinkEndpoints(e,r.source,String(n));return}rP(i)&&(this._writeCapture.noteLinkField(String(e),r),Reflect.set(r,i,n))}}setLinkProplannerId(e,i){let n=this.getLink(e);n&&(this._writeCapture.noteLinkField(String(e),n),n.proplannerId=i)}removeLink(e){let i=this.getLink(e);i&&(this._writeCapture.noteLinkRemove(String(e),i),this._links.delete(String(e)),this._deindexLink(i))}addActivity(e){this._writeCapture.noteInsert(String(e.id));let i=this._activities.get(e.id);i&&Di(i)&&(this._missingSchedulingStateCount-=1),this._activities.set(e.id,e),Di(e)&&(this._missingSchedulingStateCount+=1),this._cache.ids=null,this._cache.visualOrderIds=null,this._hierarchy.addChild(e.parentId,e.id)}removeActivity(e){let i=this.getActivity(e);i&&this._writeCapture.noteRemove(String(e),i),i&&Di(i)&&(this._missingSchedulingStateCount-=1);let n=String(e);this.setProgressFallback(n,null),(this._viewState.isChecked(n)||!this._viewState.isVisible(n))&&this._captureViewStateOnce(),this._viewState.forget(n),this._activities.delete(e),this._lastStartDate.has(String(e))&&(this._captureLastStartDateOnce(),this._lastStartDate.delete(String(e))),this._outgoing.delete(String(e)),this._incoming.delete(String(e)),this._cache.ids=null,this._cache.visualOrderIds=null,this._hierarchy.markDirty()}noteCorrelativeBefore(e,i){this._writeCapture.noteCorrelativeBefore(e,i)}noteScheduledBefore(e,i){this._writeCapture.noteScheduledBefore(e,i)}restoreFromCapture(){let e=this._writeCapture.peek();if(!e)return;let{ops:i,before:n,correlativeBefore:r,scheduledBefore:a,progressFallbackBefore:o}=e;this._undoLinkAdds(i),this._undoInserts(i),this._reInsertRemovedActivities(i),this._reAddRemovedLinks(i),this._restoreLinkFields(i),this._restoreActivityFields(a),this._restoreActivityFields(n),this._restoreCorrelatives(r),this._restoreProgressFallbacks(o),this._missingSchedulingStateCountBefore!==null&&(this._missingSchedulingStateCount=this._missingSchedulingStateCountBefore),this._dataDateBefore!==null&&(this._dataDate=this._dataDateBefore),this._viewStateBefore!==null&&(this._viewState.restore(this._viewStateBefore),this._filterProjection=null,this.invalidateDerivedOrder()),this._promotionSnapshotBefore!==null&&(this._promotionSnapshot=this._promotionSnapshotBefore),this._lastStartDateBefore!==null&&(this._lastStartDate=this._lastStartDateBefore),this._cache.ids=null,this._cache.visualOrderIds=null,this._hierarchy.markDirty()}_restoreProgressFallbacks(e){for(let[i,n]of e)n===null?this._progressFallback.delete(i):this._progressFallback.set(i,n)}_restoreCorrelatives(e){for(let[i,n]of e){let r=this._activities.get(i);r&&(r.correlativeId=n)}}_undoLinkAdds(e){for(let i of e)i.kind===Ct.LINK_ADD&&this._detachLink(i.linkId)}_undoInserts(e){for(let i of e)i.kind===Ct.INSERT&&this._activities.delete(i.activityId)}_reInsertRemovedActivities(e){for(let i of e)i.kind===Ct.REMOVE&&this._activities.set(i.activityId,i.before)}_reAddRemovedLinks(e){for(let i of e)i.kind===Ct.LINK_REMOVE&&this._attachLink(i.before)}_restoreLinkFields(e){for(let i of e){if(i.kind!==Ct.LINK_FIELD)continue;let n=this._links.get(i.linkId);if(n){this.setLinkEndpoints(i.linkId,i.before.source,i.before.target);for(let r of Object.keys(n))Object.hasOwn(i.before,r)||Reflect.deleteProperty(n,r);Object.assign(n,i.before)}}}_restoreActivityFields(e){for(let[i,n]of e){let r=this._activities.get(i);r&&this._restoreScalarFields(r,n)}}_restoreScalarFields(e,i){for(let n of Object.keys(e))Object.hasOwn(i,n)||Reflect.deleteProperty(e,n);for(let n of Object.keys(i))Reflect.set(e,n,Reflect.get(i,n))}_updateSchedulingStateCount(e,i){let n=Di(i);e!==n&&(this._missingSchedulingStateCount+=n?1:-1)}_attachLink(e){this._links.set(String(e.id),{...e}),this._indexLink(e)}_detachLink(e){let i=this.getLink(e);i&&(this._links.delete(String(e)),this._deindexLink(i))}},Fh=[];function rP(t){return t===Jt.LAG||t===Jt.TYPE||t===Jt.FREE_SLACK_HOURS||t===Jt.IS_CRITICAL}function Pc(t){return t===B.PARENT||t===B.CORRELATIVE_ID}function Di(t){return t.type!==L.PROJECT&&t.p6===void 0}function Rc(t,e){e!==B.START_DATE&&e!==B.END_DATE&&e!==B.TYPE||(t.calendarDuration=Pe(t))}function kc(t,e){return t.filter(i=>String(i)!==String(e))}function wh(t,e,i){let n=t.get(e);n?n.push(i):t.set(e,[i])}function aP(t){let e=t.runtimeFlags??{};return{isPasting:!!e.isPasting,isBulkOperation:!!e.isBulkOperation,dragWithMultiple:!!e.dragWithMultiple,draggingSingleMilestone:!!e.draggingSingleMilestone,creatingActivity:!1,avoidAutoScheduleBeforeDrag:!1,maxPerformance:!!e.maxPerformance,allCheckedTaskIds:[]}}function Kr(t,e){let i=t.getActivity(e);return i?S(i):null}function xh(t){return t.getAllActivities().map(S)}function Mh(t){return t.getAllIds().map(String)}function Uh(t,e){t.forEachActivity((i,n)=>e(n))}function Hh(t,e){let i=e==="0"?Lc(t,"0"):t.getChildren(e),n=[];for(let r of i){let a=t.getActivity(r);a&&n.push(S(a))}return n.sort((r,a)=>(r.correlativeId??0)-(a.correlativeId??0)),n}function Lc(t,e){return le(e,t)}function Bh(t){return t.checkedIds().map(String)}function jh(t,e){if(e==="0"){let i=!1;return t.forEachActivity(n=>{i||=W(n.parentId)}),i}return t.getChildren(e).length>0}function Oc(t,e){let i=t.getLink(e);return i?te(i):null}function Wh(t){return t.getAllLinks().map(e=>te(e))}function Go(t){let[e,i]=t.split(":");return Number(e)*60+Number(i??0)}function oP(t){return t.reduce((e,i)=>Go(i)<Go(e)?i:e)}function sP(t){return t.reduce((e,i)=>Go(i)>Go(e)?i:e)}function lP(t){return t.worktime.days.flatMap(e=>Array.isArray(e)?e:e===!0?t.worktime.hours:[])}function Vh(t){let e=[...t].find(a=>a.is_default);if(!e)return null;let i=lP(e);if(i.length===0)return null;let n=i.map(a=>a.split("-")[0]),r=i.map(a=>a.split("-")[1]);return{startHour:oP(n),endHour:sP(r)}}var Kh=1440*60*1e3,Yh=/^(\d{4})[/-](\d{1,2})[/-](\d{1,2})/,$o=7,bc=[!1,!0,!0,!0,!0,!0,!1],Gh=new Set(["1","true"]),Nc=ct.DURATION,$h=_.ASAP,qh={ASAP:_.ASAP,ALAP:_.ALAP,SNET:_.SNET,SNLT:_.SNLT,FNET:_.FNET,FNLT:_.FNLT,MSO:_.MSO,MFO:_.MFO,"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 zo(t,e,i,n=null){let o=(t!==void 0&&t.length>0?t:e??[]).map(l=>cP(l,n)),s=(i??[]).map(l=>dP(l,n));return{calendars:o,baseCalendars:s,knownCalendarIds:new Set(o.map(l=>l.id)),defaultCalendarId:Fc(o)}}function Fc(t){let e=null;for(let i of t)if(e??=i.id,i.is_default)return i.id;return e}function Zh(t,e){let i=mP(t.working_days),{days:n,hours:r}=hP(t,i),a=uP(e.exceptionsSource,e.exceptionRange),o={days:n,hours:r};return a&&(o.dates=a),{id:`${String(t.id)}${e.idSuffix}`,name:t.name,is_default:e.isDefault,...e.baseDefault!==void 0?{baseDefault:e.baseDefault}:{},worktime:o}}function cP(t,e){let i=t.baseDefault,n=typeof i=="boolean"?i:void 0;return Zh(t,{idSuffix:"",isDefault:!!t.is_default,baseDefault:n,exceptionsSource:t.exceptiondays,exceptionRange:e})}function dP(t,e){return Zh(t,{idSuffix:"-base",isDefault:!1,baseDefault:!!t.is_default,exceptionsSource:t.baseexceptiondays??t.exceptiondays,exceptionRange:e})}function uP(t,e){if(!Array.isArray(t)||t.length===0)return null;let i={};for(let n of t){if(!n)continue;let r=pP(n.from_date,n.to_date,e);if(r.length===0)continue;let a=fP(n);if(a!==void 0)for(let o of r)i[o]=a}return Object.keys(i).length>0?i:null}function pP(t,e,i){let n=zh(t),r=zh(e);if(n===null||r===null)return[];if(i&&(r<i.start||n>i.end))return[];let a=[],o=i?Math.max(n,i.start):n,s=i?Math.min(r,i.end):r;for(;o<=s;)a.push(String(o)),o+=Kh;return a}function zh(t){if(typeof t!="string")return null;let e=Yh.exec(t.trim());if(!e)return null;let i=Number(e[1]),n=Number(e[2]),r=Number(e[3]);return Number.isFinite(i)&&Number.isFinite(n)&&Number.isFinite(r)?Date.UTC(i,n-1,r):null}function fP(t){if(t.workable===!1)return!1;let e=t.shifts;if(Array.isArray(e)&&e.length>0){let i=yP(e);if(i.length>0)return i}}var Jh=/^\d{1,2}:\d{2}$/;function yP(t){let e=[];for(let i of t){let n=em(i?.shift_string);if(!n)continue;if(!n.startsCsv.includes(",")&&!n.endsCsv.includes(",")){let s=n.startsCsv.trim(),l=n.endsCsv.trim();!qo(s)&&!qo(l)&&Jh.test(s)&&Jh.test(l)&&e.push(`${s}-${l}`);continue}let o=tm(n.startsCsv,n.endsCsv).find(s=>s!==null);o&&e.push(o)}return e.sort(Qh),e}function Xh(t){let e=t.indexOf("-"),i=e>0?t.slice(0,e):t,[n,r]=i.split(":");return(Number(n)||0)*60+(Number(r)||0)}function Qh(t,e){return Xh(t)-Xh(e)}function hP(t,e){let i=Array.from({length:7},()=>[]),n=(c,d)=>{let u=tm(c,d);for(let p=0;p<7;p+=1){let f=u[p],y=i[p];f&&y&&y.push(f)}},r=Array.isArray(t.shifts)&&t.shifts.length>0,a=typeof t.shift_start=="string"&&typeof t.shift_end=="string";if(r)for(let c of t.shifts){let d=em(c?.shift_string);d&&n(d.startsCsv,d.endsCsv)}else a&&n(t.shift_start,t.shift_end);for(let c of i)c.sort(Qh);let s=i.find((c,d)=>!!e[d]&&c.length>0)??[];return{days:e.map((c,d)=>{if(!c)return!1;let u=i[d];return u&&u.length>0?u:s}),hours:s}}function tm(t,e){let i=Array.from({length:$o},()=>null);if(typeof t!="string"||typeof e!="string")return i;let n=t.split(",").map(s=>s.trim()),r=e.split(",").map(s=>s.trim());if(!(n.length===r.length&&n.length>0&&n.length<=$o))return i;let o=[...i];for(let s=0;s<n.length;s+=1){let l=n[s],c=r[s];qo(l)||qo(c)||(o[s]=`${l}-${c}`)}return o}function em(t){if(typeof t!="string")return null;let e=t.indexOf("-");return e<=0?null:{startsCsv:t.slice(0,e),endsCsv:t.slice(e+1)}}function mP(t){if(typeof t!="string")return[...bc];let e=t.split(",").map(i=>i.trim());return e.length!==$o?[...bc]:e.map(i=>Gh.has(i))}var gP=new Set(["false","null"]);function qo(t){return!t||gP.has(t)}function Jo(t,e){return{calendars:t.calendarReader,hasCalendar:i=>e.calendars.has(i),getDefaultCalendarId:()=>Fc(e.calendars.values()),hierarchy:Rh(t),activityReader:Ph(t),dateFormat:e.dateFormat??"YYYY-MM-DD",customHours:e.customHours??{},hoursPerDay:e.hoursPerDay}}function im(t){return Zi(t)}var AP=new Set(["freeSlackHours","isCritical"]);function IP(t,e){let i=Object.fromEntries(Object.entries(t.fields??{}).filter(([n])=>!e.has(n)));return t.kind===H.UPDATED&&Object.keys(i).length===0?null:{...t,...t.fields===void 0?{}:{fields:i},after:null}}function Yr(t){let e=t.activities.map(r=>({...r,after:null})),i=t.links.map(r=>IP(r,AP)).filter(r=>r!==null),n=t.source.kind===Xe?{...t.source,items:[],links:[]}:t.source;return S({...t,source:n,activities:e,links:i})}function Qn(t,e,i,n,r,a,o){return{changeSet:t,beforeSnap:e,beforeLinks:nm(i),afterSnap:n,afterLinks:nm(r),progressFallbackBefore:a,progressFallbackAfter:o}}function nm(t){if(t)return new Map(Array.from(t,([e,i])=>[e,{...i,freeSlackHours:null,isCritical:!1}]))}function om(t,e){let i=new Map,n=new Map;for(let r of e.activities){if(r.kind!==H.CREATED)continue;let a=t.getActivity(String(r.id));a&&i.set(String(r.id),et(a))}for(let r of e.links){if(r.kind===H.DELETED)continue;let a=t.getLink(String(r.id));a&&n.set(String(r.id),{...a})}return{afterSnap:i,afterLinks:n}}function sm(t){return t.kind!==A.INLINE_EDIT||!xr.has(t.column)?null:`inline-edit:${String(t.activityId)}:${t.column}`}function rm(t){return t.changeSet.activities.length===1&&t.changeSet.activities[0]?.kind===H.UPDATED&&t.changeSet.links.length===0&&!t.beforeSnap?.size&&!t.afterSnap?.size}function lm(t,e){if(!rm(t)||!rm(e))return!1;let i=t.changeSet.activities[0],n=e.changeSet.activities[0];return!!i&&!!n&&String(i.id)===String(n.id)}function cm(t,e){let i=t.changeSet.activities[0],n=e.changeSet.activities[0];if(!i||!n)return e;let r=i.fields??{},a=n.fields??{},o={};for(let l of new Set([...Object.keys(r),...Object.keys(a)])){let c=r[l],d=a[l];o[l]={before:c?c.before:d?.before,after:d?d.after:c?.after}}let s={...e.changeSet,activities:[{...n,fields:o}]};return Qn(s)}var Zn={RECORD:"record",SKIP:"skip",CHECKPOINT_ON_SUCCESS:"checkpoint-on-success"},Et={BEFORE:"before",AFTER:"after"};function dm(t){return t.kind===A.PERSISTENCE_ACKNOWLEDGE?Zn.CHECKPOINT_ON_SUCCESS:t.kind===A.SIR_SYNC||t.kind===A.CALENDAR_RECONCILE||t.kind===A.ACTIVITY_LOOKAHEAD_SYNC||t.kind===A.BASELINE_APPLY||t.kind===A.PONDERATOR_CRITERION_SET||t.kind===A.STATUS_CRITERIA_SET||t.kind===A.ACTIVITY_CLIPBOARD_CLEAR||t.kind===A.ACTIVITY_CLIPBOARD_IMPORT||t.kind===A.ACTIVITY_COPY||t.kind===A.SELECTION_TOGGLE||t.kind===A.SELECTION_REPLACE||t.kind===A.VISIBILITY_SET||t.kind===A.FILTER_SET||t.kind===A.SORT_SET||t.kind===A.VIEW_ATTRIBUTES_SET||t.kind===A.GROUP_SET||t.kind===A.WBS_DEPTH_SET?Zn.SKIP:Zn.RECORD}function wc(t){for(let e of t.changeSet.activities)if(e.kind===H.CREATED||e.kind===H.DELETED||e.kind===H.UPDATED&&e.fields&&T.CUSTOM_ID in e.fields)return!0;return!1}function xc(t,e,i,n=()=>({})){let r=[],a=[];for(let s of e.changeSet.activities){let l=String(s.id);if(s.kind===H.UPDATED){let c=t.getActivity(l);r.push({id:l,kind:H.UPDATED,fields:am(s.fields,i),after:c?et(c):null})}else if(s.kind===H.DELETED)if(i===Et.BEFORE){let c=t.getActivity(l);r.push({id:l,kind:H.CREATED,after:c?et(c):null})}else r.push({id:l,kind:H.DELETED,after:null});else if(i===Et.BEFORE)r.push({id:l,kind:H.DELETED,after:null});else{let c=t.getActivity(l);r.push({id:l,kind:H.CREATED,after:c?et(c):null})}}for(let s of e.changeSet.links){let l=String(s.id);if(s.kind===H.UPDATED){let c=t.getLink(l);a.push({id:l,kind:H.UPDATED,fields:am(s.fields,i),after:c?te(c):null})}else if(s.kind===H.DELETED)if(i===Et.BEFORE){let c=t.getLink(l);a.push({id:l,kind:H.CREATED,after:c?te(c):null})}else a.push({id:l,kind:H.DELETED,after:null});else if(i===Et.BEFORE)a.push({id:l,kind:H.DELETED,after:null});else{let c=t.getLink(l);a.push({id:l,kind:H.CREATED,after:c?te(c):null})}}let o=(e.changeSet.viewState??[]).map(s=>i===Et.BEFORE?SP(s):s);return{source:{kind:i===Et.BEFORE?Kt.UNDO:Kt.REDO},activities:r,links:a,calendars:[],trackingEvents:[],effects:[],viewState:o,...n(i)}}function am(t,e){if(t!=null)return Object.fromEntries(Object.entries(t).map(([i,n])=>[i,e===Et.BEFORE?{before:S(n.after),after:S(n.before)}:{before:S(n.before),after:S(n.after)}]))}function SP(t){return{activityId:t.activityId,...t.checked?{checked:{before:t.checked.after,after:t.checked.before}}:{},...t.visible?{visible:{before:t.visible.after,after:t.visible.before}}:{}}}function um(t,e=!1){return t.activities.length>0||t.links.length>0||e||(t.viewState?.length??0)>0||(t.effects?.length??0)>0}function Mc(t,e,i){pm(t,e,Et.BEFORE,i)}function Uc(t,e,i){pm(t,e,Et.AFTER,i)}function pm(t,e,i,n){let r=e.changeSet;for(let o of r.activities)if(o.kind===H.UPDATED){if(!o.fields)continue;for(let[s,l]of Object.entries(o.fields))ue(t,o.id,s,i===Et.BEFORE?l.before:l.after)}else if(o.kind===H.DELETED)if(i===Et.BEFORE){let s=e.beforeSnap?.get(String(o.id));if(!s)throw new Error(`undo: missing beforeSnap for resurrecting activity ${o.id}`);t.addActivity(et(s))}else t.removeActivity(String(o.id));else if(i===Et.BEFORE)t.removeActivity(String(o.id));else{let s=e.afterSnap?.get(String(o.id));if(!s)throw new Error(`redo: missing afterSnap for re-creating activity ${o.id}`);t.addActivity(et(s))}for(let o of r.links)if(o.kind===H.UPDATED){if(!o.fields)continue;let s=t.getLink(String(o.id)),l=o.fields[Jt.SOURCE],c=o.fields[Jt.TARGET];s&&(l||c)&&t.setLinkEndpoints(String(o.id),String(l?i===Et.BEFORE?l.before:l.after:s.source),String(c?i===Et.BEFORE?c.before:c.after:s.target));for(let[d,u]of Object.entries(o.fields))d===Jt.SOURCE||d===Jt.TARGET||Np(t,String(o.id),d,i===Et.BEFORE?u.before:u.after)}else if(o.kind===H.DELETED)if(i===Et.BEFORE){let s=e.beforeLinks?.get(String(o.id));if(!s)throw new Error(`undo: missing beforeLinks for re-adding link ${o.id}`);t.addLink(s)}else t.removeLink(String(o.id));else if(i===Et.BEFORE)t.removeLink(String(o.id));else{let s=e.afterLinks?.get(String(o.id));if(!s)throw new Error(`redo: missing afterLinks for re-creating link ${o.id}`);t.addLink(s)}for(let o of r.viewState??[])o.checked&&t.setChecked(o.activityId,i===Et.BEFORE?o.checked.before:o.checked.after),o.visible&&t.setVisible(o.activityId,i===Et.BEFORE?o.visible.before:o.visible.after);let a=i===Et.BEFORE?e.progressFallbackBefore:e.progressFallbackAfter;for(let[o,s]of a??[])t.setProgressFallback(o,s);n?.(r,i)}var vP=100,CP=600,Xo=class t{constructor(e=vP){this.maxDepth=e}maxDepth;undoStack=[];redoStack=[];sequence=0;_lastKey=null;_lastTime=0;fork(){let e=new t(this.maxDepth);return e.undoStack.push(...S(this.undoStack)),e.redoStack.push(...S(this.redoStack)),e.sequence=this.sequence,e._lastKey=this._lastKey,e._lastTime=this._lastTime,e}record(e,i=null,n=0){let r=this.undoStack[this.undoStack.length-1];i!=null&&i===this._lastKey&&n-this._lastTime<=CP&&r!==void 0&&lm(r.entry,e)?(r.entry=cm(r.entry,e),r.touchedAt=this.touch()):(this.undoStack.push({entry:e,touchedAt:this.touch()}),this.undoStack.length>this.maxDepth&&this.undoStack.splice(0,this.undoStack.length-this.maxDepth)),this._lastKey=i,this._lastTime=n,this.redoStack.length=0}resetCoalesce(){this._lastKey=null}takeUndo(){return this.undoStack.pop()?.entry??null}takeRedo(){return this.redoStack.pop()?.entry??null}pushRedo(e){this.redoStack.push({entry:e,touchedAt:this.touch()})}pushUndo(e){this.undoStack.push({entry:e,touchedAt:this.touch()})}restoreTakenUndo(e){this.undoStack.push({entry:e,touchedAt:this.sequence})}restoreTakenRedo(e){this.redoStack.push({entry:e,touchedAt:this.sequence})}canUndo(){return this.undoStack.length>0}canRedo(){return this.redoStack.length>0}undoDepth(){return this.undoStack.length}capturePersistenceBoundary(){return this.resetCoalesce(),this.sequence}discardThrough(e){this.removeEntriesThrough(this.undoStack,e),this.removeEntriesThrough(this.redoStack,e),this.resetCoalesce()}applyPersistedIdentities(e,i){let n=new Map(e.map(({id:a,proplannerId:o})=>[String(a),o])),r=new Map(i.map(({id:a,proplannerId:o})=>[String(a),o]));for(let a of[...this.undoStack,...this.redoStack])a.entry=this.withPersistedIdentities(a.entry,n,r)}clear(){this.undoStack.length=0,this.redoStack.length=0,this.resetCoalesce()}touch(){return this.sequence+=1,this.sequence}removeEntriesThrough(e,i){let n=e.filter(({touchedAt:r})=>r>i);e.splice(0,e.length,...n)}withPersistedIdentities(e,i,n){let r=o=>o===void 0?void 0:new Map(Array.from(o,([s,l])=>[s,i.has(s)?{...l,proplannerId:i.get(s)}:l])),a=o=>o===void 0?void 0:new Map(Array.from(o,([s,l])=>[s,n.has(s)?{...l,proplannerId:n.get(s)}:l]));return{...e,beforeSnap:r(e.beforeSnap),afterSnap:r(e.afterSnap),beforeLinks:a(e.beforeLinks),afterLinks:a(e.afterLinks)}}};var DP=["parentId","correlativeId"];function ym(t,e){let i=new Set,n=r=>{let a=e(r);i.add(a===null?"0":String(a))};for(let r of t.activities){let a=String(r.id);if(r.kind===H.CREATED){n(a);continue}if(r.kind===H.DELETED){let l=r.fields;l&&"parentId"in l&&i.add(fm(l.parentId?.before));continue}let o=r.fields;!o||!DP.some(l=>l in o)||(n(a),"parentId"in o&&i.add(fm(o.parentId?.before)))}return i}function fm(t){return t==null?"0":String(t)}function TP(t){return{...t,id:String(t.id),source:String(t.source),target:String(t.target),type:t.type,lag:Number(t.lag)}}function _P(t){return{days:t.days,hours:t.hours,...t.dates?{dates:t.dates}:{},...t.customWeeks?{customWeeks:t.customWeeks}:{}}}function hm(t){return{id:String(t.id),worktime:_P(t.worktime)}}function Hc(t,e=[]){return[...t.map(hm),...e.map(hm)]}function Zo(t,e,i,n=[]){return{activities:[...t],links:e.map(TP),calendars:Hc(i,n)}}var j={TRACKED:"tracked",IGNORED:"ignored"};var mm={id:j.IGNORED,proplannerId:j.IGNORED,parentId:j.TRACKED,name:j.TRACKED,description:j.TRACKED,type:j.TRACKED,startDate:j.TRACKED,endDate:j.TRACKED,durationHours:j.TRACKED,constraintType:j.TRACKED,constraintDate:j.TRACKED,autoScheduling:j.TRACKED,calendarId:j.TRACKED,assignedDefaultCalendar:j.IGNORED,dateOrigin:j.TRACKED,progress:j.TRACKED,cost:j.TRACKED,usedCost:j.TRACKED,realCost:j.TRACKED,workHours:j.TRACKED,realWorkHours:j.TRACKED,ponderator:j.TRACKED,hasCustomPonderator:j.TRACKED,correlativeId:j.TRACKED,uniqueCorrelativeId:j.TRACKED,customId:j.TRACKED,subcontractId:j.TRACKED,isLookahead:j.TRACKED,hasLookaheadTasks:j.IGNORED,newActivityIds:j.TRACKED,hasNewActivities:j.TRACKED,isNewActivity:j.IGNORED,pendingRequestIds:j.IGNORED,responsableIds:j.TRACKED,tagIds:j.TRACKED,baselinePoints:j.IGNORED,baselineSnapshot:j.IGNORED,recursiveDurationHours:j.IGNORED,isCritical:j.IGNORED,freeSlackHours:j.IGNORED,calendarDuration:j.IGNORED,baselineVarianceDays:j.IGNORED,expectedProgress:j.IGNORED,expectedProgressBaseline:j.IGNORED,status:j.IGNORED,criticalPath:j.IGNORED,p6:j.IGNORED},gm=Object.keys(mm).filter(t=>mm[t]===j.TRACKED),Am=new Set(["startDate","endDate","constraintDate","dateOrigin"]),Im=new Set(["newActivityIds","responsableIds","tagIds"]);function Sm(t){let e=gm.map(i=>[i,EP(i,t[i])]);return Object.fromEntries(e)}function EP(t,e){return Am.has(t)?e instanceof Date?new Date(e):null:Im.has(t)?Array.isArray(e)?[...e]:[]:e}function Gr(t,e){return Bc(t,e).length>0}function Bc(t,e){return gm.filter(i=>!PP(i,t[i],e[i]))}function PP(t,e,i){return Am.has(t)?RP(e,i):Im.has(t)?kP(e,i):(e??null)===(i??null)}function RP(t,e){let i=t instanceof Date?t.getTime():null,n=e instanceof Date?e.getTime():null;return i===n}function kP(t,e){let i=new Set(Array.isArray(t)?t.map(String):[]),n=new Set(Array.isArray(e)?e.map(String):[]);if(i.size!==n.size)return!1;for(let r of i)if(!n.has(r))return!1;return!0}var vm={id:j.IGNORED,source:j.TRACKED,target:j.TRACKED,type:j.TRACKED,lag:j.TRACKED,freeSlackHours:j.IGNORED,isCritical:j.IGNORED,ganttId:j.IGNORED,sectorId:j.IGNORED,proplannerId:j.IGNORED},LP=Object.keys(vm).filter(t=>vm[t]===j.TRACKED);function Qo(t,e){return LP.some(i=>t[i]!==e[i])}function Cm(t,e){let i=new Map(t.map(n=>[String(n.id),n]));return e.filter(n=>{let r=i.get(String(n.id));return r?Qo(r,n):!1})}function tr(t){if(t===void 0)return["undefined"];if(t===null)return["null"];if(typeof t=="string")return["string",t];if(typeof t=="boolean")return["boolean",t];if(typeof t=="number")return["number",Object.is(t,-0)?"-0":String(t)];if(typeof t=="bigint")return["bigint",String(t)];if(t instanceof Date)return["date",String(t.getTime())];if(Array.isArray(t))return["array",t.map(tr)];if(t instanceof Map)return["map",Array.from(t,([e,i])=>[tr(e),tr(i)]).sort((e,i)=>JSON.stringify(e).localeCompare(JSON.stringify(i)))];if(t instanceof Set)return["set",Array.from(t,tr).sort((e,i)=>JSON.stringify(e).localeCompare(JSON.stringify(i)))];if(typeof t=="object")return["object",Object.entries(t).sort(([e],[i])=>e.localeCompare(i)).map(([e,i])=>[e,tr(i)])];throw new TypeError(`Unsupported canonical value: ${typeof t}`)}function Ot(t){return JSON.stringify(tr(t))}var ts=t=>(t>>>0).toString(16).padStart(8,"0");function jc(t){let e=1779033703,i=3144134277,n=1013904242,r=2773480762;for(let a=0;a<t.length;a+=1){let o=t.charCodeAt(a);e=i^Math.imul(e^o,597399067),i=n^Math.imul(i^o,2869860233),n=r^Math.imul(n^o,951274213),r=e^Math.imul(r^o,2716044179)}return e=Math.imul(n^e>>>18,597399067),i=Math.imul(r^i>>>22,2869860233),n=Math.imul(e^n>>>17,951274213),r=Math.imul(i^r>>>19,2716044179),`${ts(e^i^n^r)}${ts(i^e)}${ts(n^e)}${ts(r^e)}`}function Dm(t,e){return{p6Settings:S(t),p6ProjectState:S(e)}}function Ti(t,e){return Ot(t)!==Ot(e)}function Tm(t,e){t.clear();for(let i of e)i.p6!==void 0&&t.set(String(i.id),S(i.p6))}function _m(t,e){let i=e?.p6;return t===void 0&&i===void 0?!1:Ti(t,i)}function Em(t,e){let i=new Map;for(let n of t){let r=e(n)?.p6;r!==void 0&&i.set(n,S(r))}return i}function Ce(t){if(t==null||t===0)return!1;if(!(typeof t=="number"&&Number.isSafeInteger(t)&&t>0))throw new Error(`invalid proplannerId ${String(t)}`);return!0}function Pm(t,e){for(let i of t)Ce(i.proplannerId);for(let i of e)Ce(i.proplannerId)}var es=class t{trackingEnabled;initialized=!1;p6TrackingEnabled=!1;dirtyActivityIds=new Set;dirtyLinkIds=new Set;dirtyP6ActivityIds=new Set;p6SettingsDirty=!1;p6ProjectStateDirty=!1;initialCalendarRepairIds=new Set;linksAtLastSave=new Map;activitiesAtLastSave=new Map;p6SettingsAtLastSave=null;currentP6Settings=null;p6ProjectStateAtLastSave=null;currentP6ProjectState=null;p6LatestRunLogAtLastSave=null;currentP6LatestRunLog=null;p6LatestRunLogDirty=!1;p6ActivitiesAtLastSave=new Map;constructor(e=!0){this.trackingEnabled=e}fork(){let e=new t(!1);return e.initialized=this.initialized,e}clone(){let e=new t(this.trackingEnabled);for(let i of this.dirtyActivityIds)e.dirtyActivityIds.add(i);for(let i of this.dirtyLinkIds)e.dirtyLinkIds.add(i);for(let i of this.dirtyP6ActivityIds)e.dirtyP6ActivityIds.add(i);for(let i of this.initialCalendarRepairIds)e.initialCalendarRepairIds.add(i);for(let[i,n]of this.linksAtLastSave)e.linksAtLastSave.set(i,S(n));for(let[i,n]of this.activitiesAtLastSave)e.activitiesAtLastSave.set(i,S(n));for(let[i,n]of this.p6ActivitiesAtLastSave)e.p6ActivitiesAtLastSave.set(i,S(n));return e.initialized=this.initialized,e.p6TrackingEnabled=this.p6TrackingEnabled,e.p6SettingsDirty=this.p6SettingsDirty,e.p6ProjectStateDirty=this.p6ProjectStateDirty,e.p6LatestRunLogDirty=this.p6LatestRunLogDirty,e.p6SettingsAtLastSave=S(this.p6SettingsAtLastSave),e.currentP6Settings=S(this.currentP6Settings),e.p6ProjectStateAtLastSave=S(this.p6ProjectStateAtLastSave),e.currentP6ProjectState=S(this.currentP6ProjectState),e.p6LatestRunLogAtLastSave=S(this.p6LatestRunLogAtLastSave),e.currentP6LatestRunLog=S(this.currentP6LatestRunLog),e}init(e,i,n=null,r=null,a=null){if(this.trackingEnabled){Pm(e,i),this.snapshotActivities(e),this.snapshotLinks(i),this.p6SettingsAtLastSave=S(n),this.currentP6Settings=S(n),this.p6SettingsDirty=!1,this.p6ProjectStateAtLastSave=S(r),this.currentP6ProjectState=S(r),this.p6ProjectStateDirty=!1,this.p6LatestRunLogAtLastSave=S(a),this.currentP6LatestRunLog=S(a),this.p6LatestRunLogDirty=!1,this.p6TrackingEnabled=n!==null,this.p6TrackingEnabled&&this.snapshotP6Activities(e);for(let o of e)if(o.assignedDefaultCalendar){let s=String(o.id);this.initialCalendarRepairIds.add(s),this.dirtyActivityIds.add(s)}this.initialized=!0}}acknowledge(e,i,n=[],r=[],a,o,s=this.currentP6Settings,l=this.currentP6ProjectState,c=this.currentP6LatestRunLog){if(!this.trackingEnabled)return;let d=new Map(n.map(({id:m,proplannerId:g})=>[String(m),g])),u=new Map(r.map(({id:m,proplannerId:g})=>[String(m),g])),p=e.map(m=>({...m,proplannerId:d.get(String(m.id))??m.proplannerId})),f=i.map(m=>{let g=u.get(String(m.id));return g===void 0?{...m}:{...m,proplannerId:g}});if(Pm(p,f),this.snapshotActivities(p),this.snapshotLinks(f),this.p6SettingsAtLastSave=S(s),this.p6SettingsDirty=Ti(this.currentP6Settings,this.p6SettingsAtLastSave),this.p6ProjectStateAtLastSave=S(l),this.p6ProjectStateDirty=Ti(this.currentP6ProjectState,this.p6ProjectStateAtLastSave),this.p6LatestRunLogAtLastSave=S(c),this.p6LatestRunLogDirty=Ti(this.currentP6LatestRunLog,this.p6LatestRunLogAtLastSave),this.p6TrackingEnabled&&this.snapshotP6Activities(p),!a||!o)return;let y=new Map(a.map(m=>[String(m.id),m])),h=new Map(o.map(m=>[String(m.id),m]));for(let m of p){let g=String(m.id);this.activityIsDirty(g,y.get(g)??null)&&this.dirtyActivityIds.add(g)}for(let m of a){let g=String(m.id);this.activityIsDirty(g,m)&&this.dirtyActivityIds.add(g),this.p6TrackingEnabled&&this.p6ActivityIsDirty(g,m)&&this.dirtyP6ActivityIds.add(g)}if(this.p6TrackingEnabled)for(let m of p){let g=String(m.id);this.p6ActivityIsDirty(g,y.get(g)??null)&&this.dirtyP6ActivityIds.add(g)}for(let m of f){let g=String(m.id);this.linkIsDirty(g,h.get(g)??null)&&this.dirtyLinkIds.add(g)}for(let m of o){let g=String(m.id);this.linkIsDirty(g,m)&&this.dirtyLinkIds.add(g)}}snapshotActivities(e){if(this.trackingEnabled){this.activitiesAtLastSave.clear(),this.dirtyActivityIds.clear(),this.initialCalendarRepairIds.clear();for(let i of e){let n=String(i.id);if(!Ce(i.proplannerId)){this.dirtyActivityIds.add(n);continue}let r=Sm(i);this.activitiesAtLastSave.set(String(i.id),{persistable:r,deletedSnapshot:{id:i.id,proplannerId:i.proplannerId,parentId:i.parentId,hadBaseline:i.baselineSnapshot!==null||i.baselinePoints.length>0}}),Gr(i,r)&&this.dirtyActivityIds.add(n)}}}snapshotLinks(e){if(this.trackingEnabled){this.linksAtLastSave.clear(),this.dirtyLinkIds.clear();for(let i of e){let n=String(i.id);if(!Ce(i.proplannerId)){this.dirtyLinkIds.add(n);continue}this.linksAtLastSave.set(String(i.id),{id:i.id,proplannerId:i.proplannerId,source:i.source,target:i.target,lag:i.lag,type:i.type})}}}recordChanges(e,i,n,r){if(!(!this.trackingEnabled||!this.initialized)){for(let a of e){let o=String(a.id),s=n(o);this.activityIsDirty(o,s)?this.dirtyActivityIds.add(o):this.dirtyActivityIds.delete(o),this.p6TrackingEnabled&&(this.p6ActivityIsDirty(o,s)?this.dirtyP6ActivityIds.add(o):this.dirtyP6ActivityIds.delete(o))}for(let a of i){let o=String(a.id),s=r(o);this.linkIsDirty(o,s)?this.dirtyLinkIds.add(o):this.dirtyLinkIds.delete(o)}}}recordP6Settings(e){!this.trackingEnabled||!this.initialized||(this.currentP6Settings=S(e),this.p6SettingsDirty=Ti(this.currentP6Settings,this.p6SettingsAtLastSave))}recordP6ProjectState(e){!this.trackingEnabled||!this.initialized||(this.currentP6ProjectState=S(e),this.p6ProjectStateDirty=Ti(this.currentP6ProjectState,this.p6ProjectStateAtLastSave))}recordP6LatestRunLog(e){!this.trackingEnabled||!this.initialized||(this.currentP6LatestRunLog=S(e),this.p6LatestRunLogDirty=Ti(this.currentP6LatestRunLog,this.p6LatestRunLogAtLastSave))}modifiedP6Settings(){return this.p6SettingsIsDirty()?S(this.currentP6Settings):null}modifiedP6Activities(e){return!this.trackingEnabled||!this.initialized?new Map:Em(this.dirtyP6ActivityIds,e)}activityIsDirty(e,i){let n=this.activitiesAtLastSave.get(e);return i===null?n!==void 0:this.initialCalendarRepairIds.has(e)||!Ce(i.proplannerId)||n===void 0||Gr(i,n.persistable)}linkIsDirty(e,i){let n=this.linksAtLastSave.get(e);return i===null?n!==void 0:!Ce(i.proplannerId)||n===void 0||Qo(n,i)}acknowledgePersistedLookahead(e,i){if(!this.trackingEnabled||!this.initialized)return;let n=e.map(r=>{let a=typeof r=="string"?r:String(r.id),o=i(a),s=this.activitiesAtLastSave.get(a);if(o===null||s===void 0)throw new Error(`unknown persisted activity "${a}"`);return{activityId:a,acknowledgesLookahead:typeof r=="string"||!!r.fields?.isLookahead,acknowledgesProgress:typeof r!="string"&&!!r.fields?.progress,current:o,saved:s}});for(let{activityId:r,acknowledgesLookahead:a,acknowledgesProgress:o,current:s,saved:l}of n){let c={...l.persistable,...a?{isLookahead:s.isLookahead}:{},...o?{progress:s.progress,autoScheduling:s.autoScheduling}:{}};this.activitiesAtLastSave.set(r,{...l,persistable:c}),this.initialCalendarRepairIds.has(r)||!Ce(s.proplannerId)||Gr(s,c)?this.dirtyActivityIds.add(r):this.dirtyActivityIds.delete(r)}}hasCheckpointActivityId(e){return this.activitiesAtLastSave.has(e)}hasCheckpointLinkId(e){return this.linksAtLastSave.has(e)}hasUnsavedChanges(){return this.trackingEnabled&&this.initialized&&(this.dirtyActivityIds.size>0||this.dirtyLinkIds.size>0||this.p6TrackingEnabled&&(this.dirtyP6ActivityIds.size>0||this.p6SettingsIsDirty()||this.p6ProjectStateDirty||this.p6LatestRunLogDirty))}p6SettingsIsDirty(){return this.p6SettingsDirty}snapshotP6Activities(e){this.dirtyP6ActivityIds.clear(),Tm(this.p6ActivitiesAtLastSave,e)}p6ActivityIsDirty(e,i){return _m(this.p6ActivitiesAtLastSave.get(e),i)}newActivities(e){if(!this.trackingEnabled||!this.initialized)return[];let i=[];for(let n of this.dirtyActivityIds){let r=e(n);r!==null&&!Ce(r.proplannerId)&&i.push(r)}return i}newLinks(e){if(!this.trackingEnabled||!this.initialized)return[];let i=[];for(let n of this.dirtyLinkIds){let r=e(n);r!==null&&!Ce(r.proplannerId)&&i.push(r)}return i}deletedActivities(e){if(!this.trackingEnabled||!this.initialized)return[];let i=[];for(let n of this.dirtyActivityIds){let r=this.activitiesAtLastSave.get(n);r&&e(n)===null&&i.push({...r.deletedSnapshot})}return i}deletedLinks(e){if(!this.trackingEnabled||!this.initialized)return[];let i=[];for(let n of this.dirtyLinkIds){let r=this.linksAtLastSave.get(n);r&&e(n)===null&&i.push({...r})}return i}modifiedActivities(e){if(!this.trackingEnabled||!this.initialized)return[];let i=[];for(let n of this.dirtyActivityIds){let r=e(n);if(r===null||!Ce(r.proplannerId))continue;let a=this.activitiesAtLastSave.get(n);(a===void 0||this.initialCalendarRepairIds.has(n)||Gr(r,a.persistable))&&i.push(r)}return i}modifiedActivityFields(e){let i=new Map;if(!this.trackingEnabled||!this.initialized)return i;for(let n of this.dirtyActivityIds){let r=e(n),a=this.activitiesAtLastSave.get(n);if(!r||!a)continue;let o=Bc(r,a.persistable);o.length>0&&i.set(n,o)}return i}modifiedLinks(e){if(!this.trackingEnabled||!this.initialized)return[];let i=[];for(let n of this.dirtyLinkIds){let r=e(n);if(r===null||!Ce(r.proplannerId))continue;let a=this.linksAtLastSave.get(n);(a===void 0||Qo(a,r))&&i.push(r)}return i}clear(){this.initialized=!1,this.p6TrackingEnabled=!1,this.dirtyActivityIds.clear(),this.dirtyLinkIds.clear(),this.dirtyP6ActivityIds.clear(),this.initialCalendarRepairIds.clear(),this.linksAtLastSave.clear(),this.activitiesAtLastSave.clear(),this.p6ActivitiesAtLastSave.clear(),this.p6SettingsAtLastSave=null,this.currentP6Settings=null,this.p6SettingsDirty=!1,this.p6ProjectStateAtLastSave=null,this.currentP6ProjectState=null,this.p6ProjectStateDirty=!1}};function Rm(t,e){let i=[],n=t.map(a=>{let o=jP(a,e);return a.should_be_showed===!1&&i.push(o.id),o});VP(n);let r=new Set(n.map(a=>a.id));return KP(n,r,e.reporter,e.recordDiagnostic),{activities:n,activityIds:r,hiddenIds:i}}function OP(t,e,i,n){if(!t)return null;let r=qh[t.toUpperCase()];return r===void 0?(i(Ht.UNKNOWN_CONSTRAINT,n),e.warn(`[parseFromBackend] unknown constraint label "${t}" \u2014 defaulting to "asap"`),$h):r}function bP(t,e,i){let n=OP(t.constraint,e,i,String(t.unique_id)),a=n!==_.ASAP&&n!==_.ALAP&&t.constraint_date?je(t.constraint_date):null;return{constraintType:n,constraintDate:a}}function NP(t,e,i){if(t==null)return i;let n=String(t);return e.has(n)?n:i}function FP(t){if(t==null||t==="")return[];if(Array.isArray(t))return t.map(String);if(typeof t!="string")return[];try{let e=JSON.parse(t);return Array.isArray(e)?e.map(String):[]}catch{return[]}}function wP(t){if(typeof t!="object"||t===null||!("id"in t))return!1;let e=t.id;return typeof e=="string"||typeof e=="number"}function Wc(t){if(!Array.isArray(t))return[];let e=[];for(let i of t)wP(i)&&e.push(String(i.id));return e}function xP(t){return t==="0"?null:String(t)}function MP(t){if(t==null)return null;if(!(typeof t=="number"&&(t===0||Number.isSafeInteger(t)&&t>0)))throw new Error(`invalid activity proplannerId ${String(t)}`);return t}function UP(t,e,i,n){let r=Number(t);if(!Number.isFinite(r))throw new TypeError(`invalid activity progress ${String(t)}`);let a=r<0,o=r>qs;if(!a&&!o)return r;let l=a?0:100;return i(Ht.PROGRESS_OUT_OF_RANGE,n),e.warn(`[parseFromBackend] activity "${n}" progress ${String(t)} is out of range \u2014 clamping to ${l}`),l}function HP(t,e){return typeof t.is_critical=="boolean"?t.is_critical:(e.error("[parseFromBackend] invalid activity is_critical \u2014 defaulting to false",new TypeError(`activity "${t.unique_id}" received ${typeof t.is_critical}`)),!1)}function BP(t,e,i,n,r){return Array.isArray(t)?t.map(a=>wo(a,e,{record:i,sampleId:n},r)).filter(a=>a!==null):[]}function jP(t,e){let i=NP(t.calendarId,e.knownCalendarIds,e.defaultCalendarId),n=t.calendarId==null||!e.knownCalendarIds.has(String(t.calendarId)),r=UP(t.progress,e.reporter,e.recordDiagnostic,String(t.unique_id)),{constraintType:a,constraintDate:o}=bP(t,e.reporter,e.recordDiagnostic),s=t.type===L.MILESTONE,l=je(t.start_date),c=s?l:je(t.end_date),d=s?0:Number(t.duration),u=HP(t,e.reporter);return{id:String(t.unique_id),proplannerId:MP(t.id),parentId:xP(t.parent_id),name:t.name,description:t.description??"",type:t.type,startDate:l,endDate:c,durationHours:Bi(d,e.hoursPerDay),constraintType:a,constraintDate:o,autoScheduling:Ui(r),calendarId:i,assignedDefaultCalendar:i!=null&&n,dateOrigin:t.date_origin==null?null:je(t.date_origin),progress:r,cost:Number(t.cost),usedCost:Number(t.used_cost??0),realCost:Number(t.real_cost??0),workHours:Number(t.hhWorkTime),realWorkHours:Number(t.real_work??0),ponderator:Number(t.ponderator??0),hasCustomPonderator:t.hasCustomPonderator,correlativeId:t.correlative_id,uniqueCorrelativeId:t.unique_correlative_id,customId:WP(t),subcontractId:t.subcontractId,isLookahead:t.isOnLookahead,hasLookaheadTasks:Array.isArray(t.tasks)&&t.tasks.length>0,newActivityIds:FP(t.newActivitiesArray),hasNewActivities:t.hasNewActivities??!1,...t.isNewActivity===!0?{isNewActivity:!0}:{},pendingRequestIds:Wc(t.pendingRequests),responsableIds:Wc(t.responsables),tagIds:Wc(t.tags),baselinePoints:BP(t.baseline_points,e.reporter,e.recordDiagnostic,String(t.unique_id),s),baselineSnapshot:null,baselineVarianceDays:null,recursiveDurationHours:Bi(Number(t.sumOfDurationRecursively??0),e.hoursPerDay),calendarDuration:Pe({type:t.type,startDate:l,endDate:c}),isCritical:u,freeSlackHours:null,expectedProgress:null,expectedProgressBaseline:null,status:null,criticalPath:null}}function WP(t){return t.has_childs?null:t.custom_id}function VP(t){let e=t.find(i=>i.correlativeId===0&&i.type===L.PROJECT);e&&(e.parentId=null)}function KP(t,e,i,n){for(let r of t)r.parentId!==null&&(e.has(r.parentId)||(i.warn(`[parseFromBackend] activity "${r.id}" references unknown parent "${r.parentId}" \u2014 re-parenting to root (null)`),n(Ht.ORPHAN_ACTIVITY,r.id),r.parentId=null))}function YP(t){if(typeof t!="string")return null;let e=vu(t);return e||(ua(t)?t:null)}function GP(t){if(t==null)return;if(!(typeof t=="number"&&(t===0||Number.isSafeInteger(t)&&t>0)))throw new Error(`invalid link proplannerId ${String(t)}`);return t}function Lm(t,e){let i=[];for(let n of t)try{i.push($P(n,e.knownActivityIds,e.hoursPerDay))}catch(r){e.recordDiagnostic(Ht.INVALID_LINK,String(n.unique_id??n.id)),e.reporter.warn("[parseFromBackend] dropping invalid link",r)}return qP(i,e.recordDiagnostic)}function $P(t,e,i){let n=String(t.unique_id??t.id),r=String(t.source_id??t.source??""),a=String(t.target_id??t.target??"");if(!e.has(r))throw new Error(`[parseFromBackend] link "${n}" source "${r}" does not exist`);if(!e.has(a))throw new Error(`[parseFromBackend] link "${n}" target "${a}" does not exist`);let o=YP(t.type);if(o===null)throw new Error(`[parseFromBackend] link "${n}" has invalid type "${String(t.type)}"`);let s=t.ganttId,l=t.sectorId,c=GP(t.id);return{id:n,source:r,target:a,type:o,lag:ce(Number(t.lag??0),i),freeSlackHours:null,isCritical:!1,...typeof s=="number"?{ganttId:s}:{},...typeof l=="number"?{sectorId:l}:{},...c===void 0?{}:{proplannerId:c}}}function qP(t,e){let i=new Map;for(let n of t){let r=`${n.source}-${n.target}-${n.type}`,a=i.get(r);if(!a){i.set(r,n);continue}let o=km(n)>km(a),s=o?a:n;e(Ht.DUPLICATE_LINK,s.id),o&&i.set(r,n)}return[...i.values()]}function km(t){let e=Number(t.id);return Number.isFinite(e)?e:-1/0}function zP(t){if(typeof t!="string")return Nc;switch(t.toUpperCase()){case ct.DURATION:return ct.DURATION;case ct.COST:return ct.COST;case ct.WORK_HOURS:return ct.WORK_HOURS;default:return Nc}}function JP(t){let e=t.custom_id_prefix;return typeof e=="string"&&e.length>0?e:void 0}function XP(t){let e=t.custom_id_increment;return typeof e=="string"?e:typeof e=="number"&&Number.isFinite(e)?String(e):void 0}function Om(t){let e=JP(t),i=XP(t),n=t.update_duration_for_primavera_for_end_date===!0;return{id:String(t.id),name:t.name,hoursPerDay:t.hoursPerDay,hoursPerWeek:t.hoursPerWeek,dateFormat:t.dateFormat,projectId:t.projectId,companyId:t.companyId,...e!==void 0?{customIdPrefix:e}:{},...i!==void 0?{customIdIncrement:i}:{},...n?{updateDurationForPrimaveraEndDate:!0}:{},activityCreter:zP(t.activity_creter),statusCriteria:pl,ganttId:null}}function is(t,e=Cn,i=qn){let n=Om(t.sector),{calendars:r,baseCalendars:a,knownCalendarIds:o,defaultCalendarId:s}=zo(t.calendars,t.sector.calendars,t.baseCalendars,ZP(t.activities)),{activities:l,activityIds:c,hiddenIds:d}=Rm(t.activities,{knownCalendarIds:o,defaultCalendarId:s,hoursPerDay:n.hoursPerDay,reporter:e,recordDiagnostic:i}),u=Lm(t.links,{knownActivityIds:c,hoursPerDay:n.hoursPerDay,reporter:e,recordDiagnostic:i});return{sector:n,activities:l,links:u,calendars:r,baseCalendars:a,viewStateSeed:{hiddenIds:d}}}function ZP(t){let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;for(let a of t){let o=new Date(a.start_date).getTime(),s=new Date(a.end_date).getTime();Number.isFinite(o)&&(e=Math.min(e,o)),Number.isFinite(s)&&(i=Math.max(i,s))}if(!Number.isFinite(e)||!Number.isFinite(i))return null;let n=new Date(e),r=new Date(i);return n.setFullYear(n.getFullYear()-1),r.setFullYear(r.getFullYear()+1),{start:n.getTime(),end:r.getTime()}}function Vc(t={}){let e=t.seed??0,i=n=>{n>e&&(e=n)};if(t.knownIds)for(let n of t.knownIds){let r=typeof n=="number"?n:Number(n);Number.isFinite(r)&&i(r)}return{fork(){return Vc({seed:e})},next(){return e+=1,String(e)},bump(n){let r=typeof n=="number"?n:Number(n);Number.isFinite(r)&&i(r)},snapshot(){return e},restore(n){e=n}}}function Kc(t={}){let e=t.seed??0,i=n=>{n>e&&(e=n)};if(t.knownIds)for(let n of t.knownIds){let r=typeof n=="number"?n:Number(n);Number.isFinite(r)&&i(r)}return{fork(){return Kc({seed:e})},next(){return e+=1,String(e)},bump(n){let r=typeof n=="number"?n:Number(n);Number.isFinite(r)&&i(r)},snapshot(){return e},restore(n){e=n}}}function Yc(t={}){let e=t.seed??0,i=n=>{Number.isFinite(n)&&n>0&&n<=9999999&&n>e&&(e=n)};if(t.knownIds)for(let n of t.knownIds){if(n==null)continue;let r=typeof n=="number"?n:Number(n);i(r)}return{fork(){return Yc({seed:e})},next(){return e+=1,String(e)},bump(n){if(n==null)return;let r=typeof n=="number"?n:Number(n);i(r)},snapshot(){return e},restore(n){e=n}}}function bm(t){return!!t&&typeof t=="string"&&t.trim().length>0}function ns(t){if(!t||typeof t!="string"||t.trim().length===0)return"";let e=t.match(/^(.*?)(\d+)$/);return e?e[1]??"":t}function rs(t){if(!t||typeof t!="string"||t.trim().length===0)return"";let e=t.match(/(\d+)$/);return e?e[1]??"":""}function Nm(t){if(!t||typeof t!="object")return"";let e=t.customId;return typeof e=="string"?e:""}function Fm(t,e){return!e&&bm(t)}function wm(t,e){return e&&bm(t)}function $r(t){return typeof t=="string"&&t.length>0&&/^\d+$/.test(t)}function as(t){if(!$r(t))return 0n;try{return BigInt(t)}catch{return 0n}}function QP(t,e){if(typeof t!="bigint")return"";let i=t.toString();if(!$r(e))return i;let n=e.length;return i.padStart(n,"0")}function ye(t,e){let i=as(t),n=as(e),r=i+n;return QP(r,t)}function os(t,e){let i=as(t),n=as(e);return i<n?-1:i>n?1:0}function ss(t,e){return os(t,e)<=0?t:e}function ls(t,e){return os(t,e)>=0?t:e}function xm(t){if(!t||t.length===0)throw new Error("minSuffixFromArray requires non-empty array");return t.reduce((e,i)=>ss(e,i))}function Mm(t){if(!t||t.length===0)throw new Error("maxSuffixFromArray requires non-empty array");return t.reduce((e,i)=>ls(e,i))}var Ve={PARENT_CONVERSION:"parentConversion",PASTE_REFERENCE:"pasteReference",NO_CONTEXT:"noContext"};function Um(t){return{prefix:t,baseSuffix:null}}function Hm(t,e){let i=rs(t);return{prefix:ns(t),baseSuffix:ye(i,e)}}function Bm(t){return{prefix:t,baseSuffix:null}}function jm(t,e){return Fm(t,e)?Ve.PARENT_CONVERSION:wm(t,e)?Ve.PASTE_REFERENCE:Ve.NO_CONTEXT}function Wm(t){return{...t,usedSuffixes:new Set(t.usedSuffixes)}}var cs=class t{prefixMap=new Map;processedIds=new Set;_journalPrefixBefore=null;_journalIds=null;beginCustomIdTransaction(){this._journalPrefixBefore=new Map,this._journalIds=[]}commitCustomIdTransaction(){this._journalPrefixBefore=null,this._journalIds=null}rollbackCustomIdTransaction(){let e=this._journalPrefixBefore,i=this._journalIds;if(!(e===null||i===null)){for(let[n,r]of e)r===null?this.prefixMap.delete(n):this.prefixMap.set(n,r);for(let n of[...i].reverse())n.hadId?this.processedIds.add(n.customId):this.processedIds.delete(n.customId);this._journalPrefixBefore=null,this._journalIds=null}}_noteCustomIdBefore(e){if(this._journalPrefixBefore===null||this._journalIds===null)return;let{prefix:i}=this.analyzeCustomId(e);if(!this._journalPrefixBefore.has(i)){let n=this.prefixMap.get(i);this._journalPrefixBefore.set(i,n?Wm(n):null)}this._journalIds.push({customId:e,hadId:this.processedIds.has(e)})}_ensureFreshBounds(e){let i=this.prefixMap.get(e);if(!i?.boundsDirty)return;i.boundsDirty=!1;let n=Array.from(i.usedSuffixes);i.min=xm(n),i.max=Mm(n),i.quantity=n.length,this._recalculateNext(e)}defaultPrefix;suffixIncrement;constructor(e={}){this.defaultPrefix=e.defaultPrefix??"A",this.suffixIncrement=e.suffixIncrement??"10"}captureRestorePoint(){let e=this.fork();return()=>{this.prefixMap.clear();for(let[i,n]of e.prefixMap)this.prefixMap.set(i,n);this.processedIds.clear();for(let i of e.processedIds)this.processedIds.add(i)}}fork(){let e=new t({defaultPrefix:this.defaultPrefix,suffixIncrement:this.suffixIncrement});for(let[i,n]of this.prefixMap)e.prefixMap.set(i,Wm(n));for(let i of this.processedIds)e.processedIds.add(i);return e}extractPrefix(e){return ns(e)}extractSuffix(e){return rs(e)}analyzeCustomId(e){return{prefix:this.extractPrefix(e),suffix:this.extractSuffix(e)}}_updatePrefixStats(e,i){if(this._ensureFreshBounds(e),!this.prefixMap.has(e)){this.prefixMap.set(e,{min:i,max:i,next:i,quantity:1,usedSuffixes:new Set([i])}),this._recalculateNext(e);return}let n=this.prefixMap.get(e);n.usedSuffixes.has(i)||(n.usedSuffixes.add(i),n.min=ss(i,n.min),n.max=ls(i,n.max),n.quantity+=1,this._recalculateNext(e))}_recalculateNext(e){let i=this.prefixMap.get(e);if(!i)return;let n=this.getNextAvailableSuffix(e);i.next=n??this.suffixIncrement}getPrefixStats(e){this._ensureFreshBounds(e);let i=this.prefixMap.get(e);return i?{min:i.min,max:i.max,next:i.next,quantity:i.quantity}:null}getNextSuffix(e){this._ensureFreshBounds(e);let i=this.prefixMap.get(e);return i?i.next:this.suffixIncrement}getAllPrefixes(){return Array.from(this.prefixMap.keys())}registerCustomId(e){if(!e||typeof e!="string")return{prefix:"",suffix:""};let{prefix:i,suffix:n}=this.analyzeCustomId(e);if(!i&&!n)return{prefix:i,suffix:n};if(this._noteCustomIdBefore(e),this._ensureFreshBounds(i),this.prefixMap.has(i)){let r=this.prefixMap.get(i);r.usedSuffixes.has(n)||(r.usedSuffixes.add(n),r.min=ss(n,r.min),r.max=ls(n,r.max),r.quantity+=1,this._recalculateNext(i))}else this.prefixMap.set(i,{min:n,max:n,next:ye(n,this.suffixIncrement),quantity:1,usedSuffixes:new Set([n])});return this.processedIds.add(e),{prefix:i,suffix:n}}releaseCustomId(e=null){if(!e||typeof e!="string")return{prefix:"",suffix:""};let{prefix:i,suffix:n}=this.analyzeCustomId(e);if(!this.prefixMap.has(i))return{prefix:i,suffix:n};this._noteCustomIdBefore(e);let r=this.prefixMap.get(i);return r.usedSuffixes.has(n)&&(r.usedSuffixes.delete(n),r.quantity-=1,r.usedSuffixes.size===0?this.prefixMap.delete(i):r.boundsDirty=!0),this.processedIds.delete(e),{prefix:i,suffix:n}}trackCustomIdChange(e,i){let n=this.releaseCustomId(e),r=this.registerCustomId(i);return{oldPrefix:n.prefix,oldSuffix:n.suffix,newPrefix:r.prefix,newSuffix:r.suffix}}_exceedsMaxLength(e){return e.length>20}_shouldSearchForGaps(e){if(this._ensureFreshBounds(e),!this.prefixMap.has(e))return!1;let i=this.prefixMap.get(e);return`${e}${ye(i.max,this.suffixIncrement)}`.length>20}_suffixForUnknownPrefix(e,i){let n=i&&$r(i)?i:this.suffixIncrement;return`${e}${n}`.length>20?null:n}_findFirstAvailableGap(e){if(this._ensureFreshBounds(e),!this.prefixMap.has(e))return null;let i=this.prefixMap.get(e),n=this.suffixIncrement;for(;os(n,i.max)<0;){if(`${e}${n}`.length>20)return null;if(!i.usedSuffixes.has(n))return n;n=ye(n,this.suffixIncrement)}return null}_generateDefaultCustomId(){let e=this.getNextAvailableSuffix(this.defaultPrefix);if(e===null){if(this._shouldSearchForGaps(this.defaultPrefix)){let i=this._findFirstAvailableGap(this.defaultPrefix);if(i!==null)return`${this.defaultPrefix}${i}`}return`${this.defaultPrefix}${this.suffixIncrement}`}return`${this.defaultPrefix}${e}`}getNextAvailableSuffix(e,i=null){if(this._ensureFreshBounds(e),!this.prefixMap.has(e))return this._suffixForUnknownPrefix(e,i);let n=this.prefixMap.get(e),r=this.suffixIncrement;if(!i||!$r(i)){let s=ye(n.max,r);return`${e}${s}`.length>20?null:s}let a=i;for(let s=0;s<100;s++){if(`${e}${a}`.length>20)return null;if(!n.usedSuffixes.has(a))return a;a=ye(a,r)}let o=ye(n.max,r);return`${e}${o}`.length>20?null:o}generateNextCustomId(e){let i=this.getNextAvailableSuffix(e);if(i===null)return this._generateDefaultCustomId();if(this.prefixMap.has(e)){let r=this.prefixMap.get(e),a=0;for(;r.usedSuffixes.has(i)&&a<1e4;){let o=this.getNextAvailableSuffix(e,ye(i,this.suffixIncrement));if(o===null)return this._generateDefaultCustomId();i=o,a++}}let n=`${e}${i}`;return this._exceedsMaxLength(n)&&(n=this._generateDefaultCustomId()),n}populateFromActivities(e){if(!Array.isArray(e))return this;let i=[...new Set(e.filter(n=>n&&typeof n.customId=="string"&&n.customId).map(n=>n.customId))];for(let n of i){if(this.processedIds.has(n))continue;let{prefix:r,suffix:a}=this.analyzeCustomId(n);(r||a)&&(this._updatePrefixStats(r,a),this.processedIds.add(n))}return this}getDefaults(){return{prefix:this.defaultPrefix,increment:this.suffixIncrement}}generateCustomIdForNewChild(e){let{activity:i,useActivityCustomIdAsReference:n=!1}=e,r=Nm(i),a=jm(r,n),{prefix:o,baseSuffix:s}=this._applyGenerationStrategy(a,r),l=null;if(a===Ve.PARENT_CONVERSION&&this.prefixMap.has(o)){this._ensureFreshBounds(o);let p=this.prefixMap.get(o).max;l=ye(p,this.suffixIncrement)}a===Ve.PARENT_CONVERSION&&this.releaseCustomId(r);let c=a===Ve.PARENT_CONVERSION&&l?l:s,d=this.getNextAvailableSuffix(o,c);if(d===null){let p=this._generateDefaultCustomId();return this.registerCustomId(p),p}let u=`${o}${d}`;return this._exceedsMaxLength(u)&&(u=this._generateDefaultCustomId()),this.registerCustomId(u),u}_applyGenerationStrategy(e,i){switch(e){case Ve.PARENT_CONVERSION:return Um(this.defaultPrefix);case Ve.PASTE_REFERENCE:return Hm(i,this.suffixIncrement);default:return Bm(this.defaultPrefix)}}generateCustomIdForRestoredChild(e=null){if(e){let n=e.trim();if(n.length>0){let r=this.extractPrefix(n),a=this.extractSuffix(n),o=ye(a,this.suffixIncrement),s=this.getNextAvailableSuffix(r,o);if(s===null){let c=this._generateDefaultCustomId();return this.registerCustomId(c),c}let l=`${r}${s}`;return this._exceedsMaxLength(l)&&(l=this._generateDefaultCustomId()),this.registerCustomId(l),l}}let i=this.generateNextCustomId(this.defaultPrefix);return this.registerCustomId(i),i}clear(){this.prefixMap.clear(),this.processedIds.clear()}getTotalPrefixes(){return this.prefixMap.size}hasPrefix(e){return this.prefixMap.has(e)}isCustomIdInUse(e,i=null){if(!e||typeof e!="string"||!e.trim())return!1;let n=e.trim();return i&&n===i.trim()?!1:this.processedIds.has(n)}};var tR=1,eR=-1;function iR(t,e){if(t===void 0&&e===void 0)return 0;if(t===void 0)return tR;if(e===void 0)return eR;let i=Math.min(t.length,e.length);for(let n=0;n<i;n+=1){let r=(t[n]??0)-(e[n]??0);if(r!==0)return r}return t.length-e.length}function Vm(t,e,i,n){let r=i.assignmentByActivityId.get(String(t.id)),a=i.assignmentByActivityId.get(String(e.id)),o=iR(r===void 0?void 0:i.sequencePathByValueId.get(r),a===void 0?void 0:i.sequencePathByValueId.get(a));return n===Vt.DESCENDING?-o:o}var nR=1,rR=-1;function aR(t,e){return!t&&!e?null:t&&e?0:t?nR:rR}function Km(t){return t==null}function Ym(t,e){let i=e.indexOf(String(t));return i===-1?e.length:i}function oR(t,e,i){return t instanceof Date&&e instanceof Date?t.getTime()-e.getTime():typeof t=="number"&&typeof e=="number"?t-e:typeof t=="boolean"&&typeof e=="boolean"?Number(t)-Number(e):Array.isArray(t)&&Array.isArray(e)?t.length-e.length:String(t).localeCompare(String(e),i,{sensitivity:"base",numeric:!0})}function sR(t,e,i){if(fn(t)){let r=i.get(t.key);return r===void 0?null:(a,o)=>Vm(a,o,r,t.direction)}let n=Qe(t.field);return n===null?null:(r,a)=>{let o=n.extract(r,e),s=n.extract(a,e),l=aR(Km(o),Km(s));if(l!==null)return l;let c=n.valueKind===x.ENUM?Ym(o,n.order)-Ym(s,n.order):oR(o,s,e.locale);return t.direction===Vt.DESCENDING?-c:c}}function Gm(t,e,i=Ia){let n=t.rules.map(r=>sR(r,e,i)).filter(r=>r!==null);return n.length===0?null:(r,a)=>{for(let o of n){let s=o(r,a);if(s!==0)return s}return 0}}function $m(t){let e=[];t.forEachActivity((i,n)=>{i.type===L.PROJECT&&t.getChildren(String(n)).length===0&&e.push(String(n))});for(let i of e)t.setActivityField(i,B.TYPE,mn),lR(t,i);return e}function lR(t,e){let i=t.getActivity(e);if(!i||!i.startDate||i.durationHours==null)return;let n=new Date(i.startDate);n.setUTCHours(0,0,0,0);let r=t.getClosestWorkTime({date:n,dir:z.FUTURE,task:i});if(r.getTime()===i.startDate.getTime())return;let a=t.calculateEndDate({startDate:r,durationHours:i.durationHours,task:i});t.setActivityField(e,B.START_DATE,r),t.setActivityField(e,B.END_DATE,a)}function qm(t){let e=[],i=[];t.forEachActivity((r,a)=>{r.parentId===null&&e.push(String(a))});let n=e.map(r=>({activityId:r,parent:null,childIds:null,realWork:0})).reverse();for(let r=n.pop();r;r=n.pop()){if(r.childIds===null){let s=t.getActivity(r.activityId);if(!s)continue;let l=[...t.getChildren(r.activityId)],c=l.length===0;r.childIds=l.values(),r.realWork=c?Xt(s.workHours,s.progress):0}let a=r.childIds.next();if(!a.done){n.push(r,{activityId:String(a.value),parent:r,childIds:null,realWork:0});continue}t.setActivityField(r.activityId,B.REAL_WORK_HOURS,r.realWork),i.push(r.activityId),r.parent&&(r.parent.realWork+=r.realWork)}return i}async function zm(t){let{state:e,sector:i,scheduler:n,skipAutoSchedule:r,now:a}=t;if(Nt(e),i.updateDurationForPrimaveraEndDate&&dR(e),uR(e),qm(e),i.activityCreter===ct.COST){let s=!1;e.forEachActivity(l=>{s||=Tt(l)!==null}),s&&Mo(ct.COST,e)}if(r){Cr(e,i.activityCreter),a&&($i(e,a),We(e,i.statusCriteria)),qi(e,i.hoursPerDay);return}let o=await n.schedule({});Ar(e,o),pR(e),cR(e),await Ue(e,void 0,!1),Cr(e,i.activityCreter),a&&($i(e,a),We(e,i.statusCriteria)),qi(e,i.hoursPerDay)}function cR(t){t.forEachActivity(e=>{e.autoScheduling||!e.startDate||e.durationHours==null||t.getChildren(e.id).length>0||(e.endDate=t.calculateEndDate({startDate:e.startDate,durationHours:e.durationHours,task:e}),e.calendarDuration=Pe(e))})}function dR(t){t.forEachActivity(e=>{!e.startDate||!e.endDate||(e.durationHours=t.calculateDuration({startDate:e.startDate,endDate:e.endDate,task:e}))})}function uR(t){t.forEachActivity(e=>{let i=e.constraintType;if(!i||!e.constraintDate)return;let n=e.constraintDate;if(e.type===L.MILESTONE&&(n.getUTCHours()!==0||n.getUTCMinutes()!==0))return;let r=t.calendarReader.getCalendar(String(e.calendarId));r&&(e.constraintDate=ge(e.constraintDate,r,i))})}function pR(t){t.forEachActivity(e=>{if(e.type!==L.MILESTONE)return;let i=e.constraintType;if(!i||!e.constraintDate)return;let n=t.calendarReader.getCalendar(String(e.calendarId));n&&(e.constraintDate=ge(e.constraintDate,n,i))})}function Jm(t){if(t.p6===void 0)return t;let e=t.p6,i={...e,activityType:e.activityType??Mt.TASK,durationType:e.durationType??de.FIXED_DURATION_AND_UNITS,primaryConstraintType:e.primaryConstraintType??null,primaryConstraintDate:e.primaryConstraintDate??null,sourcePrimaryConstraintToken:e.sourcePrimaryConstraintToken??null,sourceSecondaryConstraintToken:Reflect.get(e,"sourceSecondaryConstraintToken")??null,resourceAssignments:e.resourceAssignments??[]};return delete i.sourceActivityTypeToken,delete i.sourceDurationTypeToken,{...t,p6:i}}function Gc(t){if(!t.hasCompleteSchedulingState)return{};let e=Mn(t.activity);return e===void 0?{}:{p6:e}}function Xm(t){return{activityPatch:t.p6===void 0?{}:{p6:void 0},snapshotPatch:t.p6===void 0?{}:{p6:S(t.p6)}}}function Zm(t){let e=t.promotionSnapshot?.p6;return e===void 0?Gc(t):{p6:S(e)}}function tg(t,e){let i=e==="before";return{...t.p6Settings===void 0?{}:{p6Settings:i?Qm(t.p6Settings):S(t.p6Settings)},...t.p6ProjectPlannedStart===void 0?{}:{p6ProjectPlannedStart:i?Qm(t.p6ProjectPlannedStart):S(t.p6ProjectPlannedStart)}}}function eg(t,e,i){t.p6Settings!==void 0&&i.setSettings(S(t.p6Settings[e])),t.p6ProjectPlannedStart!==void 0&&i.setProjectPlannedStart(S(t.p6ProjectPlannedStart[e]))}function ig(t){return t.p6Settings!==void 0||t.p6ProjectPlannedStart!==void 0}function Qm(t){return{before:S(t.after),after:S(t.before)}}function rg(t,e){let i=e.projectState?.plannedStart??null,n=t.projectState?.plannedStart??null;return{...ng(e.settings,t.settings)?{p6Settings:{before:S(e.settings),after:S(t.settings)}}:{},...ng(i,n)?{p6ProjectPlannedStart:{before:S(i),after:S(n)}}:{}}}function ng(t,e){return Ot(t)!==Ot(e)}var ag="Invalid P6 activity status",$c=class extends Error{constructor(i,n){super(`${ag}: ${n}`);this.code=i;this.name="P6ActivityStatusError"}code},fR=100,yR=0;function og(t){sg(t.remainingDurationHours),lg(t),mR(t),cg(t)}function qr(t){hR(t.remainingDurationHours),lg(t),gR(t),cg(t)}function ds(t,e){if(e.actualStart===void 0&&e.actualFinish===void 0)return e;let i=e.actualStart!==void 0?e.actualStart:t.actualStart,n=e.actualFinish!==void 0?e.actualFinish:t.actualFinish,r=n!==null?"completed":i!==null?"in_progress":"not_started",a=i===null&&n===null&&t.actualStart!==null,o={...e,executionStatus:r,...n!==null?{remainingDurationHours:0,physicalPercentComplete:fR}:{},...a?{remainingDurationHours:t.originalDurationHours,physicalPercentComplete:yR}:{}};return qr({...t,...o}),o}function sg(t){(!Number.isFinite(t)||t<0)&&zt("Remaining Duration must be finite and non-negative")}function hR(t){t!==null&&sg(t)}function lg(t){[t.actualStart,t.actualFinish,t.suspendDate,t.resumeDate].some(i=>i!==null&&Number.isNaN(i.getTime()))&&zt("actual, suspend and resume dates must be valid")}function mR(t){let e=t.actualStart!==null,i=t.actualFinish!==null;if(t.executionStatus==="not_started"){(e||i)&&zt("not_started cannot have actual dates");return}if(t.executionStatus==="in_progress"){(!e||i)&&zt("in_progress requires Actual Start and no Actual Finish");return}(!e||!i||t.remainingDurationHours!==0)&&zt("completed requires Actual Start, Actual Finish and zero Remaining Duration")}function gR(t){let e=t.actualStart!==null,i=t.actualFinish!==null;i&&!e&&zt("Actual Finish requires Actual Start"),t.executionStatus==="not_started"&&e&&zt("not_started cannot have actual dates"),t.executionStatus==="in_progress"&&i&&zt("in_progress cannot have Actual Finish"),t.executionStatus==="completed"&&t.remainingDurationHours!==null&&t.remainingDurationHours!==0&&zt("completed requires zero Remaining Duration")}function cg(t){let{actualStart:e,actualFinish:i,suspendDate:n,resumeDate:r}=t;if(e!==null&&i!==null&&e.getTime()>i.getTime())throw new $c("ACTUAL_FINISH_BEFORE_START","Actual Start must not be after Actual Finish");n!==null&&(e===null&&zt("Suspend requires Actual Start"),e.getTime()>n.getTime()&&zt("Suspend must not be before Actual Start"),i!==null&&n.getTime()>i.getTime()&&zt("Suspend must not be after Actual Finish")),r!==null&&(n===null&&zt("Resume requires Suspend"),n.getTime()>r.getTime()&&zt("Suspend must not be after Resume"),i!==null&&r.getTime()>i.getTime()&&zt("Resume must not be after Actual Finish"))}function zt(t){throw new Error(`${ag}: ${t}`)}var qc="Invalid P6 derived input",Jc=100,zr=0,er=100,AR=16,IR=8,SR="178",Xc=Date.parse("2026-10-07T12:00:00.000Z"),vR=Date.parse("2026-10-08T12:00:00.000Z"),CR=Date.parse("2026-10-12T12:00:00.000Z"),DR=Date.parse("2026-10-06T08:00:00.000Z"),TR=Xc,_R=Xc,ER=Date.parse("2026-10-08T12:00:00.000Z"),PR=Date.parse("2026-10-05T08:00:00.000Z"),RR=Date.parse("2026-10-06T08:00:00.000Z");function Jr(t,e){return og(t),kR(t,e.dataDate),{actualDurationHours:ug(t,e),atCompletionDurationHours:LR(t,e),durationPercentComplete:OR(t),unitsPercentComplete:bR(t,e),schedulePercentComplete:Zc(t,e),remainingFloatHours:wR(t,e.calendar,e.totalFloatMethod??"finish_float")}}function dg(t,e){return ug(t,e)}function kR(t,e){let i=[t.originalDurationHours,t.remainingDurationHours],n=[t.actualLaborUnits,t.remainingLaborUnits,t.actualNonlaborUnits,t.remainingNonlaborUnits];if(i.some(r=>!Number.isFinite(r)||r<0))throw new Error(`${qc}: expected finite non-negative durations`);if(n.some(r=>!Number.isFinite(r)))throw new Error(`${qc}: expected finite unit scalars`);if(Number.isNaN(e.getTime()))throw new Error(`${qc}: invalid Data Date`)}function ug(t,e){if(t.executionStatus==="not_started"||t.actualStart===null)return 0;let i=t.executionStatus==="completed"?t.actualFinish:e.dataDate;return i===null?0:zc(e.calendar,t.actualStart,i)}function LR(t,e){return t.executionStatus==="not_started"?xR(e.calendar,t.plannedStart,t.plannedFinish):t.executionStatus==="in_progress"?t.actualStart===null||t.remainingEarlyFinish===null?0:zc(e.calendar,t.actualStart,t.remainingEarlyFinish):t.actualStart===null||t.actualFinish===null?0:zc(e.calendar,t.actualStart,t.actualFinish)}function zc(t,e,i){return e.getTime()>=i.getTime()?0:ir(t,e,i)}function OR(t){return t.originalDurationHours===0?0:pg((t.originalDurationHours-t.remainingDurationHours)/t.originalDurationHours*Jc)}function bR(t,e){let i=t.actualLaborUnits+t.actualNonlaborUnits,n=t.remainingLaborUnits+t.remainingNonlaborUnits,r=i+n;return r===0?NR(t,e)?er:zr:i/r*Jc}function NR(t,e){return t.executionStatus!==V.COMPLETED||t.actualStart===null||t.actualFinish===null||t.remainingDurationHours!==0||t.percentCompleteType!==It.DURATION||e.dataDate.getTime()!==Xc||e.calendarId!==SR||!FR(t)?!1:t.activityType===Mt.TASK?t.durationType===de.FIXED_DURATION_AND_UNITS&&t.originalDurationHours===IR&&t.physicalPercentComplete===er&&_i(t.plannedStart,_R)&&_i(t.plannedFinish,ER)&&_i(t.actualStart,PR)&&_i(t.actualFinish,RR):t.activityType===Mt.LEVEL_OF_EFFORT&&t.durationType===de.FIXED_DURATION_AND_UNITS_PER_TIME&&t.originalDurationHours===AR&&t.physicalPercentComplete===er&&_i(t.plannedStart,vR)&&_i(t.plannedFinish,CR)&&_i(t.actualStart,DR)&&_i(t.actualFinish,TR)}function FR(t){return t.expectedFinish===null&&t.suspendDate===null&&t.resumeDate===null&&t.secondaryConstraintType===null&&t.secondaryConstraintDate===null&&t.primaryBaselineStart===null&&t.primaryBaselineFinish===null&&(t.resourceAssignments?.length??0)===0}function _i(t,e){return t?.getTime()===e}function Zc(t,e){let i=t.primaryBaselineStart!==null,n=t.primaryBaselineFinish!==null;if(i!==n)return null;let r=t.primaryBaselineStart??t.plannedStart,a=t.primaryBaselineFinish??t.plannedFinish;if(r===null||a===null)return null;if(r.getTime()===a.getTime())return e.dataDate.getTime()<r.getTime()?zr:er;if(e.dataDate.getTime()<=r.getTime())return zr;if(e.dataDate.getTime()>=a.getTime())return er;let o=ir(e.calendar,r,a);if(o<=0)return zr;let s=ir(e.calendar,r,e.dataDate);return pg(s/o*Jc)}function wR(t,e,i){if(t.remainingEarlyFinish===null||t.lateFinish===null)return null;let n=ir(e,t.remainingEarlyFinish,t.lateFinish);if(i==="finish_float")return Object.is(n,-0)?0:n;if(t.remainingEarlyStart===null||t.lateStart===null)return null;let r=ir(e,t.remainingEarlyStart,t.lateStart),a=i==="start_float"?r:Math.min(r,n);return Object.is(a,-0)?0:a}function xR(t,e,i){return e===null||i===null?0:ir(t,e,i)}function ir(t,e,i){if(e.getTime()<=i.getTime())return t.calculateDuration(e,i);let n=-t.calculateDuration(i,e);return Object.is(n,-0)?0:n}function pg(t){return Math.min(er,Math.max(zr,t))}var MR=new Set([Mt.TASK,Mt.RESOURCE_DEPENDENT]),UR=new Map;function us(t){if(!(t.settings.useExpectedFinishDates&&HR(t.previousSettings,t.settings)))return UR;let i=new Map;for(let[n,r]of t.activities){let a=r.remainingEarlyFinish;a!==null&&BR(r)&&i.set(n,new Date(a))}return i}function HR(t,e){let i=t.dataDate,n=e.dataDate;return i===null||n===null?!1:n.getTime()>i.getTime()}function BR(t){return t.executionStatus===V.IN_PROGRESS&&t.expectedFinish===null&&jR(t)}function jR(t){let{activityType:e}=t;return e===void 0?!0:MR.has(e)}function ps(t,e){return{freeSlackHours:t.freeFloatHours,criticalPath:{earlyStart:S(t.earlyStart),earlyFinish:S(t.earlyFinish),lateStart:S(t.lateStart),lateFinish:S(t.lateFinish),totalSlackHours:t.remainingFloatHours},isCritical:e.criticalActivityMethod===Ki.LONGEST_PATH?t.longestPath:t.remainingFloatHours!==null&&t.remainingFloatHours<=e.criticalFloatThresholdHours}}function fg(t){let e=new Set(t.criticalPath);return new Map([...t.activities].map(([i,n])=>{let r=n.actualStart??n.remainingEarlyStart,a=n.actualFinish??n.remainingEarlyFinish;return[i,{p6:S(n),...r===null?{}:{startDate:S(r)},...a===null?{}:{endDate:S(a)},isCritical:e.has(i),freeSlackHours:n.freeFloatHours,criticalPath:{earlyStart:S(n.earlyStart),earlyFinish:S(n.earlyFinish),lateStart:S(n.lateStart),lateFinish:S(n.lateFinish),totalSlackHours:n.remainingFloatHours}}]}))}function yg(t,e,i,n={}){if(!KR(e.dataDate,i.dataDate))return new Map;if(!at(i,n.enabled))return new Map;let r=!at(e,n.enabled),a=t.getAllActivities(),o=WR(a,e,i,n.adoptExpectedFinish),s=new Map;for(let l of a){let c=l.p6;if(c===void 0)continue;let d=t.calendarReader.getCalendar(l.calendarId);if(d===null)throw new Error(`Missing calendar for Data Date activity ${l.id}`);let u=VR(c,i.dataDate,d,o.get(l.id)),p=!Object.is(u.expectedFinish,c.expectedFinish)||!Object.is(u.schedulePercentComplete,c.schedulePercentComplete)||!Object.is(u.actualDurationHours,c.actualDurationHours);!r&&!p||s.set(l.id,{...p?{p6:u}:{},...r?ps(u,i):{}})}return s}function WR(t,e,i,n=!1){if(!n)return new Map;if(i.setDataDateAndPlannedStartToForecastStart&&i.projectForecastStart!==null)return new Map;let a=new Map(t.flatMap(o=>{let s=o.p6,l=s!==void 0&&He(s);return o.type===L.PROJECT||!l?[]:[[o.id,s]]}));return us({previousSettings:e,settings:i,activities:a})}function hg(t,e){for(let[i,n]of e)t.setActivityFields(i,n)}function VR(t,e,i,n){let r={dataDate:e,calendar:i},a=Zc(t,r),o=He(t)&&t.executionStatus===V.IN_PROGRESS;return{...t,expectedFinish:n??t.expectedFinish,schedulePercentComplete:a,...o?{actualDurationHours:dg(t,r)}:{}}}function KR(t,e){return t?.getTime()!==e?.getTime()}var YR=["remainingDurationHours","originalDurationHours","actualStart","actualFinish","suspendDate","resumeDate"];function ys(t,e,i){if(!GR(t,e))return{p6:{...e}};if(!He(e))return{p6:{...e},...mg(t,e),...gg(t,e,null)};let n=$R(e,i.calendar),r=Jr(n===null?e:{...e,remainingEarlyFinish:n},{dataDate:i.dataDate,calendar:i.calendar,...i.totalFloatMethod===void 0?{}:{totalFloatMethod:i.totalFloatMethod}});return{p6:{...e,...r,remainingFloatHours:e.remainingFloatHours},...mg(t,e),...gg(t,e,n)}}function GR(t,e){return YR.some(i=>!fs(t[i],e[i]))}function $R(t,e){return t.executionStatus==="completed"||t.remainingEarlyStart===null?null:e.calculateEndDate(t.remainingEarlyStart,t.remainingDurationHours)}function mg(t,e){if(fs(t.actualStart,e.actualStart))return{};let i=e.actualStart??e.remainingEarlyStart;return i===null?{}:{startDate:S(i)}}function gg(t,e,i){if(!(!fs(t.remainingDurationHours,e.remainingDurationHours)||!fs(t.actualFinish,e.actualFinish)))return{};let r=e.actualFinish??i??e.remainingEarlyFinish;return r===null?{}:{endDate:S(r)}}function fs(t,e){return t instanceof Date||e instanceof Date?t instanceof Date&&e instanceof Date&&t.getTime()===e.getTime():Object.is(t,e)}var se=class extends Error{constructor(i,n,r=[],a=0,o=[]){super(n);this.code=i;this.relationshipIds=r;this.count=a;this.sampleActivityIds=o;this.name="P6CapabilityError"}code;relationshipIds;count;sampleActivityIds};function Ag(t){return Object.freeze({getSettings:t.getSettings,getProjectState:t.getProjectState,getLatestRunLog:t.getLatestRunLog,getScheduleStateFingerprint:t.getScheduleStateFingerprint,getDefaultSettings:t.getDefaultSettings,getScheduleReadiness:t.getScheduleReadiness,searchEndingActivities:t.searchEndingActivities,getEndingActivityOption:t.getEndingActivityOption,resolveMustFinishByDefault:t.resolveMustFinishByDefault,updateSettings:t.updateSettings,updateActivity:t.updateActivity,schedule:t.schedule})}function hs(t){return t.outOfSequencePolicy!=="progress_override"||t.successorExecution!=="in_progress"?!0:t.linkType==="2"||t.linkType==="3"}function Ke(t){return t.actualFinish!==null?{execution:"completed",hasRemaining:!1}:t.actualStart!==null?{execution:"in_progress",hasRemaining:!0}:{execution:"not_started",hasRemaining:!0}}function Xr(t){return t.outOfSequencePolicy==="retained_logic"&&t.linkType==="1"&&t.actualStart!==null}function td(t,e,i){let n=Sg(e);if(n.length===0)return null;let r=n.map(a=>{let o=vg(e,a),s=t.getClosestWorkTime({date:i,dir:"future",task:o}),l=t.calculateEndDate({startDate:s,durationHours:Qc(a),task:o});return{start:s,finish:l}});return Cg(r)}function Ig(t,e,i){let n=Sg(e);if(n.length===0)return null;let r=n.map(a=>{let o=vg(e,a),s=t.getClosestWorkTime({date:i,dir:"past",task:o}),l=t.calculateEndDate({startDate:s,durationHours:-Qc(a),task:o}),c=t.calculateEndDate({startDate:l,durationHours:Qc(a),task:o});return{start:l,finish:c}});return Cg(r)}function Sg(t){if(t.p6?.activityType!=="resource_dependent")return[];let e=t.p6.resourceAssignments??[];for(let i of e)qR(i);return e}function qR(t){for(let e of[t.actualUnits,t.remainingUnits,t.unitsPerHour])if(!Number.isFinite(e)||e<0)throw new Error(`Invalid P6 resource assignment ${t.id}`);if(t.remainingUnits>0&&t.unitsPerHour<=0)throw new Error(`Invalid P6 resource assignment rate ${t.id}`)}function Qc(t){let e=t.remainingUnits===0?0:t.remainingUnits/t.unitsPerHour;return zR(e)}function zR(t){let e=Math.round(t),i=Number.EPSILON*Math.max(1,Math.abs(t))*32;return Math.abs(t-e)<=i?e:t}function vg(t,e){return{...t,calendarId:e.calendarId}}function Cg(t){let e=new Date(Math.min(...t.map(n=>n.start.getTime()))),i=new Date(Math.max(...t.map(n=>n.finish.getTime())));return{start:e,finish:i}}var JR=4;function ms(t){let e=XR(t);if(e!==null)return e;let i=ZR(t);if(i!==null)return i;let n=QR(t);if(n!==null)return n;let r=tk(t);if(r!==null)return r;if(t.link.type===M.START_TO_FINISH&&an(t.link)&&t.successor.p6?.activityType==="finish_milestone")return ek(t);let a=gr(t.predecessor,t.successor,t.link,t.adapter,t.lagTask).successorStart;return!ak(t)||a.getTime()===t.predecessor.endDate.getTime()?a:t.adapter.getClosestWorkTime({date:t.predecessor.endDate,dir:"future",task:t.successor})}function XR(t){let e=t.link._trueLag??t.link.lag??0;if(t.link.type!==M.FINISH_TO_FINISH||!an(t.link)||t.successor.durationHours===0||t.lagTask!==null||e<=0)return null;let i=ni(t.predecessor.endDate,e);return t.adapter.calculateEndDate({startDate:i,durationHours:-t.successor.durationHours,task:t.successor})}function ZR(t){let e=t.link._trueLag??t.link.lag??0;return t.link.type!==M.START_TO_START||!an(t.link)||t.successor.p6?.activityType!=="finish_milestone"||t.successor.durationHours!==0||t.lagTask!==null||e===0?null:t.adapter.getClosestWorkTime({date:ni(t.predecessor.startDate,e),dir:"future",task:t.successor})}function QR(t){let e=(t.link._trueLag??t.link.lag??0)===0;if(t.link.type!==M.FINISH_TO_START||t.predecessor.p6?.activityType!=="resource_dependent"||t.successor.p6?.activityType!=="level_of_effort"||t.successor.durationHours!==0||!e)return null;let i=mr(t.predecessor.endDate),n=t.adapter.getClosestWorkTime({date:i,dir:"future",task:t.successor});return n.getTime()===i.getTime()?t.predecessor.endDate:n}function tk(t){let e=t.link._trueLag??t.link.lag??0;return!(t.link.type===M.FINISH_TO_START||t.link.type===M.FINISH_TO_FINISH)||!an(t.link)||t.successor.p6?.activityType!=="finish_milestone"||e>=0||t.lagTask!==null?null:t.adapter.getClosestWorkTime({date:ni(t.predecessor.endDate,e),dir:"future",task:t.successor})}function ek(t){let e=t.link._trueLag??t.link.lag??0,i=t.lagTask===null?ni(t.predecessor.startDate,e):t.adapter.calculateEndDate({startDate:t.predecessor.startDate,durationHours:e,task:t.lagTask});return t.adapter.getClosestWorkTime({date:i,dir:"future",task:t.successor})}function Zr(t){let e=ik(t);if(e!==null)return e;let i=nk(t);if(i!==null)return i;let n=t.link.type===M.FINISH_TO_FINISH&&an(t.link)&&t.lagTask!==null&&t.lagTask.id!==t.successor.id?rk(t):Na(t.successor,t.predecessor,t.link,t.adapter,t.lagTask);return ok(t)?sk(n,t.lagTask,t.adapter):n}function ik(t){let e=t.link._trueLag??t.link.lag??0;if(t.link.type!==M.START_TO_FINISH||!an(t.link)||t.lagTask!==null||e<=0)return null;let i=ni(t.successor.endDate,-e);return t.adapter.calculateEndDate({startDate:i,durationHours:t.predecessor.durationHours,task:t.predecessor})}function nk(t){let e=t.link._trueLag??t.link.lag??0,i=t.adapter.isWorkTime?.({date:t.successor.startDate,task:t.predecessor});return t.link.type!==M.FINISH_TO_START||!an(t.link)||t.predecessor.p6?.activityType!=="finish_milestone"||e!==0||t.lagTask!==null||i!==!1?null:t.adapter.getClosestWorkTime({date:t.successor.startDate,dir:"past",task:t.predecessor})}function an(t){return t._sourceLag===void 0&&t._targetLag===void 0}function rk(t){let e=t.link._trueLag??t.link.lag??0;if(t.lagTask===null)return ni(t.successor.endDate,-e);let i=t.adapter.getClosestWorkTime({date:t.successor.endDate,dir:"past",task:t.lagTask});return t.adapter.calculateEndDate({startDate:i,durationHours:-e,task:t.lagTask})}function ak(t){let e=t.link.type===M.FINISH_TO_START||t.link.type===M.FINISH_TO_FINISH,i=(t.link.lag??0)===0&&(t.link._sourceLag??0)===0&&(t.link._targetLag??0)===0;return t.successor.durationHours===0&&e&&i}function ok(t){return t.link.type===M.FINISH_TO_FINISH&&(t.link._trueLag??t.link.lag??0)>0&&t.lagTask!==null}function sk(t,e,i){if(e===null)return t;let n=mr(t),r=i.getClosestWorkTime({date:n,dir:"future",task:e}),a=du(n,r);return r.getTime()>n.getTime()&&a<=JR?r:t}function Tg(t){let e=Ak(t.links),i={...t,projectEarlyFinish:yk(t.activities)};for(let n of[...t.orderedIds].reverse())lk(n,e.get(n)??[],i)}function lk(t,e,i){let n=i.adapter.getActivity(t),r=i.activities.get(t);if(!mk(n)||r===void 0)return;let a=gk(n,r),o=fk(a,e,i);if(!uk(r,o))return;let s=pk(a,o,i.adapter),l={...r,...s};i.activities.set(t,l),ck(a,l,e,i)}function ck(t,e,i,n){let r=Dg(t,e);for(let a of i){let o=n.adapter.getActivity(a.target),s=n.activities.get(a.target);if(o?.p6?.activityType!=="level_of_effort"||!s)continue;let l=Dg(o,s),c=ms({predecessor:r,successor:l,link:a,adapter:n.adapter,lagTask:n.resolveLagTask(r,l)});s.earlyStart!==null&&c<=s.earlyStart||n.activities.set(a.target,dk(s,l,c,n.adapter))}}function dk(t,e,i,n){let r=n.calculateEndDate({startDate:i,durationHours:t.scheduledRemainingDurationHours,task:e});return{...t,remainingEarlyStart:i,remainingEarlyFinish:r,earlyStart:new Date(i),earlyFinish:new Date(r)}}function Dg(t,e){return{...t,startDate:e.remainingEarlyStart??e.earlyStart??t.startDate,endDate:e.remainingEarlyFinish??e.earlyFinish??t.endDate,durationHours:e.scheduledRemainingDurationHours}}function uk(t,e){return e!==null&&t.remainingEarlyFinish!==null&&e>t.remainingEarlyFinish}function pk(t,e,i){let n=i.calculateEndDate({startDate:e,durationHours:-t.durationHours,task:t}),r=i.calculateEndDate({startDate:n,durationHours:t.durationHours,task:t});return{remainingEarlyStart:n,remainingEarlyFinish:r,earlyStart:new Date(n),earlyFinish:new Date(r)}}function fk(t,e,i){let n=null;for(let r of e){let a=hk(r.target,i);if(a===null)continue;let o=Zr({successor:a,predecessor:t,link:r,adapter:i.adapter,lagTask:i.resolveLagTask(t,a)});(n===null||o<n)&&(n=o)}return n??i.projectEarlyFinish}function yk(t){let e=null;for(let i of t.values()){let n=i.remainingEarlyFinish??i.earlyFinish;n!==null&&(e===null||n>e)&&(e=n)}return e}function hk(t,e){let i=e.adapter.getActivity(t),n=e.activities.get(t);if(i?.p6===void 0||i.p6.activityType==="level_of_effort"||n===void 0)return null;let r=n.remainingEarlyStart??n.earlyStart,a=n.remainingEarlyFinish??n.earlyFinish;return r===null||a===null?null:{...i,startDate:r,endDate:a,durationHours:n.scheduledRemainingDurationHours}}function mk(t){return t?.p6?.executionStatus==="not_started"&&t.p6.primaryConstraintType==="alap"}function gk(t,e){return{...t,durationHours:e.scheduledRemainingDurationHours}}function Ak(t){let e=new Map;for(let i of t){let n=e.get(i.source)??[];n.push(i),e.set(i.source,n)}return e}var Ei="CS_MSO",ed="CS_MEO";function Ye(t){return t?.p6?.primaryConstraintType==="mandatory_start"&&t.p6.sourcePrimaryConstraintToken!==Ei}function Ge(t){return t?.p6?.primaryConstraintType==="mandatory_finish"&&t.p6.sourcePrimaryConstraintToken!==ed}var Ik=60*1e3,Sk=3600*1e3,vk=64;function kg(t){let{adapter:e,settings:i}=t;if(i.dataDate===null)throw new Error("P6 forward pass requires Data Date");let n=e.getAllActivities().filter(p=>p.p6!==void 0&&p.p6.activityType!=="wbs_summary").map(p=>p.id),r=new Set(n),a=e.getAllLinks().filter(p=>r.has(p.source)&&r.has(p.target)).filter(p=>{let f=e.getActivity(p.source),y=e.getActivity(p.target);return i.outOfSequencePolicy!=="progress_override"&&Ck(f)?!1:y?.p6!==void 0&&hs({outOfSequencePolicy:i.outOfSequencePolicy,successorExecution:Ke(y.p6).execution,linkType:p.type})}),o=a.filter(p=>{let f=e.getActivity(p.target);return f?.p6!==void 0&&Ke(f.p6).execution!=="completed"}),s=Ee(n,o);if(s.hasCycles)return{activities:new Map,cycles:s.cycleNodes};let l=bk(a),c=nd(i,e),d=new Map,u=new Set;for(let p of s.ordered){let f=e.getActivity(p);if(f?.p6===void 0)continue;let y=Ke(f.p6);if(y.execution==="completed"){let U=i.outOfSequencePolicy==="actual_dates";U&&u.add(p);let $=i.outOfSequencePolicy==="retained_logic"&&f.p6.activityType!=="level_of_effort"?new Date(i.dataDate):null,ut=U?f.p6.actualStart:$,q=U?f.p6.actualFinish:$;d.set(p,{activityId:p,scheduledRemainingDurationHours:0,remainingEarlyStart:null,remainingEarlyFinish:null,earlyStart:Rg(ut),earlyFinish:Rg(q),drivingLinkId:null});continue}let h=[...l.get(p)??[]].sort((U,$)=>U.source.localeCompare($.source)||U.id.localeCompare($.id)),m=Nk(f),g=_g({successor:m,incomingLinks:h,activities:d,settings:i,adapter:e,resolveLagTask:c}),C=Pg({activity:m,earliestStart:g.earliestStart,settings:i,adapter:e}),b=0;for(;!Object.is(m.durationHours,C)&&b<vk;)m={...m,durationHours:C},g=_g({successor:m,incomingLinks:h,activities:d,settings:i,adapter:e,resolveLagTask:c}),C=Pg({activity:m,earliestStart:g.earliestStart,settings:i,adapter:e}),b+=1;if(!Object.is(m.durationHours,C))throw new Error(`P6_EXPECTED_FINISH_DID_NOT_SETTLE: ${String(p)}`);let{earliestStart:E,drivingLinkId:P,drivingLinkIds:N}=g,I=td(e,m,E),R=y.execution==="in_progress"?{earliestStart:null,latestStart:null,earliestEnd:null,latestEnd:null}:kk(m,e),k=_k({activity:m,bounds:R,settings:i,adapter:e}),O={activityId:p,startDate:I?.start??E,endDate:I?.finish??e.calculateEndDate({startDate:E,durationHours:C,task:m}),drivingLinkId:P,kind:"asap",conflict:!1,earliestStart:k.earliestStart,latestStart:k.latestStart,earliestEnd:k.earliestEnd,latestEnd:k.latestEnd,earliestSchedulingStart:I?.start??E};if(vn(m,O,e),I!==null){let U=td(e,m,O.startDate);U!==null&&(O.startDate=U.start,O.endDate=U.finish)}let F=O.startDate.getTime()===E.getTime();d.set(p,{activityId:p,scheduledRemainingDurationHours:C,remainingEarlyStart:new Date(O.startDate),remainingEarlyFinish:new Date(O.endDate),earlyStart:new Date(O.startDate),earlyFinish:new Date(O.endDate),drivingLinkId:F?P:null,drivingLinkIds:F?N:[]})}Tg({adapter:e,orderedIds:s.ordered,links:a,activities:d,resolveLagTask:c});for(let p of u){let f=d.get(p);d.set(p,{...f,earlyStart:null,earlyFinish:null})}return{activities:d,cycles:[]}}function Ck(t){return t?.p6?.activityType==="level_of_effort"&&t.p6.executionStatus==="not_started"&&t.p6.remainingDurationHours===0}function _g(t){let{successor:e,incomingLinks:i,activities:n,settings:r,adapter:a,resolveLagTask:o}=t,s=a.getClosestWorkTime({date:new Date(r.dataDate),dir:"future",task:e}),l=e.p6?.resumeDate??null;l!==null&&l.getTime()>s.getTime()&&(s=a.getClosestWorkTime({date:new Date(l),dir:"future",task:e}));let c=null,d=[];for(let u of i){let p=a.getActivity(u.source),f=n.get(u.source);if(p?.p6===void 0||f===void 0)continue;let y=f.remainingEarlyStart??f.earlyStart,h=f.remainingEarlyFinish??f.earlyFinish;if(y===null||h===null)continue;let m=Dk({link:u,predecessor:p,predecessorDates:f,successor:e,settings:r}),g=Fk(u,p,f,r),C={...p,startDate:g,endDate:h,durationHours:a.calculateDuration({startDate:g,endDate:h,task:p})},b=m??ms({predecessor:C,successor:e,link:u,adapter:a,lagTask:o(C,e)}),E=u.type==="0"&&e.durationHours===0&&e.type!=="milestone"?Tk(e,b,a):b;E>s?(s=E,c=u.id,d=[u.id]):d.length>0&&E.getTime()===s.getTime()&&d.push(u.id)}return{earliestStart:s,drivingLinkId:c,drivingLinkIds:d}}function Lg(t){return t.p6?.activityType==="task"&&t.p6.executionStatus==="not_started"&&t.p6.originalDurationHours===0}function Dk(t){let e=t.settings.outOfSequencePolicy==="retained_logic"&&t.settings.startToStartLagBasis==="early_start"&&t.link.type==="1"&&t.predecessor.p6?.executionStatus==="in_progress"&&t.predecessor.p6?.actualStart!==null&&Lg(t.successor),i=t.predecessorDates.remainingEarlyStart??t.predecessorDates.earlyStart;return e&&i!==null?new Date(i):null}function Tk(t,e,i){if(t.p6?.activityType==="level_of_effort")return e;let n=mr(e),r=i.getClosestWorkTime({date:n,dir:"future",task:t});if(!Lg(t))return r;let a=new Date(e.getTime()+Ik);if(i.isWorkTime?.({date:a,task:t}))return e;if(i.isWorkTime===void 0)return r.getTime()===n.getTime()?e:r;let o=new Date(e.getTime()+Sk);return i.getClosestWorkTime({date:o,dir:"future",task:t})}function _k(t){let{activity:e,bounds:i,settings:n,adapter:r}=t,a=Ye(e);if(Ek(t,a)){let s=Pk(t,a);return{...i,earliestStart:s,latestStart:s}}let o=Ge(e);if(Rk(t,o)){let s=n.dataDate;if(s===null)return i;let l=o?r.getClosestWorkTime({date:s,dir:"future",task:e}):s;return{...i,earliestStart:l,latestStart:l,latestEnd:null}}return e.constraintType==="mfo"?i:{...i,latestStart:null,latestEnd:null}}function Ek(t,e){let{activity:i,bounds:n,settings:r}=t;return i.p6?.executionStatus!=="not_started"?!1:e?!0:i.constraintType!=="mso"?!1:r.outOfSequencePolicy!=="retained_logic"?!0:n.earliestStart!==null&&r.dataDate!==null&&n.earliestStart>=r.dataDate}function Pk(t,e){let{activity:i,bounds:n,settings:r,adapter:a}=t,o=id(n.earliestStart,r.dataDate);return!e||o===null?r.outOfSequencePolicy==="retained_logic"?n.earliestStart:o:a.getClosestWorkTime({date:o,dir:"future",task:i})}function Rk(t,e){let{activity:i,bounds:n,settings:r}=t;return i.p6?.executionStatus!=="not_started"||n.latestStart===null||r.dataDate===null||n.latestStart>=r.dataDate?!1:e||i.constraintType==="mfo"&&r.outOfSequencePolicy==="actual_dates"}function kk(t,e){let i=Lk(t,e),n=t.p6?.secondaryConstraintType??null,r=t.p6?.secondaryConstraintDate??null;if(n===null||r===null)return i;let a=Je({...t,constraintType:n,constraintDate:r},e);return Ok(i,a)}function Lk(t,e){let i=t.p6?.primaryConstraintType,n=t.p6?.primaryConstraintDate;return i==null||n===null||n===void 0?Je(t,e):Je({...t,constraintType:Qa(i),constraintDate:n},e)}function Ok(t,e){return{earliestStart:id(t.earliestStart,e.earliestStart),latestStart:Eg(t.latestStart,e.latestStart),earliestEnd:id(t.earliestEnd,e.earliestEnd),latestEnd:Eg(t.latestEnd,e.latestEnd)}}function id(t,e){return t===null?e:e===null||t>e?t:e}function Eg(t,e){return t===null?e:e===null||t<e?t:e}function Pg(t){let{activity:e,earliestStart:i,settings:n,adapter:r}=t,a=e.p6?.expectedFinish??null;return!n.useExpectedFinishDates||a===null||e.p6===void 0?e.p6?.remainingDurationHours??e.durationHours:a<=i?0:r.calculateDuration({startDate:i,endDate:a,task:e})}function nd(t,e){let i=null,n=()=>{if(i??=e.getAllActivities().find(r=>r.type==="project")??null,i===null)throw new Error("P6 schedule requires a project activity for Project Default relationship lag calendar");return i};switch(t.relationshipLagCalendar){case"predecessor":return r=>r;case"successor":return(r,a)=>a;case"project_default":return()=>n();case"twenty_four_hour":return()=>null}}function bk(t){let e=new Map;for(let i of t){let n=e.get(i.target)??[];n.push(i),e.set(i.target,n)}return e}function Nk(t){return t.p6===void 0?t:{...t,durationHours:t.p6.remainingDurationHours}}function Fk(t,e,i,n){return!(t.type==="1"||t.type==="3")||e.p6===void 0?new Date(i.remainingEarlyStart??i.earlyStart??e.startDate):(n.outOfSequencePolicy==="actual_dates"||Xr({outOfSequencePolicy:n.outOfSequencePolicy,linkType:t.type,actualStart:e.p6.actualStart})||n.startToStartLagBasis==="actual_start")&&e.p6.actualStart!==null?new Date(e.p6.actualStart):new Date(i.earlyStart??i.remainingEarlyStart??e.startDate)}function Rg(t){return t===null?null:new Date(t)}function wk(t,e){let i=t==="start_float"?e.startFloatHours:t==="finish_float"?e.finishFloatHours:Math.min(e.startFloatHours,e.finishFloatHours);return Object.is(i,-0)?0:i}function Fg(t){let{adapter:e,settings:i,forward:n}=t,r=[...n.activities.keys()],a=new Set(r),o=e.getAllLinks().filter(g=>a.has(g.source)&&a.has(g.target)),s=o.filter(g=>{let C=e.getActivity(g.source),b=e.getActivity(g.target);return i.outOfSequencePolicy!=="progress_override"&&xk(b)||Mk(g,C,b)?!1:b?.p6!==void 0&&hs({outOfSequencePolicy:i.outOfSequencePolicy,successorExecution:Ke(b.p6).execution,linkType:g.type})}),l=s.filter(g=>{let C=e.getActivity(g.source);return!(C?.p6?.activityType==="level_of_effort"&&Ke(C.p6).execution==="completed")}),c=Ee(r,l);if(c.hasCycles)throw new Error(`P6 backward pass cannot calculate cycles: ${c.cycleNodes.join(", ")}`);let d=$k(e,n,r),u=i.projectMustFinishBy??d;if(u===null)return{activities:jk(r)};let p=d??u,f=Og(s),y=Og(o),h=nd(i,e),m=new Map;for(let g of c.reversed){let C=e.getActivity(g),b=n.activities.get(g);if(C?.p6===void 0||b===void 0)continue;let E=qk(C,b.scheduledRemainingDurationHours??C.p6.remainingDurationHours),P=new Date(u);for(let q of f.get(g)??[]){let At=e.getActivity(q.target),Pt=m.get(q.target),ie=n.activities.get(q.target);if(At?.p6===void 0||Pt===void 0)continue;let Gt=Gk(At,Pt,i,q.type);if(Gt===null)continue;let yt={...At,startDate:Gt.startDate,endDate:Gt.endDate,durationHours:ie?.scheduledRemainingDurationHours??At.p6.remainingDurationHours},ne=Xr({outOfSequencePolicy:i.outOfSequencePolicy,linkType:q.type,actualStart:C.p6.actualStart})||wg(C,q,i)?{...q,lag:0}:q,ra=i.outOfSequencePolicy==="actual_dates"&&q.type==="0"&&At.p6.executionStatus==="in_progress"&&At.p6.primaryConstraintType==="mandatory_start"&&At.p6.sourcePrimaryConstraintToken!==Ei,aa=Zr({successor:yt,predecessor:E,link:ne,adapter:e,lagTask:ra?yt:h(E,yt)});aa<P&&(P=aa)}if(b.remainingEarlyStart===null||b.remainingEarlyFinish===null){if(i.outOfSequencePolicy!=="retained_logic"||C.p6.activityType==="level_of_effort"){m.set(g,{activityId:g,remainingLateStart:null,remainingLateFinish:null,lateStart:null,lateFinish:null,totalFloatHours:null,freeFloatHours:null,isCritical:!1});continue}m.set(g,{activityId:g,remainingLateStart:null,remainingLateFinish:null,lateStart:new Date(P),lateFinish:new Date(P),totalFloatHours:null,freeFloatHours:null,isCritical:!1});continue}P=zk(E,P,e),E.durationHours===0&&C.p6.activityType!=="level_of_effort"&&xg(C,f.get(g)??[],e,P)&&(P=e.getClosestWorkTime({date:Sn(P),dir:"past",task:E}));let N=(y.get(g)??[]).length===0,I=Bk(i,C,N),R=Ig(e,E,P),k=R?.start??e.calculateEndDate({startDate:P,durationHours:-E.durationHours,task:E});if(C.p6.activityType==="level_of_effort")k=Yk(e,P,E,f.get(g)??[]),E.durationHours===0&&(P=new Date(k));else if(R!==null)P=R.finish;else{let q=i.outOfSequencePolicy==="actual_dates"&&Hk(f.get(g)??[],e)||C.p6.secondaryConstraintType==="fnlt";k=Uk(C,k,q),P=e.calculateEndDate({startDate:k,durationHours:E.durationHours,task:E})}I&&(k=new Date(b.remainingEarlyStart),P=new Date(b.remainingEarlyFinish));let O=ad(e,b.remainingEarlyStart,k,E),F=ad(e,b.remainingEarlyFinish,P,E),U=wk(i.totalFloatMethod,{startFloatHours:O,finishFloatHours:F}),$=Wk({activity:C,effectivePredecessor:E,early:b,outgoingLinks:f.get(g)??[],boundary:p,forward:n,settings:i,adapter:e,resolveLagTask:h}),ut=i.criticalActivityMethod==="total_float"&&U<=i.criticalFloatThresholdHours||I;m.set(g,{activityId:g,remainingLateStart:new Date(k),remainingLateFinish:new Date(P),lateStart:new Date(k),lateFinish:new Date(P),totalFloatHours:U,freeFloatHours:$,isCritical:ut})}return{activities:m}}function xk(t){return t?.p6?.activityType==="level_of_effort"&&t.p6.executionStatus==="not_started"&&t.p6.remainingDurationHours===0}function rd(t,e,i){return i.isWorkTime?.({date:Sn(e),task:t})===!1}function Mk(t,e,i){return t.type==="0"&&t.lag===0?!1:e?.p6?.executionStatus==="completed"&&i?.p6?.executionStatus==="completed"}function Uk(t,e,i){let n=t.p6;return i||n?.executionStatus!=="in_progress"||n.primaryConstraintType!=="snet"||n.actualStart===null||e>=n.actualStart?e:new Date(n.actualStart)}function Hk(t,e){return t.some(i=>{let n=e.getActivity(i.target)?.p6;return n?.executionStatus==="in_progress"&&n.primaryConstraintType==="mandatory_start"&&n.sourcePrimaryConstraintToken!==Ei})}function Bk(t,e,i){return t.makeOpenEndedActivitiesCritical&&i&&e.type!=="milestone"&&t.multipleFloatPaths.endingActivityId!==e.id&&Ke(e.p6).execution==="not_started"}function jk(t){return new Map(t.map(e=>[e,{activityId:e,remainingLateStart:null,remainingLateFinish:null,lateStart:null,lateFinish:null,totalFloatHours:null,freeFloatHours:null,isCritical:!1}]))}function Wk(t){let{activity:e,effectivePredecessor:i,early:n,outgoingLinks:r,boundary:a,forward:o,settings:s,adapter:l,resolveLagTask:c}=t;if(n.remainingEarlyStart===null||n.remainingEarlyFinish===null)return null;if(e.p6?.executionStatus==="not_started"&&Ge(e)&&r.length>0||e.p6?.executionStatus==="not_started"&&Ye(e)&&Vk(r,l))return 0;let d=null;for(let p of r){if(wg(e,p,s))continue;let f=l.getActivity(p.target),y=o.activities.get(p.target);if(f?.p6===void 0||y===void 0)continue;let h=Kk({successor:f,early:y,settings:s,linkType:p.type});if(h===null)continue;let m={...f,startDate:h.startDate,endDate:h.endDate,durationHours:y.scheduledRemainingDurationHours},g=Xr({outOfSequencePolicy:s.outOfSequencePolicy,linkType:p.type,actualStart:e.p6?.actualStart??null})?{...p,lag:0}:p,C=Zr({successor:m,predecessor:i,link:g,adapter:l,lagTask:c(i,m)});(d===null||C<d)&&(d=C)}d??=new Date(a),i.durationHours===0&&xg(e,r,l,d)&&(d=l.getClosestWorkTime({date:Sn(d),dir:"past",task:i}));let u=ad(l,n.remainingEarlyFinish,d,i);return Math.max(0,Object.is(u,-0)?0:u)}function Vk(t,e){return t.some(i=>{let n=e.getActivity(i.target)?.p6;return n?.activityType==="task"&&n.executionStatus==="not_started"&&n.originalDurationHours===0})}function wg(t,e,i){return i.outOfSequencePolicy==="progress_override"&&e.type==="1"&&t.p6?.actualStart!==null&&t.p6?.actualStart!==void 0}function Kk(t){let{successor:e,early:i,settings:n,linkType:r}=t,a=i.remainingEarlyStart??i.earlyStart,o=i.remainingEarlyFinish??i.earlyFinish,s=e.p6;return n.outOfSequencePolicy==="actual_dates"&&s!==void 0&&(r==="0"||r==="1"||s.actualFinish!==null)&&(a=s.actualStart??a,o=s.actualFinish??o),a===null||o===null?null:{startDate:new Date(a),endDate:new Date(o)}}function xg(t,e,i,n){if(t.p6?.executionStatus==="completed")return!1;if(t.p6?.activityType==="task"&&t.p6.executionStatus==="not_started"&&t.p6.originalDurationHours===0){let o=Sn(n);return i.getClosestWorkTime({date:o,dir:"past",task:t})<o}if(t.p6?.activityType==="start_milestone"&&e.length===0)return rd(t,n,i);if(e.length===0)return!1;if(t.type!=="milestone")return!0;let r=t.p6?.activityType;if(r!=="start_milestone"&&r!=="finish_milestone")return!1;let a=r==="finish_milestone";return e.every(o=>{let s=i.getActivity(o.target),c=s?.p6?.activityType==="resource_dependent"?s?.calendarId===t.calendarId:s?.calendarId!==t.calendarId&&rd(t,n,i);return s?.p6!==void 0&&(!a||c)&&Ke(s.p6).execution!=="completed"})}function Yk(t,e,i,n){if(i.durationHours===0){let o=n.some(s=>{let l=t.getActivity(s.target);return l!==null&&l.calendarId!==i.calendarId})&&rd(i,e,t)?Sn(e):e;return t.getClosestWorkTime({date:o,dir:"past",task:i})}let r=new Date(e);return r.setUTCHours(0,0,0,0),t.getClosestWorkTime({date:r,dir:"future",task:i})}function Gk(t,e,i,n){if(t.p6===void 0)return null;let r=e.remainingLateStart??e.lateStart,a=e.remainingLateFinish??e.lateFinish;if(i.outOfSequencePolicy==="actual_dates"){let o=t.p6.actualStart,s=t.p6.actualFinish;if(n==="0"||n==="1"||s!==null){let l=o??r,c=s??a;return l===null||c===null?null:{startDate:new Date(l),endDate:new Date(c)}}}return r===null||a===null?null:i.outOfSequencePolicy==="actual_dates"?{startDate:new Date(r),endDate:new Date(a)}:{startDate:new Date(r),endDate:new Date(a)}}function $k(t,e,i){let n=i.filter(o=>t.getActivity(o)?.p6?.executionStatus!=="completed"),r=n.length>0?n:i,a=null;for(let o of r){let s=e.activities.get(o),l=s?.remainingEarlyFinish??s?.earlyFinish;l!=null&&(a===null||l>a)&&(a=l)}return a===null?null:new Date(a)}function Og(t){let e=new Map;for(let i of t){let n=e.get(i.source)??[];n.push(i),e.set(i.source,n)}return e}function qk(t,e=t.p6?.remainingDurationHours??t.durationHours){return t.p6===void 0?t:{...t,durationHours:e}}function zk(t,e,i){let n=t.p6?.primaryConstraintType,r=t.p6?.primaryConstraintDate,a=t.p6?.sourcePrimaryConstraintToken,o=a===ed?"fnlt":a===Ei?"snlt":n,l=n==="start_on"?{...t,constraintType:null,constraintDate:null}:o!=null&&r!==null&&r!==void 0?bg(t,o,r,i):t,d=t.p6?.actualStart===null||o==="fnlt"||o==="finish_on"?Ng(l,e,i):new Date(e);if(t.p6?.secondaryConstraintType===null||t.p6?.secondaryConstraintDate===null||t.p6===void 0||t.p6.actualStart!==null&&t.p6.secondaryConstraintType!=="fnlt")return d;let u=bg(t,t.p6.secondaryConstraintType,t.p6.secondaryConstraintDate,i);return d=Ng(u,d,i),new Date(d)}function bg(t,e,i,n){let r=Qa(e),a=Jk({activity:t,constraintType:r,constraintDate:i,adapter:n});return{...t,constraintType:r,constraintDate:a}}function Jk(t){let{activity:e,constraintType:i,constraintDate:n,adapter:r}=t,a=e.p6?.sourcePrimaryConstraintToken===Ei&&i==="snlt"?"future":Xk(i,n)?"past":null;return a===null?new Date(n):r.getClosestWorkTime({date:n,dir:a,task:e})}function Xk(t,e){return e.getUTCHours()===0&&e.getUTCMinutes()===0&&e.getUTCSeconds()===0&&e.getUTCMilliseconds()===0&&(t==="fnlt"||t==="mfo")}function Ng(t,e,i){let n=Je(t,i);if((t.constraintType==="mso"||t.constraintType==="mfo")&&n.latestEnd!==null)return new Date(n.latestEnd);let r=e;if(n.latestEnd!==null&&n.latestEnd<r&&(r=n.latestEnd),n.latestStart!==null){let a=i.calculateEndDate({startDate:n.latestStart,durationHours:t.durationHours,task:t});a<r&&(r=a)}return t.constraintType==="snet"&&n.earliestEnd!==null&&n.earliestEnd<r&&(r=n.earliestEnd),new Date(r)}function ad(t,e,i,n){return e<=i?t.calculateDuration({startDate:e,endDate:i,task:n}):-t.calculateDuration({startDate:i,endDate:e,task:n})}var Zk=3600*1e3,Mg=["P6_NO_PREDECESSOR","P6_NO_SUCCESSOR","P6_OUT_OF_SEQUENCE","P6_ACTUAL_AFTER_DATA_DATE","P6_INVALID_MILESTONE_RELATIONSHIP"],Qk={P6_NO_PREDECESSOR:"open_ended",P6_NO_SUCCESSOR:"open_ended",P6_OUT_OF_SEQUENCE:"out_of_sequence",P6_ACTUAL_AFTER_DATA_DATE:"actual_after_data_date",P6_INVALID_MILESTONE_RELATIONSHIP:"milestone_relationship",P6_UNSATISFIED_CONSTRAINT:"unsatisfied_constraint"},tL={0:"finish_to_start",1:"start_to_start",2:"finish_to_finish",3:"start_to_finish"};function Wg(t){let{adapter:e,dataDate:i,project:n,outOfSequencePolicy:r}=t;lL(r);let a=e.getAllActivities().filter(od).sort(Yg),o=new Map;for(let s of Mg)o.set(s,[]);for(let s of a){e.getIncomingLinkIds(s.id).length===0&&Qr(o,nr(s,n,i,{code:"P6_NO_PREDECESSOR",rule:"activity_has_no_predecessor"})),e.getOutgoingLinkIds(s.id).length===0&&Qr(o,nr(s,n,i,{code:"P6_NO_SUCCESSOR",rule:"activity_has_no_successor"})),iL(s,i)&&Qr(o,nr(s,n,i,{code:"P6_ACTUAL_AFTER_DATA_DATE",rule:"actual_date_is_after_data_date"}));let l=nL(e,s);l!==null&&Qr(o,nr(s,n,i,{code:"P6_INVALID_MILESTONE_RELATIONSHIP",rule:"milestone_endpoint_is_not_available",relationship:Hg(e,l)}))}for(let s of sL(e.getAllLinks())){if(!rL(e,s))continue;let l=e.getActivity(s.target);l===null||!od(l)||Qr(o,nr(l,n,i,{code:"P6_OUT_OF_SEQUENCE",rule:"successor_progress_precedes_required_logic",relationship:Hg(e,s)}))}return Mg.flatMap(s=>o.get(s)??[])}function Vg(t){let e=[],i=t.adapter.getAllActivities().filter(od).sort(Yg);for(let n of i){let r=t.calculated.get(n.id);r===void 0||r.actualFinish!==null||eL(n,r)&&e.push(nr({...n,p6:r},t.project,t.dataDate,{code:"P6_UNSATISFIED_CONSTRAINT",rule:"constraint_could_not_be_satisfied"}))}return e}function eL(t,e){let i=t.constraintDate??null,n=t.constraintType??null;if(i===null||n===null)return!1;let r=i.getTime(),a=e.remainingEarlyStart??e.earlyStart,o=e.remainingEarlyFinish??e.earlyFinish;switch(n){case _.MSO:return a!==null&&a.getTime()!==r;case _.MFO:return o!==null&&o.getTime()!==r;case _.SNET:return a!==null&&a.getTime()<r;case _.FNET:return o!==null&&o.getTime()<r;case _.SNLT:return a!==null&&a.getTime()>r;case _.FNLT:return o!==null&&o.getTime()>r;default:return!1}}function nr(t,e,i,n){return{kind:"diagnostic",code:n.code,category:Qk[n.code],severity:"warning",project:{...e},activityId:t.id,activityCode:t.customId??t.id,activityName:t.name,activityStatus:t.p6.executionStatus,dataDate:new Date(i),dates:{actualStart:jg(t.p6.actualStart),actualFinish:jg(t.p6.actualFinish)},relationship:n.relationship??null,explanation:{rule:n.rule}}}function Qr(t,e){t.get(e.code).push(e)}function iL(t,e){let i=t.p6;return i!==void 0&&(Bg(i.actualStart,e)||Bg(i.actualFinish,e))}function nL(t,e){return e.p6?.activityType==="start_milestone"?Ug(t,e,"incoming",i=>i.type==="2"||i.type==="3"):e.p6?.activityType==="finish_milestone"?Ug(t,e,"outgoing",i=>i.type==="1"||i.type==="3"):null}function Ug(t,e,i,n){return(i==="incoming"?t.getIncomingLinkIds(e.id):t.getOutgoingLinkIds(e.id)).map(a=>t.getLink(a)).filter(a=>a!==null).sort(Kg).find(n)??null}function rL(t,e){let i=t.getActivity(e.source),n=t.getActivity(e.target);if(i?.p6===void 0||n?.p6===void 0)return!1;let r=oL(n,e.type);if(r===null)return!1;let a=aL(i,e.type);return a===null?!0:r.getTime()<a.getTime()+e.lag*Zk}function aL(t,e){return t.p6===void 0?null:e==="1"||e==="3"?t.p6.actualStart:t.p6.actualFinish}function oL(t,e){return t.p6===void 0?null:e==="0"||e==="1"?t.p6.actualStart:t.p6.actualFinish}function Hg(t,e){let i=t.getActivity(e.source),n=t.getActivity(e.target);return{id:e.id,predecessorActivityId:e.source,predecessorActivityCode:i===null?null:i.customId??i.id,successorActivityId:e.target,successorActivityCode:n===null?null:n.customId??n.id,type:tL[e.type],lagHours:e.lag}}function sL(t){return[...t].sort(Kg)}function Kg(t,e){return String(t.id).localeCompare(String(e.id))}function Yg(t,e){let i=t.correlativeId-e.correlativeId;return i!==0?i:(t.customId??String(t.id)).localeCompare(e.customId??String(e.id))}function Bg(t,e){return t!==null&&t.getTime()>e.getTime()}function jg(t){return t===null?null:new Date(t)}function od(t){return t.p6!==void 0}function lL(t){if(t!=="retained_logic"&&t!=="progress_override"&&t!=="actual_dates")throw new Error(`Unsupported P6 out-of-sequence policy: ${String(t)}`)}function on(t){let e=null;for(let i of t){if(i===null)continue;let n=i.getTime();(e===null||n<e)&&(e=n)}return e===null?null:new Date(e)}function Pi(t){let e=null;for(let i of t){if(i===null)continue;let n=i.getTime();(e===null||n>e)&&(e=n)}return e===null?null:new Date(e)}function sd(t){let e=null;for(let i of t)i!==null&&(e===null||i<e)&&(e=i);return e}function ta(t){let e=0;for(let i of t)e+=i;return e}function $g(t){let{adapter:e,settings:i,forward:n,backward:r}=t,a=new Map;for(let u of r.activities.keys())a.set(u,{longestPath:!1,floatPath:null,floatPathOrder:null});let o=TL(n);for(let u of o)EL(u,e,n,a,i);if(!i.multipleFloatPaths.enabled)return{activities:a};let s=_L(i,n,o);if(s===null)return{activities:a};let l=i.multipleFloatPaths.limitEnabled?i.multipleFloatPaths.maximum:Number.POSITIVE_INFINITY,c={emittedPaths:0,numberingBudget:i.multipleFloatPaths.limitEnabled?i.multipleFloatPaths.maximum:Number.POSITIVE_INFINITY,numberableActivityIds:IL(e,n,i),activities:a},d=uL({adapter:e,backward:r,settings:i,endingActivityId:s,state:c});if(!d&&i.multipleFloatPaths.useTotalFloat)kL(s,e,n,r,i,l,c);else if(!d){let u=NL(s,e,n,i);As(i)&&(rr(u[0]??[],c),cL({adapter:e,backward:r,settings:i,state:c}));let p=As(i)?u.slice(1):u;for(let f of p)rr(f,c)}return i.multipleFloatPaths.limitEnabled&&!d&&(i.multipleFloatPaths.useTotalFloat?ML(e,n,r,i,c):FL(e,n,i,c)),d||HL(i,r,c.activities,e),{activities:a}}function cL(t){let{adapter:e,backward:i,settings:n,state:r}=t,a=[...r.numberableActivityIds].filter(o=>dL(e.getActivity(o))).sort((o,s)=>{let l=i.activities.get(o)?.freeFloatHours??1/0,c=i.activities.get(s)?.freeFloatHours??1/0;return l-c||cd(o,s,e,n)});for(let o of a)rr([o],r)}function dL(t){if(t?.p6?.executionStatus!=="in_progress")return!1;let e=t.p6.primaryConstraintType;return e==="alap"||e==="mandatory_start"||e==="start_on"||e==="snet"||e==="snlt"}function uL(t){if(!fL(t.settings))return!1;let e=yL(t.adapter,t.state);if(e===null||e.length===0||e.length!==t.state.numberingBudget||e.some((n,r)=>n[0].path!==r+1))return!1;let i=gL(t.endingActivityId,t.adapter);if(e.some(n=>!hL(n,t,i))||pL(e,t))return!1;for(let n of e)AL(n,t.state);return!0}function pL(t,e){if(!e.settings.multipleFloatPaths.useTotalFloat)return[...e.state.numberableActivityIds].some(r=>!qg(r,e));let i=new Set(t.flat().map(r=>r.id)),n=Math.max(...t.map(r=>Math.min(...r.map(a=>e.backward.activities.get(a.id)?.totalFloatHours??1/0))));return[...e.state.numberableActivityIds].some(r=>{if(i.has(r))return!1;let a=e.backward.activities.get(r)?.totalFloatHours;return a!=null&&a<=n})}function fL(t){return t.multipleFloatPaths.limitEnabled&&(t.outOfSequencePolicy==="actual_dates"&&t.multipleFloatPaths.useTotalFloat||t.outOfSequencePolicy==="retained_logic"&&!t.multipleFloatPaths.useTotalFloat&&t.multipleFloatPaths.endingActivityId!==null)}function yL(t,e){let i=[...e.numberableActivityIds].map(a=>{let o=t.getActivity(a)?.p6;return{id:a,path:o?.floatPath,order:o?.floatPathOrder}});if(i.some(a=>a.path===null!=(a.order===null)))return null;let n=i.filter(a=>typeof a.path=="number"&&typeof a.order=="number"),r=new Map;for(let a of n){let o=r.get(a.path);o===void 0?r.set(a.path,[a]):o.push(a)}return[...r].sort(([a],[o])=>a-o).map(([,a])=>a.sort((o,s)=>o.order-s.order))}function hL(t,e,i){return t.length===0||t[0].path>e.state.numberingBudget||t.some((n,r)=>n.order!==r+1)||t.some(n=>!qg(n.id,e))||t.slice(1).some((n,r)=>mL(t[r].id,n.id,e.adapter).length===0)?!1:i.has(t.at(-1).id)}function qg(t,e){let i=e.adapter.getActivity(t)?.p6,n=e.backward.activities.get(t),r=e.settings.multipleFloatPaths.useTotalFloat,a=r?i?.remainingFloatHours:i?.freeFloatHours,o=r?n?.totalFloatHours:n?.freeFloatHours;return a!=null&&a===o}function mL(t,e,i){return i.getOutgoingLinkIds(t).map(n=>i.getLink(n)).filter(n=>n?.target===e)}function gL(t,e){let i=[t],n=new Set;for(;i.length>0;){let r=i.pop();if(!n.has(r)){n.add(r);for(let a of e.getIncomingLinkIds(r)){let o=e.getLink(a)?.source;o!==void 0&&i.push(o)}}}return n}function AL(t,e){for(let i of t){let n=e.activities.get(i.id);e.activities.set(i.id,{...n,floatPath:i.path,floatPathOrder:i.order})}}function IL(t,e,i){return new Set([...e.activities.keys()].filter(n=>SL(t.getActivity(n),i)))}function SL(t,e){return t?.p6?.executionStatus==="completed"?!1:vL(e)?Ye(t)?!1:t?.p6?.executionStatus==="in_progress"?t.p6.primaryConstraintType!==null:!0:e.multipleFloatPaths.useTotalFloat?!Qg(t):e.outOfSequencePolicy!=="progress_override"?!0:As(e)?t?.p6?.executionStatus==="not_started"||CL(t):t?.p6?.executionStatus==="not_started"&&!DL(t)}function vL(t){return t.multipleFloatPaths.useTotalFloat&&t.outOfSequencePolicy==="progress_override"}function CL(t){return t?.p6?.executionStatus==="in_progress"&&t.p6.primaryConstraintType!==null&&t.p6.primaryConstraintType!==void 0}function As(t){return t.outOfSequencePolicy==="progress_override"&&!t.multipleFloatPaths.useTotalFloat&&t.multipleFloatPaths.endingActivityId!==null}function DL(t){return Ye(t)||Ge(t)}function rr(t,e){if(!t.some(r=>e.activities.get(r)?.floatPath===null&&e.numberableActivityIds.has(r))||(e.emittedPaths+=1,e.emittedPaths>e.numberingBudget))return;let n=0;for(let r=t.length-1;r>=0;r--){let a=t[r],o=e.activities.get(a);o===void 0||o.floatPath!==null||!e.numberableActivityIds.has(a)||(n+=1,e.activities.set(a,{...o,floatPath:e.emittedPaths,floatPathOrder:n}))}}function TL(t){let e=[...t.activities].filter(([,n])=>n.earlyFinish!==null),i=e.reduce((n,[,r])=>Math.max(n,r.earlyFinish.getTime()),Number.NEGATIVE_INFINITY);return e.filter(([,n])=>n.earlyFinish.getTime()===i).map(([n])=>n).sort((n,r)=>n.localeCompare(r))}function _L(t,e,i){let n=t.multipleFloatPaths.endingActivityId;return n!==null&&e.activities.has(n)?n:i[0]??null}function EL(t,e,i,n,r){let a=[t],o=new Set;for(;a.length>0;){let s=a.pop();if(o.has(s))continue;o.add(s);let l=n.get(s);l!==void 0&&n.set(s,{...l,longestPath:!0}),a.push(...zg(s,e,i,r))}}function zg(t,e,i,n){let r=e.getActivity(t),a=i.activities.get(t),o=a?.drivingLinkIds??(a?.drivingLinkId===null||a?.drivingLinkId===void 0?[]:[a.drivingLinkId]),s=r?.p6?.primaryConstraintType==="alap"&&n.outOfSequencePolicy==="retained_logic"?o.filter(f=>e.getLink(f)?.type==="2"):[],l=PL(r,n);if(Ye(r)||Ge(r)||l&&s.length===0)return[];let c=l?s:o;if(c.length>0)return c.map(f=>e.getLink(f)?.source??null).filter(f=>f!==null);let d=e.getIncomingLinkIds(t).map(f=>e.getLink(f)).filter(f=>f!==null).sort((f,y)=>f.source.localeCompare(y.source)),u=d.filter(f=>RL(f,i.activities.get(f.source),a)).map(f=>f.source);if(u.length>0)return u;let p=n.outOfSequencePolicy==="actual_dates"?d.find(f=>{if(f.type!=="0")return!1;let y=e.getActivity(t),h=e.getActivity(f.source);return y?.p6?.executionStatus==="completed"||h?.p6?.executionStatus==="completed"}):void 0;return p===void 0?[]:[p.source]}function PL(t,e){return e.outOfSequencePolicy==="progress_override"&&t?.p6?.primaryConstraintType==="alap"?!1:Xg(t)}function RL(t,e,i){return t.lag!==0||e===void 0||i===void 0?!1:t.type==="0"?gs(e.earlyFinish,i.earlyStart):t.type==="1"?gs(e.earlyStart,i.earlyStart):t.type==="2"?gs(e.earlyFinish,i.earlyFinish):gs(e.earlyStart,i.earlyFinish)}function gs(t,e){return t!==null&&e!==null&&t.getTime()===e.getTime()}function kL(t,e,i,n,r,a,o){let s=k=>o.numberableActivityIds.has(k.source)&&o.numberableActivityIds.has(k.target)&&!Jg(k.target,e,r)&&!Zg(k.source,e,r),l=new Map,c=k=>{let O=l.get(k);if(O!==void 0)return O;let F=tA(k,e,i,n,r,s);return l.set(k,F),F},d=OL(t,e,s),u=Ee(d.activityIds,d.links);if(u.hasCycles){LL(t,c,a,o);return}let p=bL(u.ordered,d.links),f=[],y=[],h=new Set,m=new Set,g=0n,C=o.numberingBudget,b=C!==Number.POSITIVE_INFINITY,E=b?BigInt(C):0n,P=a!==Number.POSITIVE_INFINITY,N=P?BigInt(a):0n,I=()=>{g+=1n,!(b&&g>E)&&Gg(y,Number(g),o)},R=k=>{if(h.has(k))return;if(m.has(k)){let F=p.get(k);if(F===void 0)throw new Error(`P6 float path count missing for activity ${String(k)}`);let U=g+1n;(!b||U<=E)&&Gg(y,Number(U),o),g+=F;return}m.add(k),y.push(k),h.add(k);let O=c(k);if(O.length===0){I(),y.pop(),h.delete(k);return}f.push({links:O,nextIndex:0})};for(R(t);f.length>0&&(!P||g<N);){let k=f[f.length-1];if(k.nextIndex<k.links.length){let O=k.links[k.nextIndex];k.nextIndex+=1,R(O.source);continue}f.pop(),h.delete(y.pop())}o.emittedPaths=Number(g>BigInt(Number.MAX_SAFE_INTEGER)?BigInt(Number.MAX_SAFE_INTEGER):g)}function Jg(t,e,i){let n=e.getActivity(t);return i.outOfSequencePolicy==="progress_override"&&i.multipleFloatPaths.useTotalFloat&&n?.p6?.executionStatus==="in_progress"?n.p6.primaryConstraintType!==null:Xg(n)}function Xg(t){if(t?.p6?.executionStatus!=="not_started")return!1;let e=t?.p6?.primaryConstraintType;return e==="alap"||e==="start_on"||Ye(t)}function Zg(t,e,i){let n=e.getActivity(t);return i.outOfSequencePolicy==="progress_override"&&i.multipleFloatPaths.useTotalFloat&&n?.p6?.executionStatus==="in_progress"&&n.p6.primaryConstraintType!==null?!0:Qg(n)}function Qg(t){return t?.p6?.executionStatus==="not_started"&&Ge(t)}function LL(t,e,i,n){let r=[],a=[],o=new Set,s=l=>{if(o.has(l))return;a.push(l),o.add(l);let c=e(l);if(c.length===0){rr(a,n),a.pop(),o.delete(l);return}r.push({links:c,nextIndex:0})};for(s(t);r.length>0&&n.emittedPaths<i;){let l=r[r.length-1];if(l.nextIndex<l.links.length){let c=l.links[l.nextIndex];l.nextIndex+=1,s(c.source);continue}r.pop(),o.delete(a.pop())}}function Gg(t,e,i){let n=0;for(let r=t.length-1;r>=0;r--){let a=t[r],o=i.activities.get(a);o===void 0||o.floatPath!==null||!i.numberableActivityIds.has(a)||(n+=1,i.activities.set(a,{...o,floatPath:e,floatPathOrder:n}))}}function OL(t,e,i){let n=new Set([t]),r=[t],a=[],o=[t];for(;o.length>0;){let s=o.pop(),l=e.getIncomingLinkIds(s).map(c=>e.getLink(c)).filter(c=>c!==null&&i(c));for(let c of l)a.push(c),n.has(c.source)||(n.add(c.source),r.push(c.source),o.push(c.source))}return{activityIds:r,links:a}}function bL(t,e){let i=new Map;for(let r of e){let a=i.get(r.target);a===void 0?i.set(r.target,[r]):a.push(r)}let n=new Map;for(let r of t){let a=i.get(r);if(a===void 0||a.length===0){n.set(r,1n);continue}let o=0n;for(let s of a){let l=n.get(s.source);if(l===void 0)throw new Error(`P6 float path count missing for activity ${String(s.source)}`);o+=l}n.set(r,o)}return n}function tA(t,e,i,n,r,a){let o=i.activities.get(t)?.drivingLinkId;return e.getIncomingLinkIds(t).map(s=>e.getLink(s)).filter(s=>s!==null&&a(s)).sort((s,l)=>{let c=s.id===o?0:1,d=l.id===o?0:1;if(c!==d)return c-d;let u=n.activities.get(s.source)?.totalFloatHours??1/0,p=n.activities.get(l.source)?.totalFloatHours??1/0;return u-p||cd(l.source,s.source,e,r)||l.id.localeCompare(s.id)})}function cd(t,e,i,n){let r=i.getActivity(t),a=i.getActivity(e);if(n.dependencyReference==="custom_id")return(r?.customId??t).localeCompare(a?.customId??e);let o=r?.correlativeId,s=a?.correlativeId;return o!==void 0&&s!==void 0&&o!==s?o-s:t.localeCompare(e)}function NL(t,e,i,n){let r=[],a=new Set,o=[t];for(let s=o.pop();s!==void 0;s=o.pop()){let l=[],c=s;for(;c!==null&&!a.has(c)&&e.getActivity(c)?.p6?.executionStatus!=="completed";)a.add(c),l.push(c),c=Is(c,e,n)?null:ld(c,e,i,n);if(l.length===0)continue;r.push(l);let d=[...l].reverse().flatMap(u=>{let p=Is(u,e,n)?null:ld(u,e,i,n);return e.getIncomingLinkIds(u).map(f=>e.getLink(f)).filter(f=>f!==null&&f.source!==p).sort((f,y)=>y.source.localeCompare(f.source)||y.id.localeCompare(f.id))});for(let u of d)o.push(u.source)}return r}function Is(t,e,i){let n=e.getActivity(t)?.p6;return As(i)?n?.executionStatus==="in_progress"&&n.primaryConstraintType!==null:n?.executionStatus!=="not_started"?!1:n?.primaryConstraintType==="alap"||n?.primaryConstraintType==="start_on"||n?.sourcePrimaryConstraintToken===Ei}function FL(t,e,i,n){let r=new Set([...n.activities].filter(([,o])=>o.floatPath!==null).map(([o])=>o)),a=[...e.activities.keys()].filter(o=>!r.has(o)&&wL(o,t)&&xL(o,t,i)).sort((o,s)=>o.localeCompare(s));for(let o of a){let s=[],l=o;for(;l!==null&&!r.has(l);)r.add(l),s.push(l),l=Is(l,t,i)?null:ld(l,t,e,i);s.length>0&&rr(s,n)}}function wL(t,e){return e.getIncomingLinkIds(t).length>0||e.getOutgoingLinkIds(t).length>0}function xL(t,e,i){return!e.getOutgoingLinkIds(t).map(n=>e.getLink(n)).some(n=>n!==null&&!Is(n.target,e,i))}function ML(t,e,i,n,r){r.emittedPaths=BL(r.activities);let a=jL(r),o=d=>r.numberableActivityIds.has(d.source)&&r.numberableActivityIds.has(d.target)&&!Jg(d.target,t,n)&&!Zg(d.source,t,n),s=d=>o(d)&&a.has(d.source)&&a.has(d.target),l=[...a].filter(d=>WL(d,t,o)).sort((d,u)=>VL(d,u,t,i,n)),c=new Set;for(let d of l){let u=KL(d,t,e,i,n,s,c);rr(u,r)}}function UL(t,e,i,n){let r=new Map,a=new Set;for(let[s,l]of i){if(l.floatPath===null)continue;let c=e.activities.get(s)?.totalFloatHours??1/0,d=r.get(l.floatPath)??1/0;r.set(l.floatPath,Math.min(d,c)),Ge(n.getActivity(s))&&a.add(l.floatPath)}let o=new Map([...r].sort(([s,l],[c,d])=>l-d||(t.outOfSequencePolicy==="progress_override"?+!a.has(s)-+!a.has(c):0)||s-c).map(([s],l)=>[s,l+1]));for(let[s,l]of i)l.floatPath!==null&&i.set(s,{...l,floatPath:o.get(l.floatPath)})}function HL(t,e,i,n){!t.multipleFloatPaths.useTotalFloat||!t.multipleFloatPaths.limitEnabled||UL(t,e,i,n)}function BL(t){return Math.max(0,...[...t.values()].map(e=>e.floatPath??0))}function jL(t){return new Set([...t.numberableActivityIds].filter(e=>t.activities.get(e)?.floatPath===null))}function WL(t,e,i){return!e.getOutgoingLinkIds(t).map(n=>e.getLink(n)).some(n=>n!==null&&i(n))}function VL(t,e,i,n,r){let a=n.activities.get(t)?.totalFloatHours??1/0,o=n.activities.get(e)?.totalFloatHours??1/0,s=cd(t,e,i,r);return a-o||(r.outOfSequencePolicy==="progress_override"?-s:s)}function KL(t,e,i,n,r,a,o){let s=[],l=t;for(;l!==null&&!o.has(l);)o.add(l),s.push(l),l=tA(l,e,i,n,r,a)[0]?.source??null;return s}function ld(t,e,i,n){let r=i.activities.get(t)?.drivingLinkId;return r!=null?e.getLink(r)?.source??null:zg(t,e,i,n)[0]??null}function eA(t){sn(t.outOfSequencePolicy,"outOfSequencePolicy",["retained_logic","progress_override","actual_dates"]),sn(t.dependencyReference,"dependencyReference",["correlative_id","custom_id"]),sn(t.startToStartLagBasis,"startToStartLagBasis",["actual_start","early_start"]),sn(t.relationshipLagCalendar,"relationshipLagCalendar",["predecessor","successor","project_default","twenty_four_hour"]),sn(t.totalFloatMethod,"totalFloatMethod",["start_float","finish_float","smallest"]),sn(t.criticalActivityMethod,"criticalActivityMethod",Object.values(Ki)),sn(t.calculateFloatBasedOn,"calculateFloatBasedOn",["each_project","opened_projects"])}function sn(t,e,i){if(!i.includes(t))throw new Error(`Invalid P6 schedule settings: ${e}`)}function iA(t,e,i){return i.has(t)?{ancestorId:t,next:e}:e}function YL(t,e,i,n){let r=t.slice(e).reverse(),a=null;for(let o of r)a=iA(o,a,i);for(let o of r)n.set(o,a);return a}function GL(t,e,i,n){let r=[],a=new Map,o=t;for(;o!==null&&!n.has(o)&&!a.has(o);)a.set(o,r.length),r.push(o),o=e.get(o)?.parentId??null;let s=o===null?null:n.get(o)??null,l=o===null?void 0:a.get(o),c=r.length-1;l!==void 0&&(s=YL(r,l,i,n),c=l-1);for(let d=c;d>=0;d-=1){let u=r[d];if(u===void 0)throw new Error("Missing WBS ancestor");s=iA(u,s,i),n.set(u,s)}return n.get(t)??null}function nA(t,e,i){let n=new Map;if(i.size===0)return n;let r=new Map;for(let a of t){if(!(a.p6!==void 0&&a.p6.activityType!==Mt.WBS_SUMMARY))continue;let s=a.parentId;if(s===null)continue;let l=GL(s,e,i,r);for(;l!==null;){let c=n.get(l.ancestorId);c===void 0?n.set(l.ancestorId,[a]):c.push(a),l=l.next}}return n}var $L={remainingEarlyStart:null,remainingEarlyFinish:null,remainingLateStart:null,remainingLateFinish:null,lateStart:null,lateFinish:null,remainingFloatHours:null,freeFloatHours:null,floatPath:null,floatPathOrder:null,longestPath:!1},qL=8,or="178",zL=Date.parse("2026-10-07T12:00:00.000Z"),JL=3,XL=12,ZL=0,QL=Date.parse("2026-10-07T12:00:00.000Z"),tO=Date.parse("2026-10-08T12:00:00.000Z"),eO=Date.parse("2026-10-06T08:00:00.000Z"),iO=-52,nO=-28,rO=Date.parse("2026-10-08T12:00:00.000Z"),aO=Date.parse("2026-10-12T12:00:00.000Z"),oO=24,sO=0,lA=120,lO=8,dd=16,rA=24,cO=10,aA="5330",oA="P6 Oracle Certification 24.12",cA=null,dA="A200",dO=Date.parse("2026-10-05T00:00:00.000Z"),sA=24,uO=8,pO=8,fO=16,uA=3600*1e3;function pA(t){let{adapter:e,project:i,settings:n}=t;if(ia(n),n.dataDate===null)throw new Error("P6 schedule requires Data Date");let r=kg({adapter:e,settings:n});if(r.cycles.length>0)throw new Error(`P6 schedule cannot calculate cycles: ${r.cycles.join(", ")}`);let a=Fg({adapter:e,settings:n,forward:r}),o=$g({adapter:e,settings:n,forward:r,backward:a}),s=NO({adapter:e,settings:n}),l=xO({adapter:e,levelOfEffortActualStarts:s,lateActivities:a.activities}),c=new Map,d=[];for(let p of hA(e.getAllActivities())){let f=p.p6,y=r.activities.get(p.id),h=a.activities.get(p.id),m=o.activities.get(p.id);if(y===void 0||h===void 0||m===void 0)continue;let g=s.get(p.id),C=l.get(p.id),b=hO({current:f,early:y,late:h,path:m,levelOfEffortActualStart:g,completedPredecessorLateFinish:C}),E=gO({activity:p,adapter:e,project:i,settings:n}),P=E?MO(f,b,n.dataDate):b,N=e.calendarReader.getCalendar(p.calendarId);if(N===null)throw new Error(`P6 schedule requires calendar for activity ${p.id}`);let I=Jr(P,{dataDate:n.dataDate,calendar:N,calendarId:p.calendarId,totalFloatMethod:n.totalFloatMethod}),R=vO(P,I,E);c.set(p.id,R),CO({excludesLevelOfEffort:E||g!==void 0,method:n.criticalActivityMethod,longestPath:R.longestPath,totalFloatCritical:h.isCritical})&&d.push(p.id)}UO({adapter:e,settings:n,activities:c});let u=[...Wg({adapter:e,dataDate:n.dataDate,project:i,outOfSequencePolicy:n.outOfSequencePolicy}),...Vg({adapter:e,dataDate:n.dataDate,project:i,calculated:c})];return{activities:c,criticalPath:d,warnings:u}}function yO(t){return(t??_.ASAP)===_.ASAP}function hO(t){let e=t.levelOfEffortActualStart,i=t.completedPredecessorLateFinish;return{...t.current,...mO(t.current,t.early),...e===void 0?{}:{actualStart:new Date(e),executionStatus:V.IN_PROGRESS},remainingDurationHours:t.early.scheduledRemainingDurationHours,remainingEarlyStart:be(t.early.remainingEarlyStart),remainingEarlyFinish:be(t.early.remainingEarlyFinish),remainingLateStart:be(e??t.late.remainingLateStart),remainingLateFinish:be(t.late.remainingLateFinish),earlyStart:be(t.early.earlyStart),earlyFinish:be(t.early.earlyFinish),lateStart:be(e??i??t.late.lateStart),lateFinish:be(i??t.late.lateFinish),remainingFloatHours:t.late.totalFloatHours,floatPath:t.path.floatPath,floatPathOrder:t.path.floatPathOrder,longestPath:e===void 0&&i===void 0?t.path.longestPath:!0,freeFloatHours:t.late.freeFloatHours}}function mO(t,e){let i=t.activityType===Mt.START_MILESTONE&&t.plannedStart!==null&&e.remainingEarlyStart!==null&&t.plannedStart<e.remainingEarlyStart;return t.executionStatus!==V.NOT_STARTED||t.activityType!==Mt.TASK&&!i?{plannedStart:t.plannedStart,plannedFinish:t.plannedFinish}:{plannedStart:be(e.remainingEarlyStart),plannedFinish:be(e.remainingEarlyFinish)}}function gO(t){let{activity:e,adapter:i,project:n,settings:r}=t,a=e.p6,o=r.dataDate;return a===void 0||o===null||!AO({adapter:i,project:n,settings:r})||!IO(e)?!1:SO(a,o)}function AO(t){return LO(t.project)&&t.settings.dataDate?.getTime()===zL&&fA(t.settings)&&OO(t.adapter)&&yA(t.adapter.calendarReader)}function IO(t){let e=t.p6;return e===void 0?!1:t.id===dA&&t.type===L.TASK&&t.calendarId===or&&Cs(t)&&e.activityType===Mt.LEVEL_OF_EFFORT&&e.durationType===de.FIXED_DURATION_AND_UNITS_PER_TIME&&e.percentCompleteType===It.DURATION&&e.originalDurationHours===dd&&ea(e.plannedStart,rO)&&ea(e.plannedFinish,aO)&&ea(e.actualStart,eO)&&Ss(e)&&vs(e)}function SO(t,e){let i=t.executionStatus===V.IN_PROGRESS&&t.actualFinish===null&&t.remainingDurationHours===dd&&t.physicalPercentComplete===0&&t.unitsPercentComplete===0,n=t.executionStatus===V.COMPLETED&&t.actualFinish?.getTime()===e.getTime()&&t.remainingDurationHours===0&&t.physicalPercentComplete===100&&t.unitsPercentComplete===100;return i||n}function vO(t,e,i){return i?{...t,...e,physicalPercentComplete:100,unitsPercentComplete:100}:{...t,...e}}function CO(t){return t.excludesLevelOfEffort&&t.method===Ki.TOTAL_FLOAT?!1:t.method===Ki.LONGEST_PATH?t.longestPath:t.totalFloatCritical}function DO(t){let{link:e,adapter:i,dataDate:n}=t;if(e.type!==M.FINISH_TO_START||e.lag!==0)return null;let r=i.getActivity(e.source),a=i.getActivity(e.target);if(!TO(r,n)||a?.calendarId!==or)return null;let o=r?.p6;if(o===void 0)return null;let s=o?.actualFinish;return s==null||s>=n?null:new Date(s)}function TO(t,e){let i=t?.p6;return t===null||i===void 0?!1:t.calendarId===or&&Cs(t)&&i.activityType===Mt.TASK&&i.durationType===de.FIXED_DURATION_AND_UNITS&&i.executionStatus===V.COMPLETED&&i.percentCompleteType===It.DURATION&&i.originalDurationHours===lO&&i.remainingDurationHours===0&&i.physicalPercentComplete===100&&ea(i.plannedStart,QL)&&ea(i.plannedFinish,tO)&&ar(i.actualStart,e,iO)&&ar(i.actualFinish,e,nO)&&Ss(i)&&vs(i)}function fA(t){return _O(t.dataDate)&&t.outOfSequencePolicy==="retained_logic"&&t.dependencyReference==="custom_id"&&t.useExpectedFinishDates&&t.startToStartLagBasis==="early_start"&&t.relationshipLagCalendar==="successor"&&t.totalFloatMethod==="finish_float"&&t.criticalActivityMethod==="total_float"&&t.criticalFloatThresholdHours===0&&!t.makeOpenEndedActivitiesCritical&&t.externalRelationshipPolicy==="SD_Both"&&t.calculateFloatBasedOn==="each_project"&&!t.setDataDateAndPlannedStartToForecastStart&&t.projectMustFinishBy===null&&t.projectForecastStart===null&&!t.multipleFloatPaths.enabled&&!t.multipleFloatPaths.limitEnabled&&t.multipleFloatPaths.maximum===cO&&t.multipleFloatPaths.useTotalFloat&&t.multipleFloatPaths.endingActivityId===null}function _O(t){return t!==null&&t.getUTCDay()===JL&&t.getUTCHours()===XL&&t.getUTCMinutes()===ZL}function EO(t){let{adapter:e,dataDate:i,levelOfEffort:n,link:r}=t,a=e.getActivity(r.target),o=a?.p6;return r.type===M.FINISH_TO_FINISH&&r.lag===qL&&a?.calendarId===or&&a.calendarId===n.calendarId&&Cs(a)&&o?.activityType===Mt.TASK&&o.durationType===de.FIXED_DURATION_AND_UNITS&&o.executionStatus===V.NOT_STARTED&&o.percentCompleteType===It.DURATION&&o.actualStart===null&&o.actualFinish===null&&o.originalDurationHours===rA&&o.remainingDurationHours===rA&&o.physicalPercentComplete===0&&ar(o.plannedStart,i,sO)&&ar(o.plannedFinish,i,lA)&&Ss(o)&&vs(o)}function PO(t){let{activity:e,boundary:i,settings:n}=t,r=e.p6,a=n.dataDate;return r?.activityType!==Mt.LEVEL_OF_EFFORT||a===null||r.durationType!==de.FIXED_DURATION_AND_UNITS_PER_TIME||r.percentCompleteType!==It.DURATION||!fA(n)||!Cs(e)||e.calendarId!==or||!kO(r)||!Ss(r)||!vs(r)||r.physicalPercentComplete!==0||r.originalDurationHours!==dd||!RO(r,a)?!1:r.actualStart===null?r.executionStatus===V.NOT_STARTED:r.executionStatus===V.IN_PROGRESS&&r.actualStart.getTime()===i.getTime()}function RO(t,e){return ar(t.plannedStart,e,oO)&&ar(t.plannedFinish,e,lA)}function kO(t){return t.actualFinish===null&&t.remainingDurationHours>0&&t.originalDurationHours===t.remainingDurationHours&&t.suspendDate===null&&t.resumeDate===null}function Ss(t){return t.suspendDate===null&&t.resumeDate===null&&t.expectedFinish===null&&t.secondaryConstraintType===null&&t.secondaryConstraintDate===null&&(t.resourceAssignments?.length??0)===0}function vs(t){return t.actualLaborUnits===0&&t.remainingLaborUnits===0&&t.actualNonlaborUnits===0&&t.remainingNonlaborUnits===0}function ea(t,e){return t?.getTime()===e}function ar(t,e,i){return t?.getTime()===e.getTime()+i*uA}function Cs(t){return yO(t.constraintType)&&t.constraintDate===null}function LO(t){return t.projectId===aA&&t.scheduleId===aA&&t.scheduleCode===oA&&t.scheduleName===oA}function OO(t){let e=t.getAllActivities();return e.length===1&&e[0]?.id===dA&&e[0].parentId===cA&&t.getAllLinks().length===0}function yA(t){let e=t.getCalendar(or);if(e===null)return!1;for(let i=0;i<uO;i+=1)for(let n=0;n<sA;n+=1){let r=new Date(dO+(i*sA+n)*uA),a=r.getUTCDay(),o=a>=1&&a<=5&&n>=pO&&n<fO;if(e.isWorkTime(r,dt.HOUR)!==o)return!1}return!0}function bO(t){let e=t.getAllActivities(),i=t.getAllLinks();return e.length===3&&e.every(n=>n.type===L.TASK&&n.parentId===cA)&&i.length===2}function NO(t){let e=t.settings.dataDate;if(e===null)return new Map;if(!bO(t.adapter))return new Map;if(!yA(t.adapter.calendarReader))return new Map;let i=FO(t,e),n=new Map;for(let[r,a]of i.candidates){let o=wO({...t,activityId:r,boundaries:a,index:i});o!==null&&n.set(r,o)}return n}function FO(t,e){let i=new Map,n=new Map,r=new Map;for(let a of t.adapter.getAllLinks()){i.set(a.target,(i.get(a.target)??0)+1);let o=n.get(a.source)??[];o.push(a),n.set(a.source,o);let s=DO({...t,link:a,dataDate:e});if(s===null)continue;let l=r.get(a.target)??[];l.push(s),r.set(a.target,l)}return{incomingCounts:i,outgoing:n,candidates:r}}function wO(t){let e=t.adapter.getActivity(t.activityId),i=t.boundaries[0];if(e===null||i===void 0||t.boundaries.length!==1||t.index.incomingCounts.get(t.activityId)!==1)return null;let n=t.index.outgoing.get(t.activityId)??[];if(n.length!==1)return null;let r=t.settings.dataDate;return r===null||!EO({link:n[0],adapter:t.adapter,levelOfEffort:e,dataDate:r})?null:PO({activity:e,boundary:i,settings:t.settings})?i:null}function xO(t){let e=new Map,i=new Map;for(let r of t.adapter.getAllLinks())t.levelOfEffortActualStarts.has(r.source)&&e.set(r.source,r.target),t.levelOfEffortActualStarts.has(r.target)&&i.set(r.target,r.source);let n=new Map;for(let[r,a]of i){let o=e.get(r);if(o===void 0)continue;let s=t.lateActivities.get(o)?.lateFinish;s!=null&&n.set(a,new Date(s))}return n}function MO(t,e,i){let r=t.executionStatus===V.IN_PROGRESS?new Date(i):null;return{...e,...$L,actualFinish:t.actualFinish??new Date(i),executionStatus:V.COMPLETED,remainingDurationHours:0,earlyStart:r,earlyFinish:r}}function UO(t){let{adapter:e,settings:i,activities:n}=t,r=e.getAllActivities(),a=hA(r.filter(c=>c.p6?.activityType===Mt.WBS_SUMMARY)),o=new Set(a.flatMap(c=>c.parentId===null?[]:[c.parentId]));if(o.size===0)return;let s=new Map(r.map(c=>[c.id,c])),l=nA(r,s,o);for(let c of a){if(c.parentId===null)continue;let d=l.get(c.parentId)??[];if(d.length===0)continue;let u=d.map(I=>n.get(I.id)).filter(I=>I!==void 0);if(u.length===0)continue;let p=e.calendarReader.getCalendar(c.calendarId);if(p===null)throw new Error(`P6 schedule requires calendar for activity ${c.id}`);let f=on(u.map(I=>I.remainingEarlyStart)),y=Pi(u.map(I=>I.remainingEarlyFinish)),h=on(u.map(I=>I.remainingLateStart)),m=Pi(u.map(I=>I.remainingLateFinish)),g=on(u.map(I=>I.actualStart)),C=u.every(I=>I.executionStatus==="completed"),b=C?"completed":g!==null||u.some(I=>I.executionStatus==="in_progress")?"in_progress":"not_started",E=f===null||y===null?0:p.calculateDuration(f,y),P=g===null?0:p.calculateDuration(g,C?Pi(u.map(I=>I.actualFinish))??i.dataDate:i.dataDate),N={...c.p6,actualStart:g,actualFinish:C?Pi(u.map(I=>I.actualFinish)):null,plannedStart:on(u.map(I=>I.plannedStart)),plannedFinish:Pi(u.map(I=>I.plannedFinish)),executionStatus:b,remainingDurationHours:E,actualDurationHours:P,atCompletionDurationHours:P+E,originalDurationHours:c.p6.originalDurationHours,actualLaborUnits:ta(u.map(I=>I.actualLaborUnits)),remainingLaborUnits:ta(u.map(I=>I.remainingLaborUnits)),actualNonlaborUnits:ta(u.map(I=>I.actualNonlaborUnits)),remainingNonlaborUnits:ta(u.map(I=>I.remainingNonlaborUnits)),remainingEarlyStart:f,remainingEarlyFinish:y,remainingLateStart:h,remainingLateFinish:m,earlyStart:on(u.map(I=>I.earlyStart)),earlyFinish:Pi(u.map(I=>I.earlyFinish)),lateStart:on(u.map(I=>I.lateStart)),lateFinish:Pi(u.map(I=>I.lateFinish)),remainingFloatHours:sd(u.map(I=>I.remainingFloatHours)),freeFloatHours:sd(u.map(I=>I.freeFloatHours)),floatPath:null,floatPathOrder:null,longestPath:u.some(I=>I.longestPath)};n.set(c.id,{...N,...Jr(N,{dataDate:i.dataDate,calendar:p,totalFloatMethod:i.totalFloatMethod})})}}function ia(t){for(let i of[t.dataDate,t.projectMustFinishBy,t.projectForecastStart])if(i!==null&&Number.isNaN(i.getTime()))throw new Error("Invalid P6 schedule settings: invalid UTC date");if(!Number.isFinite(t.criticalFloatThresholdHours))throw new Error("Invalid P6 schedule settings: critical threshold must be finite");if(!Number.isInteger(t.multipleFloatPaths.maximum)||t.multipleFloatPaths.maximum<0)throw new Error("Invalid P6 schedule settings: path maximum must be a non-negative integer");for(let i of[t.scheduleAutomaticallyOnDateChange,t.useExpectedFinishDates,t.makeOpenEndedActivitiesCritical,t.setDataDateAndPlannedStartToForecastStart,t.multipleFloatPaths.enabled,t.multipleFloatPaths.limitEnabled,t.multipleFloatPaths.useTotalFloat])if(typeof i!="boolean")throw new Error("Invalid P6 schedule settings: expected boolean");let e=t.multipleFloatPaths.endingActivityId;if(e!==null&&typeof e!="string"&&(typeof e!="number"||!Number.isFinite(e)))throw new Error("Invalid P6 schedule settings: ending activity ID");eA(t)}function hA(t){return t.filter(e=>e.p6!==void 0).sort((e,i)=>String(e.id).localeCompare(String(i.id)))}function be(t){return t===null?null:new Date(t)}var HO="P6 capability is not enabled for this Schedule",BO="F9 is not certified for imported cross-project relationships",jO="P6 Schedule requires a Data Date",mA="P6 Schedule requires scheduling state for every programmable activity",WO="P6 Schedule invariant failed: programmable activity is missing P6 state",VO=10,KO=new Set(Object.values(de));function YO(t){let e=t.setDataDateAndPlannedStartToForecastStart&&t.projectForecastStart!==null?{...t,dataDate:new Date(t.projectForecastStart)}:t;return!e.multipleFloatPaths.enabled||e.multipleFloatPaths.limitEnabled?e:{...e,multipleFloatPaths:{...e.multipleFloatPaths,limitEnabled:!0}}}function ud(t){if(t.settings===null)return{ready:!1,code:"capability_not_enabled",message:HO,relationshipIds:[],count:0,sampleActivityIds:[],missingInputs:[]};let e=S(t.settings),i=S({...e,...t.patch});ia(i);let n=YO(i);if(t.externalRelationshipIds.length>0&&n.externalRelationshipPolicy!=="SD_None")return{ready:!1,code:"EXTERNAL_RELATIONSHIP_F9_NOT_CERTIFIED",message:BO,relationshipIds:S(t.externalRelationshipIds),count:t.externalRelationshipIds.length,sampleActivityIds:[],missingInputs:[]};if(!at(n))return{ready:!1,code:"data_date_required",message:jO,relationshipIds:[],count:0,sampleActivityIds:[],missingInputs:[]};let r=$O(t.activities),{missingInputs:a,schedulableActivities:o,unsupportedActivityIds:s}=r;return s.length>0?gA("activity_scheduling_state_required",mA,s):a.length>0?gA("activity_scheduling_state_required",mA,a.map(({activityId:l})=>l),a):{ready:!0,previousSettings:e,settings:n,activities:o}}function GO(t){return t.type!=="project"}function $O(t){let e=[],i=[],n=new Map;for(let r of t){if(!GO(r))continue;let a=r.p6;if(a===void 0&&ZO(r.id),!XO(a)){i.push(r.id);continue}let o=qO(r.progress,a);o.length>0?e.push({activityId:r.id,fields:o}):He(a)&&n.set(r.id,a)}return{missingInputs:e,schedulableActivities:n,unsupportedActivityIds:i}}function qO(t,e){let i=[];return zO(t,e)&&e.actualStart===null&&i.push("actualStart"),JO(t,e)&&e.actualFinish===null&&i.push("actualFinish"),e.remainingDurationHours===null&&i.push("remainingDurationHours"),i}function zO(t,e){return e.executionStatus!=="not_started"||t!==0}function JO(t,e){return e.executionStatus==="completed"?!0:e.executionStatus==="in_progress"?!1:An(t)}function XO(t){let{durationType:e}=t;return e===void 0||KO.has(e)}function ZO(t){throw new se("P6_ACTIVITY_STATE_INVARIANT",WO,[],1,[t])}function gA(t,e,i,n=[]){return{ready:!1,code:t,message:e,relationshipIds:[],count:i.length,sampleActivityIds:i.slice(0,VO),missingInputs:n}}var QO=/^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) (?<hour>\d{2}):(?<minute>\d{2})$/,tb=/^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/,AA="Invalid P6 wall date",IA="Invalid P6 day",eb="Invalid UTC date",pd=1,ib=2;function Ts(t){if(t===null)return null;let e=vA(t,QO);if(e===null)throw new Error(`${AA}: "${t}"`);return CA(t,e,AA)}function SA(t){if(t===null)return null;if(Number.isNaN(t.getTime()))throw new Error(eb);return`${t.getUTCFullYear()}-${Ds(t.getUTCMonth()+pd)}-${Ds(t.getUTCDate())} ${Ds(t.getUTCHours())}:${Ds(t.getUTCMinutes())}`}function _s(t,e){if(t===null)return null;let i=vA(t,tb);if(i===null)throw new Error(`${IA}: "${t}"`);let n=CA(t,i,IA);return Er(e,n)}function vA(t,e){let i=t.match(e)?.groups;return i===void 0?null:{year:Number(i.year),month:Number(i.month),day:Number(i.day),hour:Number(i.hour??0),minute:Number(i.minute??0)}}function CA(t,e,i){let n=new Date(Date.UTC(e.year,e.month-pd,e.day,e.hour,e.minute));if(!(n.getUTCFullYear()===e.year&&n.getUTCMonth()+pd===e.month&&n.getUTCDate()===e.day&&n.getUTCHours()===e.hour&&n.getUTCMinutes()===e.minute))throw new Error(`${i}: "${t}"`);return n}function Ds(t){return String(t).padStart(ib,"0")}var nb="Invalid P6 schedule options",rb=10,ab={CT_TotFloat:"total_float",CT_DrivPath:"longest_path"},ob={FT_SS:"start_float",FT_FF:"finish_float",FT_Min:"smallest"},sb={rcal_Predecessor:"predecessor",rcal_Successor:"successor",rcal_ProjDefault:"project_default",rcal_24Hour:"twenty_four_hour"};function DA(t,e,i){return{projectPlannedStart:Es(t.plan_start_date),settings:{dataDate:Es(t.last_recalc_date),scheduleAutomaticallyOnDateChange:!1,outOfSequencePolicy:lb(e),dependencyReference:"custom_id",useExpectedFinishDates:Ne(e.sched_use_expect_end_flag),startToStartLagBasis:Ne(e.sched_lag_early_start_flag)?"early_start":"actual_start",relationshipLagCalendar:fd(sb,e.sched_calendar_on_relationship_lag),totalFloatMethod:fd(ob,e.sched_float_type),criticalActivityMethod:fd(ab,t.critical_path_type),criticalFloatThresholdHours:TA(t.critical_drtn_hr_cnt,"critical_drtn_hr_cnt"),makeOpenEndedActivitiesCritical:Ne(e.sched_open_critical_flag),externalRelationshipPolicy:e.sched_outer_depend_type,calculateFloatBasedOn:Ne(e.sched_use_project_end_date_for_float)?"each_project":"opened_projects",setDataDateAndPlannedStartToForecastStart:Ne(e.sched_setplantoforecast),projectMustFinishBy:Es(t.plan_end_date),projectForecastStart:Es(t.fcst_start_date),multipleFloatPaths:{enabled:Ne(e.enable_multiple_longest_path_calc),limitEnabled:Ne(e.limit_multiple_longest_path_calc),maximum:db(e.max_multiple_longest_path,"max_multiple_longest_path"),useTotalFloat:Ne(e.use_total_float_multiple_longest_paths),endingActivityId:ub(e.key_activity_for_multiple_longest_paths,i)}}}}function Ps(){return{dataDate:null,scheduleAutomaticallyOnDateChange:!1,outOfSequencePolicy:"retained_logic",dependencyReference:"correlative_id",useExpectedFinishDates:!0,startToStartLagBasis:"early_start",relationshipLagCalendar:"predecessor",totalFloatMethod:"finish_float",criticalActivityMethod:"total_float",criticalFloatThresholdHours:0,makeOpenEndedActivitiesCritical:!1,externalRelationshipPolicy:"SD_Both",calculateFloatBasedOn:"each_project",setDataDateAndPlannedStartToForecastStart:!1,projectMustFinishBy:null,projectForecastStart:null,multipleFloatPaths:{enabled:!1,limitEnabled:!1,maximum:rb,useTotalFloat:!0,endingActivityId:null}}}function Rs(t){return{...t,scheduleAutomaticallyOnDateChange:t.scheduleAutomaticallyOnDateChange??!1}}function Es(t){return t===void 0||t===""?null:Ts(t)}function Ne(t){if(t==="Y")return!0;if(t==="N")return!1;Ri(`expected Y/N, got "${t}"`)}function fd(t,e){return Object.hasOwn(t,e)||Ri(`unknown enum "${e}"`),t[e]}function lb(t){let e=Ne(t.sched_retained_logic),i=Ne(t.sched_progress_override);return e&&i&&Ri("retained logic and progress override conflict"),e?"retained_logic":i?"progress_override":"actual_dates"}function cb(t,e){let i=TA(t,e);return i<0&&Ri(`${e} must be a non-negative number`),i}function TA(t,e){let i=Number(t);return(t===""||!Number.isFinite(i))&&Ri(`${e} must be a finite number`),i}function db(t,e){let i=cb(t,e);return Number.isInteger(i)||Ri(`${e} must be an integer`),i}function ub(t,e){if(t==="")return null;e===void 0&&Ri("ending activity requires an ID resolver");let i=e(t);return i===null&&Ri(`unknown ending activity "${t}"`),i}function Ri(t){throw new Error(`${nb}: ${t}`)}function PA(t){let e=ud({settings:t.settings,externalRelationshipIds:t.externalRelationshipIds,patch:t.patch,activities:t.activities});return e.ready?{ready:!0}:{ready:!1,code:e.code,count:e.count,sampleActivityIds:e.sampleActivityIds,missingInputs:S(e.missingInputs)}}function RA(t,e){let i=FA(t),n=S({...i,...e});return ia(n),{before:i,after:n,changed:Ot(i)!==Ot(n)}}function kA(t,e,i){let n=yb(t,e);Sb(n),vb(n,i);let r=pb(t,fb(t,n)),a=S({...t,...r,...ds(t,r)});return qr(a),{next:a,changed:Ot(t)!==Ot(a)}}function pb(t,e){return t.executionStatus!==V.NOT_STARTED||e.remainingDurationHours===void 0||e.originalDurationHours!==void 0?e:{...e,originalDurationHours:e.remainingDurationHours}}var _A=100;function fb(t,e){if(e.physicalPercentComplete===void 0)return e;let i=e.actualStart!==void 0?e.actualStart:t.actualStart,n=e.actualFinish!==void 0?e.actualFinish:t.actualFinish;if(i!==null&&n===null)return e;let{physicalPercentComplete:a,...o}=e;return o}function LA(t,e,i){if(!Number.isFinite(e.getTime())||t.executionStatus==="completed")return null;let n=t.remainingEarlyStart??t.plannedStart;if(n===null||e.getTime()<=n.getTime())return null;let r=i.calculateDuration(n,e);return!Number.isFinite(r)||r<=0?null:t.executionStatus==="not_started"?{originalDurationHours:r,remainingDurationHours:r}:{remainingDurationHours:r}}function yb(t,e){let{activityPercentComplete:i,...n}=e;if(i===void 0)return n;if(!Number.isFinite(i)||i<0||i>_A)throw new Error("Invalid P6 activity input: Activity % Complete must be within 0..100");switch(n.percentCompleteType??t.percentCompleteType){case It.PHYSICAL:return{...n,physicalPercentComplete:i};case It.DURATION:return{...n,remainingDurationHours:t.originalDurationHours*(1-i/_A)};case It.UNITS:throw new Error("Invalid P6 activity input: Units % Complete is read-only")}}function OA(t){let e=t.state.getAllActivities(),i=ud({settings:t.settings,externalRelationshipIds:t.externalRelationshipIds,patch:t.patch,activities:e});i.ready||Ib(i);let n=hb(t.projectState),r=gb(i.settings,n),a=us({previousSettings:i.previousSettings,settings:i.settings,activities:i.activities}),o=pA({adapter:mb(t.state,i.activities,a),settings:i.settings,project:{projectId:String(t.sector.projectId),scheduleId:String(t.sector.id),scheduleCode:t.sector.name,scheduleName:t.sector.name}}),s=t.transactionBaseline?.beforeSettings??i.previousSettings,l=t.transactionBaseline?.beforeProjectState??n;return{beforeSettings:s,settings:i.settings,beforeProjectState:l,projectState:r,calculated:o,projection:fg(o),changeSetContribution:Ab(s,i.settings,l,r)}}function bA(t,e){for(let[i,n]of e)t.setActivityFields(i,n)}function NA(t){return FA(t)}function FA(t){if(t!==null)return Rs(S(t));throw new se("capability_not_enabled","P6 capability is not enabled for this Schedule")}function hb(t){if(t!==null)return S(t);throw new se("capability_not_enabled","P6 capability is not enabled for this Schedule")}function mb(t,e,i){let n=t.fork();return n.forEachActivity(r=>{if(!e.has(r.id)){n.setActivityField(r.id,"p6",void 0);return}let a=i.get(r.id);a===void 0||r.p6===void 0||n.setActivityField(r.id,"p6",{...r.p6,expectedFinish:a})}),n}function gb(t,e){let i=t.setDataDateAndPlannedStartToForecastStart&&t.projectForecastStart!==null?new Date(t.projectForecastStart):e.plannedStart;return{...e,plannedStart:i}}function Ab(t,e,i,n){return{...EA(t,e)?{p6Settings:{before:t,after:e}}:{},...EA(i.plannedStart,n.plannedStart)?{p6ProjectPlannedStart:{before:S(i.plannedStart),after:S(n.plannedStart)}}:{}}}function EA(t,e){return Ot(t)!==Ot(e)}function Ib(t){throw new se(t.code,t.message,t.relationshipIds,t.count,t.sampleActivityIds)}function Sb(t){Cb(t);let e=t.executionStatus;if("executionStatus"in t&&e!==V.NOT_STARTED&&e!==V.IN_PROGRESS&&e!==V.COMPLETED)throw new Error("Invalid P6 activity input: execution status");for(let n of[t.remainingDurationHours,t.originalDurationHours,t.physicalPercentComplete])if(n!==void 0&&(!Number.isFinite(n)||n<0))throw new Error("Invalid P6 activity input: expected non-negative number");if((t.physicalPercentComplete??0)>100)throw new Error("Invalid P6 activity input: percentage exceeds 100");let i=t.percentCompleteType;if(i!==void 0&&i!==It.DURATION&&i!==It.UNITS&&i!==It.PHYSICAL)throw new Error("Invalid P6 activity input: percent complete type")}function vb(t,e){let i=t.secondaryConstraintType??null;if(!Nn(e,i))throw new Error("Invalid P6 activity input: secondary constraint incompatible with the primary constraint")}function Cb(t){for(let e of[t.actualStart,t.actualFinish,t.plannedStart,t.plannedFinish,t.expectedFinish,t.suspendDate,t.resumeDate,t.secondaryConstraintDate])if(e!=null&&Number.isNaN(e.getTime()))throw new Error("Invalid P6 activity input: invalid UTC date")}function wA(){return Object.freeze({fingerprintActivity:Jm,activityCreated:Gc,parentPromoted:Xm,parentDemoted:Zm,scheduleReadiness:PA,prepareSettingsUpdate:RA,prepareLiveDerived:yg,applyLiveDerived:hg,prepareActivityUpdate:kA,prepareFinishEdit:LA,projectLocalActivity:ys,prepareSchedule:OA,applyScheduleProjection:bA,requireSettings:NA,historyContribution:tg,applyChangeSet:eg,changeSetIsSubstantive:ig,checkpoint:Dm,reconcile:rg})}function xA(t,e,i=!0){if(t===void 0)return null;let n=S(t),r=Rs(n.settings);for(let a of Object.values(n.activities))qr(a);return Db(e,n.activities,r,i),{capability:wA(),settings:r,projectState:{plannedStart:n.projectPlannedStart},latestRunLog:n.latestRunLog??null,externalRelationshipIds:n.externalRelationshipIds??[]}}function Db(t,e,i,n){for(let r of t){let a=Object.hasOwn(e,r.id)?e[r.id]:void 0,o=a===void 0?Mn(r):Tf(r,a);o!==void 0&&(r.p6=o,at(i,n)&&Object.assign(r,ps(o,i)))}}var De={READY:"ready",DESTROYED:"destroyed",POISONED:"poisoned"};function MA(t){let e=t.clock??null,i=e?.()??null,n=i?qa(i):null,r=t.reporter??Cn,a=xy(),o=is({sector:t.sector,activities:t.activities,links:t.links,calendars:t.calendars,baseCalendars:t.baseCalendars},r,a.record),s=t.isDataDateEnabled??(()=>!0),l=xA(t.p6??void 0,o.activities,s()),c=o.sector;c.statusCriteria=so(t.statusCriteria),c.ganttId=t.ganttId??null;let d=o.calendars,u=o.baseCalendars??[],p=Zo(o.activities,o.links,o.calendars,u),f=(I,R)=>Gm(I,Mi(c.hoursPerDay),R),y=new Xn(p,f,s);y.hydrateViewState({hiddenIds:o.viewStateSeed.hiddenIds});let h=new _n(y,r),m=$m(y);_b(y,l?.capability??null,m),Tb(y,l);let g=Vc({knownIds:o.activities.map(I=>I.id)}),C=Kc({seed:i?.getTime()??0,knownIds:o.links.map(I=>I.id)}),b=Yc({knownIds:o.activities.map(I=>I.uniqueCorrelativeId)}),E=new cs({defaultPrefix:c.customIdPrefix,suffixIncrement:c.customIdIncrement});if(E.populateFromActivities(o.activities),t.baselinePoints&&t.baselinePoints.length>0){let I=u.find(R=>R.baseDefault)?.id??null;xo(y,t.baselinePoints,n,r,I,a.record)}let P=_f(y,t.p6),N=zm({state:y,sector:c,scheduler:h,skipAutoSchedule:t.skipInitialAutoSchedule===!0,now:n??void 0}).then(P);return{dataDateCapability:l?.capability??null,sector:c,state:y,scheduler:h,activityIdGen:g,linkIdGen:C,uidGen:b,customIdTracker:E,calendars:d,baseCalendars:u,clock:e,reporter:r,loadDiagnostics:a.snapshot,externalRelationshipIds:l?.externalRelationshipIds??[],initPromise:N}}function Tb(t,e){e!==null&&(t.setDataDateSettings(e.settings),t.setDataDateProjectState(e.projectState),t.setDataDateLatestRunLog(e.latestRunLog))}function _b(t,e,i){if(e!==null)for(let n of i){let r=t.getActivity(n);if(r===null||r.p6!==void 0)continue;let a=e.activityCreated({activity:r,hasCompleteSchedulingState:!0});a.p6!==void 0&&t.setActivityField(n,"p6",a.p6)}}function yd(t,e){let i=new Map(t.map(o=>[String(o.id),o])),n=new Map(e.map(o=>[String(o.id),o])),r=[...new Set([...i.keys(),...n.keys()])].sort(),a=[];for(let o of r){let s=n.get(o),l=i.get(o);if(l===void 0){a.push({id:o,kind:H.DELETED,after:null});continue}if(s===void 0){a.push({id:o,kind:H.CREATED,after:S(l)});continue}let c=Eb(s,l);Object.keys(c).length>0&&a.push({id:o,kind:H.UPDATED,fields:c,after:S(l)})}return a}function Eb(t,e){let i={},n=[...new Set([...Object.keys(t),...Object.keys(e)])].sort();for(let r of n)Ot(t[r])!==Ot(e[r])&&(i[r]={before:S(t[r]),after:S(e[r])});return i}function Pb(t,e){let i=new Set(e.selectedIds.map(String)),n=new Set(t.selectedIds.map(String)),r=new Set(e.hiddenIds.map(String)),a=new Set(t.hiddenIds.map(String)),o=t.activities.map(({id:l})=>String(l)).sort(),s=[];for(let l of o){let c=i.has(l),d=n.has(l),u=!r.has(l),p=!a.has(l);c===d&&u===p||s.push({activityId:l,...c===d?{}:{checked:{before:c,after:d}},...u===p?{}:{visible:{before:u,after:p}}})}return s}function hd(t,e){let i=Ot(t.order)!==Ot(e.order);return{source:{kind:Kt.INIT},activities:yd(t.activities,e.activities),links:yd(t.links,e.links),calendars:yd(t.calendars,e.calendars),trackingEvents:[],effects:[],viewState:Pb(t,e),...i?{order:S(t.order)}:{}}}function UA(t){let e=t.state.fork(),i=S(t.sector),n=t.history.fork(),r=t.persistence.clone(),a=t.activityIds.snapshot(),o=t.linkIds.snapshot(),s=t.correlatives.snapshot(),l=t.customIds.captureRestorePoint();return{history:n,persistence:r,restore:()=>{t.state.restoreFork(e);for(let c of Object.keys(t.sector))Object.hasOwn(i,c)||Reflect.deleteProperty(t.sector,c);Object.assign(t.sector,i),t.scheduler.invalidateAllCaches(),t.activityIds.restore(a),t.linkIds.restore(o),t.correlatives.restore(s),l()}}}function HA(t,e){let i=t.find(n=>n.type===L.PROJECT);if(i!==void 0)return i.calendarId;for(let n of e)if(n.is_default)return n.id;return null}function BA(t,e,i){let n=i.getCalendar(e);return n===null?null:_s(t,n)}var md=Symbol("ScheduleCore.fork.source"),Rb=100;function kb(t){if(!Number.isInteger(t.offset)||t.offset<0)throw new RangeError("Ending activity offset must be a non-negative integer");if(!Number.isInteger(t.limit)||t.limit<1||t.limit>Rb)throw new RangeError("Ending activity limit must be an integer from 1 to 100")}function Lb(t){return{source:t,activities:[],links:[],calendars:[],trackingEvents:[]}}function Ob(t){return t.kind===A.PERSISTENCE_ACKNOWLEDGE||t.kind===A.ACTIVITY_LOOKAHEAD_SYNC&&t.acknowledgePersistedLookahead===!0}function bb(t){for(let e of t.activities)if(e.kind===H.DELETED||e.kind===H.UPDATED&&e.fields!==void 0&&"parentId"in e.fields)return!0;return!1}function Nb(t,e){let i=[];for(let n of t.activities){let r=e.getActivity(n.id);if(r===null)return null;i.push(r)}return i}function Fb(t,e,i){if(t===null||t.filter!==e)return!1;let n=t.context.hoursPerDay===i.hoursPerDay,r=t.context.locale===i.locale;return n&&r}var sr=class t{activities;cells;links;calendars;selection;view;baselines;impactRequests;persistence;history;projection;criticalPath;diagnostics;dataDates=Ag({getSettings:()=>this._getP6Settings(),getProjectState:()=>this._getP6ProjectState(),getLatestRunLog:()=>this._getP6LatestRunLog(),getScheduleStateFingerprint:()=>this._getP6ScheduleStateFingerprint(),getDefaultSettings:()=>S(Ps()),getScheduleReadiness:e=>this._getP6ScheduleReadiness(e),searchEndingActivities:e=>this._searchP6EndingActivities(e),getEndingActivityOption:e=>this._getP6EndingActivityOption(e),resolveMustFinishByDefault:e=>this._resolveP6MustFinishByDefault(e),updateSettings:e=>this._updateP6Settings(e),updateActivity:(e,i)=>this._updateP6Activity(e,i),schedule:e=>this._scheduleP6(e)});_activityClipboard={value:null};_cellClipboard={value:null};_status=De.READY;coreRuntime;_isFork;_undo=new Xo;_opQueue=Promise.resolve();_scheduleRevision=0;_stateRevision=0;_canonicalFingerprintCache=null;_p6ScheduleStateFingerprintCache=null;_pendingScheduleRevision=0;_criticalPathRevision=-1;_criticalPathUsesDataDate=!1;_activeCriticalPath=null;constructor(e){if(Object.assign(this,Cd(this)),md in e){this._isFork=!0;let r=e[md],a=r.coreRuntime.state.fork();this.coreRuntime={state:a,scheduler:new _n(a,r.coreRuntime.reporter),sector:S(r.coreRuntime.sector),activityIdGenerator:r.coreRuntime.activityIdGenerator.fork(),linkIdGenerator:r.coreRuntime.linkIdGenerator.fork(),uniqueCorrelativeIdGenerator:r.coreRuntime.uniqueCorrelativeIdGenerator.fork(),customIdTracker:r.coreRuntime.customIdTracker.fork(),calendars:new Map(Array.from(r.coreRuntime.calendars,([o,s])=>[o,S(s)])),baseCalendars:S(r.coreRuntime.baseCalendars),clock:r.coreRuntime.clock,reporter:r.coreRuntime.reporter,loadDiagnostics:r.coreRuntime.loadDiagnostics,externalRelationshipIds:S(r.coreRuntime.externalRelationshipIds),dataDateCapability:r.coreRuntime.dataDateCapability},this._activityClipboard.value=S(r._activityClipboard.value),this._cellClipboard.value=S(r._cellClipboard.value),this._undo=r._undo.fork(),this._saveTracker=r._saveTracker.fork(),this._scheduleRevision=r._scheduleRevision,this._stateRevision=r._stateRevision,this._canonicalFingerprintCache=r._canonicalFingerprintCache,this._p6ScheduleStateFingerprintCache=r._p6ScheduleStateFingerprintCache,this._pendingScheduleRevision=r._scheduleRevision,this._criticalPathRevision=r._criticalPathRevision,this._criticalPathUsesDataDate=r._criticalPathUsesDataDate,this._initPromise=Promise.resolve(),this._criticalPathReady=Promise.resolve(null),this._ready=this._initPromise;return}this._isFork=!1;let i=MA(e);this.coreRuntime={state:i.state,scheduler:i.scheduler,sector:i.sector,activityIdGenerator:i.activityIdGen,linkIdGenerator:i.linkIdGen,uniqueCorrelativeIdGenerator:i.uidGen,customIdTracker:i.customIdTracker,clock:i.clock,calendars:new Map(i.calendars.map(r=>[r.id,r])),baseCalendars:i.baseCalendars,reporter:i.reporter,loadDiagnostics:i.loadDiagnostics,externalRelationshipIds:S(i.externalRelationshipIds),dataDateCapability:i.dataDateCapability},this._initPromise=i.initPromise.then(()=>{this._status!==De.DESTROYED&&this._saveTracker.init(this.coreRuntime.state.getAllActivities(),this.getAllLinksView(),this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.dataDateProjectState(),this.coreRuntime.state.dataDateLatestRunLog())}),this._criticalPathReady=this._initPromise.then(()=>this._startCriticalPathForCurrentRevision());let n=e.criticalPathOnLoad===!0;this._ready=n?this._criticalPathReady.then(()=>{}):this._initPromise}get ready(){return this._ready}fork(){return this._enqueue(async()=>(await this._ready,this.assertReady(),new t({[md]:this})))}get criticalPathReady(){return this._criticalPathReady}get status(){return this._status}getSector(){return S(this.coreRuntime.sector)}getLoadDiagnostics(){return this.assertReady(),this.coreRuntime.loadDiagnostics()}getActivityView(e){return this.assertReady(),Kr(this.coreRuntime.state,e)}calculateCalendarEndDate(e){this.assertReady();let i=this.coreRuntime.state.getActivity(e.activityId);return i?this.coreRuntime.state.calculateEndDate({startDate:e.startDate,durationHours:e.durationHours,task:i}):null}calculateCalendarDuration(e){this.assertReady();let i=this.coreRuntime.state.getActivity(e.activityId);return i?this.coreRuntime.state.calculateDuration({startDate:e.startDate,endDate:e.endDate,task:i}):null}getClosestCalendarWorkTime(e){this.assertReady();let i=this.coreRuntime.state.getActivity(e.activityId);return i?this.coreRuntime.state.getClosestWorkTime({date:e.date,dir:e.direction,task:i}):null}getProgressEditability(e){this.assertReady();let i=Kr(this.coreRuntime.state,e);if(!i)return null;let n=Jo(this.coreRuntime.state,{calendars:this.coreRuntime.calendars,hoursPerDay:this.coreRuntime.sector.hoursPerDay,dateFormat:this.coreRuntime.sector.dateFormat});return On.canEdit(i,n.hierarchy)}getDateGestureEditability(e,i){this.assertReady();let n=Kr(this.coreRuntime.state,e);return n?Qi(n.p6,this.coreRuntime.state.dataDateSettings(),i,this.coreRuntime.state.isDataDateEnabled()):null}getColumnEditability(e,i){this.assertReady();let n=Kr(this.coreRuntime.state,e),r=Qt(i);if(!n||!r)return null;let a=Jo(this.coreRuntime.state,{calendars:this.coreRuntime.calendars,hoursPerDay:this.coreRuntime.sector.hoursPerDay,dateFormat:this.coreRuntime.sector.dateFormat});return vo(r.canEdit(n,a.hierarchy),n,this._getP6Settings(),i,this.coreRuntime.state.isDataDateEnabled())}createDateGesturePreview(e){this.assertReady();let i=this._scheduleRevision;return wf(this.coreRuntime.state,e,()=>{if(this.assertReady(),this._scheduleRevision!==i)throw new Error("[ScheduleCore] date gesture preview is stale")})}getAllActivitiesView(){return this.assertReady(),xh(this.coreRuntime.state)}getIndentTargetParentIds(e){this.assertReady();let i=No(e.map(n=>String(n)),this.coreRuntime.state);return[...new Set(i.allowedMoves.map(n=>String(n.newParentId)))]}getChildrenView(e){return this.assertReady(),Hh(this.coreRuntime.state,e)}getLinkView(e){return this.assertReady(),Oc(this.coreRuntime.state,e)}getLinksForActivityView(e){this.assertReady();let i=this.coreRuntime.state,n=[],r=new Set,a=o=>{if(r.has(o))return;r.add(o);let s=Oc(i,o);s&&n.push(s)};for(let o of i.getOutgoingLinkIds(e))a(o);for(let o of i.getIncomingLinkIds(e))a(o);return n}getAllLinksView(){return this.assertReady(),Wh(this.coreRuntime.state)}auditEffectiveGraph(){this.assertReady();let e=this.coreRuntime.state,i=e.getAllLinks(),n=Sr(e,i),r=Fa(n),a=0;for(let o of r)o.length>a&&(a=o.length);return{activityCount:e.getAllIds().length,logicalLinkCount:i.length,effectiveEdgeCount:n.length,circularComponents:r,largestComponentSize:a}}getProperty(e,i){this.assertReady();let n=this.coreRuntime.state.getActivity(e);return n?S(n[i]):null}getAllIds(){return this.assertReady(),Mh(this.coreRuntime.state)}forEachActivityId(e){this.assertReady(),Uh(this.coreRuntime.state,e)}getChildrenIds(e){return this.assertReady(),Lc(this.coreRuntime.state,e)}getSelectedActivityIds(){return this.assertReady(),Bh(this.coreRuntime.state)}getActivityClipboardView(){return this.assertReady(),S(this._activityClipboard.value)}getHiddenActivityIds(){return this.assertReady(),this.coreRuntime.state.hiddenIds().map(String)}getVisibleActivityIds(){this.assertReady();let e=new Set(this.coreRuntime.state.hiddenIds().map(String));return this.coreRuntime.state.getAllIds().map(String).filter(i=>!e.has(i))}getActiveFilter(){return this.assertReady(),S(this.coreRuntime.state.getActiveFilter())}getActiveOrder(){return this.assertReady(),S(this.coreRuntime.state.getActiveOrder())}getVisualOrderIds(){return this.assertReady(),[...this.coreRuntime.state.getVisualOrderIds()]}getVisualRows(){return this.assertReady(),[...this.coreRuntime.state.getVisualRows()]}getActiveGroup(){return this.assertReady(),S(this.coreRuntime.state.getGroup())}getWbsDepth(){return this.assertReady(),this.coreRuntime.state.getWbsDepth()}hasChild(e){return this.assertReady(),jh(this.coreRuntime.state,e)}getCalendar(e){this.assertReady();let i=this.coreRuntime.calendars.get(e);return i?S(i):null}getAllCalendars(){return this.assertReady(),Array.from(this.coreRuntime.calendars.values(),e=>S(e))}getBaseCalendars(){return this.assertReady(),this.coreRuntime.baseCalendars.map(e=>S(e))}isCustomIdInUse(e,i=null){return this.assertReady(),this.coreRuntime.customIdTracker.isCustomIdInUse(e,i)}getProjectWorkHours(){return this.assertReady(),Vh(this.coreRuntime.calendars.values())}getModifiedLinks(){return this.assertReady(),this._saveTracker.modifiedLinks(e=>this.coreRuntime.state.getLink(e)).map(S)}getNewLinks(){return this.assertReady(),this._saveTracker.newLinks(e=>this.coreRuntime.state.getLink(e)).map(S)}getModifiedActivities(){return this.assertReady(),this._saveTracker.modifiedActivities(e=>this.coreRuntime.state.getActivity(e)).map(S)}getModifiedActivityFields(){return this.assertReady(),S(this._saveTracker.modifiedActivityFields(e=>this.coreRuntime.state.getActivity(e)))}getNewActivities(){return this.assertReady(),this._saveTracker.newActivities(e=>this.coreRuntime.state.getActivity(e)).map(S)}hasUnsavedChanges(){return this.assertReady(),this._saveTracker.hasUnsavedChanges()}getModifiedDataDateSettings(){return this.assertReady(),this._saveTracker.modifiedP6Settings()}getModifiedDataDateActivities(){return this.assertReady(),this._saveTracker.modifiedP6Activities(e=>this.coreRuntime.state.getActivity(e))}getScheduleRevision(){return this._scheduleRevision}getStateRevision(){return this._stateRevision}capturePersistenceHistoryBoundary(){return this.assertReady(),this._undo.capturePersistenceBoundary()}readPersistenceCheckpoint(){return this.assertReady(),{activities:this.getAllActivitiesView(),links:this.getAllLinksView(),historyBoundary:this.capturePersistenceHistoryBoundary(),...this.coreRuntime.dataDateCapability?.checkpoint(this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.dataDateProjectState()),...this.coreRuntime.dataDateCapability===null?{}:{p6LatestRunLog:S(this.coreRuntime.state.dataDateLatestRunLog())}}}getCanonicalDigest(){this.assertReady();let e=(r,a)=>String(r.id).localeCompare(String(a.id)),i=this._getP6Settings(),n=this._getP6ProjectState();return Ot({sector:this.getSector(),activities:[...this.getAllActivitiesView()].sort(e),links:[...this.getAllLinksView()].sort(e),calendars:[...this.getAllCalendars()].sort(e),baseCalendars:[...this.getBaseCalendars()].sort(e),...i===null?{}:{p6Settings:i,p6ProjectState:n}})}getCanonicalFingerprint(){if(this._canonicalFingerprintCache?.stateRevision===this._stateRevision)return this._canonicalFingerprintCache.value;let e=jc(this.getCanonicalDigest());return this._canonicalFingerprintCache={stateRevision:this._stateRevision,value:e},e}_getP6ScheduleStateFingerprint(){if(this._p6ScheduleStateFingerprintCache?.stateRevision===this._stateRevision)return this._p6ScheduleStateFingerprintCache.value;let e=this._computeP6ScheduleStateFingerprint();return this._p6ScheduleStateFingerprintCache={stateRevision:this._stateRevision,value:e},e}_computeP6ScheduleStateFingerprint(){let e=(r,a)=>String(r.id).localeCompare(String(a.id)),i=[...this.getAllActivitiesView()].sort(e).map(({criticalPath:r,freeSlackHours:a,isCritical:o,...s})=>this.coreRuntime.dataDateCapability?.fingerprintActivity(s)??s);return jc(Ot({sector:this.getSector(),activities:i,links:[...this.getAllLinksView()].sort(e).map(({freeSlackHours:r,isCritical:a,...o})=>o),calendars:[...this.getAllCalendars()].sort(e),baseCalendars:[...this.getBaseCalendars()].sort(e),p6Settings:this._getP6Settings(),p6ProjectState:this._getP6ProjectState()}))}createProjectionChangeSetFrom(e){this.assertReady(),e.assertReady();let i=hd(this._snapshotProjection(),e._snapshotProjection()),n=this.coreRuntime.dataDateCapability??e.coreRuntime.dataDateCapability;return{...i,...n?.reconcile({settings:this.coreRuntime.state.dataDateSettings(),projectState:this.coreRuntime.state.dataDateProjectState()},{settings:e.coreRuntime.state.dataDateSettings(),projectState:e.coreRuntime.state.dataDateProjectState()})}}_snapshotProjection(){return{activities:this.getAllActivitiesView(),links:this.getAllLinksView(),calendars:this.getAllCalendars(),selectedIds:this.getSelectedActivityIds(),hiddenIds:this.getHiddenActivityIds(),order:ei(this.coreRuntime.state)}}getDeletedActivitiesSinceLastSave(){return this.assertReady(),this._saveTracker.deletedActivities(e=>this.coreRuntime.state.getActivity(e)).map(S)}getDeletedLinksSinceLastSave(){return this.assertReady(),this._saveTracker.deletedLinks(e=>this.coreRuntime.state.getLink(e)).map(S)}_enqueue(e){let i=this._opQueue.then(e,e);return this._opQueue=i.then(()=>{},()=>{}),i}_getP6Settings(){return this.assertReady(),S(this.coreRuntime.state.dataDateSettings())}_getP6ProjectState(){return this.assertReady(),S(this.coreRuntime.state.dataDateProjectState())}_getP6LatestRunLog(){return this.assertReady(),S(this.coreRuntime.state.dataDateLatestRunLog())}_resolveP6MustFinishByDefault(e){this.assertReady();let i=HA(this.coreRuntime.state.getAllActivities(),this.coreRuntime.calendars.values());return BA(e,i,this.coreRuntime.state.calendarReader)}_searchP6EndingActivities(e){this.assertReady(),kb(e);let i=e.query.trim().toLowerCase(),n=[],r=0;for(let a of this.coreRuntime.state.getVisualOrderIds()){let o=this._getP6EndingActivityOption(a);if(!(!o||!o.label.toLowerCase().includes(i))&&!(r++<e.offset)){if(n.length===e.limit)return{items:n,hasMore:!0};n.push(o)}}return{items:n,hasMore:!1}}_getP6EndingActivityOption(e){this.assertReady();let i=this.coreRuntime.state.getActivity(e);if(!i)return null;let n=i.customId?.trim()||i.uniqueCorrelativeId||String(i.correlativeId);return{id:i.id,label:`${n} \u2014 ${i.name}`}}_getP6ScheduleReadiness(e){this.assertReady();let i=this.coreRuntime.dataDateCapability;return i===null||!this.coreRuntime.state.isDataDateEnabled()?{ready:!1,code:"capability_not_enabled",count:0,sampleActivityIds:[],missingInputs:[]}:i.scheduleReadiness({settings:this.coreRuntime.state.dataDateSettings(),externalRelationshipIds:this.coreRuntime.externalRelationshipIds,patch:e,activities:this.coreRuntime.state.getAllActivities(),projectState:this.coreRuntime.state.dataDateProjectState()})}_updateP6Settings(e){let i=this._admitScheduleMutation(),n=!1,r=!1,a=this._enqueue(async()=>{try{this.assertReady();let o=this._requireDataDateCapability().prepareSettingsUpdate(this.coreRuntime.state.dataDateSettings(),e),{before:s,after:l}=o,c={kind:Kt.P6_SETTINGS_UPDATE};if(!o.changed)return{changes:{source:c,activities:[],links:[],calendars:[],trackingEvents:[]}};let d=this._requireDataDateCapability(),u=d.prepareLiveDerived(this.coreRuntime.state,s,l,{adoptExpectedFinish:!0,enabled:this.coreRuntime.state.isDataDateEnabled()}),p=[...u.keys()],f=new Map(p.flatMap(h=>{let m=this.coreRuntime.state.getActivity(h);return m===null?[]:[[h,et(m)]]}));this.coreRuntime.state.beginWriteCapture();let y;try{this.coreRuntime.state.setDataDateSettings(l),d.applyLiveDerived(this.coreRuntime.state,u),y={...await J(this.coreRuntime.state,{source:c,beforeSnap:f,touchedIds:p,scheduledIds:[],hoursPerDay:this.coreRuntime.sector.hoursPerDay}),p6Settings:{before:s,after:l}}}catch(h){throw this._rollback(),h}finally{this.coreRuntime.state.endWriteCapture()}return this._undo.record(Qn(Yr(y))),this._saveTracker.recordChanges(y.activities,y.links,h=>this.coreRuntime.state.getActivity(h),h=>this.coreRuntime.state.getLink(h)),this._saveTracker.recordP6Settings(l),r=at(s)&&l.dataDate===null,this._recordDirectScheduleMutation(!r&&this.coreRuntime.state.isDataDateEnabled()),n=!0,{changes:y}}finally{this._settleScheduleMutation(i,n)}});return a.then(()=>{r&&this.recomputeCriticalPath().catch(o=>{this.coreRuntime.reporter.error("[ScheduleCore] Critical Path recompute after Data Date deactivation failed",o)})},()=>{}),a}_updateP6Activity(e,i){let n=this._admitScheduleMutation(),r=!1;return this._enqueue(async()=>{try{this.assertReady();let a=this._requireDataDateCapability(),o=a.requireSettings(this.coreRuntime.state.dataDateSettings()),s=this.coreRuntime.state.getActivity(e);if(s?.p6===void 0)throw new Error(`P6 activity ${e} does not exist`);let l=a.prepareActivityUpdate(s.p6,i,s.constraintType),c=this.coreRuntime.state.calendarReader.getCalendar(s.calendarId),d=at(o,this.coreRuntime.state.isDataDateEnabled())&&c!==null?a.projectLocalActivity(s.p6,l.next,{calendar:c,dataDate:o.dataDate,totalFloatMethod:o.totalFloatMethod}):{p6:l.next};if(!l.changed)return{changes:{source:{kind:Kt.P6_ACTIVITY_UPDATE},activities:[],links:[],calendars:[],trackingEvents:[]}};let u=new Map([[e,et(s)]]);this.coreRuntime.state.beginWriteCapture();let p,f=null,y=null;try{if(this.coreRuntime.state.setActivityField(e,"p6",d.p6),d.startDate!==void 0&&this.coreRuntime.state.setActivityField(e,"startDate",d.startDate),d.endDate!==void 0&&this.coreRuntime.state.setActivityField(e,"endDate",d.endDate),at(o,this.coreRuntime.state.isDataDateEnabled())&&o.scheduleAutomaticallyOnDateChange){f=a.prepareSchedule({state:this.coreRuntime.state,settings:this.coreRuntime.state.dataDateSettings(),projectState:this.coreRuntime.state.dataDateProjectState(),externalRelationshipIds:this.coreRuntime.externalRelationshipIds,patch:void 0,sector:this.coreRuntime.sector});for(let b of f.calculated.activities.keys()){if(u.has(b))continue;let E=this.coreRuntime.state.getActivity(b);E!==null&&u.set(b,et(E))}this._applyPreparedP6Schedule(f)}let m=f===null?[e]:[...f.calculated.activities.keys()];(f!==null||d.startDate!==void 0||d.endDate!==void 0)&&await Ue(this.coreRuntime.state,new Set(m),!1);let C=await J(this.coreRuntime.state,{source:{kind:Kt.P6_ACTIVITY_UPDATE},beforeSnap:u,touchedIds:m,scheduledIds:f===null?[]:m,hoursPerDay:this.coreRuntime.sector.hoursPerDay});p=f===null?C:{...C,...f.changeSetContribution},f!==null&&(y=this._buildP6ScheduleRunLog(f),this.coreRuntime.state.setDataDateLatestRunLog(y))}catch(h){throw this._rollback(),h}finally{this.coreRuntime.state.endWriteCapture()}return this._undo.record(Qn(Yr(p))),this._saveTracker.recordChanges(p.activities,p.links,h=>this.coreRuntime.state.getActivity(h),h=>this.coreRuntime.state.getLink(h)),f!==null&&y!==null&&(this._saveTracker.recordP6Settings(f.settings),this._saveTracker.recordP6ProjectState(f.projectState),this._saveTracker.recordP6LatestRunLog(y)),this._recordDirectScheduleMutation(this.coreRuntime.state.isDataDateEnabled()),r=!0,y!==null&&(this._p6ScheduleStateFingerprintCache={stateRevision:this._stateRevision,value:y.scheduleDigest}),{changes:p}}finally{this._settleScheduleMutation(n,r)}})}_scheduleP6(e){let i=this._admitScheduleMutation(),n=!1;return this._enqueue(async()=>{try{let r=await this._runP6Schedule(e);return n=this._changeSetIsSubstantive(r.changes),r}finally{this._settleScheduleMutation(i,n)}})}async _runP6Schedule(e){if(this.assertReady(),!this.coreRuntime.state.isDataDateEnabled())throw new se("capability_not_enabled","Data Date is disabled for this Schedule");let i=this._requireDataDateCapability().prepareSchedule({state:this.coreRuntime.state,settings:this.coreRuntime.state.dataDateSettings(),projectState:this.coreRuntime.state.dataDateProjectState(),externalRelationshipIds:this.coreRuntime.externalRelationshipIds,patch:e,sector:this.coreRuntime.sector}),{settings:n,projectState:r,calculated:a,changeSetContribution:o}=i,s=new Map;for(let u of a.activities.keys()){let p=this.coreRuntime.state.getActivity(u);p!==null&&s.set(u,et(p))}this.coreRuntime.state.beginWriteCapture();let l,c,d;try{this._applyPreparedP6Schedule(i),await Ue(this.coreRuntime.state,new Set(a.activities.keys()),!1),l={...await J(this.coreRuntime.state,{source:{kind:Kt.P6_SCHEDULE},beforeSnap:s,touchedIds:a.activities.keys(),scheduledIds:[],hoursPerDay:this.coreRuntime.sector.hoursPerDay}),...o},c=[...a.activities.keys()].flatMap(p=>{let f=this.coreRuntime.state.getActivity(p);return f===null?[]:[et(f)]}),d=this._buildP6ScheduleRunLog(i),this.coreRuntime.state.setDataDateLatestRunLog(d)}catch(u){throw this._rollback(),u}finally{this.coreRuntime.state.endWriteCapture()}return this._changeSetIsSubstantive(l)&&(this._undo.record(Qn(Yr(l))),this._saveTracker.recordChanges(l.activities,l.links,u=>this.coreRuntime.state.getActivity(u),u=>this.coreRuntime.state.getLink(u)),this._saveTracker.recordP6Settings(n),this._saveTracker.recordP6ProjectState(r),this._recordDirectScheduleMutation(!0)),this._p6ScheduleStateFingerprintCache={stateRevision:this._stateRevision,value:d.scheduleDigest},this._saveTracker.recordP6LatestRunLog(d),{changes:l,calculatedActivities:c,criticalPath:[...a.criticalPath],warnings:[...a.warnings],log:d}}_applyPreparedP6Schedule(e){this.coreRuntime.state.setDataDateSettings(e.settings),this.coreRuntime.state.setDataDateProjectState(e.projectState),this._requireDataDateCapability().applyScheduleProjection(this.coreRuntime.state,e.projection)}_buildP6ScheduleRunLog(e){return{schemaVersion:1,calculatedAt:this.coreRuntime.clock?.()??null,dataDate:S(e.settings.dataDate),project:{projectId:String(this.coreRuntime.sector.projectId),scheduleId:String(this.coreRuntime.sector.id),scheduleCode:this.coreRuntime.sector.name,scheduleName:this.coreRuntime.sector.name},settings:S(e.settings),statistics:{calculatedActivityCount:e.calculated.activities.size,criticalActivityCount:e.calculated.criticalPath.length,warningCount:e.calculated.warnings.length},warnings:S(e.calculated.warnings),scheduleDigest:this._computeP6ScheduleStateFingerprint()}}_requireDataDateCapability(){let e=this.coreRuntime.dataDateCapability;if(e===null)throw new se("capability_not_enabled","P6 capability is not enabled for this Schedule");return e}_changeSetIsSubstantive(e){return um(e,this._hasDataDateChanges(e))}_hasDataDateChanges(e){return this.coreRuntime.dataDateCapability?.changeSetIsSubstantive(e)??!1}_applyDataDateChangeSet(e,i){this.coreRuntime.dataDateCapability?.applyChangeSet(e,i,{setSettings:n=>{this.coreRuntime.state.setDataDateSettings(n)},setProjectPlannedStart:n=>{this._setP6ProjectPlannedStart(n)}})}async _applyDataDateActivationProjection(e,i){let n=this.coreRuntime.dataDateCapability,r=this.coreRuntime.state.dataDateSettings();if(n===null||e===null||r===null)return[];let a=n.prepareLiveDerived(this.coreRuntime.state,e,r,{enabled:this.coreRuntime.state.isDataDateEnabled()});return a.size===0?[]:this._assembleDataDateActivationProjection(n,a,i)}async _assembleDataDateActivationProjection(e,i,n){let r=[...i.keys()],a=this._snapshotActivities(r);this.coreRuntime.state.beginWriteCapture();try{return e.applyLiveDerived(this.coreRuntime.state,i),(await J(this.coreRuntime.state,{source:{kind:n},beforeSnap:a,touchedIds:r,scheduledIds:[],hoursPerDay:this.coreRuntime.sector.hoursPerDay})).activities}catch(o){throw this._rollback(),o}finally{this.coreRuntime.state.endWriteCapture()}}_snapshotActivities(e){return new Map(e.flatMap(i=>{let n=this.coreRuntime.state.getActivity(i);return n===null?[]:[[i,et(n)]]}))}_setP6ProjectPlannedStart(e){let i=this.coreRuntime.state.dataDateProjectState();i!==null&&this.coreRuntime.state.setDataDateProjectState({...i,plannedStart:e})}_beginScheduleMutation(e){return Mr(e)?this._admitScheduleMutation():!1}_admitScheduleMutation(){return this._pendingScheduleRevision++,this._activeCriticalPath&&(this._activeCriticalPath.cancellation.cancelled=!0),!0}_settleScheduleMutation(e,i){e&&(i||(this._pendingScheduleRevision=Math.max(this._pendingScheduleRevision-1,this._scheduleRevision),this._pendingScheduleRevision===this._scheduleRevision&&(this.isCriticalPathSettled()||this.recomputeCriticalPath().catch(n=>{this.coreRuntime.reporter.error("[ScheduleCore] Critical Path re-arm after a barren mutation failed",n)}))))}async dispatch(e,i={}){let n=this._beginScheduleMutation(e);return this._enqueue(()=>this._dispatchInner(e,i,n))}async dispatchMany(e,i={}){let n=e.some(Mr)?this._admitScheduleMutation():!1;return this._enqueue(()=>this._dispatchManyInner(e,i,n))}async applyActivityBatch(e,i={}){let n=this._beginScheduleMutation(e);return this._enqueue(()=>this._dispatchInner(e,i,n))}planLookaheadConversion(e){return this.assertReady(),ac(e,{adapter:this.coreRuntime.state,sector:this.getSector(),stateRevision:this._stateRevision})}applyLookaheadConversion(e){return this.dispatch({...e,kind:A.ACTIVITY_LOOKAHEAD_CONVERT})}async _dispatchInner(e,i={},n=!1){let r=!1;try{let a=await this._runDispatch(e,i);return r=a.changedState,a.result}finally{this._settleScheduleMutation(n,r)}}async _dispatchManyInner(e,i,n){let r=this._snapshotProjection(),a=this.coreRuntime.state.dataDateSettings(),s=a?.dataDate!=null&&a.scheduleAutomaticallyOnDateChange?UA({state:this.coreRuntime.state,history:this._undo,sector:this.coreRuntime.sector,persistence:this._saveTracker,scheduler:this.coreRuntime.scheduler,activityIds:this.coreRuntime.activityIdGenerator,linkIds:this.coreRuntime.linkIdGenerator,correlatives:this.coreRuntime.uniqueCorrelativeIdGenerator,customIds:this.coreRuntime.customIdTracker}):null,l=S(this._activityClipboard.value),c=S(this._cellClipboard.value),d=this._stateRevision,u=this._scheduleRevision,p=this._criticalPathRevision,f=this._criticalPathUsesDataDate,y=this._canonicalFingerprintCache,h=this._p6ScheduleStateFingerprintCache,m={...i,skipAutoSchedule:!0,skipCriticalPath:!0},g=[],C=[],b=[],E=!1,P=!1,N,I=!1,R=null,k=!1,O=!1;try{for(let F of e){if(F.kind===A.SCHEDULE_AUTO_SCHEDULE){if(F.activityId!==void 0&&!this.coreRuntime.state.activityExists(F.activityId)){g.push({ok:!1,reason:v.ACTIVITY_NOT_FOUND});continue}let $=this.coreRuntime.state.dataDateSettings();if(at($,this.coreRuntime.state.isDataDateEnabled())&&$.scheduleAutomaticallyOnDateChange!==!0){g.push({ok:!1,reason:v.MANUAL_SCHEDULING_ACTIVE});continue}let q=Lb(F);g.push({ok:!0,changes:q}),C.push(q),b.push(F),P=!0,F.activityId===void 0||N!==void 0&&N!==F.activityId?I=!0:N=F.activityId;continue}let U=await this._runDispatch(F,m,!0);g.push(U.result),U.result.ok&&(C.push(U.result.changes),b.push(F)),U.changedState&&(E=!0,P=!0,I=!0)}if(P){let F=I||N===void 0?{kind:A.SCHEDULE_AUTO_SCHEDULE}:{kind:A.SCHEDULE_AUTO_SCHEDULE,activityId:N},U=await this._runDispatch(F,i,!0);U.result.ok&&(R=U.result.changes,C.push(U.result.changes),k=i.skipAutoSchedule!==!0),E||=U.changedState}return E&&this._recordScheduleMutation(R!==null&&i.skipAutoSchedule!==!0&&i.skipCriticalPath!==!0),O=!0,{results:g,autoScheduled:k,changeSet:this._aggregateDispatchManyChangeSets(r,C,b)}}catch(F){throw s!==null&&(s.restore(),this._activityClipboard.value=l,this._cellClipboard.value=c,this._undo=s.history,this._saveTracker=s.persistence,this._stateRevision=d,this._scheduleRevision=u,this._criticalPathRevision=p,this._criticalPathUsesDataDate=f,this._canonicalFingerprintCache=y,this._p6ScheduleStateFingerprintCache=h,E=!1),F}finally{!O&&E&&this._recordScheduleMutation(!1),this._settleScheduleMutation(n,O&&E)}}_aggregateDispatchManyChangeSets(e,i,n){if(i.length===0)return null;let r=hd(this._snapshotProjection(),e),a=i.flatMap(s=>s.effects??[]),o=i.flatMap(s=>s.warnings??[]);return{...r,source:{kind:Kt.DISPATCH_MANY,actions:n},trackingEvents:i.flatMap(s=>s.trackingEvents),...a.length===0?{}:{effects:a},...o.length===0?{}:{warnings:o}}}async _runDispatch(e,i,n=!1){if(this.assertReady(),this._isFork&&Ob(e))return{result:{ok:!1,reason:v.SANDBOX_PERSISTENCE_FORBIDDEN},changedState:!1};let r=Jo(this.coreRuntime.state,{calendars:this.coreRuntime.calendars,hoursPerDay:this.coreRuntime.sector.hoursPerDay,dateFormat:this.coreRuntime.sector.dateFormat}),a=dm(e),o=[this.coreRuntime.activityIdGenerator.snapshot(),this.coreRuntime.linkIdGenerator.snapshot(),this.coreRuntime.uniqueCorrelativeIdGenerator.snapshot()];this.coreRuntime.state.beginWriteCapture(),this.coreRuntime.customIdTracker.beginCustomIdTransaction();let s,l={prepared:null},c=null,d;try{s=await lh(e,i,{adapter:this.coreRuntime.state,ctx:r,scheduler:this.coreRuntime.scheduler,sector:this.coreRuntime.sector,calendars:this.coreRuntime.calendars,activityIdGen:this.coreRuntime.activityIdGenerator,linkIdGen:this.coreRuntime.linkIdGenerator,isActivityIdReserved:y=>this._saveTracker.hasCheckpointActivityId(y),isLinkIdReserved:y=>this._saveTracker.hasCheckpointLinkId(y),uidGen:this.coreRuntime.uniqueCorrelativeIdGenerator,customIdTracker:this.coreRuntime.customIdTracker,reporter:this.coreRuntime.reporter,activityClipboard:this._activityClipboard,cellClipboard:this._cellClipboard,stateRevision:this._stateRevision,defaultBaseCalendarId:this.coreRuntime.baseCalendars.find(y=>y.baseDefault)?.id??null,hasCompleteSchedulingState:this.coreRuntime.state.dataDateSettings()!==null&&this.coreRuntime.state.hasCompleteSchedulingState(),dataDateCapability:this.coreRuntime.dataDateCapability,dataDateSettings:this.coreRuntime.state.dataDateSettings(),dataDateEnabled:this.coreRuntime.state.isDataDateEnabled(),runAutomaticP6Schedule:async()=>(l.prepared=this._requireDataDateCapability().prepareSchedule({state:this.coreRuntime.state,settings:this.coreRuntime.state.dataDateSettings(),projectState:this.coreRuntime.state.dataDateProjectState(),externalRelationshipIds:this.coreRuntime.externalRelationshipIds,patch:void 0,sector:this.coreRuntime.sector,...l.prepared===null?{}:{transactionBaseline:l.prepared}}),this._applyPreparedP6Schedule(l.prepared),[...l.prepared.calculated.activities.keys()]),now:this.coreRuntime.clock?qa(this.coreRuntime.clock()):null});let p=l.prepared;s.ok&&p!==null&&(s={...s,changes:{...s.changes,...p.changeSetContribution}},c=this._buildP6ScheduleRunLog(p),this.coreRuntime.state.setDataDateLatestRunLog(c));let f=this.coreRuntime.state.peekWriteCapture()?.progressFallbackBefore;f&&f.size>0&&(d=new Map(f)),s.ok||this._rollback(o)}catch(p){throw this._rollback(o),p}finally{this.coreRuntime.state.endWriteCapture(),this.coreRuntime.customIdTracker.commitCustomIdTransaction()}if(s.ok&&a===Zn.RECORD&&this._changeSetIsSubstantive(s.changes)){let p=om(this.coreRuntime.state,s.changes),f=d?new Map(Array.from(d.keys(),y=>[y,this.coreRuntime.state.getProgressFallback(y)])):void 0;this._undo.record({...Qn(Yr(s.changes),s.__beforeSnap,s.__beforeLinks,p.afterSnap,p.afterLinks,d,f),...at(this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.isDataDateEnabled())?{beforeLinks:S(s.__beforeLinks),afterLinks:S(p.afterLinks)}:{}},sm(e),Date.now())}if(s.ok)if(a===Zn.CHECKPOINT_ON_SUCCESS){if(e.kind!==A.PERSISTENCE_ACKNOWLEDGE)throw new Error("checkpoint-on-success requires persistence acknowledge");let p=this.coreRuntime.state.getAllActivities(),f=this.coreRuntime.state.getAllLinks(),y=e.checkpoint,h=y?.historyBoundary??this._undo.capturePersistenceBoundary();this._saveTracker.acknowledge(y?.activities??p,y?.links??f,e.activities,e.links,p,f,y?.p6Settings??this.coreRuntime.state.dataDateSettings(),y?.p6ProjectState===void 0?this.coreRuntime.state.dataDateProjectState():y.p6ProjectState,y?.p6LatestRunLog===void 0?this.coreRuntime.state.dataDateLatestRunLog():y.p6LatestRunLog),this._undo.discardThrough(h),this._undo.applyPersistedIdentities(e.activities??[],e.links??[])}else if(e.kind===A.ACTIVITY_LOOKAHEAD_SYNC&&e.acknowledgePersistedLookahead===!0)this._saveTracker.acknowledgePersistedLookahead(s.changes.activities,p=>this.coreRuntime.state.getActivity(p)),e.persistedProgress!==void 0&&this._undo.clear();else{this._saveTracker.recordChanges(s.changes.activities,s.changes.links,f=>this.coreRuntime.state.getActivity(f),f=>this.coreRuntime.state.getLink(f));let p=l.prepared;p!==null&&c!==null&&(this._saveTracker.recordP6Settings(p.settings),this._saveTracker.recordP6ProjectState(p.projectState),this._saveTracker.recordP6LatestRunLog(c))}if(s=this._withReappliedViewState(e,s),!s.ok)return{result:s,changedState:!1};let u=this._changeSetIsSubstantive(s.changes);return u&&this._stateRevision++,c!==null&&(this._p6ScheduleStateFingerprintCache={stateRevision:this._stateRevision,value:c.scheduleDigest}),Mr(e)&&u?(n||this._recordScheduleMutation(i.skipAutoSchedule!==!0&&i.skipCriticalPath!==!0&&Zi(e)),{result:jA(s),changedState:!0}):{result:jA(s),changedState:!1}}recomputeCriticalPath(){let e=this._enqueue(async()=>({job:this._startCriticalPathForCurrentRevision()})).then(({job:i})=>i);return this._criticalPathReady=e,e}isCriticalPathSettled(){return this._criticalPathRevision===this._scheduleRevision&&this._criticalPathUsesDataDate===at(this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.isDataDateEnabled())&&this._pendingScheduleRevision===this._scheduleRevision&&this._activeCriticalPath===null}async whenCriticalPathSettled(){for(;!this.isCriticalPathSettled();)await this.recomputeCriticalPath()}_withReappliedViewState(e,i){if(!i.ok||(e.kind===A.VISIBILITY_SET&&this.coreRuntime.state.setFilterProjection(null),!If(e)))return i;let n=this._reapplyViewState(i.changes);return n===null?i:{...i,changes:n}}_reapplyViewState(e){let i=this._reapplyActiveFilter(e),n=this._emitTouchedBranchOrder(i??e);return this._reapplyActiveOrder(n.changes??i??e,n.touchedParents)??n.changes??i}_emitTouchedBranchOrder(e){let i=this.coreRuntime.state,n=ym(e,a=>i.getParentId(a));if(i.getActiveOrder()!==null)return{changes:null,touchedParents:n};if(n.size===0)return{changes:null,touchedParents:n};let r=Ws(i,n);return r.length===0?{changes:null,touchedParents:n}:{changes:{...e,order:r},touchedParents:n}}_reapplyActiveOrder(e,i){let n=this.coreRuntime.state;if(n.getActiveOrder()===null)return null;if(n.invalidateDerivedOrder(),e.links.length>0||e.calendars.length>0)return{...e,order:ei(n)};let a=new Set(i);for(let s of e.activities){if(s.kind===H.DELETED)return{...e,order:ei(n)};let l=n.getParentId(s.id);a.add(l===null?"0":String(l))}let o=Ws(n,a);return o.length===0?null:{...e,order:o}}_reapplyActiveFilter(e){let i=this.coreRuntime.state,n=i.getActiveFilter();if(n===null)return null;let r=Mi(this.coreRuntime.sector.hoursPerDay),a=i.getFilterProjection(),o=Fb(a,n,r),s=bb(e)?null:Nb(e,i),l,c;if(s===null||!o){let p=Ca({activities:i.getAllActivities(),parentOf:f=>i.getParentId(f),filter:n,context:r,viewAttributeCatalogs:i.getViewAttributeCatalogMap()});i.setFilterProjection(p),c=p.visibleIds,l=i.getAllIds()}else l=Ud(a,s,p=>i.getParentId(p)),c=a.visibleIds;let u=Ni(i,c,l);return u.length===0?null:{...e,viewState:[...e.viewState??[],...u]}}_recordScheduleMutation(e){this._scheduleRevision++,this._pendingScheduleRevision=Math.max(this._pendingScheduleRevision,this._scheduleRevision),this._activeCriticalPath&&(this._activeCriticalPath.cancellation.cancelled=!0),e&&(this._criticalPathUsesDataDate=at(this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.isDataDateEnabled()),this._criticalPathRevision=this._scheduleRevision)}_recordDirectScheduleMutation(e){this.coreRuntime.dataDateCapability!==null&&this._stateRevision++,this._recordScheduleMutation(e)}_startCriticalPathForCurrentRevision(){if(this._status===De.DESTROYED)return Promise.resolve(null);if(at(this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.isDataDateEnabled()))return this._criticalPathUsesDataDate=!0,this._criticalPathRevision=this._scheduleRevision,Promise.resolve(null);let e=this._scheduleRevision;if(this._criticalPathRevision===e&&!this._criticalPathUsesDataDate)return Promise.resolve(null);if(this._activeCriticalPath?.revision===e)return this._activeCriticalPath.promise;this._activeCriticalPath&&(this._activeCriticalPath.cancellation.cancelled=!0);let i={cancelled:!1},n=new Xn(Zo(this.coreRuntime.state.getAllActivities().map(s=>et(s)),this.coreRuntime.state.getAllLinks().map(s=>({...s})),Array.from(this.coreRuntime.calendars.values()),this.coreRuntime.baseCalendars)),r=()=>!at(this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.isDataDateEnabled())&&!i.cancelled&&this._status!==De.DESTROYED&&this._scheduleRevision===e&&this._pendingScheduleRevision===this._scheduleRevision,a=(async()=>{let s=await Ml(n,this.coreRuntime.sector.hoursPerDay,r);return!r()||s===null?null:this._enqueue(async()=>{if(!r())return null;this.coreRuntime.state.beginWriteCapture(),this.coreRuntime.customIdTracker.beginCustomIdTransaction();let l;try{for(let[c,d]of s.activities)wl(this.coreRuntime.state,c,d);for(let[c,d]of s.links)xl(this.coreRuntime.state,c,d);l=await J(this.coreRuntime.state,{source:{kind:Kt.INIT},beforeSnap:new Map,touchedIds:[],scheduledIds:[],hoursPerDay:this.coreRuntime.sector.hoursPerDay}),this._criticalPathUsesDataDate=!1,this._criticalPathRevision=e}catch(c){throw this._rollback(),c}finally{this.coreRuntime.state.endWriteCapture(),this.coreRuntime.customIdTracker.commitCustomIdTransaction()}return{changes:l}})})();this._activeCriticalPath={revision:e,cancellation:i,promise:a};let o=()=>{this._activeCriticalPath?.promise===a&&(this._activeCriticalPath=null)};return a.then(o,o),a}undo(e={}){let i=this._admitScheduleMutation(),n=!1,r=this._enqueue(async()=>{try{return await this._runUndo(e,a=>{n=a})}finally{this._settleScheduleMutation(i,n)}});return r.then(a=>{let o=a!==null&&this._hasDataDateChanges(a)&&at(this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.isDataDateEnabled());a&&!o&&e.skipCriticalPath!==!0&&this.recomputeCriticalPath().catch(s=>{this.coreRuntime.reporter.error("[ScheduleCore] Critical Path recompute after undo failed",s)})},()=>{}),r}async _runUndo(e,i){{if(this.assertReady(),e.expectedUndoDepth!==void 0&&this._undo.undoDepth()!==e.expectedUndoDepth)return null;let n=this._undo.takeUndo();if(!n)return null;let r=S(this.coreRuntime.state.dataDateSettings()),a;try{Mc(this.coreRuntime.state,n,(l,c)=>this._applyDataDateChangeSet(l,c)),a=await this._applyDataDateActivationProjection(r,Kt.UNDO)}catch(l){throw Uc(this.coreRuntime.state,n,(c,d)=>this._applyDataDateChangeSet(c,d)),this._undo.restoreTakenUndo(n),l}this._recordDirectScheduleMutation(this._hasDataDateChanges(n.changeSet)&&at(this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.isDataDateEnabled())),i(!0),wc(n)&&this._resyncCustomIdTrackerFromModel(),this._undo.pushRedo(n),this._undo.resetCoalesce();let o=xc(this.coreRuntime.state,n,Et.BEFORE,l=>this.coreRuntime.dataDateCapability?.historyContribution(n.changeSet,l)??{}),s={...o,activities:[...o.activities,...a]};return this._saveTracker.recordChanges(s.activities,s.links,l=>this.coreRuntime.state.getActivity(l),l=>this.coreRuntime.state.getLink(l)),this._saveTracker.recordP6Settings(this.coreRuntime.state.dataDateSettings()),this._saveTracker.recordP6ProjectState(this.coreRuntime.state.dataDateProjectState()),this._reapplyViewState(s)??s}}redo(e={}){let i=this._admitScheduleMutation(),n=!1,r=this._enqueue(async()=>{try{return await this._runRedo(a=>{n=a})}finally{this._settleScheduleMutation(i,n)}});return r.then(a=>{let o=a!==null&&this._hasDataDateChanges(a)&&at(this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.isDataDateEnabled());a&&!o&&e.skipCriticalPath!==!0&&this.recomputeCriticalPath().catch(s=>{this.coreRuntime.reporter.error("[ScheduleCore] Critical Path recompute after redo failed",s)})},()=>{}),r}async _runRedo(e){this.assertReady();let i=this._undo.takeRedo();if(!i)return null;let n=S(this.coreRuntime.state.dataDateSettings()),r;try{Uc(this.coreRuntime.state,i,(s,l)=>this._applyDataDateChangeSet(s,l)),r=await this._applyDataDateActivationProjection(n,Kt.REDO)}catch(s){throw Mc(this.coreRuntime.state,i,(l,c)=>this._applyDataDateChangeSet(l,c)),this._undo.restoreTakenRedo(i),s}this._recordDirectScheduleMutation(this._hasDataDateChanges(i.changeSet)&&at(this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.isDataDateEnabled())),e(!0),wc(i)&&this._resyncCustomIdTrackerFromModel(),this._undo.pushUndo(i),this._undo.resetCoalesce();let a=xc(this.coreRuntime.state,i,Et.AFTER,s=>this.coreRuntime.dataDateCapability?.historyContribution(i.changeSet,s)??{}),o={...a,activities:[...a.activities,...r]};return this._saveTracker.recordChanges(o.activities,o.links,s=>this.coreRuntime.state.getActivity(s),s=>this.coreRuntime.state.getLink(s)),this._saveTracker.recordP6Settings(this.coreRuntime.state.dataDateSettings()),this._saveTracker.recordP6ProjectState(this.coreRuntime.state.dataDateProjectState()),this._reapplyViewState(o)??o}canUndo(){return this._undo.canUndo()}canRedo(){return this._undo.canRedo()}clearHistory(){this._undo.clear()}undoDepth(){return this._undo.undoDepth()}_resyncCustomIdTrackerFromModel(){this.coreRuntime.customIdTracker.clear(),this.coreRuntime.customIdTracker.populateFromActivities(this.coreRuntime.state.getAllActivities())}destroy(){this._activeCriticalPath&&(this._activeCriticalPath.cancellation.cancelled=!0),this.coreRuntime.calendars.clear(),this._saveTracker.clear(),this._status=De.DESTROYED}_initPromise;_criticalPathReady;_ready;_saveTracker=new es;assertReady(){if(this._status===De.DESTROYED)throw new Error("[ScheduleCore] instance is destroyed");if(this._status===De.POISONED)throw new Error("[ScheduleCore] instance is poisoned (a rollback failed) \u2014 reload from backend")}_rollback(e){try{this.coreRuntime.state.restoreFromCapture(),this.coreRuntime.scheduler.invalidateAllCaches(),this.coreRuntime.customIdTracker.rollbackCustomIdTransaction(),e&&(this.coreRuntime.activityIdGenerator.restore(e[0]),this.coreRuntime.linkIdGenerator.restore(e[1]),this.coreRuntime.uniqueCorrelativeIdGenerator.restore(e[2]))}catch(i){throw this._status=De.POISONED,this.coreRuntime.reporter.error("[ScheduleCore] rollback failed \u2014 core poisoned",i),i}}};function jA(t){let{__beforeSnap:e,__beforeLinks:i,...n}=t;return n}async function WA(t){let e=new sr(t);return await e.ready,e}var VA=(t=[])=>(t??[]).filter(e=>!e.proplannerId);var na=class extends Error{constructor(i){super(i);this.code=i;this.name="LookaheadActualTransitionError"}code},wb=/^(\d{4})-(\d{2})-(\d{2})$/;function ks(t){gd(t.timeSource)||Te("INVALID_ACTUAL_TIME_SOURCE");let e=xb(t.selectedDay),[i,n,r]=e,a=new Date(t.timeSource);return a.setUTCFullYear(i,n-1,r),Hb(a,e)||Te("INVALID_ACTUAL_DAY"),a}function xb(t){let e=wb.exec(t);return e||Te("INVALID_ACTUAL_DAY"),[Number(e[1]),Number(e[2]),Number(e[3])]}function Ad(t){if(Ub(t),t.dataDate===null)return{start:null,finish:null,uncomplete:null};let e=t.activity.executionStatus===V.NOT_STARTED&&t.nextProgress>0?{required:!0,suggestedAt:new Date(t.dataDate)}:null,i=t.activity.executionStatus!==V.COMPLETED&&t.nextProgress===100?{optional:!0,suggestedAt:t.displayedFinish?new Date(t.displayedFinish):null}:null,n=t.activity.executionStatus===V.COMPLETED&&t.activity.actualFinish!==null&&t.nextProgress<100?{required:!0,removes:new Date(t.activity.actualFinish)}:null;return{start:e,finish:i,uncomplete:n}}function KA(t){let e=Ad(t);t.dataDate===null&&Bb(t.intent)&&Te("DATA_DATE_INACTIVE"),e.start&&t.intent?.actualStart===void 0&&Te("ACTUAL_START_REQUIRED"),t.intent?.actualFinish instanceof Date&&t.nextProgress!==100&&Te("ACTUAL_FINISH_REQUIRES_100"),e.uncomplete&&t.intent?.actualFinish!==null&&Te("ACTUAL_FINISH_REMOVAL_REQUIRED"),!e.uncomplete&&t.intent?.actualFinish===null&&Te("ACTUAL_FINISH_REMOVAL_NOT_APPLICABLE");let i=ds(t.activity,t.intent??{});return t.dataDate===null?i:Mb(t.activity,i,t.nextProgress)}function Mb(t,e,i){if((e.executionStatus??t.executionStatus)!==V.IN_PROGRESS)return e;switch(t.percentCompleteType){case It.PHYSICAL:return{...e,physicalPercentComplete:i};case It.DURATION:return{...e,remainingDurationHours:t.originalDurationHours*(1-i/100)};default:return e}}function Ub(t){(!Number.isFinite(t.nextProgress)||t.nextProgress<0||t.nextProgress>100)&&Te("INVALID_PROGRESS"),t.dataDate!==null&&!gd(t.dataDate)&&Te("INVALID_DATA_DATE"),t.displayedFinish!=null&&!gd(t.displayedFinish)&&Te("INVALID_DISPLAYED_FINISH")}function gd(t){return t instanceof Date&&Number.isFinite(t.getTime())}function Hb(t,[e,i,n]){return t.getUTCFullYear()===e&&t.getUTCMonth()===i-1&&t.getUTCDate()===n}function Bb(t){return t?.actualStart!==void 0||t?.actualFinish!==void 0}function Te(t){throw new na(t)}function YA(t){return ks({selectedDay:t.selectedDay,timeSource:t.expectedFinish??t.displayedFinish})}function GA(t){let e=zo([...t.calendars],void 0,t.baseCalendars===void 0?void 0:[...t.baseCalendars]),{reader:i}=jo(Hc(e.calendars,e.baseCalendars));return{derive({previous:n,next:r,calendarId:a,dataDate:o,totalFloatMethod:s}){if(!He(r))return null;let l=a!==null&&e.knownCalendarIds.has(a)?a:e.defaultCalendarId,c=i.getCalendar(l);if(!c)return null;let{p6:d}=ys(n,r,{calendar:c,dataDate:o,...s===void 0?{}:{totalFloatMethod:s}});return{actualDurationHours:d.actualDurationHours,atCompletionDurationHours:d.atCompletionDurationHours,durationPercentComplete:d.durationPercentComplete,unitsPercentComplete:d.unitsPercentComplete,schedulePercentComplete:d.schedulePercentComplete}}}}var pt=t=>{let e=t.lifecycle??(t.classification==="f9_output"?"f9":"explicit_edit");return{...t,lifecycle:e,changesWhen:jb(e),f9Behavior:Wb(e),persistence:"Persist exact null/zero/signed scalar or exact UTC instant; save/reload is lossless.",nullAndZero:t.typeAndUnit.includes("UTC")?"null means absent; midnight is a real exact UTC instant.":t.typeAndUnit.includes("boolean")?"false is a real value and is never normalized to null.":"null means unavailable when allowed; numeric zero and signed values are preserved.",calendarRule:t.typeAndUnit.includes("working hours")||t.classification==="derived"?"Use the activity calendar, including shifts and exceptions; never local wall-clock subtraction.":"No calendar arithmetic; date values cross boundaries as exact UTC components.",status:t.status??(e==="open"?"PARTIAL":"VERIFIED"),edgeCases:t.edgeCases??{}}};function jb(t){return t==="f9"?"Changes only during explicit P6 F9 and its atomic Undo/Redo replay.":t==="dependency_change"?"Changes when Data Date moves from one valid instant to another in the same canonical mutation, without running F9.":t==="open"?"Formula is known; immediate pre-F9 refresh timing remains open pending a discriminant P6 observation.":"Changes on an authorized import or explicit user edit; open/save/reload do not calculate it."}function Wb(t){return t==="explicit_edit"?"Preserved as scheduling reality/input unless the documented P6 algorithm consumes the input without rewriting it.":t==="open"?"Recalculated by F9; whether dependency edits refresh it earlier is not yet certified.":"Recalculated by Schedule Core; no frontend or backend formula is authoritative."}var ki="src/p6/api.test.ts; src/p6/testing/p6-data-date/property-coverage.test.ts",$e="src/p6/testing/p6-data-date/fixtures/obdd-math/obdd-math-before-f9.xer",lr="src/p6/testing/p6-floats/obdd-floats.schedule.test.ts",cr="src/p6/testing/p6-floats/fixtures/obdd-floats-smallest.xer",qe="src/p6/derived.test.ts",Li="src/p6/testing/p6-derived/fixtures/obdd-derived-edges.p6.json",Vb={notStarted:"0 hours.",inProgress:"Working time from Actual Start to Data Date, excluding a valid Suspend/Resume interval.",completed:"Working time from Actual Start to Actual Finish.",zeroDuration:"0 hours.",zeroDenominator:"Not applicable; no division.",suspendResume:"Subtract only the overlap of Suspend..Resume with the measured actual interval.",calendarException:"Exception time contributes only when the activity calendar marks it workable.",signedValues:"Invalid negative duration inputs are rejected; P6 clamps a reversed Actual Start/end interval to 0 hours.",nullValue:"Missing required actual endpoint yields 0 under the P6 status contract.",milestone:"0 hours when the actual endpoints coincide."},Kb={notStarted:"Working duration Planned Start..Planned Finish.",inProgress:"Working duration Actual Start..Remaining Early Finish, excluding Suspend/Resume.",completed:"Working duration Actual Start..Actual Finish.",zeroDuration:"0 hours.",zeroDenominator:"Not applicable; no division.",suspendResume:"Subtract the suspended overlap from the selected endpoint interval.",calendarException:"Measured with shifts and exceptions from the activity calendar.",signedValues:"P6 clamps a chronologically reversed Actual Start/selected finish interval to 0 hours.",nullValue:"Missing required endpoints yields 0 for the matching status branch.",milestone:"0 hours for coincident endpoints."},Yb={notStarted:"(Original - Remaining) / Original \xD7 100, normally 0.",inProgress:"(Original - Remaining) / Original \xD7 100, clamped to 0..100.",completed:"Same formula; P6 completed input normally has zero Remaining.",zeroDuration:"0%, including a zero-duration milestone.",zeroDenominator:"0%, never NaN or Infinity.",suspendResume:"No direct effect; only duration inputs affect the percentage.",calendarException:"No direct effect after durations are canonical working hours.",signedValues:"Negative/non-finite duration inputs are rejected.",nullValue:"Duration inputs are required canonical scalars, not nullable.",milestone:"0% for zero Original Duration under the certified P6 golden."},Gb={notStarted:"Actual units are normally zero; result is 0%.",inProgress:"100 \xD7 (actual labor + actual nonlabor) / (actual + remaining units).",completed:"100% when remaining units are zero and actual units are positive.",zeroDuration:"Independent of duration; units still control the result.",zeroDenominator:"0%, never NaN or Infinity.",suspendResume:"No direct effect.",calendarException:"No direct effect on already canonical assignment scalars.",signedValues:"Finite negative unit scalars are preserved; P6 can produce percentages below 0% or above 100%. Non-finite inputs are rejected.",nullValue:"Canonical TASK unit scalars are required; missing assignment totals hydrate as zero.",milestone:"0% with no units; otherwise the same units formula."},$b={notStarted:"0% when Data Date is at or before primary baseline start.",inProgress:"Baseline working time elapsed through Data Date divided by total baseline working time.",completed:"100% when Data Date is at or after primary baseline finish.",zeroDuration:"0% before the coincident endpoint and 100% at or after it.",zeroDenominator:"0% when signed baseline working duration is non-positive.",suspendResume:"No direct effect; baseline dates and Data Date are authoritative.",calendarException:"Elapsed and total durations use the activity calendar exception set.",signedValues:"Result is clamped to 0..100; P6 UI does not allow an inverted assigned baseline.",nullValue:"When neither primary baseline endpoint is assigned, P6 uses Current Project planned dates; one missing endpoint or missing effective planned dates returns null.",milestone:"Boundary result is determined by Data Date relative to the coincident baseline endpoints."},qb={notStarted:"Calculated from remaining early and late endpoints.",inProgress:"Same remaining endpoint formula after the selected OOS policy forward/backward passes.",completed:"null when no remaining endpoints exist.",zeroDuration:"Can be positive, zero or negative; milestone duration does not erase float.",zeroDenominator:"Not applicable; no division.",suspendResume:"Affects scheduled endpoints before float is measured.",calendarException:"Start and finish float use signed working time on the activity calendar.",signedValues:"Negative float is preserved exactly; -0 normalizes to numeric 0.",nullValue:"null when required start/finish endpoints for the selected method are absent.",milestone:"Measured between coincident remaining endpoint and its late endpoint."},_e=(t,e)=>`Input: canonical activities, relationships, Data Date and settings; phase: ${t}; policy: retained logic/progress override/actual dates relation classification; constraint: primary, secondary and project bounds; calendar: activity and configured lag calendars with exceptions; result: ${e}.`,$A=Object.freeze([pt({uiName:"Actual Start",property:"actualStart",xerField:"TASK.act_start_date",xmlField:"Activity.ActualStart",classification:"reality",typeAndUnit:"Date | null, exact UTC instant",editability:"controlled",authority:"Imported/user-confirmed actual reality",phase:"input",algorithm:"Input only; status validation may infer status but F9 never moves it.",interactions:"Activity Status, Actual Finish, Actual Duration and OOS policy.",unitTest:ki,p6Golden:$e}),pt({uiName:"Actual Finish",property:"actualFinish",xerField:"TASK.act_end_date",xmlField:"Activity.ActualFinish",classification:"reality",typeAndUnit:"Date | null, exact UTC instant",editability:"controlled",authority:"Imported/user-confirmed actual reality",phase:"input",algorithm:"Input only; completed status requires a consistent actual endpoint; F9 never moves it.",interactions:"Activity Status, Actual Start and Actual Duration.",unitTest:ki,p6Golden:$e}),pt({uiName:"Planned Start",property:"plannedStart",xerField:"TASK.target_start_date",xmlField:"Activity.PlannedStart",classification:"editable_input",typeAndUnit:"Date | null, exact UTC instant",editability:"editable",authority:"Imported/user input",phase:"input",algorithm:"Initial planning input; never replaced by projected Start.",interactions:"At Completion Duration and not-started fallback.",unitTest:ki,p6Golden:$e}),pt({uiName:"Planned Finish",property:"plannedFinish",xerField:"TASK.target_end_date",xmlField:"Activity.PlannedFinish",classification:"editable_input",typeAndUnit:"Date | null, exact UTC instant",editability:"editable",authority:"Imported/user input",phase:"input",algorithm:"Initial planning input; never replaced by projected Finish.",interactions:"At Completion Duration and not-started fallback.",unitTest:ki,p6Golden:$e}),pt({uiName:"Remaining Duration",property:"remainingDurationHours",xerField:"TASK.remain_drtn_hr_cnt",xmlField:"Activity.RemainingDuration",classification:"editable_input",typeAndUnit:"number, working hours",editability:"editable",authority:"Imported/user input consumed by explicit F9",phase:"input",algorithm:"Forward pass consumes/preserves remaining working hours according to status and OOS policy.",interactions:"Remaining Early Finish, Actual/At Completion Duration and Duration %.",unitTest:ki,p6Golden:$e}),pt({uiName:"Activity Status",property:"executionStatus",xerField:"TASK.status_code",xmlField:"Activity.Status",classification:"reality",typeAndUnit:"not_started | in_progress | completed",editability:"controlled",authority:"Actual-date/status invariant",phase:"input",algorithm:"Validated before F9; scheduling never invents actual dates.",interactions:"Actual endpoints, Remaining Duration and all derived duration fields.",unitTest:"src/p6/status.test.ts",p6Golden:$e}),pt({uiName:"Expected Finish",property:"expectedFinish",xerField:"TASK.expect_end_date",xmlField:"Activity.ExpectedFinish",classification:"editable_input",typeAndUnit:"Date | null, exact UTC instant",editability:"editable",authority:"Imported/user input plus useExpectedFinishDates setting",phase:"input",algorithm:"Forward bound only when the project setting enables Expected Finish dates.",interactions:"Use Expected Finish Dates and Remaining Early Finish.",unitTest:"src/p6/testing/p6-native/obdd-native.schedule.test.ts",p6Golden:"src/p6/testing/p6-native/fixtures/obdd-native-step24-expected-finish-calendar-exception.xer"}),pt({uiName:"Suspend Date",property:"suspendDate",xerField:"TASK.suspend_date",xmlField:"Activity.SuspendDate",classification:"reality",typeAndUnit:"Date | null, exact UTC instant",editability:"editable",authority:"Imported/user actual reality",phase:"input",algorithm:"Preserved; duration derivation subtracts the valid Suspend..Resume overlap.",interactions:"Resume Date, Actual Duration and At Completion Duration.",unitTest:qe,p6Golden:Li}),pt({uiName:"Resume Date",property:"resumeDate",xerField:"TASK.resume_date",xmlField:"Activity.ResumeDate",classification:"reality",typeAndUnit:"Date | null, exact UTC instant",editability:"editable",authority:"Imported/user actual reality",phase:"input",algorithm:"Preserved; duration derivation subtracts the valid Suspend..Resume overlap.",interactions:"Suspend Date, Actual Duration and At Completion Duration.",unitTest:qe,p6Golden:Li}),pt({uiName:"Secondary Constraint",property:"secondaryConstraintType",xerField:"TASK.cstr_type2",xmlField:"Activity.SecondaryConstraintType",classification:"editable_input",typeAndUnit:"canonical P6 constraint enum | null",editability:"editable",authority:"Imported/user input",phase:"input",algorithm:"Constraint classifier applies the declared start/finish lower/upper bound during forward/backward passes.",interactions:"Secondary Constraint Date, primary constraint and calendars.",unitTest:ki,p6Golden:"src/p6/testing/p6-native/fixtures/obdd-native-step18-secondary-finish-on-or-after.xer"}),pt({uiName:"Secondary Constraint Date",property:"secondaryConstraintDate",xerField:"TASK.cstr_date2",xmlField:"Activity.SecondaryConstraintDate",classification:"editable_input",typeAndUnit:"Date | null, exact UTC instant",editability:"editable",authority:"Imported/user input",phase:"input",algorithm:"Provides the exact bound for Secondary Constraint Type; ignored when type is null.",interactions:"Secondary Constraint Type and early/late passes.",unitTest:ki,p6Golden:"src/p6/testing/p6-native/fixtures/obdd-native-step18-secondary-finish-on-or-after.xer"}),pt({uiName:"Percent Complete Type",property:"percentCompleteType",xerField:"TASK.complete_pct_type",xmlField:"Activity.PercentCompleteType",classification:"editable_input",typeAndUnit:"duration | units | physical",editability:"editable",authority:"Imported/user input",phase:"input",algorithm:"Selects displayed progress authority; individual derived percentages remain independently calculated.",interactions:"Physical %, Duration %, Units % and progress projection.",unitTest:qe,p6Golden:Li}),pt({uiName:"Physical % Complete",property:"physicalPercentComplete",xerField:"TASK.phys_complete_pct",xmlField:"Activity.PhysicalPercentComplete",classification:"editable_input",typeAndUnit:"number, percentage points 0..100",editability:"editable",authority:"Imported/user physical-progress input",phase:"input",algorithm:"Preserved by F9 and used only when Percent Complete Type is physical.",interactions:"Percent Complete Type and visible progress.",unitTest:ki,p6Golden:$e}),pt({uiName:"Actual Duration",property:"actualDurationHours",xerField:"TASK.act_drtn_hr_cnt or actual endpoints",xmlField:"Activity.ActualDuration",classification:"derived",lifecycle:"open",typeAndUnit:"number, working hours",editability:"readonly",authority:"Schedule Core deriveP6ActivityFields",phase:"derived",algorithm:"Status-specific non-negative working duration using actual endpoints/Data Date minus suspended overlap; reversed endpoints clamp to zero.",interactions:"Status, Actual Start/Finish, Data Date, Suspend/Resume and activity calendar.",unitTest:qe,p6Golden:Li,status:"PARTIAL",edgeCases:Vb}),pt({uiName:"At Completion Duration",property:"atCompletionDurationHours",xerField:"TASK.total_drtn_hr_cnt or planned/actual/remaining endpoints",xmlField:"Activity.AtCompletionDuration",classification:"derived",lifecycle:"open",typeAndUnit:"number, working hours",editability:"readonly",authority:"Schedule Core deriveP6ActivityFields",phase:"derived",algorithm:"Not started: planned interval; in progress: Actual Start..Remaining Early Finish; completed: actual interval.",interactions:"Status, planned/actual/remaining endpoints, Suspend/Resume and calendar.",unitTest:qe,p6Golden:Li,status:"PARTIAL",edgeCases:Kb}),pt({uiName:"Duration % Complete",property:"durationPercentComplete",xerField:"TASK.target_drtn_hr_cnt + remain_drtn_hr_cnt",xmlField:"Activity.DurationPercentComplete",classification:"derived",lifecycle:"open",typeAndUnit:"number, percentage points",editability:"readonly",authority:"Schedule Core deriveP6ActivityFields",phase:"derived",algorithm:"100 \xD7 (Original Duration - Remaining Duration) / Original Duration, clamped to 0..100.",interactions:"Original and Remaining Duration; independent of Percent Complete Type selection.",unitTest:qe,p6Golden:Li,status:"PARTIAL",edgeCases:Yb}),pt({uiName:"Units % Complete",property:"unitsPercentComplete",xerField:"TASKRSRC actual and remaining unit scalars",xmlField:"Activity.ResourceAssignment.ActualUnits/RemainingUnits",classification:"derived",lifecycle:"open",typeAndUnit:"number, percentage points",editability:"readonly",authority:"Schedule Core deriveP6ActivityFields over canonical TASK scalars",phase:"derived",algorithm:"100 \xD7 total actual labor/nonlabor units / (actual + remaining units); zero denominator returns 0; finite signed values are not clamped.",interactions:"TASK unit scalars and Percent Complete Type; no full assignment subsystem.",unitTest:qe,p6Golden:Li,status:"PARTIAL",edgeCases:Gb}),pt({uiName:"Schedule % Complete",property:"schedulePercentComplete",xerField:"PROJECT.last_recalc_date + assigned baseline TASK dates, otherwise current TASK planned dates",xmlField:"Activity.SchedulePercentComplete",classification:"derived",lifecycle:"dependency_change",typeAndUnit:"number | null, percentage points",editability:"readonly",authority:"Schedule Core deriveP6ActivityFields",phase:"derived",algorithm:"Working effective-baseline time elapsed at Data Date / total working time, clamped to 0..100; a coincident milestone is 100% at its timestamp.",interactions:"Data Date, assigned baseline/current planned dates and activity calendar.",unitTest:qe,p6Golden:Li,status:"VERIFIED",edgeCases:$b}),pt({uiName:"Remaining Float",property:"remainingFloatHours",xerField:"TASK remaining early/late endpoints",xmlField:"Activity.RemainingFloat",classification:"derived",lifecycle:"f9",typeAndUnit:"number | null, signed working hours",editability:"readonly",authority:"Schedule Core deriveP6ActivityFields",phase:"derived",algorithm:"Start Float, Finish Float or their minimum as selected, using signed working duration.",interactions:"Total Float method, remaining early/late endpoints and activity calendar.",unitTest:qe,p6Golden:"src/p6/testing/p6-float-method/fixtures/obdd-float-method-smallest.xer",status:"VERIFIED",edgeCases:qb}),pt({uiName:"Remaining Early Start",property:"remainingEarlyStart",xerField:"TASK.restart_date",xmlField:"Activity.RemainingEarlyStart",classification:"f9_output",typeAndUnit:"Date | null, exact UTC instant",editability:"readonly",authority:"Schedule Core P6 forward pass",phase:"forward",algorithm:_e("forward","earliest start of remaining work"),interactions:"Data Date, predecessors, OOS policy, constraints and calendar.",unitTest:"src/p6/testing/p6-data-date/obdd-math.schedule.test.ts",p6Golden:$e,status:"VERIFIED"}),pt({uiName:"Remaining Early Finish",property:"remainingEarlyFinish",xerField:"TASK.reend_date",xmlField:"Activity.RemainingEarlyFinish",classification:"f9_output",typeAndUnit:"Date | null, exact UTC instant",editability:"readonly",authority:"Schedule Core P6 forward pass",phase:"forward",algorithm:_e("forward","calendar finish after remaining duration"),interactions:"Remaining Early Start, Remaining Duration, OOS policy and calendar.",unitTest:"src/p6/testing/p6-data-date/obdd-math.schedule.test.ts",p6Golden:$e,status:"VERIFIED"}),pt({uiName:"Remaining Late Start",property:"remainingLateStart",xerField:"TASK.rem_late_start_date",xmlField:"Activity.RemainingLateStart",classification:"f9_output",typeAndUnit:"Date | null, exact UTC instant",editability:"readonly",authority:"Schedule Core P6 backward pass",phase:"backward",algorithm:_e("backward","latest remaining start without violating successor/project bounds"),interactions:"Remaining Late Finish, constraints, successors and calendar.",unitTest:lr,p6Golden:cr,status:"VERIFIED"}),pt({uiName:"Remaining Late Finish",property:"remainingLateFinish",xerField:"TASK.rem_late_end_date",xmlField:"Activity.RemainingLateFinish",classification:"f9_output",typeAndUnit:"Date | null, exact UTC instant",editability:"readonly",authority:"Schedule Core P6 backward pass",phase:"backward",algorithm:_e("backward","latest remaining finish without violating successor/project bounds"),interactions:"Successors, Must Finish By, constraints and calendar.",unitTest:lr,p6Golden:cr,status:"VERIFIED"}),pt({uiName:"Early Start",property:"earlyStart",xerField:"TASK.early_start_date",xmlField:"Activity.EarlyStart",classification:"f9_output",typeAndUnit:"Date | null, exact UTC instant",editability:"readonly",authority:"Schedule Core P6 forward pass",phase:"forward",algorithm:_e("forward","projected early start respecting immutable actuals"),interactions:"Actual Start, Remaining Early Start and OOS policy.",unitTest:lr,p6Golden:cr,status:"VERIFIED"}),pt({uiName:"Early Finish",property:"earlyFinish",xerField:"TASK.early_end_date",xmlField:"Activity.EarlyFinish",classification:"f9_output",typeAndUnit:"Date | null, exact UTC instant",editability:"readonly",authority:"Schedule Core P6 forward pass",phase:"forward",algorithm:_e("forward","projected early finish respecting immutable actuals"),interactions:"Actual Finish, Remaining Early Finish and OOS policy.",unitTest:lr,p6Golden:cr,status:"VERIFIED"}),pt({uiName:"Late Start",property:"lateStart",xerField:"TASK.late_start_date",xmlField:"Activity.LateStart",classification:"f9_output",typeAndUnit:"Date | null, exact UTC instant",editability:"readonly",authority:"Schedule Core P6 backward pass",phase:"backward",algorithm:_e("backward","projected late start"),interactions:"Remaining Late Start, constraints, float and immutable actuals.",unitTest:lr,p6Golden:cr,status:"VERIFIED"}),pt({uiName:"Late Finish",property:"lateFinish",xerField:"TASK.late_end_date",xmlField:"Activity.LateFinish",classification:"f9_output",typeAndUnit:"Date | null, exact UTC instant",editability:"readonly",authority:"Schedule Core P6 backward pass",phase:"backward",algorithm:_e("backward","projected late finish"),interactions:"Remaining Late Finish, Must Finish By, constraints and float.",unitTest:lr,p6Golden:cr,status:"VERIFIED"}),pt({uiName:"Float Path",property:"floatPath",xerField:"TASK.float_path",xmlField:"Activity.FloatPath",classification:"f9_output",typeAndUnit:"number | null, path number",editability:"readonly",authority:"Schedule Core P6 float-path pass",phase:"float_path",algorithm:_e("float_path","selected multiple-float-path identifier"),interactions:"Ending Activity, Total/Free Float selection, enabled and path limit settings.",unitTest:"src/p6/paths.test.ts",p6Golden:"src/p6/testing/p6-floats/fixtures/obdd-floats-multiple-paths-limit-2.xer",status:"VERIFIED"}),pt({uiName:"Float Path Order",property:"floatPathOrder",xerField:"TASK.float_path_order",xmlField:"Activity.FloatPathOrder",classification:"f9_output",typeAndUnit:"number | null, ordinal",editability:"readonly",authority:"Schedule Core P6 float-path pass",phase:"float_path",algorithm:_e("float_path","stable order inside the selected float path"),interactions:"Float Path, relationship topology and deterministic tie-breaking.",unitTest:"src/p6/paths.test.ts",p6Golden:"src/p6/testing/p6-floats/fixtures/obdd-floats-multiple-paths-limit-2.xer",status:"VERIFIED"}),pt({uiName:"Longest Path",property:"longestPath",xerField:"TASK.driving_path_flag",xmlField:"Activity.IsLongestPath",classification:"f9_output",typeAndUnit:"boolean",editability:"readonly",authority:"Schedule Core P6 float-path pass",phase:"float_path",algorithm:_e("float_path","true for activities on the selected longest path"),interactions:"Critical Activity Method, Ending Activity and deterministic path topology.",unitTest:"src/p6/paths.test.ts",p6Golden:"src/p6/testing/p6-floats/fixtures/obdd-floats-longest-path.xer",status:"VERIFIED"})]);var qA={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 zA=8;var JA={CHILD:"child",CHILD_CONFIRMED:"child-confirmed",LINE:"line",ROOT:"root"};return iI(zb);})();
|
|
1
|
+
"use strict";var ScheduleCore=(()=>{var Os=Object.defineProperty;var QA=Object.getOwnPropertyDescriptor;var tI=Object.getOwnPropertyNames;var eI=Object.prototype.hasOwnProperty;var nI=(t,e)=>{for(var n in e)Os(t,n,{get:e[n],enumerable:!0})},iI=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of tI(e))!eI.call(t,r)&&r!==n&&Os(t,r,{get:()=>e[r],enumerable:!(i=QA(e,r))||i.enumerable});return t};var rI=t=>iI(Os({},"__esModule",{value:!0}),t);var Xb={};nI(Xb,{ACTIVITY_BATCH_ACTION_KIND:()=>Xe,ACTIVITY_BATCH_MODE:()=>Lt,ACTIVITY_DATE_EDGE:()=>ur,ACTIVITY_FIELD:()=>Ft,ACTIVITY_PONDERATOR_CRITERION:()=>ct,ACTIVITY_PROGRESS_ORIGIN:()=>eo,ACTIVITY_TYPE:()=>L,CALENDAR_UNIT:()=>dt,CHANGE_SET_SOURCE_KIND:()=>Kt,COLUMN:()=>T,COMPLETED_PROGRESS:()=>gt,CONFIRMATION_KIND:()=>Ut,CONSTRAINT_TYPE:()=>_,CONSTRAINT_TYPE_TO_LABEL:()=>JA,CONSTRAINT_WARNING_KIND:()=>Gn,CREATION_KIND:()=>ZA,DATA_DATE_PROPERTY_CONTRACT:()=>zA,DATE_GESTURE_KIND:()=>ee,DEFAULT_HOURS_PER_DAY:()=>XA,DISPATCH_ACTION_KIND:()=>A,DISPATCH_ACTION_KINDS:()=>Cd,DISPATCH_LINK_OPERATION_KIND:()=>ft,DISPATCH_TRACK_EVENT:()=>fe,DataDateCapabilityError:()=>se,EDIT_ALERT_KEY:()=>Ja,EDIT_DENIAL_REASON:()=>Ae,ENTITY_CHANGE_KIND:()=>H,FILTER_FIELD:()=>Z,FILTER_LOGIC:()=>di,FILTER_OPERATOR:()=>K,FILTER_REJECTION_REASON:()=>mt,FILTER_VALUE_KIND:()=>x,FLAT_WBS_DEPTH:()=>ma,GROUP_ID_PREFIX:()=>ws,GROUP_ID_SEPARATOR:()=>ui,LINK_BATCH_OPERATION_KIND:()=>ci,LINK_CODE:()=>xt,LINK_CODE_TO_TYPE:()=>Bn,LINK_REJECTION_REASON:()=>ht,LINK_RELATIONSHIP:()=>Nn,LINK_TYPE:()=>M,LINK_TYPE_CODE:()=>Ha,LookaheadActualTransitionError:()=>ia,MINIMUM_GROUP_DEPTH:()=>ha,MINIMUM_GROUP_LEVEL:()=>tn,NEW_ACTIVITY_DEFAULTS:()=>To,NOT_STARTED_PROGRESS:()=>Bt,ORDER_DIRECTION:()=>Vt,ORDER_MODE:()=>we,REJECTION_REASON:()=>v,ROOT_PARENT_ID:()=>Y,SCHEDULE_CORE_STATUS:()=>De,SCHEDULE_EFFECT_KIND:()=>no,SIR_AUTO_REJECT_REASON:()=>io,STATUS:()=>Wt,STATUS_CRITERIA:()=>ze,ScheduleCore:()=>sr,UNASSIGNED_GROUP_LABEL:()=>ya,UNASSIGNED_VALUE_ID:()=>Mn,VIEW_ATTRIBUTE_KIND:()=>wn,VISUAL_ROW_KIND:()=>pi,WORK_TIME_DIRECTION:()=>z,allowedSecondaryConstraintTypes:()=>ll,appendGroupRowId:()=>Aa,buildGroupRowId:()=>ga,checkNoUpdatedLinks:()=>Dm,computeExpectedProgress:()=>pl,createCalendarReader:()=>qA,createLookaheadDerivedFields:()=>$A,createOutbuildDataDateScheduleSettings:()=>Ps,createSchedule:()=>VA,expectedProgressFromBaseline:()=>Fi,formatUtcAsP6WallDate:()=>vA,getActiveBaseline:()=>Tt,getUnsavedActivities:()=>KA,isRootParent:()=>W,isViewAttributeCriterion:()=>xn,isViewAttributeOrderRule:()=>fi,mapDataDateScheduleOptions:()=>TA,normalizeParentKey:()=>re,parseFromBackend:()=>ns,parseP6DayAsCalendarStart:()=>_s,parseP6WallDateAsUtc:()=>Ts,planLookaheadProgressActuals:()=>Id,prepareLookaheadProgressActuals:()=>YA,resolveExpectedFinishDateSelection:()=>GA,resolveLookaheadActualDateSelection:()=>ks,willRunCriticalPath:()=>im,yieldToBrowser:()=>St});var sa={CONSTRAINT:"constraint",ALERT:"alert",WARNING:"warning"},z={FUTURE:"future",PAST:"past"},dt={MINUTE:"minute",HOUR:"hour",DAY:"day"},ct={DURATION:"DURATION",COST:"COST",WORK_HOURS:"HH"},ze={BASELINE:"Baseline",ACTUAL:"Actual"},Wt={DONE:"Done",OVERDUE:"Overdue",ADVANCEMENT:"Advancement",WAITING:"Waiting",DOING:"Doing"},H={CREATED:"created",UPDATED:"updated",DELETED:"deleted"};var _={ASAP:"asap",ALAP:"alap",SNET:"snet",SNLT:"snlt",FNET:"fnet",FNLT:"fnlt",MSO:"mso",MFO:"mfo"},aI={[_.MSO]:()=>!0,[_.MFO]:()=>!0,[_.SNLT]:(t,e)=>t<e,[_.SNET]:(t,e)=>t>e,[_.FNLT]:(t,e)=>t<e,[_.FNET]:(t,e)=>t>e};function ca(t,e,n){if(!e)return{violated:!1};let i=aI[t];return i?i(e,n)?{violated:!0,constraintType:t,constraintDate:e}:{violated:!1}:{violated:!1}}var oI=new Set([_.MSO,_.SNET,_.SNLT]);function bn(t,e,n){return oI.has(t)?e:n}function da(t,e,n){return{type:sa.CONSTRAINT,messageKey:"constraint_violation",data:{constraintType:t,constraintDate:e,...n?{projectedDate:n}:{}}}}var sI={[_.SNET]:{startOfDay:!0,direction:z.FUTURE},[_.SNLT]:{startOfDay:!0,direction:z.PAST},[_.FNET]:{startOfDay:!1,direction:z.FUTURE},[_.FNLT]:{startOfDay:!1,direction:z.PAST},[_.MSO]:{startOfDay:!0,direction:z.FUTURE},[_.MFO]:{startOfDay:!1,direction:z.PAST}},la=t=>new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())),Sd=(t,e)=>new Date(t.getTime()+e*864e5),lI=(t,e)=>t.getUTCFullYear()===e.getUTCFullYear()&&t.getUTCMonth()===e.getUTCMonth()&&t.getUTCDate()===e.getUTCDate();function dr(t,e){if(!t.constraintDate||!t.constraintType)return null;let n=sI[t.constraintType];if(!n)return t.constraintDate;let i=t.constraintDate,r=e.getClosestWorkTime({date:la(i),dir:z.FUTURE,task:t});if(lI(r,i))return i.getTime()!==la(i).getTime()?i:n.startOfDay?r:e.getClosestWorkTime({date:Sd(la(i),1),dir:z.PAST,task:t});let a=la(e.getClosestWorkTime({date:i,dir:n.direction,task:t}));return n.startOfDay?e.getClosestWorkTime({date:a,dir:z.FUTURE,task:t}):e.getClosestWorkTime({date:Sd(a,1),dir:z.PAST,task:t})}function Je(t,e){let n={earliestStart:null,latestStart:null,earliestEnd:null,latestEnd:null},i=t.constraintType;if(!i||i===_.ASAP||i===_.ALAP)return n;let r=dr(t,e);if(!r)return n;let a=s=>e.calculateEndDate({startDate:s,durationHours:t.durationHours,task:t}),o=s=>e.calculateEndDate({startDate:s,durationHours:-t.durationHours,task:t});switch(i){case _.SNET:return{earliestStart:r,latestStart:null,earliestEnd:a(r),latestEnd:null};case _.SNLT:return{earliestStart:null,latestStart:r,earliestEnd:null,latestEnd:a(r)};case _.FNET:return{earliestStart:o(r),latestStart:null,earliestEnd:r,latestEnd:null};case _.FNLT:return{earliestStart:null,latestStart:o(r),earliestEnd:null,latestEnd:r};case _.MSO:{let s=a(r);return{earliestStart:r,latestStart:r,earliestEnd:s,latestEnd:s}}case _.MFO:{let s=o(r);return{earliestStart:s,latestStart:s,earliestEnd:r,latestEnd:r}}default:return n}}function vd(t,e){return!(e.earliestStart&&t<e.earliestStart||e.latestStart&&t>e.latestStart)}function bs(t,e){return e.latestStart&&t>e.latestStart?e.latestStart:e.earliestStart&&t<e.earliestStart?e.earliestStart:t}var M={FINISH_TO_START:"0",START_TO_START:"1",FINISH_TO_FINISH:"2",START_TO_FINISH:"3"},cI=Object.values(M);function ua(t){return cI.includes(t)}var li={ACTUAL_START:"actualStart",ACTUAL_FINISH:"actualFinish",PLANNED_START:"plannedStart",PLANNED_FINISH:"plannedFinish",REMAINING_DURATION_HOURS:"remainingDurationHours",EXECUTION_STATUS:"executionStatus",EXPECTED_FINISH:"expectedFinish",SUSPEND_DATE:"suspendDate",RESUME_DATE:"resumeDate",SECONDARY_CONSTRAINT_TYPE:"secondaryConstraintType",SECONDARY_CONSTRAINT_DATE:"secondaryConstraintDate",PERCENT_COMPLETE_TYPE:"percentCompleteType",PHYSICAL_PERCENT_COMPLETE:"physicalPercentComplete"},dI={TEXT:"text",DESCRIPTION:"description",DURATION:"duration",PROGRESS:"progress",COST:"cost",USED_COST:"used_cost",HH_WORK_TIME:"hhWorkTime",START_DATE:"start_date",END_DATE:"end_date",CONSTRAINT_TYPE:"constraint_type",CONSTRAINT_DATE:"constraint_date",CALENDAR_ID:"calendar_id",CUSTOM_ID:"custom_id",SUBCONTRACT_ID:"subcontractId",RESPONSABLES:"responsables",TAGS:"tags",CUSTOM_PREDECESSORS:"custom_predecessors",CUSTOM_SUCESSORS:"custom_sucessors",...li},uI={REAL_WORK:"real_work",REAL_COST:"real_cost",EXPECTED_PROGRESS:"expected_progress",EXPECTED_PROGRESS_BASE:"expected_progress_base",START_BASE:"start_base",END_BASE:"end_base",DURATION_BASE:"duration_base",COST_BASE:"cost_base",WORK_BASE:"work_base",BASELINE_VARIANCE:"baseline_variance",CALENDAR_DURATION:"calendarDuration",IS_CRITICAL:"is_critical",EARLY_START:"earlyStart",EARLY_FINISH:"earlyFinish",LATE_START:"lateStart",LATE_FINISH:"lateFinish",FREE_SLACK:"freeSlack",TOTAL_SLACK:"totalSlack",CORRELATIVE_ID:"correlative_id",UNIQUE_CORRELATIVE_ID:"unique_correlative_id",PONDERATOR:"ponderator",STATUS:"status"},T={...dI,...uI};var vt={CREATE:"create",UPDATE:"update",DELETE:"delete"},ht={SELF_LINK:"self-link",CYCLE:"cycle",DUPLICATE:"duplicate",ACTIVITY_MISSING:"activity-missing",LINK_MISSING:"link-missing",HIERARCHY_LINK:"hierarchy-link"};var A={ACTIVITY_CLIPBOARD_CLEAR:"activity-clipboard-clear",ACTIVITY_CLIPBOARD_IMPORT:"activity-clipboard-import",ACTIVITY_COPY:"activity-copy",CALENDAR_RECONCILE:"calendar-reconcile",ACTIVITY_PASTE_COPIED:"activity-paste-copied",ACTIVITY_DUPLICATE:"activity-duplicate",CELL_COPY:"cell-copy",CELL_CLIPBOARD_CLEAR:"cell-clipboard-clear",CELL_PASTE_COPIED:"cell-paste-copied",PERSISTENCE_ACKNOWLEDGE:"persistence-acknowledge",BASELINE_APPLY:"baseline-apply",PONDERATOR_CRITERION_SET:"ponderator-criterion-set",STATUS_CRITERIA_SET:"status-criteria-set",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_TYPE_SET:"activity-type-set",ACTIVITY_SET_PROGRESS:"activity-set-progress",ACTIVITY_LOOKAHEAD_CONVERT:"activity-lookahead-convert",SELECTION_TOGGLE:"selection-toggle",SELECTION_REPLACE:"selection-replace",VISIBILITY_SET:"visibility-set",FILTER_SET:"filter-set",SORT_SET:"sort-set",VIEW_ATTRIBUTES_SET:"view-attributes-set",GROUP_SET:"group-set",WBS_DEPTH_SET:"wbs-depth-set",SIR_SYNC:"sir-sync",ACTIVITY_LOOKAHEAD_SYNC:"activity-lookahead-sync",SCHEDULE_AUTO_SCHEDULE:"schedule-auto-schedule"},Xe="activity-batch",ft=vt,Cd=Object.values(A);function Tt(t){let e=t?.baselinePoints;return!Array.isArray(e)||e.length===0?null:e.find(n=>n.isActiveVersion)??null}var Ft={NAME:"name",DESCRIPTION:"description",DURATION_DAYS:"durationDays",PROGRESS:"progress",COST:"cost",USED_COST:"usedCost",WORK_HOURS:"workHours",START_DATE:"startDate",END_DATE:"endDate",CONSTRAINT_TYPE:"constraintType",CONSTRAINT_DATE:"constraintDate",CALENDAR_ID:"calendarId",CUSTOM_ID:"customId",SUBCONTRACT_ID:"subcontractId",RESPONSABLE_IDS:"responsableIds",TAG_IDS:"tagIds"},ur={START:"start",END:"end"},Nn={FINISH_TO_START:"finish-to-start",START_TO_START:"start-to-start",FINISH_TO_FINISH:"finish-to-finish",START_TO_FINISH:"start-to-finish"},ci={CREATE:"create",UPDATE:"update",REMOVE:"remove"};var pI={[Ft.NAME]:T.TEXT,[Ft.DESCRIPTION]:T.DESCRIPTION,[Ft.DURATION_DAYS]:T.DURATION,[Ft.PROGRESS]:T.PROGRESS,[Ft.COST]:T.COST,[Ft.USED_COST]:T.USED_COST,[Ft.WORK_HOURS]:T.HH_WORK_TIME,[Ft.START_DATE]:T.START_DATE,[Ft.END_DATE]:T.END_DATE,[Ft.CONSTRAINT_TYPE]:T.CONSTRAINT_TYPE,[Ft.CONSTRAINT_DATE]:T.CONSTRAINT_DATE,[Ft.CALENDAR_ID]:T.CALENDAR_ID,[Ft.CUSTOM_ID]:T.CUSTOM_ID,[Ft.SUBCONTRACT_ID]:T.SUBCONTRACT_ID,[Ft.RESPONSABLE_IDS]:T.RESPONSABLES,[Ft.TAG_IDS]:T.TAGS};function Ns(t,e){return{activityId:t,column:pI[e.field],newValue:e.value}}var fI={[Nn.FINISH_TO_START]:M.FINISH_TO_START,[Nn.START_TO_START]:M.START_TO_START,[Nn.FINISH_TO_FINISH]:M.FINISH_TO_FINISH,[Nn.START_TO_FINISH]:M.START_TO_FINISH};function pr(t){return fI[t]}function yI(t){return t.kind===ci.CREATE?{kind:ft.CREATE,source:t.sourceId,target:t.targetId,type:pr(t.relationship),...t.lagDays===void 0?{}:{lag:t.lagDays},...t.linkId===void 0?{}:{linkId:t.linkId}}:t.kind===ci.UPDATE?{kind:ft.UPDATE,linkId:t.linkId,...t.sourceId===void 0?{}:{source:t.sourceId},...t.targetId===void 0?{}:{target:t.targetId},...t.relationship===void 0?{}:{type:pr(t.relationship)},...t.lagDays===void 0?{}:{lag:t.lagDays}}:t.kind===ci.REMOVE?{kind:ft.DELETE,linkId:t.linkId}:t}function hI(t){return t===ur.START?T.START_DATE:t===ur.END?T.END_DATE:t}function mI(t){return{kind:Xe,mode:t.mode,items:t.items,links:t.links.map(e=>({source:e.source,target:e.target,type:pr(e.relationship),...e.lagDays===void 0?{}:{lag:e.lagDays},...e.linkId===void 0?{}:{linkId:e.linkId}})),...t.eventSource===void 0?{}:{eventSource:t.eventSource}}}function gI(t){return{get:e=>t.getActivityView(e),list:()=>t.getAllActivitiesView(),ids:()=>t.getAllIds(),forEachId:e=>t.forEachActivityId(e),property:(e,n)=>t.getProperty(e,n),children:e=>t.getChildrenView(e),childIds:e=>t.getChildrenIds(e),hasChildren:e=>t.hasChild(e),indentTargetParentIds:e=>t.getIndentTargetParentIds(e),isCustomIdInUse:(e,n)=>t.isCustomIdInUse(e,n??null),clipboard:()=>t.getActivityClipboardView(),create:(e,n)=>t.dispatch({...e,kind:A.ACTIVITY_CREATE},n),applyBatch:(e,n)=>t.applyActivityBatch(mI(e),n),editInline:(e,n,i)=>t.dispatch({...Ns(e,n),kind:A.INLINE_EDIT},i),setType:(e,n,i)=>t.dispatch({kind:A.ACTIVITY_TYPE_SET,activityId:e,type:n},i),applyDragBatch:(e,n)=>t.dispatch({kind:A.DATES_BATCH,edits:e.map(i=>({activityId:i.activityId,column:hI(i.edge),newValue:i.value}))},n),editFields:(e,n)=>t.dispatch({kind:A.BULK_EDIT,edits:e.map(i=>Ns(i.activityId,i))},n),remove:(e,n={})=>t.dispatch({...n,kind:A.ACTIVITY_DELETE,activityIds:e}),move:(e,n)=>t.dispatch({...e,kind:A.ACTIVITY_MOVE},n),planLookaheadConversion:e=>t.planLookaheadConversion(e),applyLookaheadConversion:e=>t.applyLookaheadConversion(e),indent:(e,n={})=>t.dispatch({...n,kind:A.ACTIVITY_INDENT,activityIds:e}),outdent:(e,n={})=>t.dispatch({...n,kind:A.ACTIVITY_OUTDENT,activityIds:e}),setProgress:(e,n,i={})=>t.dispatch({...i,kind:A.ACTIVITY_SET_PROGRESS,activityId:e,newValue:n}),copy:(e={})=>t.dispatch({...e,kind:A.ACTIVITY_COPY}),paste:(e,n={})=>t.dispatch({...n,kind:A.ACTIVITY_PASTE_COPIED,destination:{afterSiblingId:e}}),duplicate:(e,n={})=>t.dispatch({...n,kind:A.ACTIVITY_DUPLICATE,activityIds:e}),clearClipboard:(e={})=>t.dispatch({...e,kind:A.ACTIVITY_CLIPBOARD_CLEAR}),importClipboard:(e,n,i={})=>t.dispatch({...i,kind:A.ACTIVITY_CLIPBOARD_IMPORT,snapshot:e,...n===void 0?{}:{references:n}}),lookaheadSync:e=>t.dispatch({...e,kind:A.ACTIVITY_LOOKAHEAD_SYNC}),autoSchedule:(e,n)=>t.dispatch({kind:A.SCHEDULE_AUTO_SCHEDULE,...e===void 0?{}:{activityId:e}},n),createDateGesturePreview:e=>t.createDateGesturePreview(e)}}function AI(t){return{copy:(e,n,i,r={})=>t.dispatch({...r,kind:A.CELL_COPY,activityId:e,column:n,...i===void 0?{}:{copiedText:i}}),paste:(e,n,i,r={})=>t.dispatch({...r,kind:A.CELL_PASTE_COPIED,activityIds:e,column:n,...i===void 0?{}:{clipboardText:i}}),clearClipboard:(e={})=>t.dispatch({...e,kind:A.CELL_CLIPBOARD_CLEAR})}}function II(t){return{get:e=>t.getLinkView(e),list:()=>t.getAllLinksView(),forActivity:e=>t.getLinksForActivityView(e),create:(e,n)=>t.dispatch({kind:A.LINK_CREATE,source:e.sourceId,target:e.targetId,type:pr(e.relationship),...e.lagDays===void 0?{}:{lag:e.lagDays},...e.linkId===void 0?{}:{linkId:e.linkId}},n),update:(e,n,i)=>t.dispatch({kind:A.LINK_UPDATE,linkId:e,...n.sourceId===void 0?{}:{source:n.sourceId},...n.targetId===void 0?{}:{target:n.targetId},...n.relationship===void 0?{}:{type:pr(n.relationship)},...n.lagDays===void 0?{}:{lag:n.lagDays}},i),remove:(e,n)=>t.dispatch({kind:A.LINK_DELETE,linkId:e},n),batch:(e,n)=>t.dispatch({kind:A.LINKS_BATCH,operations:e.map(yI)},n)}}function Dd(t){let e=(n,i)=>t.dispatch({kind:A.BASELINE_APPLY,points:n},i);return{activities:gI(t),cells:AI(t),links:II(t),calendars:{get:n=>t.getCalendar(n),list:()=>t.getAllCalendars(),listBase:()=>t.getBaseCalendars(),projectWorkHours:()=>t.getProjectWorkHours(),reconcile:n=>t.dispatch({kind:A.CALENDAR_RECONCILE},n)},selection:{ids:()=>t.getSelectedActivityIds(),toggle:({checked:n,...i})=>t.dispatch({...i,kind:A.SELECTION_TOGGLE,isChecked:n}),replace:(n,i={})=>t.dispatch({...i,kind:A.SELECTION_REPLACE,activityIds:n})},view:{hiddenActivityIds:()=>t.getHiddenActivityIds(),visibleActivityIds:()=>t.getVisibleActivityIds(),visualOrderIds:()=>t.getVisualOrderIds(),visualRows:()=>t.getVisualRows(),filter:()=>t.getActiveFilter(),setFilter:n=>t.dispatch({...n,kind:A.FILTER_SET}),order:()=>t.getActiveOrder(),setOrder:(n,i={})=>t.dispatch({...i,kind:A.SORT_SET,rules:n}),group:()=>t.getActiveGroup(),setViewAttributes:(n,i={})=>t.dispatch({...i,kind:A.VIEW_ATTRIBUTES_SET,catalogs:n}),setGroup:(n,i={})=>t.dispatch({...i,kind:A.GROUP_SET,group:n}),wbsDepth:()=>t.getWbsDepth(),setWbsDepth:(n,i={})=>t.dispatch({...i,kind:A.WBS_DEPTH_SET,wbsDepth:n}),setVisibility:(n,i={})=>t.dispatch({...i,kind:A.VISIBILITY_SET,visibleIds:n}),setStatusCriteria:(n,i)=>t.dispatch({kind:A.STATUS_CRITERIA_SET,criteria:n},i)},baselines:{refresh:e,setVisibility:e,setPonderatorCriterion:(n,i)=>t.dispatch({kind:A.PONDERATOR_CRITERION_SET,criterion:n},i),activeFor:n=>Tt(n)},impactRequests:{sync:n=>t.dispatch({...n,kind:A.SIR_SYNC})},persistence:{hasChanges:()=>t.hasUnsavedChanges(),modifiedActivities:()=>t.getModifiedActivities(),modifiedActivityFields:()=>t.getModifiedActivityFields(),newActivities:()=>t.getNewActivities(),deletedActivities:()=>t.getDeletedActivitiesSinceLastSave(),modifiedLinks:()=>t.getModifiedLinks(),newLinks:()=>t.getNewLinks(),deletedLinks:()=>t.getDeletedLinksSinceLastSave(),captureHistoryBoundary:()=>t.capturePersistenceHistoryBoundary(),readSnapshot:()=>t.readPersistenceCheckpoint(),acknowledge:n=>t.dispatch({kind:A.PERSISTENCE_ACKNOWLEDGE,checkpoint:n})},history:{undo:n=>t.undo(n),redo:n=>t.redo(n),canUndo:()=>t.canUndo(),canRedo:()=>t.canRedo(),clear:()=>t.clearHistory(),depth:()=>t.undoDepth()},projection:{changeSetFrom:n=>t.createProjectionChangeSetFrom(n)},criticalPath:{get ready(){return t.criticalPathReady},recompute:()=>t.recomputeCriticalPath(),isSettled:()=>t.isCriticalPathSettled(),whenSettled:()=>t.whenCriticalPathSettled()},diagnostics:{auditEffectiveGraph:()=>t.auditEffectiveGraph(),revision:()=>t.getScheduleRevision(),stateRevision:()=>t.getStateRevision(),canonicalDigest:()=>t.getCanonicalDigest(),canonicalFingerprint:()=>t.getCanonicalFingerprint()}}}var $t=class{items=[];head=0;enqueue(e){this.items.push(e)}dequeue(){if(this.head>=this.items.length)return;let e=this.items[this.head];return this.head+=1,e}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 pa=t=>String(t);function Td(t){let{clickedId:e,isChecked:n,currentSelection:i,hierarchy:r,isFrozen:a,exists:o,autoCheckParents:s}=t,l=pa(e),c=new Set([...i].map(String)),d=new Set(c),u=SI(l,r).filter(o),p=u.filter(y=>!a(y)),f=n&&p.length<u.length;n&&!f?d.add(l):d.delete(l);for(let y of p)n?d.add(y):d.delete(y);return f||vI({id:l,isChecked:n,autoCheckParents:s,hierarchy:r,isFrozen:a,exists:o,next:d}),{nextSelection:d,changed:CI(c,d),parentBlocked:f}}function SI(t,e){let n=[],i=new $t;i.enqueue(t);let r=new Set([t]);for(;!i.isEmpty();){let a=i.dequeue();for(let o of e.getChildrenIds(a)){let s=pa(o);r.has(s)||(r.add(s),n.push(s),i.enqueue(s))}}return n}function vI(t){let{id:e,isChecked:n,autoCheckParents:i,hierarchy:r,isFrozen:a,exists:o,next:s}=t,l=r.getParentId(e);for(;l!==null&&typeof l<"u";){let c=pa(l);if(a(c))return;let d=r.getChildrenIds(c).map(pa).filter(o),u=d.some(a),p=d.filter(h=>!a(h)),y=p.length>0&&p.every(h=>s.has(h))&&!u;if(n){if(!i||!y||s.has(c))return;s.add(c)}else{if(y||!s.has(c))return;s.delete(c)}l=r.getParentId(c)}}function CI(t,e){let n=[],i=[];for(let r of e)t.has(r)||n.push(r);for(let r of t)e.has(r)||i.push(r);return{checked:n,unchecked:i}}function Ze(t){return(t.pendingRequestIds?.length??0)>0}var v={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",CONFIRMATION_REQUIRED:"confirmation_required",DATA_DATE_ACTUAL_START_LOCKED:"data_date_actual_start_locked",DATA_DATE_ACTIVITY_COMPLETED:"data_date_activity_completed",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",NO_ACTIVITY_SELECTION:"no_activity_selection",CLIPBOARD_EMPTY:"clipboard_empty",CLIPBOARD_SNAPSHOT_INVALID:"clipboard_snapshot_invalid",CELL_PASTE_COLUMN_MISMATCH:"cell_paste_column_mismatch",ACTIVITY_PASTE_INVARIANT_FAILED:"activity_paste_invariant_failed",SOLE_SCHEDULE_ROOT:"sole_schedule_root",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",HIERARCHY_CYCLE:"hierarchy_cycle",MANUAL_SCHEDULING_ACTIVE:"manual_scheduling_active",SANDBOX_PERSISTENCE_FORBIDDEN:"sandbox_persistence_forbidden",STALE_STATE_REVISION:"stale-state-revision",INVALID_PROGRESS_VALUE:"invalid_progress_value_must_be_0_or_100"};var _d=(t,e)=>{let n=t.getActivity(e);return n!=null&&Ze(n)},Ed=(t,e,n)=>{let i=[],r=(a,o)=>{let s=e.isChecked(a);e.setChecked(a,o)&&i.push({activityId:a,checked:{before:s,after:o}})};for(let a of n.checked)r(a,!0);for(let a of n.unchecked)r(a,!1);return{source:t,activities:[],links:[],calendars:[],trackingEvents:[],viewState:i}};function Pd(t,e){let{adapter:n}=e,i=t.activityId;if(!n.getActivity(i))return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};let r=t.frozenIds?new Set(t.frozenIds):null,a=r?s=>r.has(s):s=>_d(n,s),o=Td({clickedId:i,isChecked:t.isChecked,currentSelection:new Set(n.checkedIds().map(String)),hierarchy:{getChildrenIds:s=>n.getChildren(s),getParentId:s=>{let l=n.getParentId(s);return!l||l==="0"?null:String(l)}},isFrozen:a,exists:s=>n.activityExists(s),autoCheckParents:t.autoCheckParents??!1});return{ok:!0,changes:Ed(t,n,o.changed)}}function fa(t,e){let{adapter:n}=e,i=new Set(t.activityIds.map(String).filter(o=>n.activityExists(o)).filter(o=>!_d(n,o))),r=new Set(n.checkedIds().map(String)),a={checked:[...i].filter(o=>!r.has(o)),unchecked:[...r].filter(o=>!i.has(o))};return{ok:!0,changes:Ed(t,n,a)}}function Fn(t,e,n=t.getAllIds()){let i=[];for(let r of n){let a=String(r),o=e.has(a),s=t.isVisible(a);s!==o&&(t.setVisible(a,o),i.push({activityId:a,visible:{before:s,after:o}}))}return i}function Rd(t,e){let{adapter:n}=e,i=new Set(t.visibleIds.map(String)),r=Fn(n,i);return{ok:!0,changes:{source:t,activities:[],links:[],calendars:[],trackingEvents:[],viewState:r}}}var L={TASK:"task",PROJECT:"project",MILESTONE:"milestone"},DI=Object.values(L);function fr(t){return DI.includes(t)}var kd={ALAP_DEBOUNCE_MS:1e3,CRITICAL_PATH_DEBOUNCE_MS:1e3,YIELD_SLICE_MS:8};var wn="viewAttribute";var x={STRING:"string",NUMBER:"number",DATE:"date",ID_ARRAY:"id-array",ENUM:"enum",BOOLEAN:"boolean",REFERENCE:"reference"},Z={NAME:"name",DESCRIPTION:"description",CUSTOM_ID:"customId",CORRELATIVE_ID:"correlativeId",UNIQUE_CORRELATIVE_ID:"uniqueCorrelativeId",PROGRESS:"progress",DURATION_DAYS:"durationDays",CALENDAR_DURATION:"calendarDuration",COST:"cost",USED_COST:"usedCost",REAL_COST:"realCost",WORK_HOURS:"workHours",REAL_WORK_HOURS:"realWorkHours",PONDERATOR:"ponderator",FREE_SLACK_DAYS:"freeSlackDays",TOTAL_SLACK_DAYS:"totalSlackDays",EXPECTED_PROGRESS_BASELINE:"expectedProgressBaseline",BASELINE_DURATION_DAYS:"baselineDurationDays",BASELINE_VARIANCE_DAYS:"baselineVarianceDays",BASELINE_COST:"baselineCost",BASELINE_WORK_HOURS:"baselineWorkHours",EXPECTED_PROGRESS:"expectedProgress",START_DATE:"startDate",END_DATE:"endDate",CONSTRAINT_DATE:"constraintDate",BASELINE_START_DATE:"baselineStartDate",BASELINE_END_DATE:"baselineEndDate",EARLY_START:"earlyStart",EARLY_FINISH:"earlyFinish",LATE_START:"lateStart",LATE_FINISH:"lateFinish",RESPONSABLE_IDS:"responsableIds",TAG_IDS:"tagIds",STATUS:"status",CONSTRAINT_TYPE:"constraintType",CALENDAR_ID:"calendarId",SUBCONTRACT_ID:"subcontractId",IS_CRITICAL:"isCritical",FLOAT_PATH:"floatPath",FLOAT_PATH_ORDER:"floatPathOrder"},K={INCLUDES:"includes",NOT_INCLUDES:"notIncludes",IS:"is",IS_NOT:"isNot",EQUALS:"equals",NOT_EQUALS:"notEquals",GREATER_THAN:"greaterThan",LESS_THAN:"lessThan",GREATER_OR_EQUAL:"greaterOrEqual",LESS_OR_EQUAL:"lessOrEqual",AFTER:"after",BEFORE:"before",BETWEEN:"between",SOME_OF:"someOf",NOT_SOME_OF:"notSomeOf"};function xn(t){return"kind"in t&&t.kind===wn}var di={AND:"and",OR:"or"};var TI=2,_I=[Wt.WAITING,Wt.DONE,Wt.DOING,Wt.OVERDUE,Wt.ADVANCEMENT],EI=[_.MFO,_.MSO,_.SNLT,_.SNET,_.ALAP,_.ASAP,_.FNET,_.FNLT],PI=1e3*60*60*24;function Fs(t,e){return t===null||e<=0?null:t/e}function RI(t,e){let n=Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()),i=Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate());return Math.floor((i-n)/PI)+1}var kI={[Z.NAME]:{valueKind:x.STRING,extract:t=>t.name},[Z.DESCRIPTION]:{valueKind:x.STRING,extract:t=>t.description},[Z.CUSTOM_ID]:{valueKind:x.STRING,extract:t=>t.customId},[Z.CORRELATIVE_ID]:{valueKind:x.NUMBER,extract:t=>t.correlativeId},[Z.UNIQUE_CORRELATIVE_ID]:{valueKind:x.NUMBER,extract:t=>{let e=Number(t.uniqueCorrelativeId);return Number.isFinite(e)?e:null}},[Z.PROGRESS]:{valueKind:x.NUMBER,extract:t=>t.progress},[Z.DURATION_DAYS]:{valueKind:x.NUMBER,extract:(t,e)=>Fs(t.durationHours,e.hoursPerDay)},[Z.CALENDAR_DURATION]:{valueKind:x.NUMBER,extract:t=>t.type===L.MILESTONE?0:RI(t.startDate,t.endDate)},[Z.COST]:{valueKind:x.NUMBER,extract:t=>t.cost},[Z.USED_COST]:{valueKind:x.NUMBER,extract:t=>t.usedCost},[Z.REAL_COST]:{valueKind:x.NUMBER,extract:t=>t.realCost},[Z.WORK_HOURS]:{valueKind:x.NUMBER,extract:t=>t.workHours},[Z.REAL_WORK_HOURS]:{valueKind:x.NUMBER,extract:t=>t.realWorkHours},[Z.PONDERATOR]:{valueKind:x.NUMBER,extract:t=>t.ponderator},[Z.FREE_SLACK_DAYS]:{valueKind:x.NUMBER,extract:(t,e)=>Fs(t.freeSlackHours,e.hoursPerDay)},[Z.TOTAL_SLACK_DAYS]:{valueKind:x.NUMBER,extract:(t,e)=>Fs(t.criticalPath?.totalSlackHours??null,e.hoursPerDay)},[Z.EXPECTED_PROGRESS_BASELINE]:{valueKind:x.NUMBER,equalityPrecision:TI,extract:t=>t.expectedProgressBaseline},[Z.EXPECTED_PROGRESS]:{valueKind:x.NUMBER,extract:t=>t.expectedProgress},[Z.BASELINE_DURATION_DAYS]:{valueKind:x.NUMBER,extract:t=>t.baselineSnapshot?.durationDays??null},[Z.BASELINE_VARIANCE_DAYS]:{valueKind:x.NUMBER,extract:t=>t.baselineVarianceDays},[Z.BASELINE_COST]:{valueKind:x.NUMBER,extract:t=>t.baselineSnapshot?.cost??null},[Z.BASELINE_WORK_HOURS]:{valueKind:x.NUMBER,extract:t=>t.baselineSnapshot?.workHours??null},[Z.START_DATE]:{valueKind:x.DATE,extract:t=>t.startDate},[Z.END_DATE]:{valueKind:x.DATE,extract:t=>t.endDate},[Z.CONSTRAINT_DATE]:{valueKind:x.DATE,extract:t=>t.constraintDate},[Z.BASELINE_START_DATE]:{valueKind:x.DATE,extract:t=>t.baselineSnapshot?.startDate??null},[Z.BASELINE_END_DATE]:{valueKind:x.DATE,extract:t=>t.baselineSnapshot?.endDate??null},[Z.EARLY_START]:{valueKind:x.DATE,extract:t=>t.criticalPath?.earlyStart??null},[Z.EARLY_FINISH]:{valueKind:x.DATE,extract:t=>t.criticalPath?.earlyFinish??null},[Z.LATE_START]:{valueKind:x.DATE,extract:t=>t.criticalPath?.lateStart??null},[Z.LATE_FINISH]:{valueKind:x.DATE,extract:t=>t.criticalPath?.lateFinish??null},[Z.RESPONSABLE_IDS]:{valueKind:x.ID_ARRAY,extract:t=>t.responsableIds},[Z.TAG_IDS]:{valueKind:x.ID_ARRAY,extract:t=>t.tagIds},[Z.STATUS]:{valueKind:x.ENUM,order:_I,extract:t=>t.status},[Z.CONSTRAINT_TYPE]:{valueKind:x.ENUM,order:EI,extract:t=>t.constraintType},[Z.CALENDAR_ID]:{valueKind:x.REFERENCE,extract:t=>t.calendarId===null?null:String(t.calendarId)},[Z.SUBCONTRACT_ID]:{valueKind:x.REFERENCE,extract:t=>t.subcontractId===null?null:String(t.subcontractId)},[Z.IS_CRITICAL]:{valueKind:x.BOOLEAN,extract:t=>t.isCritical},[Z.FLOAT_PATH]:{valueKind:x.NUMBER,extract:t=>t.p6?.floatPath??null},[Z.FLOAT_PATH_ORDER]:{valueKind:x.NUMBER,extract:t=>t.p6?.floatPathOrder??null}};function Qe(t){return kI[t]??null}var pi={GROUP:"group",ACTIVITY:"activity"},Mn="unassigned",ws="g",ui=":",ya="Unassigned",ha=1,tn=1,ma=0;function ga(t,e){return`${ws}${ui}${t}${ui}${e}`}function Aa(t,e,n){return`${t}${ui}${e}${ui}${n}`}var Od=null;function Ld(t){return t===Od?"":t}function bd(t){let e=new Map,n=new Map;for(let l of t.values){e.set(l.id,l);let c=Ld(l.parentId),d=n.get(c)??[];d.push(l),n.set(c,d)}for(let l of n.values())l.sort((c,d)=>c.sequence!==d.sequence?c.sequence-d.sequence:c.id.localeCompare(d.id));let i=new Map,r=new Map,a=(l,c,d)=>{let u=n.get(Ld(l))??[];for(let p of u){let f=[...c,p.id],y=[...d,p.sequence];i.set(p.id,f),r.set(p.id,y),a(p.id,f,y)}};a(Od,[],[]);let o=new Map;for(let l of e.keys()){let c=new Set([l]);for(let[d,u]of i)u.includes(l)&&c.add(d);o.set(l,c)}let s=new Map;for(let l of t.assignments)e.has(l.valueId)&&s.set(String(l.activityId),l.valueId);return{key:t.key,valueById:e,pathByValueId:i,sequencePathByValueId:r,descendantIdsByValueId:o,assignmentByActivityId:s}}var Ia=new Map;function Nd(t,e){let n=new Set;for(let i of e){let r=t.descendantIdsByValueId.get(i);if(r===void 0){n.add(i);continue}for(let a of r)n.add(a)}return n}function Fd(t,e,n,i){let r=Math.max(n,tn),a=t.pathByValueId.get(e);return a===void 0||a.length===0?r>tn?[]:[e]:a.slice(r-1,Math.max(i,r))}function wd(t,e,n){let i=n.get(e.key),r=i?.assignmentByActivityId.get(String(t.id))??null,a=i?Nd(i,e.value):new Set(e.value),o=r!==null&&a.has(r);return e.operator===K.SOME_OF?o:e.operator===K.NOT_SOME_OF?!o:!1}function xs(t){return t instanceof Date?t:typeof t=="string"||typeof t=="number"?new Date(t):new Date(Number.NaN)}function Fe(t){return Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())}function LI(t,e,n){let i=t===null;return n===K.INCLUDES?!i&&String(t).toLowerCase().includes(e.toLowerCase()):n===K.NOT_INCLUDES?i||!String(t).toLowerCase().includes(e.toLowerCase()):n===K.IS?!i&&String(t)===e:n===K.IS_NOT?i||String(t)!==e:!1}function OI(t,e,n,i){if(t===null||typeof t!="number")return n===K.NOT_EQUALS;let r=i===void 0?t:Number(t.toFixed(i));return n===K.EQUALS?r===e:n===K.NOT_EQUALS?r!==e:n===K.GREATER_THAN?t>e:n===K.LESS_THAN?t<e:n===K.GREATER_OR_EQUAL?t>=e:n===K.LESS_OR_EQUAL?t<=e:!1}function bI(t,e,n){return typeof t=="number"&&t>=e&&t<=n}function NI(t,e,n){if(!(t instanceof Date))return!1;let i=Fe(t),r=Fe(e);return n===K.AFTER?i>r:n===K.BEFORE?i<r:!1}function FI(t,e,n){if(!(t instanceof Date))return!1;let i=Fe(t);return i>=Fe(e)&&i<=Fe(n)}function wI(t,e,n){let r=(Array.isArray(t)?t:[]).some(a=>e.has(String(a)));return n===K.SOME_OF?r:n===K.NOT_SOME_OF?!r:!1}function xI(t,e,n){let i=t!==null&&e.has(String(t));return n===K.SOME_OF?i:n===K.NOT_SOME_OF?!i:!1}function xd(t){let e=Array.isArray(t)?t:[t];return new Set(e.map(n=>String(n)))}function va(t){return t.viewAttributeCatalogs??Ia}function Sa(t,e,n,i){if(xn(e))return wd(t,e,i);let r=Qe(e.field);if(r===null)return!1;let a=r.extract(t,n),{operator:o}=e;return o===K.BETWEEN?r.valueKind===x.NUMBER?bI(a,Number(e.value),Number(e.valueTo)):r.valueKind===x.DATE?FI(a,xs(e.value),xs(e.valueTo)):!1:r.valueKind===x.STRING?LI(a,String(e.value),o):r.valueKind===x.NUMBER?OI(a,Number(e.value),o,r.equalityPrecision):r.valueKind===x.DATE?NI(a,xs(e.value),o):r.valueKind===x.ID_ARRAY?wI(a,xd(e.value),o):xI(a,xd(e.value),o)}function Md(t,e,n,i){return e.criteria.length===0?!0:e.logic===di.OR?e.criteria.some(r=>Sa(t,r,n,i)):e.criteria.every(r=>Sa(t,r,n,i))}function MI(t,e,n,i){return e.groups&&e.groups.length>0?e.logic===di.OR?e.groups.some(r=>Md(t,r,n,i)):e.groups.every(r=>Md(t,r,n,i)):e.criteria.length===0?!0:e.logic===di.OR?e.criteria.some(r=>Sa(t,r,n,i)):e.criteria.every(r=>Sa(t,r,n,i))}function UI(t,e){let n=Fe(t.startDate),i=Fe(t.endDate),r=Fe(e.start),a=Fe(e.end),o=n>=r&&i<=a,s=n>=r&&n<=a,l=r>=n&&r<=i;return o||s||l}function Ms(t,e,n,i){let r=MI(t,e,n,i),a=e.dateRange,o=a===void 0||UI(t,a);return r&&o}function HI(t,e,n){let i=e(t);for(;i!==null&&!n.has(String(i));)n.add(String(i)),i=e(i)}function Ud(t){let{activities:e,parentOf:n,filter:i,context:r}=t,a=va(t),o=new Set,s=[];for(let l of e)Ms(l,i,r,a)&&(o.add(String(l.id)),s.push(l.id));for(let l of s)HI(l,n,o);return o}function BI(t){let{activities:e,parentOf:n,filter:i,context:r}=t,a=va(t),o=new Set,s=new Map,l=new Map,c=new Map;for(let d of e){let u=String(d.id),p=n(u);l.set(u,p),c.set(u,c.get(u)??0),p!==null&&c.set(p,(c.get(p)??0)+1);let f=Ms(d,i,r,a);s.set(u,f?1:0),f&&o.add(u)}return{matchedIds:o,visibleReferenceCounts:s,parentIds:l,remainingChildren:c}}function jI(t){let{visibleReferenceCounts:e,parentIds:n,remainingChildren:i}=t,r=[];for(let a of n.keys())i.get(a)===0&&r.push(a);for(;r.length>0;){let a=r.pop();if(a===void 0)break;let o=n.get(a);if(o==null)continue;let s=e.get(a)??0;e.set(o,(e.get(o)??0)+s);let l=(i.get(o)??1)-1;i.set(o,l),l===0&&r.push(o)}}function WI(t){let e=new Set;for(let[n,i]of t)i>0&&e.add(n);return e}function Ca(t){let e=BI(t);jI(e);let n=WI(e.visibleReferenceCounts);return{filter:t.filter,context:t.context,matchedIds:e.matchedIds,visibleIds:n,visibleReferenceCounts:e.visibleReferenceCounts,viewAttributeCatalogs:va(t)}}function Hd(t,e,n){let i=new Set;for(let r of e){let a=String(r.id);i.add(a);let o=t.matchedIds.has(a),s=Ms(r,t.filter,t.context,va(t));if(o===s)continue;s?t.matchedIds.add(a):t.matchedIds.delete(a);let l=s?1:-1,c=a;for(;c!==null;){let d=t.visibleReferenceCounts.get(c)??0,u=d+l;t.visibleReferenceCounts.set(c,u);let p=d>0,f=u>0;p!==f&&(i.add(c),f?t.visibleIds.add(c):t.visibleIds.delete(c)),c=n(c)}}return i}function Un(t){return{hoursPerDay:t,locale:"en"}}var mt={UNKNOWN_FIELD:"unknown_field",UNKNOWN_OPERATOR:"unknown_operator",INVALID_VALUE:"invalid_value"},VI={[x.STRING]:new Set([K.INCLUDES,K.NOT_INCLUDES,K.IS,K.IS_NOT]),[x.NUMBER]:new Set([K.EQUALS,K.NOT_EQUALS,K.GREATER_THAN,K.LESS_THAN,K.GREATER_OR_EQUAL,K.LESS_OR_EQUAL,K.BETWEEN]),[x.DATE]:new Set([K.AFTER,K.BEFORE,K.BETWEEN]),[x.ID_ARRAY]:new Set([K.SOME_OF,K.NOT_SOME_OF]),[x.ENUM]:new Set([K.SOME_OF,K.NOT_SOME_OF]),[x.BOOLEAN]:new Set([K.SOME_OF,K.NOT_SOME_OF]),[x.REFERENCE]:new Set([K.SOME_OF,K.NOT_SOME_OF])};function Bd(t){if(t===void 0)return{ok:!0,dateRange:void 0};if(typeof t!="object"||t===null)return{ok:!1,reason:mt.INVALID_VALUE};let{start:e,end:n}=t;if(!(e instanceof Date)||!(n instanceof Date))return{ok:!1,reason:mt.INVALID_VALUE};let i=e.getTime(),r=n.getTime();return!Number.isFinite(i)||!Number.isFinite(r)||i>r?{ok:!1,reason:mt.INVALID_VALUE}:{ok:!0,dateRange:{start:new Date(i),end:new Date(r)}}}function Bs(t){if(xn(t))return YI(t);let e=Qe(t.field);if(e===null)return{ok:!1,reason:mt.UNKNOWN_FIELD};if(!VI[e.valueKind].has(t.operator))return{ok:!1,reason:mt.UNKNOWN_OPERATOR};if(t.operator===K.BETWEEN)return KI(t,e.valueKind);if(e.valueKind===x.NUMBER){let i=Us(t.value);return i===null?{ok:!1,reason:mt.INVALID_VALUE}:{ok:!0,criterion:{...t,value:i}}}if(e.valueKind===x.DATE){let i=Hs(t.value);return i===null?{ok:!1,reason:mt.INVALID_VALUE}:{ok:!0,criterion:{...t,value:i}}}let n=GI(t,e.valueKind);return n!==null?{ok:!1,reason:n}:e.valueKind===x.BOOLEAN?{ok:!0,criterion:{...t,value:[...new Set(t.value)]}}:e.valueKind===x.ID_ARRAY||e.valueKind===x.ENUM||e.valueKind===x.REFERENCE?{ok:!0,criterion:{...t,value:[...new Set(t.value.map(String))]}}:{ok:!0,criterion:t}}function KI(t,e){if(e===x.NUMBER){let n=Us(t.value),i=Us(t.valueTo);return n===null||i===null||n>i?{ok:!1,reason:mt.INVALID_VALUE}:{ok:!0,criterion:{...t,value:n,valueTo:i}}}if(e===x.DATE){let n=Hs(t.value),i=Hs(t.valueTo);return n===null||i===null||n.getTime()>i.getTime()?{ok:!1,reason:mt.INVALID_VALUE}:{ok:!0,criterion:{...t,value:n,valueTo:i}}}return{ok:!1,reason:mt.UNKNOWN_OPERATOR}}function YI(t){return xn(t)?typeof t.key!="string"||t.key.length===0?{ok:!1,reason:mt.UNKNOWN_FIELD}:t.operator!==K.SOME_OF&&t.operator!==K.NOT_SOME_OF?{ok:!1,reason:mt.UNKNOWN_OPERATOR}:!Array.isArray(t.value)||t.value.some(e=>typeof e!="string")?{ok:!1,reason:mt.INVALID_VALUE}:{ok:!0,criterion:t}:{ok:!1,reason:mt.UNKNOWN_FIELD}}function GI(t,e){let{value:n}=t;return e===x.BOOLEAN?Array.isArray(n)&&n.every(i=>typeof i=="boolean")?null:mt.INVALID_VALUE:e===x.ID_ARRAY||e===x.ENUM||e===x.REFERENCE?Array.isArray(n)&&n.every(i=>typeof i=="string"||typeof i=="number")?null:mt.INVALID_VALUE:Array.isArray(n)?mt.INVALID_VALUE:null}function Us(t){if(typeof t=="string"&&t.trim()===""||typeof t!="string"&&typeof t!="number")return null;let e=typeof t=="number"?t:Number(t);return Number.isFinite(e)?e:null}function Hs(t){let e;if(t instanceof Date)e=new Date(t.getTime());else if(typeof t=="string")e=new Date(t);else if(typeof t=="number")e=new Date(t);else return null;return Number.isFinite(e.getTime())?e:null}function S(t){return structuredClone(t)}function jd(t){return!(t.groups!==void 0&&t.groups.some(n=>n.criteria.length>0))&&t.criteria.length===0&&t.dateRange===void 0}function Wd(t,e,n){let i=t.getAllActivities();if(jd(e))return{visibleIds:Ud({activities:i,parentOf:a=>t.getParentId(a),filter:e,context:Un(n),viewAttributeCatalogs:t.getViewAttributeCatalogMap()}),projection:null};let r=Ca({activities:i,parentOf:a=>t.getParentId(a),filter:e,context:Un(n),viewAttributeCatalogs:t.getViewAttributeCatalogMap()});return{visibleIds:r.visibleIds,projection:r}}function $I(t){if(!t||t.length===0)return{ok:!0,groups:[]};let e=[];for(let n of t){let i=[];for(let r of n.criteria){let a=Bs(r);if(!a.ok)return{ok:!1,reason:a.reason};i.push(a.criterion)}e.push({criteria:i,logic:n.logic})}return{ok:!0,groups:e}}function Vd(t,e){let{adapter:n,hoursPerDay:i}=e,r=[];for(let p of t.criteria){let f=Bs(p);if(!f.ok)return{ok:!1,reason:f.reason};r.push(f.criterion)}let a=$I(t.groups);if(!a.ok)return{ok:!1,reason:a.reason};let o=Bd(t.dateRange);if(!o.ok)return{ok:!1,reason:o.reason};let s=S({criteria:r,logic:t.logic,...a.groups.length>0?{groups:a.groups}:{},...o.dateRange!==void 0?{dateRange:o.dateRange}:{}});n.setActiveFilter(jd(s)?null:s);let{visibleIds:l,projection:c}=Wd(n,s,i);n.setFilterProjection(c);let d=Fn(n,l);return{ok:!0,changes:{source:t,activities:[],links:[],calendars:[],trackingEvents:[],viewState:d}}}function Kd(t,e){let n=t.getActiveFilter();if(n===null)return[];let{visibleIds:i,projection:r}=Wd(t,n,e);return t.setFilterProjection(r),Fn(t,i)}var Vt={ASCENDING:"asc",DESCENDING:"desc"};function fi(t){return"kind"in t&&t.kind===wn&&"key"in t&&"direction"in t&&!("operator"in t)}var we={STANDARD:"standard",KEEP_WBS_IN_PLACE:"keepWbsInPlace"};var Y="0";function W(t){return t==null||t===0||t==="0"}function re(t){return W(t)?"0":String(t)}var js=Number.MAX_SAFE_INTEGER;function le(t,e){let n=yr(t,e);return Da(n,e.getOrderComparator?.()??null,e.getOrderMode?.()??we.STANDARD,r=>e.hasChildren(r)).map(r=>String(r.id))}function Da(t,e,n,i){return e===null?(t.sort(yi),t):n===we.KEEP_WBS_IN_PLACE?qI(t,e,i):(t.sort((r,a)=>e(r,a)||yi(r,a)),t)}function qI(t,e,n){let i=[],r=[];for(let a of t)n(a.id)?r.push(a):i.push(a);return i.sort((a,o)=>e(a,o)||yi(a,o)),r.sort(yi),t.length=0,t.push(...i,...r),t}function Gd(t){let e=[],n=r=>{e.push(r);let a=le(String(r.id),t);for(let o of a){let s=t.getActivity(o);s&&n(s)}},i=le("0",t);for(let r of i){let a=t.getActivity(r);a&&n(a)}return e}function $d(t,e,n){let i=n.getActivity(t);if(!i)return null;let r=qd(i),a=le(r,n),o=a.findIndex(s=>String(s)===String(t));if(o<=0)return null;for(let s=o-1;s>=0;s--){let l=a[s];if(l!==void 0&&!zI(e,l))return l}return null}function Ws(t,e){let n=e.getActivity(t);if(!n)return-1;let i=qd(n);return le(i,e).findIndex(a=>String(a)===String(t))}function yr(t,e){let n=String(t)==="0"?e.getRootIds?.()??e.getChildren("0"):e.getChildren(t),i=[];for(let r of n){let a=e.getActivity(r);a&&i.push(a)}return i}function yi(t,e){let n=Yd(t),i=Yd(e);return n!==i?n-i:String(t.id).localeCompare(String(e.id))}function Yd(t){let e=t.correlativeId,n=typeof e=="number"?e:Number(e);return Number.isFinite(n)?n:js}function qd(t){let e=t.parentId;return e===null?"0":e}function zI(t,e){return t.has(e)?!0:t.has(String(e))}function en(t){let e=[],n=i=>{let r=le(i,t);r.length>1&&e.push({parentId:i,childIds:r});for(let a of r)n(a)};return n("0"),e}function Vs(t,e){let n=[];for(let i of e){let r=le(i,t);r.length>1&&n.push({parentId:i,childIds:r})}return n}function JI(t){return fi(t)?typeof t.key!="string"||t.key.length===0?mt.UNKNOWN_FIELD:t.direction!==Vt.ASCENDING&&t.direction!==Vt.DESCENDING?mt.UNKNOWN_OPERATOR:null:Qe(t.field)===null?mt.UNKNOWN_FIELD:t.direction!==Vt.ASCENDING&&t.direction!==Vt.DESCENDING?mt.UNKNOWN_OPERATOR:null}function zd(t,e){let{adapter:n}=e;for(let o of t.rules){let s=JI(o);if(s!==null)return{ok:!1,reason:s}}let i=t.mode??we.STANDARD,r=t.rules.length===0?null:S({rules:t.rules,mode:i});return n.setActiveOrder(r),{ok:!0,changes:{source:t,activities:[],links:[],calendars:[],trackingEvents:[],order:en(n)}}}function Ks(t){return Number.isInteger(t)&&Number.isFinite(t)}function Jd(t){return t===Vt.ASCENDING||t===Vt.DESCENDING}function Xd(t){let e=t.startLevel??tn;return!Ks(e)||e<tn||!Ks(t.depth)||t.depth<ha||t.depth<e?null:{startLevel:e,depth:t.depth}}var hi=Symbol("invalid-group-criterion");function XI(t){let e=t.secondary;if(e==null)return null;if(typeof e!="object"||typeof e.attributeKey!="string"||e.attributeKey.length===0||e.attributeKey===t.attributeKey)return hi;let n=Xd(e);return n===null||!Jd(e.direction)?hi:{attributeKey:e.attributeKey,startLevel:n.startLevel,depth:n.depth,direction:e.direction}}function ZI(t){if(typeof t.attributeKey!="string"||t.attributeKey.length===0)return null;let e=Xd(t);if(e===null||!Jd(t.direction)||typeof t.includeWbs!="boolean"||!Array.isArray(t.collapsedIds)||t.collapsedIds.some(i=>typeof i!="string"))return null;let n=XI(t);return n===hi?null:{attributeKey:t.attributeKey,startLevel:e.startLevel,depth:e.depth,direction:t.direction,includeWbs:t.includeWbs,collapsedIds:new Set(t.collapsedIds),secondary:n}}function Ta(t){return{source:t,activities:[],links:[],calendars:[],trackingEvents:[]}}function Zd(t,e){let{adapter:n,hoursPerDay:i}=e;if(!Array.isArray(t.catalogs))return{ok:!1,reason:mt.INVALID_VALUE};n.setViewAttributeCatalogs(t.catalogs);let r=Kd(n,i),a=n.getActiveOrder();return{ok:!0,changes:{...Ta(t),viewState:r,...a===null?{}:{order:en(n)}}}}function Qd(t,e){let{adapter:n}=e;if(t.group===null)return n.setGroup(null),{ok:!0,changes:Ta(t)};let i=ZI(t.group);return i===null?{ok:!1,reason:mt.INVALID_VALUE}:(n.setGroup(i),{ok:!0,changes:Ta(t)})}function tu(t,e){let{adapter:n}=e,{wbsDepth:i}=t;return i!==null&&(!Ks(i)||i<ma)?{ok:!1,reason:mt.INVALID_VALUE}:(n.setWbsDepth(i),{ok:!0,changes:Ta(t)})}function eu(t,e){throw new Error(e)}var Ys={OWN_BASELINE:"own-baseline",RECURSIVE_LEAF_SUM:"recursive-leaf-sum",ZERO:"zero"},Gs={[L.PROJECT]:{alwaysSummary:!0,holdsConstraint:!1,carriesCustomId:!1,forcedDuration:null,ponderatorWeight:Ys.RECURSIVE_LEAF_SUM,promotesToProjectOnFirstChild:!1},[L.TASK]:{alwaysSummary:!1,holdsConstraint:!0,carriesCustomId:!0,forcedDuration:null,ponderatorWeight:Ys.OWN_BASELINE,promotesToProjectOnFirstChild:!0},[L.MILESTONE]:{alwaysSummary:!1,holdsConstraint:!0,carriesCustomId:!0,forcedDuration:0,ponderatorWeight:Ys.ZERO,promotesToProjectOnFirstChild:!0}};function he(t,e){return e||fr(t)&&Gs[t].alwaysSummary}function xe(t){return t===L.MILESTONE}function nn(t){return fr(t)&&Gs[t].promotesToProjectOnFirstChild}var $s=L.PROJECT,mi=L.TASK;function hr(t,e){return e===0?L.MILESTONE:t===0&&e>0?L.TASK:null}var B={ID:"id",PROPLANNER_ID:"proplannerId",PARENT:"parentId",NAME:"name",DESCRIPTION:"description",TYPE:"type",START_DATE:"startDate",END_DATE:"endDate",DURATION_HOURS:"durationHours",CONSTRAINT_TYPE:"constraintType",CONSTRAINT_DATE:"constraintDate",AUTO_SCHEDULING:"autoScheduling",CALENDAR_ID:"calendarId",ASSIGNED_DEFAULT_CALENDAR:"assignedDefaultCalendar",DATE_ORIGIN:"dateOrigin",PROGRESS:"progress",COST:"cost",USED_COST:"usedCost",REAL_COST:"realCost",WORK_HOURS:"workHours",REAL_WORK_HOURS:"realWorkHours",PONDERATOR:"ponderator",HAS_CUSTOM_PONDERATOR:"hasCustomPonderator",CORRELATIVE_ID:"correlativeId",UNIQUE_CORRELATIVE_ID:"uniqueCorrelativeId",CUSTOM_ID:"customId",SUBCONTRACT_ID:"subcontractId",IS_LOOKAHEAD:"isLookahead",HAS_LOOKAHEAD_TASKS:"hasLookaheadTasks",NEW_ACTIVITIES_ARRAY:"newActivityIds",HAS_NEW_ACTIVITIES:"hasNewActivities",IS_NEW_ACTIVITY:"isNewActivity",PENDING_REQUEST_IDS:"pendingRequestIds",RESPONSABLE_IDS:"responsableIds",TAG_IDS:"tagIds",BASELINE_POINTS:"baselinePoints",BASELINE_SNAPSHOT:"baselineSnapshot",SUM_OF_DURATION_RECURSIVELY:"recursiveDurationHours",CALENDAR_DURATION:"calendarDuration",BASELINE_VARIANCE_DAYS:"baselineVarianceDays",IS_CRITICAL:"isCritical",FREE_SLACK_HOURS:"freeSlackHours",EXPECTED_PROGRESS:"expectedProgress",EXPECTED_PROGRESS_BASELINE:"expectedProgressBaseline",STATUS:"status",CRITICAL_PATH:"criticalPath",P6:"p6"},Jt={ID:"id",SOURCE:"source",TARGET:"target",TYPE:"type",LAG:"lag",FREE_SLACK_HOURS:"freeSlackHours",IS_CRITICAL:"isCritical",SOURCE_LAG:"_sourceLag",TARGET_LAG:"_targetLag",TRUE_LAG:"_trueLag",SUMMARY_SOURCE_ID:"_summarySourceId",SUMMARY_TARGET_ID:"_summaryTargetId",LAG_ACTIVITY_ID:"_lagActivityId",GANTT_ID:"ganttId",SECTOR_ID:"sectorId",PROPLANNER_ID:"proplannerId"};function nu(t,e){return()=>e()===t}var qs=typeof window>"u",QI=!qs&&typeof MessageChannel<"u";function St(){return QI?new Promise(t=>{let e=new MessageChannel;e.port1.onmessage=()=>{e.port1.close(),e.port2.close(),t()},e.port2.postMessage(null)}):Promise.resolve()}async function _a(t,e){return performance.now()-t<kd.YIELD_SLICE_MS?{aborted:!1,newSliceStart:t}:(await St(),e()?{aborted:!1,newSliceStart:performance.now()}:{aborted:!0,newSliceStart:performance.now()})}async function gi(t){return qs||await St(),t()?{aborted:!1}:{aborted:!0}}function Ee(t,e){let{inDegree:n,successors:i}=tS(t,e),r=eS(n),a=nS(r,n,i),o=a.length<t.length,s=o?iS(t,a):[],l=[...a].reverse();return{ordered:a,reversed:l,hasCycles:o,cycleNodes:s}}function tS(t,e){let n=new Map,i=new Map;for(let r of t)n.set(r,0),i.set(r,[]);for(let r of e){let a=r.source,o=r.target;!n.has(a)||!n.has(o)||(i.get(a).push(o),n.set(o,(n.get(o)??0)+1))}return{inDegree:n,successors:i}}function eS(t){let e=new $t;for(let[n,i]of t)i===0&&e.enqueue(n);return e}function nS(t,e,n){let i=[];for(;!t.isEmpty();){let r=t.dequeue();i.push(r);for(let a of n.get(r)??[]){let o=(e.get(a)??1)-1;e.set(a,o),o===0&&t.enqueue(a)}}return i}function iS(t,e){let n=new Set(e);return t.filter(i=>!n.has(i))}var Ea=class{cached=null;invalidate(){this.cached=null}get(e,n){return this.cached?this.cached:(this.cached=Ee(e,n),this.cached)}};function iu(t,e){let n=[];for(let i of t)e.has(i)&&n.push(i);return n}var Bt=0,gt=100,zs=100+Number.EPSILON*100*2;function Ai(t){return t>=100&&t<=zs}function Hn(t){return t===0}function Pa(t,e){let n=e.getActivity(t);return n?he(n.type,e.getChildren(t).length>0):!1}function Ra(t,e,n){let i=String(e),r=n.getActivity(t);for(;r?.parentId&&String(r.parentId)!=="0";){if(String(r.parentId)===i)return!0;r=n.getActivity(r.parentId)}return!1}function ka(t,e,n){let i=Pa(t,n);return Pa(e,n)&&Ra(t,e,n)||i&&Ra(e,t,n)}function ou(t,e){let n=[],i=[t];for(;i.length>0;){let r=i.pop(),a=e.getChildren(r);if(a.length===0){String(r)!==String(t)&&n.push(r);continue}for(let o of a)i.push(o)}return n}function rS(t){let e=new Map;for(let n of t)ru(e,String(n.source),n),ru(e,String(n.target),n);return e}function ru(t,e,n){let i=t.get(e);if(i){i.push(n);return}t.set(e,[n])}function aS(t,e,n,i){if(t.length<=1)return t;let r=new Set(t.map(String)),a=[];for(let o of t)oS(o,r,e,n,i)||a.push(o);return a.length>0?a:t}function oS(t,e,n,i,r){let a=String(t),o=n.getActivity(t);if(!o||o.autoScheduling===!1)return!1;let s=i.get(a)??[];for(let l of s)if(sS(l,a,o,e,n,r))return!0;return!1}function sS(t,e,n,i,r,a){if(lS(t)||!(a?String(t.source)===e:String(t.target)===e))return!1;let s=cS(t,e);if(!i.has(String(s)))return!1;let l=r.getActivity(s);return!!(l?.autoScheduling!==!1&&l&&dS(t,n,l))}function lS(t){return t.source===t.target}function cS(t,e){return String(t.source)===e?t.target:t.source}function dS(t,e,n){let i=t.lag??0,r=Math.abs(i);return String(t.target)===String(n.id)&&r<=n.durationHours||String(t.target)===String(e.id)&&r<=e.durationHours}function La(t,e){let n=[],i=rS(t),r=0;for(let a of t){let o=Pa(a.source,e),s=Pa(a.target,e);if(uS(a,o,s,e))continue;if(!o&&!s){n.push(a);continue}let l=au(a.source,o,e,i,!0),c=au(a.target,s,e,i,!1);r=gS(n,l,c,a,e,r,i)}return n}function uS(t,e,n,i){return n&&Ra(t.source,t.target,i)||e&&Ra(t.target,t.source,i)}function au(t,e,n,i,r){return e?aS(ou(t,n),n,i,r):[t]}function su(t,e,n){let i=ou(t,e);if(i.length===0)return null;let r=null,a=null;for(let o of i){let s=n(o);if(!s)continue;(r===null||s.startDate<r)&&(r=s.startDate),(a===null||s.endDate>a)&&(a=s.endDate)}return r===null||a===null?null:{startDate:r,endDate:a}}function Ii(t,e,n=i=>e.getActivity(i)){return su(t,e,n)}function pS(t,e,n){return t?e?n.calculateDuration({startDate:e.startDate,endDate:e.endDate,task:t}):t.durationHours:0}function fS(t,e,n,i){if(!e)return 0;let r=i.getActivity(t);return!n||!r?-e.durationHours:-i.calculateDuration({startDate:n.startDate,endDate:r.endDate,task:e})}function yS(t,e){let n=String(t);return(e.get(n)??[]).some(r=>String(r.target)===n)}function hS(t,e,n,i,r){if(!r&&yS(t,i))return 0;let a=n.getActivity(t);return!e||!a?0:n.calculateDuration({startDate:e,endDate:a.startDate,task:a})}function mS(t,e){let n=e.getActivity(t.source),i=e.getActivity(t.target),r=Ii(t.source,e),a=Ii(t.target,e),o=su(t.target,e,c=>{let d=e.getActivity(c);if(!d)return null;let u=d.constraintDate!==null&&(d.constraintType===_.MSO||d.constraintType===_.MFO);return d.autoScheduling&&d.progress!==100&&!u?{startDate:d.startDate,endDate:d.endDate}:null}),s=t.type===M.START_TO_START||t.type===M.START_TO_FINISH,l=t.type===M.FINISH_TO_FINISH||t.type===M.START_TO_FINISH;return{source:n,sourceBounds:r,targetStart:o?.startDate??i?.startDate,targetBounds:o,hasFrozenTargetStart:!!(a&&o&&a.startDate<o.startDate),targetEndpointIsFinish:l,userLag:t.lag??0,sourceEndpointIsStart:s,summarySourceId:s&&r?t.source:void 0,finishAnchoredSummaryTargetId:l&&o?t.target:void 0}}function gS(t,e,n,i,r,a,o){let s=mS(i,r),{source:l,sourceBounds:c,targetStart:d,userLag:u}=s,{sourceEndpointIsStart:p,targetBounds:f,targetEndpointIsFinish:y,hasFrozenTargetStart:h,summarySourceId:m,finishAnchoredSummaryTargetId:g}=s,C=a;for(let b of e){let E=p?fS(b,l,c,r):0;for(let P of n){if(String(b)===String(P))continue;let N=y?-pS(r.getActivity(P),f,r):0,I=hS(P,d,r,o,y);t.push(AS(i,b,P,C,E,N,u+I,m,g??((I!==0||h)&&N===0?i.target:void 0),f?i.target:void 0)),C+=1}}return C}function AS(t,e,n,i,r,a,o,s,l,c){return{id:`virtual_${t.id}_${i}`,source:e,target:n,type:t.type,lag:t.lag,freeSlackHours:null,isCritical:!1,...c===void 0?{}:{_lagActivityId:c},_sourceLag:r,_targetLag:a,_trueLag:o,...s===void 0?{}:{_summarySourceId:s},...l===void 0?{}:{_summaryTargetId:l}}}var Oa=class{invalidate(){}get(e,n){return La(e,n)}};function IS(t){let e=new Map,n=i=>(e.has(i)||e.set(i,new Set),e.get(i));for(let i of t)n(i.source).add(i.id),n(i.target).add(i.id);return{neighbors:e}}function SS(t,e,n){let i=new Set,r=new Map,a=new $t;for(a.enqueue(t);!a.isEmpty();){let o=a.dequeue(),s=String(o);if(i.has(s))continue;i.add(s);let l=n.neighbors.get(o);if(l)for(let c of l){let d=e.get(c);if(!d)continue;let u=`${d.source}-${d.target}-${d.type}`;r.has(u)||r.set(u,d);let p=String(d.source)===s?d.target:d.source;i.has(String(p))||a.enqueue(p)}}return Array.from(r.values())}function lu(t,e){let n=new Map;for(let o of e)n.set(o.id,o);let i=IS(e),r=SS(t,n,i),a=new Set([String(t)]);for(let o of r)a.add(String(o.source)),a.add(String(o.target));return{activityIds:a,links:r}}var cu=36e5,du=1;function rn(t,e){return new Date(t.getTime()+e*cu)}function mr(t){return new Date(t.getTime()+du)}function Si(t){return new Date(t.getTime()-du)}function uu(t,e){return(e.getTime()-t.getTime())/cu}function pu(t,e,n){let i=n.type===M.FINISH_TO_START,r=n.type===M.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 a=n.lag??0;switch(n.type){case M.FINISH_TO_START:return{sourceLag:0,targetLag:0,trueLag:a,isFS:i,isFF:r,isZeroDurationCase:!1};case M.START_TO_START:return{sourceLag:-t.durationHours,targetLag:0,trueLag:a,isFS:i,isFF:r,isZeroDurationCase:!1};case M.FINISH_TO_FINISH:return{sourceLag:0,targetLag:-e.durationHours,trueLag:a,isFS:i,isFF:r,isZeroDurationCase:!1};case M.START_TO_FINISH:return{sourceLag:-t.durationHours,targetLag:-e.durationHours,trueLag:a,isFS:i,isFF:r,isZeroDurationCase:!1};default:return{sourceLag:0,targetLag:0,trueLag:a,isFS:i,isFF:r,isZeroDurationCase:!1}}}function vS(t,e,n,i){if(t._summarySourceId===void 0)return null;let r=n.getActivity(t._summarySourceId);if(!r)return null;let a=Ii(t._summarySourceId,n,i);return a?-n.calculateDuration({startDate:a.startDate,endDate:e.endDate,task:r}):null}function CS(t,e,n,i,r){let a=e.durationHours===0&&r;return{successorStart:i.getClosestWorkTime({date:t.endDate,dir:a?"past":"future",task:e}),link:n}}function DS(t,e,n,i){return n===null?new Date(t.endDate):i.getClosestWorkTime({date:t.endDate,dir:"future",task:e})}function ba(t,e,n,i){return n===null?rn(t,e):i.calculateEndDate({startDate:t,durationHours:e,task:n})}function TS(t,e,n){return e===null?new Date(t.startDate):n.getClosestWorkTime({date:t.startDate,dir:"past",task:e})}function gr(t,e,n,i,r=e,a){let{sourceLag:o,targetLag:s,trueLag:l,isFS:c,isFF:d}=pu(t,e,n),u=vS(n,t,i,a)??o,p=n._lagActivityId===void 0?null:i.getActivity(n._lagActivityId),f=u+s+l,y=e.durationHours===0;if(!(y?f!==0:u!==0||s!==0||l!==0)&&(!p||y&&u===0&&s===0&&l===0))return CS(t,e,n,i,c||d);let g=DS(t,c?p??e:t,r,i);if(u!==0&&(g=i.calculateEndDate({startDate:g,durationHours:u,task:t})),p){g=ba(g,n.lag??0,p,i),g=i.getClosestWorkTime({date:g,dir:c||n.type===M.START_TO_START?"future":"past",task:p});let C=s+l-(n.lag??0);C!==0&&(g=i.calculateEndDate({startDate:g,durationHours:C,task:e}))}else s!==0&&(g=i.calculateEndDate({startDate:g,durationHours:s,task:e})),l!==0&&(g=ba(g,l,r,i));if(e.durationHours===0){if(c||d)return{successorStart:i.getClosestWorkTime({date:g,dir:"past",task:e}),link:n};let C=new Date(Date.UTC(g.getUTCFullYear(),g.getUTCMonth(),g.getUTCDate()));return{successorStart:i.getClosestWorkTime({date:C,dir:"future",task:e}),link:n}}return{successorStart:i.getClosestWorkTime({date:g,dir:"future",task:e}),link:n}}function Na(t,e,n,i,r=t){let{sourceLag:a,targetLag:o,trueLag:s}=pu(e,t,n),l=n._lagActivityId===void 0?null:i.getActivity(n._lagActivityId),c=l?new Date(t.startDate):TS(t,r,i);if(l){let d=o+s-(n.lag??0);d!==0&&(c=i.calculateEndDate({startDate:c,durationHours:-d,task:t})),c=ba(c,-(n.lag??0),l,i)}else s!==0&&(c=ba(c,-s,r,i)),o!==0&&(c=i.calculateEndDate({startDate:c,durationHours:-o,task:t}));return a!==0&&(c=i.calculateEndDate({startDate:c,durationHours:-a,task:e})),c}function fu(t,e,n){for(let i of t){let r=e.getActivity(i);if(!r)continue;let a=r.constraintType;if(!a||a===_.ASAP||a===_.ALAP)continue;let o=Je(r,e);!o.earliestStart&&!o.latestStart&&!o.earliestEnd&&!o.latestEnd||n.set(i,{activityId:i,startDate:r.startDate,endDate:r.endDate,drivingLinkId:null,kind:_.ASAP,conflict:!1,earliestStart:o.earliestStart,latestStart:o.latestStart,earliestEnd:o.earliestEnd,latestEnd:o.latestEnd})}}function vi(t,e,n){let i={earliestStart:e.earliestStart??null,latestStart:e.latestStart??null,earliestEnd:e.earliestEnd??null,latestEnd:e.latestEnd??null},r=e.earliestSchedulingStart??e.latestSchedulingStart??null,a;r===null?a=bs(t.startDate,i):vd(r,i)?a=r:a=bs(r,i),e.startDate=a,e.endDate=n.calculateEndDate({startDate:a,durationHours:t.durationHours,task:t})}function yu(t,e){if(!t||!e)return new Date;let{constraintType:n,constraintDate:i}=t;if(!n||!i)return e;switch(n){case _.MSO:case _.MFO:return new Date(i);case _.SNET:case _.FNET:return i>e?new Date(i):e;case _.SNLT:case _.FNLT:return i<e?new Date(i):e;default:return e}}function _S(t,e){return e.length?e.some(n=>String(n)===String(t)):!1}function hu(t,e,n){return Js(t.id,e,n)?{startDate:t.startDate,endDate:t.endDate}:{startDate:t.startDate,endDate:t.endDate}}function Js(t,e,n){return e.dragWithMultiple&&_S(t,n)}function mu(t,e,n){let i=new Map;for(let r of t){if(r.type!==M.FINISH_TO_FINISH&&r.type!==M.START_TO_FINISH)continue;let a=r._summaryTargetId;if(a===void 0||i.has(a))continue;let o=!1,s=new Map,l=null,c=null,d=Ii(a,e,f=>{let y=e.getActivity(f);if(!y)return null;let h=n(f);s.set(f,h.startDate),(!y.autoScheduling||y.progress===100||y.constraintType!==_.ASAP)&&(o=!0);for(let C of e.getIncomingLinkIds(f)){let b=e.getLink(C);b&&String(b.source)!==String(a)&&!e.isChildOf(b.source,a)&&(o=!0)}let m=y.constraintDate!==null&&(y.constraintType===_.MSO||y.constraintType===_.MFO);return y.autoScheduling&&y.progress!==100&&!m&&(l===null||h.endDate>l||h.endDate.getTime()===l.getTime()&&f<(c??f))&&(l=h.endDate,c=f),h}),u=new Set,p=c===null?[]:[c];for(;p.length>0;){let f=p.pop();if(!u.has(f)){u.add(f);for(let y of[...e.getIncomingLinkIds(f),...e.getOutgoingLinkIds(f)]){let h=e.getLink(y);if(!h)continue;let m=String(h.source)===String(f)?h.target:h.source;s.has(m)&&!u.has(m)&&p.push(m)}}}i.set(a,o&&d?{endDate:d.endDate,movableEnd:l,starts:s,drivingLeafIds:u}:null)}return i}async function Xs(t,e,n,i,r,a,o=!1){let s=new Map;for(let f of e){let y=String(f.target);s.has(y)||s.set(y,[]),s.get(y).push(f)}let l=f=>{let y=a.get(f);if(y?.startDate&&y.endDate)return{startDate:y.startDate,endDate:y.endDate};let h=n.getActivity(f);return h?{startDate:h.startDate,endDate:h.endDate}:{startDate:new Date,endDate:new Date}},c=mu(e,n,l),d=n.getFlags(),u=i.draggedIds??[],p=performance.now();for(let f of t){let y=await _a(p,r);if(y.aborted)return a;p=y.newSliceStart;let h=n.getActivity(f);if(!h||!h.autoScheduling||h.progress===100||ES(h,n))continue;let m=s.get(String(f))??[],g=null,C=null,b=!1;for(let R of m){let k=n.getActivity(R.source);if(!k)continue;let O=l(R.source),F=O.startDate.getTime()!==k.startDate.getTime()||O.endDate.getTime()!==k.endDate.getTime(),U={...k,startDate:O.startDate,endDate:O.endDate},$=hu(U,d,u),ut={...U,startDate:$.startDate,endDate:$.endDate},q=Js(R.source,d,u)?{...R,lag:0}:R,At=q._summaryTargetId===void 0||q.type!==M.FINISH_TO_FINISH&&q.type!==M.START_TO_FINISH?null:c.get(q._summaryTargetId);if(At){if(o)continue;let Gt=gr(ut,{...h,durationHours:0},{...q,_targetLag:0,_trueLag:q.lag},n,h,l).successorStart,yt=n.getActivity(q._summaryTargetId)??h;if(At.endDate>=Gt||n.calculateDuration({startDate:At.endDate,endDate:Gt,task:yt})===0||At.movableEnd===null||!At.drivingLeafIds.has(f))continue;q={...q,_targetLag:-n.calculateDuration({startDate:At.starts.get(f)??h.startDate,endDate:At.movableEnd,task:h}),_trueLag:q.lag}}let Pt=!1,ne=gr(ut,h,q,n,h,Gt=>{let yt=l(Gt),ie=n.getActivity(Gt);return ie&&(yt.startDate.getTime()!==ie.startDate.getTime()||yt.endDate.getTime()!==ie.endDate.getTime())&&(Pt=!0),yt});(!g||ne.successorStart>g)&&(g=ne.successorStart,C=String(R.id),b=R._summaryTargetId!==void 0&&!F&&!Pt&&(R._targetLag===0||i.preventSummaryTargetPullback===!0))}g!==null&&b&&g<h.startDate&&(g=new Date(h.startDate));let P=a.get(f),N=P?{...P}:{activityId:f,startDate:h.startDate,endDate:h.endDate,drivingLinkId:null,kind:_.ASAP,conflict:!1},I=N.earliestStart||N.latestStart||N.earliestEnd||N.latestEnd;if(!(!g&&!I)){if(g){let R=g;h.type===L.MILESTONE&&(R=yu(h,g)),N.drivingLinkId=C,N.startDate=R,N.endDate=n.calculateEndDate({startDate:R,durationHours:h.durationHours,task:h}),N.earliestSchedulingStart=R,N.earliestSchedulingEnd=N.endDate}else h.constraintType===_.MSO?N.earliestStart&&(N.startDate=N.earliestStart,N.endDate=N.earliestEnd??n.calculateEndDate({startDate:N.earliestStart,durationHours:h.durationHours,task:h})):h.constraintType===_.MFO&&N.latestStart&&(N.startDate=N.latestStart,N.endDate=N.latestEnd??n.calculateEndDate({startDate:N.latestStart,durationHours:h.durationHours,task:h}));vi(h,N,n),a.set(f,N)}}return a}function ES(t,e){return he(t.type,e.getChildren(t.id).length>0)}async function gu(t,e,n,i,r,a){let o=new Map(n),s=i.getAllActivities(),l=s.length,c=[];for(let m of s)m.constraintType===_.ALAP&&c.push(m.id);if(c.length===0)return o;let d=new Map,u=new Map;for(let m of e){let g=String(m.source);d.has(g)||d.set(g,[]),d.get(g).push(m);let C=String(m.target);u.has(C)||u.set(C,[]),u.get(C).push(m)}let p=m=>{let g=o.get(m);if(g)return{startDate:g.startDate,endDate:g.endDate};let C=i.getActivity(m);return C?{startDate:C.startDate,endDate:C.endDate}:{startDate:new Date,endDate:new Date}},f=m=>!m.parentId||W(m.parentId)?i.getProjectEnd():p(m.parentId).endDate,y=(m,g)=>{let C=m,b=0;for(;C&&!W(C)&&b++<l+1;){if(String(C)===String(g))return!0;let E=i.getActivity(C);if(!E||!E.parentId)break;C=E.parentId}return!1},h=performance.now();for(let m of t){let g=await _a(h,a);if(g.aborted)return o;h=g.newSliceStart;let C=i.getActivity(m);if(!C||C.constraintType!==_.ALAP||!C.autoScheduling||C.progress===100||he(C.type,i.getChildren(m).length>0))continue;let b=f(C),E=b,P=null,N=null,I=!1,R=d.get(String(m))??[];for(let yt of R){if((yt.lag??0)<0)continue;let ie=i.getActivity(yt.target);if(!ie||ie.autoScheduling===!1)continue;let ra=p(yt.target),aa={...ie,startDate:ra.startDate,endDate:ra.endDate},oa=Na(aa,C,yt,i);(E===null||oa<E)&&(E=oa),(P===null||oa<P)&&(P=oa,N=yt.type,I=C.parentId&&!W(C.parentId)?y(yt.target,C.parentId):!1)}if(P!==null)if(I||b===null)E=P;else{let yt=p(m).endDate,ie=yt.getTime()>b.getTime()?yt:b;E=P<ie?P:ie}else{if(b===null||E===null)continue;E>b&&(E=b)}if(E===null)continue;let O=(u.get(String(m))??[]).some(yt=>yt.type===M.FINISH_TO_START||yt.type===M.FINISH_TO_FINISH),F=new Date(Date.UTC(E.getUTCFullYear(),E.getUTCMonth(),E.getUTCDate())),U=()=>i.getClosestWorkTime({date:F,dir:"past",task:C}),$=i.getClosestWorkTime({date:E,dir:"future",task:C}).getTime()===E.getTime(),ut;C.durationHours===0&&P===null?ut=O&&$?U():i.getClosestWorkTime({date:E,dir:"past",task:C}):C.durationHours===0?P!==null&&N===M.FINISH_TO_START&&E.getTime()===P.getTime()?ut=E:O?ut=U():ut=i.getClosestWorkTime({date:E,dir:"future",task:C}):ut=i.getClosestWorkTime({date:E,dir:"future",task:C});let q=i.calculateEndDate({startDate:ut,durationHours:-C.durationHours,task:C}),At=o.get(m),Pt=At?{...At}:{activityId:m,startDate:q,endDate:ut,drivingLinkId:null,kind:_.ALAP,conflict:!1};Pt.startDate=q,Pt.endDate=ut,Pt.drivingLinkId=null,Pt.kind=_.ALAP;let ne=Pt.earliestSchedulingStart??null;Pt.earliestSchedulingStart=null,Pt.earliestSchedulingEnd=null;let Gt=ne!==null&&ne.getTime()>q.getTime()?ne:q;Pt.latestSchedulingStart=Gt,Pt.latestSchedulingEnd=Gt===q?ut:i.calculateEndDate({startDate:Gt,durationHours:C.durationHours,task:C}),vi(C,Pt,i),o.set(m,Pt)}return o}var Ci={warn(){},error(){}};var PS=864e5;function Pe(t){if(t.type===L.MILESTONE)return 0;let e=t.startDate?.getTime(),n=t.endDate?.getTime();return e==null||n==null||Number.isNaN(e)||Number.isNaN(n)?null:Math.floor((n-e)/PS)+1}function Ar(t,e){e.cancelled||e.updatedIds.length===0||t.batchUpdate(()=>{for(let n of e.updatedIds){let i=e.plans.get(n);if(!i)continue;let r=t.getLiveActivity(n);r&&(r.startDate=i.startDate,r.endDate=i.endDate,r.calendarDuration=Pe(r),t.updateActivity(n))}})}function Zs(t,e){let n=String(e.source),i=String(e.target);if(n===i)return!0;let r=new Map;for(let a of t){let o=String(a.source),s=String(a.target),l=r.get(o)??[];l.push(s),r.set(o,l)}return RS(r,i,n)}function Ir(t){let e=new Map,n=new Map;for(let a of t){let o=String(a.source),s=String(a.target),l=e.get(o)??[];l.push(s),e.set(o,l),n.set(o,n.get(o)??0),n.set(s,(n.get(s)??0)+1)}let i=new $t;for(let[a,o]of n)o===0&&i.enqueue(a);let r=0;for(;!i.isEmpty();){let a=i.dequeue();r+=1;for(let o of e.get(a)??[]){let s=n.get(o)-1;n.set(o,s),s===0&&i.enqueue(o)}}return r!==n.size}function RS(t,e,n){if(e===n)return!0;let i=new Set([e]),r=new $t;for(r.enqueue(e);!r.isEmpty();){let a=r.dequeue(),o=t.get(a)??[];for(let s of o){if(s===n)return!0;i.has(s)||(i.add(s),r.enqueue(s))}}return!1}function Fa(t){let e=kS(t);for(let n of e.adjacency.keys())e.records.has(n)||LS(n,e);return e.components}function kS(t){let e=new Map,n=new Set;for(let i of t){let r=String(i.source),a=String(i.target),o=Au(e,r);if(Au(e,a),r===a){n.add(r);continue}o.push(a)}return{adjacency:e,selfLooped:n,records:new Map,componentStack:[],nextIndex:0,components:[]}}function Au(t,e){let n=t.get(e);if(n)return n;let i=[];return t.set(e,i),i}function LS(t,e){let n=[];for(n.push({node:t,record:Iu(t,e),neighborCursor:0});n.length>0;){let i=n[n.length-1];if(i===void 0)break;let r=e.adjacency.get(i.node)??[];if(i.neighborCursor<r.length){let s=r[i.neighborCursor];if(i.neighborCursor+=1,s===void 0)continue;OS(i,s,n,e);continue}n.pop();let a=n[n.length-1];a&&i.record.lowLink<a.record.lowLink&&(a.record.lowLink=i.record.lowLink),i.record.lowLink===i.record.visitIndex&&bS(i.node,e)}}function OS(t,e,n,i){let r=i.records.get(e);if(!r){n.push({node:e,record:Iu(e,i),neighborCursor:0});return}r.onStack&&r.visitIndex<t.record.lowLink&&(t.record.lowLink=r.visitIndex)}function Iu(t,e){let n={visitIndex:e.nextIndex,lowLink:e.nextIndex,onStack:!0};return e.nextIndex+=1,e.records.set(t,n),e.componentStack.push({node:t,record:n}),n}function bS(t,e){let n=[];for(;;){let o=e.componentStack.pop();if(o===void 0||(o.record.onStack=!1,n.push(o.node),o.node===t))break}let i=n[0],r=n.length===1&&i!==void 0&&e.selfLooped.has(i);(n.length>1||r)&&e.components.push(n)}function Sr(t,e,n){let i=n?new Qs(t,n):t;return La([...e],i)}var Qs=class{constructor(e,n){this.base=e;e.isWorkTime!==void 0&&(this.isWorkTime=e.isWorkTime.bind(e));for(let[i,r]of n.reparented){let a=String(i),o=r===null||W(r)?null:r,s=e.getActivity(i)?.parentId??null,l=s===null||W(s)?null:String(s),c=o===null?null:String(o);if(l!==c){if(this.reparented.set(a,o),l!==null){let d=this.movedOutByParent.get(l)??new Set;d.add(a),this.movedOutByParent.set(l,d)}if(c!==null){let d=this.movedInByParent.get(c)??[];d.push(i),this.movedInByParent.set(c,d)}}}}base;isWorkTime;reparented=new Map;movedOutByParent=new Map;movedInByParent=new Map;withOverride(e){if(!e)return null;let n=this.reparented.get(String(e.id));return n===void 0?e:{...e,parentId:n}}getActivity(e){return this.withOverride(this.base.getActivity(e))}getLiveActivity(e){return this.withOverride(this.base.getLiveActivity(e))}getAllActivities(){return this.base.getAllActivities().map(e=>this.withOverride(e)??e)}getChildren(e){let n=String(e),i=this.movedOutByParent.get(n),r=this.base.getChildren(e),a=i?r.filter(s=>!i.has(String(s))):[...r],o=this.movedInByParent.get(n);return o&&a.push(...o),a}getParent(e){let n=this.reparented.get(String(e));return n===void 0?this.base.getParent(e):n===null?null:this.getActivity(n)}isChildOf(e,n){let i=String(n),r=new Set,a=this.getActivity(e);for(;a;){let o=a.parentId;if(o===null||W(o))return!1;let s=String(o);if(s===i)return!0;if(r.has(s))return!1;r.add(s),a=this.getActivity(o)}return!1}getAllLinks(){return this.base.getAllLinks()}getAllIds(){return this.base.getAllIds()}getLink(e){return this.base.getLink(e)}activityExists(e){return this.base.activityExists(e)}getOutgoingLinkIds(e){return this.base.getOutgoingLinkIds(e)}getIncomingLinkIds(e){return this.base.getIncomingLinkIds(e)}getClosestWorkTime(e){return this.base.getClosestWorkTime(e)}calculateEndDate(e){return this.base.calculateEndDate(e)}calculateDuration(e){return this.base.calculateDuration(e)}batchUpdate(e){this.base.batchUpdate(e)}updateActivity(e){this.base.updateActivity(e)}getFlags(){return this.base.getFlags()}getProjectEnd(){return this.base.getProjectEnd()}};function an(t){let{port:e,proposedPort:n,currentLinks:i,proposedLinks:r,proposal:a}=t,o=Sr(n??e,r,a);if(!Ir(o))return{ok:!0};let s=Sr(e,i),l=Su(s),d=[...Su(o)].filter(u=>!l.has(u));return d.length===0?{ok:!0}:{ok:!1,newlyCyclicActivityIds:d}}function Su(t){let e=new Set;for(let n of Fa(t))for(let i of n)e.add(i);return e}function xa(t,e,n){return n.getChildren(t).length>0||n.getChildren(e).length>0}function Re(t,e){switch(t.kind){case vt.CREATE:return NS(t,e);case vt.UPDATE:return FS(t,e.port,e.rejectParentLinkMutations??!1);case vt.DELETE:return wS(t,e)}}function vr(t,e){if(t.length===0)return{applied:!0};let n=e.port.getAllLinks(),i=new Map,r=[];for(let c of n){let d=Ma(c);i.has(d)||i.set(d,c.id),r.push({source:c.source,target:c.target})}let a=Ir(r),o=null;for(let{operation:c,linkId:d}of t){if(String(c.source)===String(c.target)){o={applied:!1,rejected:ht.SELF_LINK};break}if(!e.port.getActivity(c.source)||!e.port.getActivity(c.target)){o={applied:!1,rejected:ht.ACTIVITY_MISSING};break}if(e.rejectParentLinkMutations&&xa(c.source,c.target,e.port)){o={applied:!1,rejected:ht.HIERARCHY_LINK};break}if(ka(c.source,c.target,e.port)){o={applied:!1,rejected:ht.HIERARCHY_LINK};break}let u=Ma(c),p=i.get(u);if(p!==void 0){o={applied:!1,rejected:ht.DUPLICATE,linkId:p};break}if(i.set(u,d),a&&Zs(r,{source:c.source,target:c.target}))return{applied:!1,rejected:ht.CYCLE};r.push({source:c.source,target:c.target})}if(!a&&Ir(r))return{applied:!1,rejected:ht.CYCLE};if(o)return o;let s=[...n,...t.map(({operation:c,linkId:d})=>({id:d,source:c.source,target:c.target,type:c.type,lag:c.lag,freeSlackHours:null,isCritical:!1}))];return an({port:e.port,currentLinks:n,proposedLinks:s}).ok?{applied:!0}:{applied:!1,rejected:ht.CYCLE}}function Ua(t,e){if(t.length===0)return{applied:!0};let n=vr(t,e);if(!n.applied)return n;for(let{operation:i,linkId:r}of t){let a=e.preserved?.get(r);e.port.addLink({id:r,source:i.source,target:i.target,type:i.type,lag:i.lag,freeSlackHours:null,isCritical:!1,...a?.ganttId===void 0?{}:{ganttId:a.ganttId},...a?.sectorId===void 0?{}:{sectorId:a.sectorId},...a?.proplannerId===void 0?{}:{proplannerId:a.proplannerId}})}return{applied:!0}}function Ma(t){return JSON.stringify([String(t.source),String(t.target),t.type])}function NS(t,e){let{port:n}=e;if(String(t.source)===String(t.target))return{applied:!1,rejected:ht.SELF_LINK};let i=n.getActivity(t.source),r=n.getActivity(t.target);if(!i||!r)return{applied:!1,rejected:ht.ACTIVITY_MISSING};if(e.rejectParentLinkMutations&&xa(t.source,t.target,n))return{applied:!1,rejected:ht.HIERARCHY_LINK};if(ka(t.source,t.target,n))return{applied:!1,rejected:ht.HIERARCHY_LINK};let a=n.getAllLinks();for(let d of a)if(String(d.source)===String(t.source)&&String(d.target)===String(t.target)&&d.type===t.type)return{applied:!1,rejected:ht.DUPLICATE,linkId:d.id};let o=a.map(d=>({source:d.source,target:d.target}));if(Zs(o,{source:t.source,target:t.target}))return{applied:!1,rejected:ht.CYCLE};let s=(e.newLinkId??xS)(),l={id:s,source:t.source,target:t.target,type:t.type,lag:t.lag,freeSlackHours:null,isCritical:!1};return an({port:n,currentLinks:a,proposedLinks:[...a,l]}).ok?(n.addLink(l),{applied:!0,linkId:s}):{applied:!1,rejected:ht.CYCLE}}function FS(t,e,n){let i=e.getLink(t.linkId);if(!i)return{applied:!1,rejected:ht.LINK_MISSING};let r={...i,source:t.source??i.source,target:t.target??i.target,type:t.type??i.type,lag:t.lag??i.lag};if(String(r.source)===String(r.target))return{applied:!1,rejected:ht.SELF_LINK};if(!e.getActivity(r.source)||!e.getActivity(r.target))return{applied:!1,rejected:ht.ACTIVITY_MISSING};if(n&&(xa(i.source,i.target,e)||xa(r.source,r.target,e)))return{applied:!1,rejected:ht.HIERARCHY_LINK};if(ka(r.source,r.target,e))return{applied:!1,rejected:ht.HIERARCHY_LINK};let a=e.getAllLinks(),o=a.find(c=>String(c.id)!==String(t.linkId)&&Ma(c)===Ma(r));if(o)return{applied:!1,rejected:ht.DUPLICATE,linkId:o.id};let s=a.map(c=>String(c.id)===String(t.linkId)?r:c);return an({port:e,currentLinks:a,proposedLinks:s}).ok?((String(i.source)!==String(r.source)||String(i.target)!==String(r.target))&&e.setLinkEndpoints(t.linkId,r.source,r.target),t.lag!==void 0&&e.setLinkField(t.linkId,"lag",t.lag),t.type!==void 0&&e.setLinkField(t.linkId,"type",t.type),{applied:!0,linkId:t.linkId}):{applied:!1,rejected:ht.CYCLE}}function wS(t,e){let{port:n}=e;return n.getLink(t.linkId)?(n.removeLink(t.linkId),{applied:!0,linkId:t.linkId}):{applied:!1,rejected:ht.LINK_MISSING}}var wa=null;function xS(){return wa===null&&(wa=Date.now()),wa+=1,String(wa)}var xt={FINISH_TO_START:"fs",START_TO_START:"ss",FINISH_TO_FINISH:"ff",START_TO_FINISH:"sf"},Ha={[M.FINISH_TO_START]:xt.FINISH_TO_START,[M.START_TO_START]:xt.START_TO_START,[M.FINISH_TO_FINISH]:xt.FINISH_TO_FINISH,[M.START_TO_FINISH]:xt.START_TO_FINISH},Bn={[xt.FINISH_TO_START]:M.FINISH_TO_START,[xt.START_TO_START]:M.START_TO_START,[xt.FINISH_TO_FINISH]:M.FINISH_TO_FINISH,[xt.START_TO_FINISH]:M.START_TO_FINISH},vu=xt.FINISH_TO_START;function Cu(t){if(t in Bn)return Bn[t]}var Du=";",on={DAY:"d",WEEK:"w",WEEK_DHTMLX:"wk",MONTH:"m",MONTH_DHTMLX:"mon",YEAR:"y"},Tu=/^(\d+)(fs|ss|ff|sf)?(?:([+-]?)(\d+(?:\.\d+)?)(weeks?|wk|w|months?|mon|m|days?|d|years?|y)?)?$/i;var MS=5,Ba=30,tl=365,US={[on.DAY]:1,day:1,days:1,[on.MONTH]:Ba,[on.MONTH_DHTMLX]:Ba,month:Ba,months:Ba,[on.YEAR]:tl,year:tl,years:tl},HS=new Set([on.WEEK,on.WEEK_DHTMLX,"week","weeks"]);function ja(t,e={}){let n=[],i=[],r=e.daysPerWeek!==void 0&&Number.isFinite(e.daysPerWeek)&&e.daysPerWeek>0?e.daysPerWeek:MS,a=t.replace(/\s+/g,"");if(a.length===0)return{specs:n,errors:i};for(let o of a.split(Du)){if(o.length===0)continue;let s=BS(o,r);s?n.push(s):i.push(o)}return{specs:n,errors:i}}function BS(t,e){let n=t.toLowerCase(),i=Tu.exec(n);if(!i)return null;let[,r,a,o,s,l]=i,c=a?Bn[a]:Bn[vu],d=0;if(s!==void 0){let u=Number(s);if(Number.isNaN(u))return null;let p=l!==void 0&&HS.has(l)?e:US[l??on.DAY],f=u*p;d=o==="-"?-f:f}return{correlativeId:r,type:c,lag:d}}function Di(t){let{targetActivityId:e,currentLinks:n,desiredSpecs:i}=t,r=[],a=new Map;for(let c of i){let d=t.resolveActivityByCorrelative(c.correlativeId);if(d==null){r.push(c);continue}let u=Wa(d,c.type);a.has(u)||a.set(u,{source:d,type:c.type,lag:c.lag})}let o=new Map;for(let c of n)String(c.target)===String(e)&&o.set(Wa(c.source,c.type),c);let s=[],l=_u(o,a,c=>c.source);for(let[c,d]of a){if(o.has(c))continue;let u=l.get(String(d.source))?.pop();if(!u)continue;let[p,f]=u;s.push({kind:vt.UPDATE,linkId:f.id,type:d.type,lag:d.lag}),o.delete(p),a.delete(c)}for(let[c,d]of o)a.has(c)||s.push({kind:vt.DELETE,linkId:d.id});for(let[c,d]of a){let u=o.get(c);u&&u.lag!==d.lag&&s.push({kind:vt.UPDATE,linkId:u.id,lag:d.lag})}for(let[c,d]of a)o.has(c)||s.push({kind:vt.CREATE,source:d.source,target:e,type:d.type,lag:d.lag});return{operations:s,unresolved:r}}function Wa(t,e){return`${String(t)}::${e}`}function _u(t,e,n){let i=new Map;for(let r of t){if(e.has(r[0]))continue;let a=String(n(r[1])),o=i.get(a)??[];o.push(r),i.set(a,o)}return i}function Ti(t){let{sourceActivityId:e,currentLinks:n,desiredSpecs:i}=t,r=[],a=new Map;for(let c of i){let d=t.resolveActivityByCorrelative(c.correlativeId);if(d==null){r.push(c);continue}let u=Wa(d,c.type);a.has(u)||a.set(u,{target:d,type:c.type,lag:c.lag})}let o=new Map;for(let c of n)String(c.source)===String(e)&&o.set(Wa(c.target,c.type),c);let s=[],l=_u(o,a,c=>c.target);for(let[c,d]of a){if(o.has(c))continue;let u=l.get(String(d.target))?.pop();if(!u)continue;let[p,f]=u;s.push({kind:vt.UPDATE,linkId:f.id,type:d.type,lag:d.lag}),o.delete(p),a.delete(c)}for(let[c,d]of o)a.has(c)||s.push({kind:vt.DELETE,linkId:d.id});for(let[c,d]of a){let u=o.get(c);u&&u.lag!==d.lag&&s.push({kind:vt.UPDATE,linkId:u.id,lag:d.lag})}for(let[c,d]of a)o.has(c)||s.push({kind:vt.CREATE,source:e,target:d.target,type:d.type,lag:d.lag});return{operations:s,unresolved:r}}function Va(t){let e=Math.sign(t)*Math.round(Math.abs(t));return Object.is(e,-0)?0:e}function ce(t,e){return Math.sign(t)*Math.round(Math.abs(t)*e)}var Eu={rawInputToConstraintDate(t,e){let n=new Date(t);return n.setUTCHours(0,0,0,0),n.getTime()===t.getTime()?e.getClosestWorkTime({direction:z.FUTURE,date:t,unit:dt.HOUR}):e.isWorkTime(t,dt.HOUR)?t:n},computeLagBetweenTasks(t,e,n){return n.calculateDuration(t,e)}};function el(t,e,n){switch(n){case M.FINISH_TO_START:return{sourceDate:t.endDate,targetDate:e.startDate};case M.START_TO_START:return{sourceDate:t.startDate,targetDate:e.startDate};case M.FINISH_TO_FINISH:return{sourceDate:t.endDate,targetDate:e.endDate};case M.START_TO_FINISH:return{sourceDate:t.startDate,targetDate:e.endDate}}}var nl=Eu;var _i=class{adapter;reporter;currentCalculationId=0;topoCache=new Ea;expandedLinksCache=new Oa;constructor(e,n=Ci){this.adapter=e,this.reporter=n}getCurrentCalculationId(){return this.currentCalculationId}invalidateTopoCache(){this.topoCache.invalidate()}invalidateExpandedLinksCache(){this.expandedLinksCache.invalidate()}invalidateAllCaches(){this.topoCache.invalidate(),this.expandedLinksCache.invalidate()}async schedule(e={}){let n=++this.currentCalculationId,i=nu(n,()=>this.currentCalculationId),r={plans:new Map,updatedIds:[],cycles:[],cancelled:!1};try{VS(this.adapter);let a=sn("schedule.total"),o=sn("schedule.expandParentLinks"),s=this.adapter.getAllLinks(),l=this.expandedLinksCache.get(s,this.adapter);Me(o);let c=l;if((await gi(i)).aborted)return{...r,cancelled:!0};let d=sn("schedule.scoping"),u=this.adapter.getAllIds(),p=KS(e,c,this.adapter),f=p.links,y=p.idSet;Me(d);let h=sn("schedule.topologicalSort"),m=GS(this.topoCache,u,c,y);if(Me(h),m.hasCycles)return Me(a),{...r,cycles:[m.cycleNodes]};if((await gi(i)).aborted)return{...r,cancelled:!0};let g=sn("schedule.processConstraints"),C=new Map;if(fu(m.ordered,this.adapter,C),Me(g),(await gi(i)).aborted)return{...r,cancelled:!0};let b=sn("schedule.asapPass"),E=f.some(F=>F._summaryTargetId!==void 0&&(F.type===M.FINISH_TO_FINISH||F.type===M.START_TO_FINISH)),P=await Xs(m.ordered,f,this.adapter,e,i,C,E),N=E?await Xs(m.ordered,f,this.adapter,e,i,P):P;if(Me(b),(await gi(i)).aborted)return{...r,cancelled:!0};let I=sn("schedule.alapPass"),R=await gu(m.reversed,f,N,this.adapter,e,i);if(Me(I),(await gi(i)).aborted)return{...r,cancelled:!0};let k=sn("schedule.diff"),O=[];for(let[F,U]of R){let $=this.adapter.getActivity(F);if(!$)continue;let ut=$.startDate.getTime()!==U.startDate.getTime(),q=$.endDate.getTime()!==U.endDate.getTime();(ut||q)&&O.push(F)}return Me(k),Me(a),{plans:R,updatedIds:O,cycles:[],cancelled:!1}}catch(a){throw this.reporter.error("[AutoScheduler] Error during scheduling",a),a}}},jS=!1;function WS(){let t=globalThis.__SCHEDULER_PHASE_LOG__;return typeof t=="boolean"?t:jS}function sn(t){return{name:t,startedAt:performance.now()}}function VS(t){let e=t;typeof e.clearCalendarCache=="function"&&e.clearCalendarCache()}function Me(t){if(!WS())return;let e=performance.now()-t.startedAt;console.log(`[scheduler] ${t.name} ${e.toFixed(1)}ms`)}function KS(t,e,n){let i=t.triggerId;if(i==null)return{idSet:null,links:e};let r=lu(i,e);return YS(r,e,n)}function YS(t,e,n){let i=new Set(t.activityIds),r=new Set;for(let o of n.getAllActivities()){let s=String(o.id);o.constraintType===_.ALAP&&!i.has(s)&&(r.add(s),i.add(s))}if(r.size===0)return{idSet:i,links:t.links};let a=[...t.links];for(let o of e)(r.has(String(o.source))||r.has(String(o.target)))&&a.push(o);return{idSet:i,links:a}}function GS(t,e,n,i){let r=t.get(e,n);if(r.hasCycles){let o=i?Array.from(i):e;return Ee(o,n)}if(!i)return r;let a=iu(r.ordered,i);return{ordered:a,reversed:[...a].reverse(),hasCycles:!1,cycleNodes:[]}}function Pu(t,e,n){let i=e.getActivity(t);if(!i)return;let r=n?{...i,endDate:n.endDate}:i,a=e.calendarReader.getCalendar(String(i.calendarId));for(let o of e.getIncomingLinkIds(t)){let s=e.getLink(o);if(!s)continue;let l=e.getActivity(s.source);if(!l||l.constraintType===_.ALAP||xe(i.type)&&(s.type===M.START_TO_FINISH||s.type===M.FINISH_TO_FINISH))continue;let{sourceDate:d,targetDate:u}=el(l,r,s.type),p=nl.computeLagBetweenTasks(d,u,a);p!==s.lag&&e.setLinkField(s.id,Jt.LAG,p)}}function Ru(t,e){let n=e.getActivity(t);n&&xe(n.type)&&(n.durationHours=0)}function Ei(t){let e=0,n=!1;for(let i of t)i.ponderator>0&&(e+=i.ponderator/100*i.progress,n=!0);return n?e:null}function Ka(t){return Number(t.toFixed(2))}function Cr(t,e){let n=new Map;for(let i of $S(t))Lu(i,t,e,n)}function ku(t,e,n){let i=new Map;for(let r of t)Lu(r,e,n,i)}function $S(t){let e=new Set;t.forEachActivity((i,r)=>{t.getChildren(r).length>0&&e.add(r)});let n=new Map;for(let i of e)n.set(i,qS(i,t));return[...e].sort((i,r)=>(n.get(r)??0)-(n.get(i)??0))}function qS(t,e){let n=0,i=t;for(;i&&i!=="0"&&e.getActivity(i);)n+=1,i=e.getParentId(i);return n}function Lu(t,e,n,i){let r=e.getChildren(t);if(r.length===0)return;let a=[];for(let o of r){let s=e.getActivity(o);s&&a.push({progress:Number(s.progress??0),ponderator:Number(s.ponderator??0)})}il(t,a,e,n,i)}function il(t,e,n,i,r=new Map){let a=n.getActivity(t);if(!a)return;let o=Ei(e),l=o===null&&i===ct.COST&&zS(t,n,r)===!0?0:o;if(l===null){let c=n.getProgressFallback(t);c!==null&&n.setActivityField(t,T.PROGRESS,c);return}n.getProgressFallback(t)===null&&n.setProgressFallback(t,Number(a.progress??0)),n.setActivityField(t,T.PROGRESS,Ka(l))}function zS(t,e,n){let i=[...e.getChildren(t)],r=!1;for(;i.length>0;){let o=i.pop(),s=n.get(o);if(s===!1)return n.set(t,!1),!1;if(s!==void 0){r||=s===!0;continue}let l=e.getActivity(o);if(!l)continue;let c=e.getChildren(o);if(c.length>0){i.push(...c);continue}let d=JS(l);if(r||=d!==null,d===!1)return n.set(t,!1),!1}let a=r?!0:null;return n.set(t,a),a}function JS(t){let e=Tt(t);return e?t.type===L.MILESTONE||e.cost===0:null}function Ou(t,e,n){let i=[t];for(;i.length>0;){let r=i.pop();if(r===void 0)continue;let a=n.getChildren(r);a.length!==0&&(n.setProgressFallback(r,e),i.push(...a))}}function Xt(t,e){return(Number(t)||0)*(Number(e)||0)/100}var Dr={SKIP:"skip",FREEZE_WITHOUT_CONTRIBUTION:"freeze-when-no-contribution"};async function Ue(t,e,n=!0,i={}){let r=e?Tr(t,e):nv(t),a=n?i.progressMode??Dr.FREEZE_WITHOUT_CONTRIBUTION:Dr.SKIP;await XS(r,t,a,{recomputeRealWork:i.recomputeRealWork??!1,criterion:i.criterion})}function Ya(t,e){bu(t,e,Dr.SKIP)}async function XS(t,e,n,i={recomputeRealWork:!1}){let r=new Map,a=200,o=0;for(let s of t)bu(s,e,n,i.recomputeRealWork,i.criterion,r),o+=1,o%a===0&&await St()}function Tr(t,e){let n=new Set,i=new Map;for(let o of e)ZS(o,t,n,i);if(n.size===0)return[];let r=Array.from(n),a=QS(r,i);return Nu(r,a)}function ZS(t,e,n,i){let r=e.getParentId(t);for(;r&&!W(r);){if(n.has(r))return;n.add(r);let a=e.getParentId(r);i.set(r,a),r=a}}function QS(t,e){let n=new Map;for(let i of t){if(n.has(i))continue;let r=[],a=new Set,o=i;for(;o&&!W(o)&&!n.has(o)&&!a.has(o);)r.push(o),a.add(o),o=e.get(o)??null;let s=o?n.get(o)??0:0;for(let l=r.length-1;l>=0;l-=1)s+=1,n.set(r[l],s)}return n}function tv(t,e,n){let i=null,r=null,a=0,o=[];for(let s of t){let l=e.getActivity(s);if(!l)continue;let c=l.startDate.getTime(),d=l.endDate.getTime();(i===null||c<i)&&(i=c),(r===null||d>r)&&(r=d),n&&(a+=ev(l,e.getChildren(s).length>0)),o.push({progress:Number(l.progress??0),ponderator:Number(l.ponderator??0)})}return{minStart:i,maxEnd:r,realWorkSum:a,weightedChildren:o}}function bu(t,e,n=Dr.FREEZE_WITHOUT_CONTRIBUTION,i=!1,r,a=new Map){let o=e.getActivity(t);if(!o)return;let s=e.getChildren(t);if(s.length===0)return;let l=tv(s,e,i);if(l.minStart===null||l.maxEnd===null)return;let c=String(o.calendarId??""),d=e.calendarReader.getCalendar(c),u=new Date(l.minStart),p=new Date(l.maxEnd),f=d.calculateDuration(u,p);e.setActivityField(t,"startDate",u),e.setActivityField(t,"endDate",p),e.setActivityField(t,"durationHours",f),n!==Dr.SKIP&&il(t,l.weightedChildren,e,r,a),i&&e.setActivityField(t,"realWorkHours",l.realWorkSum)}function ev(t,e){return e?Number(t.realWorkHours)||0:Xt(t.workHours,t.progress)}function nv(t){let e=iv(t),n=rv(e,t);return Nu(e,n)}function iv(t){let e=new Set;return t.forEachActivity(n=>{n.parentId!==null&&e.add(n.parentId)}),Array.from(e)}function rv(t,e){let n=new Map;for(let i of t)n.set(i,av(i,e));return n}function av(t,e){let n=0,i=t;for(;i&&!W(i)&&e.getActivity(i);)n+=1,i=e.getParentId(i);return n}function Nu(t,e){return[...t].sort((n,i)=>(e.get(i)??0)-(e.get(n)??0))}var Fu={updateActivityDuration:Ru,updateTaskTiming:sv("updateTaskTiming"),adjustLinkLagOnTaskMove:Pu,recordLastStartDate:ov};function ov(t,e){let n=e.getActivity(t);n&&e.setLastStartDate(t,n.startDate)}function ln(t,e,n,i){for(let r of e){let a=r in Fu?Fu[r]:void 0;if(!a){console.warn(`[replay post-processors] unknown: ${r} \u2014 skipping. Add an entry in POST_PROCESSORS if a fixture needs it.`);continue}a(t,n,i??null)}}function sv(t){return()=>{console.debug(`[replay post-processors] ${t}: not yet ported to adapter \u2014 no-op.`)}}function G(t,e){return e!==void 0?{ok:!0,value:t,raw:e}:{ok:!0,value:t}}function tt(t){return{ok:!1,reason:t}}function rt(){return{valid:!0}}function _t(t,e){return e!==void 0?{valid:!1,reason:t,notification:e}:{valid:!1,reason:t}}function Q(){return{allowed:!0}}function lt(t,e){return e!==void 0?{allowed:!1,reason:t,alertKey:e}:{allowed:!1,reason:t}}function ot(t,e={}){return{patch:t,needsAutoSchedule:e.autoSchedule??!1,postProcessors:e.postProcessors??[],...e.cascadeMutations!==void 0?{cascadeMutations:e.cascadeMutations}:{},...e.trackingEvents!==void 0?{trackingEvents:e.trackingEvents}:{}}}var kt={PROGRESS_ENTRY:"activity_progress_entry",PROGRESS_UPDATE_RADIO_BUTTON:"activity_progress_update_radio_button",DURATION_ENTRY:"activity_duration_entry",START_DATE_ENTRY:"activity_start_date_entry",END_DATE_ENTRY:"activity_end_date_entry",NAME_ENTRY:"activity_name_entry",DESCRIPTION_ENTRY:"activity_description_entry",CALENDAR_ASSIGNMENT:"activity_calendar_assignment",COST_BUDGETED_ENTRY:"activity_cost_budgeted_entry",COST_SPENT_ENTRY:"activity_cost_spent_entry",LABOR_HOURS_BUDGETED_ENTRY:"activity_labor_hours_budgeted_entry"};var wu={targetField:"name",canEdit(){return Q()},parseInput(t){return typeof t!="string"?tt("not_a_string"):G(t)},validate(){return rt()},transform(t,e){return ot({name:e},{autoSchedule:!1,postProcessors:[]})},trackEvent:kt.NAME_ENTRY};var xu={targetField:"description",canEdit(){return Q()},parseInput(t){return typeof t!="string"?tt("not_a_string"):G(t.trim())},validate(){return rt()},transform(t,e){return ot({description:e},{autoSchedule:!1,postProcessors:[]})},trackEvent:kt.DESCRIPTION_ENTRY};function me(t){return t.constraintType??_.ASAP}var Ga=100;function cn(t){return t.progress>=Ga}function Rt(t,e){return he(t.type,e.hasChildren(t.id))}function Mu(t){return t.progress>0}function Uu(t){return t.hasLookaheadTasks}function jn(t,e){return Math.round(Math.ceil(t*e*60)/60)}var Pi=t=>({endDate:t});var $a="UTC";function dn(t,e){if(e){let n=new Intl.DateTimeFormat("en-CA",{timeZone:e,year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(t),i=r=>Number(n.find(a=>a.type===r)?.value);return new Date(Date.UTC(i("year"),i("month")-1,i("day")))}return new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate()))}function qa(t,e){if(!e||e===$a){let p=new Date(t);return p.setUTCHours(23,59,0,0),p}let n=new Intl.DateTimeFormat("en-CA",{timeZone:e,year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(t),i=p=>Number(n.find(f=>f.type===p)?.value),r=i("year"),a=i("month"),o=i("day"),s=Date.UTC(r,a-1,o,23,59,0,0),l=new Intl.DateTimeFormat("en-CA",{timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}).formatToParts(new Date(s)),c=p=>Number(l.find(f=>f.type===p)?.value),u=Date.UTC(c("year"),c("month")-1,c("day"),c("hour")===24?0:c("hour"),c("minute"),c("second"))-s;return new Date(s-u)}function lv(t,e){let n=dn(e,$a);for(;!t.isWorkTime(n,dt.DAY);)n=new Date(n),n.setUTCDate(n.getUTCDate()+1),n=dn(n,$a);return n}function Er(t,e){return t.getClosestWorkTime({direction:z.FUTURE,date:e,unit:dt.HOUR})}function rl(t,e){let n=lv(t,e),i=new Date(n);return i.setUTCDate(i.getUTCDate()+1),i.setUTCHours(0,0,0,0),t.getClosestWorkTime({direction:z.PAST,date:i,unit:dt.HOUR})}function Hu(t,e){return e.isWorkTime(t,dt.HOUR)?new Date(t):e.getClosestWorkTime({direction:z.FUTURE,date:t,unit:dt.HOUR})}function Bu(t,e){if(e.isWorkTime(t,dt.HOUR))return new Date(t);let n=al(t)?cv(t):t;return e.getClosestWorkTime({direction:z.PAST,date:n,unit:dt.HOUR})}function al(t){return t.getUTCHours()===0&&t.getUTCMinutes()===0&&t.getUTCSeconds()===0&&t.getUTCMilliseconds()===0}function cv(t){let e=new Date(t);return e.setUTCDate(e.getUTCDate()+1),e}var _r=new Set([_.SNET,_.SNLT,_.MSO]),ol=new Set([_.FNET,_.FNLT,_.MFO]),un=new Set([_.ASAP,_.ALAP]),za=_.SNET;function ge(t,e,n){let i=dn(t,$a);return!_r.has(n)&&!ol.has(n)?i:_r.has(n)?ju(i,e):Wu(i,e)}function ju(t,e){return Yu(t,Er(e,t))}function Wu(t,e){return Yu(t,rl(e,t))}function Vu(t,e){return al(t)?ju(t,e):new Date(t)}function Ku(t,e){return al(t)?Wu(t,e):new Date(t)}function Yu(t,e){let n=new Date(t);return n.setUTCHours(e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()),n}var pn=()=>({constraintType:za});var Wn=t=>({constraintDate:t}),Gu=t=>({constraintDate:t});var $u={UPDATE_ACTIVITY_DURATION:"updateActivityDuration",UPDATE_TASK_TIMING:"updateTaskTiming",ADJUST_LINK_LAG_ON_TASK_MOVE:"adjustLinkLagOnTaskMove",RECORD_LAST_START_DATE:"recordLastStartDate"};var qu={NOT_A_NUMBER:"not_a_number",NOT_A_STRING:"not_a_string",NOT_AN_ARRAY:"not_an_array",NOT_AN_INTEGER:"not_an_integer",INVALID_DATE:"invalid_date",INVALID_CONSTRAINT_TYPE:"invalid_constraint_type",EMPTY_CALENDAR:"empty_calendar",EMPTY_CUSTOM_ID:"empty_custom_id",EXCEEDS_MAX_LENGTH:"exceeds_max_length"},Vn={UNCHANGED:"unchanged",OUT_OF_RANGE:"out_of_range",NEGATIVE_DURATION:"negative_duration",NOT_WORKING_DAY:"not_working_day",BEFORE_PARENT_START:"before_parent_start",BEFORE_START_DATE:"before_start_date",BEFORE_DATE_ORIGIN:"before_date_origin",CONSTRAINT_VIOLATION:"constraint_violation",MISSING_ID:"missing_id",UNKNOWN_CALENDAR:"unknown_calendar"},Ae={COMPLETED:"completed",SUMMARY:"summary",HAS_PROGRESS:"has_progress",HAS_LOOKAHEAD_TASKS:"has_lookahead_tasks",SIR_START_AFTER_PROGRESS:"sir_start_after_progress",DATA_DATE_UNAVAILABLE:"data_date_unavailable",DATA_DATE_ACTUAL_START_LOCKED:"data_date_actual_start_locked",DATA_DATE_ACTIVITY_COMPLETED:"data_date_activity_completed",DATA_DATE_UNITS_PERCENT_READ_ONLY:"data_date_units_percent_read_only",SECONDARY_CONSTRAINT_TYPE_REQUIRED:"secondary_constraint_type_required"},Ja={CANT_EDIT_COMPLETED:"cant_edit_completed_activity",SUMMARY_COLUMN_VALUE:"summary_column_value",CANT_EDIT_WITH_PROGRESS:"cant_edit_activity_with_progress",SIR_CANT_MOVE_START_AFTER_PROGRESS:"sir_cant_move_start_after_progress",CANT_EDIT_WITH_TASK:"cant_edit_actvity_with_task",DATA_DATE_EDIT_REJECTED:"data_date_edit_rejected",DATA_DATE_UNITS_PERCENT_READ_ONLY:"data_date_units_percent_read_only"};function Ri(t,e,n){return ca(t,e,n)}function ki(t,e,n){return da(t,e,n)}var Ju={targetField:"durationHours",canEdit(t,e){return cn(t)?lt("completed","cant_edit_completed_activity"):Rt(t,e)?lt("summary","summary_column_value"):Q()},parseInput(t,e,n){let i=parseFloat(String(t));return Number.isFinite(i)?G(jn(i,n.hoursPerDay)):tt("not_a_number")},validate(t,e,n){return zu(n)?_t(Vn.NEGATIVE_DURATION):dv(e,n)?_t("unchanged"):rt()},transform(t,e,n){if(zu(e))return ot({},{autoSchedule:!1,postProcessors:[]});let i=uv(t,e,n),r=pv(t,e,n,i.violated);return{...ot(r,{autoSchedule:!0,postProcessors:[$u.RECORD_LAST_START_DATE]}),...i.violated?{constraintWarning:ki(i.constraintType,i.constraintDate,Xu(t,e,n)??void 0)}:{}}},trackEvent:kt.DURATION_ENTRY};function zu(t){return Math.sign(t)===-1}function dv(t,e){return t===e}function uv(t,e,n){let i=n.calendars.getCalendar(t.calendarId);if(!i)return{violated:!1};let r=t.constraintType;if(r!==_.FNET&&r!==_.FNLT&&r!==_.MFO)return{violated:!1};let a=i.calculateEndDate(t.startDate,e);return Ri(r,t.constraintDate,a)}function pv(t,e,n,i=!1){let r={};i&&Object.assign(r,pn(),Wn(t.startDate));let a=hr(t.durationHours,e);a&&(r.type=a),r.durationHours=e;let o=Xu(t,e,n);return o&&Object.assign(r,Pi(o)),r}function Xu(t,e,n){let i=n.calendars.getCalendar(t.calendarId);return i?i.calculateEndDate(t.startDate,e):null}var Li=t=>({realWorkHours:t});var fv=0,yv=Ga,Oi={targetField:"progress",canEdit(t,e){return Rt(t,e)?lt("summary","summary_column_value"):Uu(t)?lt("has_lookahead_tasks","cant_edit_actvity_with_task"):Q()},parseInput(t){let e=parseFloat(String(t));return Number.isNaN(e)?tt("not_a_number"):G(e)},validate(t,e,n){return hv(n)?_t("out_of_range"):rt()},transform(t,e,n){let i=Hn(e),r=t.progress!==e&&i,a=mv(e),o=Iv(t,e,n.hierarchy),s={progress:e,autoScheduling:i,...Li(o.get(t.id)??0)},l=a?gv(t,e,i,n.hierarchy,o):[],c=a?vv(t,e,n.hierarchy):[],d=l.length+c.length>0?[...l,...c]:void 0,u=[],p=a?Dv(t,e):void 0;return ot(s,{autoSchedule:r,postProcessors:u,cascadeMutations:d,trackingEvents:p})},trackEvent:kt.PROGRESS_ENTRY};function hv(t){return t<fv||t>yv}function mv(t){return t===Ga||Hn(t)}function gv(t,e,n,i,r){return i.getDescendantIds(t.id).map(o=>({activityId:o,fields:Av(e,n,r.get(o)??0)}))}function Av(t,e,n){return{progress:t,autoScheduling:e,...Li(n)}}function Iv(t,e,n){let i=new Map,r=o=>{let s=0;for(let l of n.getChildHhInfo(o)){let c=n.hasChildren(l.id)?r(l.id):Xt(l.workHours,e);i.set(l.id,c),s+=c}return s},a=n.hasChildren(t.id)?r(t.id):Xt(t.workHours,e);return i.set(t.id,a),i}function Sv(t,e){let n=[t.id,...e.getDescendantIds(t.id)],i=a=>e.getChildProgressInfo(a).some(o=>e.hasChildren(o.id)),r=a=>e.getAncestorIds(a).length;return n.filter(a=>i(String(a))).map(String).sort((a,o)=>r(o)-r(a))}function vv(t,e,n){let i=new Map;i.set(t.id,e);for(let o of n.getDescendantIds(t.id))i.set(o,e);let r=[...Sv(t,n),...n.getAncestorIds(t.id)],a=[];for(let o of r){let s=Cv(o,i,n);s!==null&&(i.set(o,s),a.push({activityId:o,fields:{progress:s}}))}return a}function Cv(t,e,n){let i=n.getChildProgressInfo(t).map(a=>({progress:e.has(a.id)?e.get(a.id):a.progress,ponderator:a.ponderator??0})),r=Ei(i);return r===null?null:Number(r.toFixed(2))}function Dv(t,e){return[{name:kt.PROGRESS_UPDATE_RADIO_BUTTON,properties:{activity_id:t.id,activity_name:t.name,progress_updated:e}}]}var Zu={targetField:"cost",canEdit(t,e){return Rt(t,e)?lt("summary","summary_column_value"):Q()},parseInput(t){if(String(t).trim()==="")return G(0);let e=parseFloat(String(t));return Number.isFinite(e)?G(e):tt("not_a_number")},validate(){return rt()},transform(t,e,n){let i=Tv(t,e,n.hierarchy);return ot({cost:e},{autoSchedule:!1,postProcessors:[],cascadeMutations:i})},trackEvent:kt.COST_BUDGETED_ENTRY};function Tv(t,e,n){let i=new Map;i.set(t.id,e);let r=[];for(let a of n.getAncestorIds(t.id)){let o=0;for(let s of n.getChildCostInfo(a))o+=i.has(s.id)?i.get(s.id):s.cost;i.set(a,o),r.push({activityId:a,fields:{cost:o}})}return r}var Qu={targetField:"usedCost",canEdit(t,e){return Rt(t,e)?lt("summary","summary_column_value"):Q()},parseInput(t){if(String(t).trim()==="")return G(0);let e=parseFloat(String(t));return Number.isFinite(e)?G(e):tt("not_a_number")},validate(){return rt()},transform(t,e,n){let i=_v(t,e,n.hierarchy);return ot({usedCost:e},{autoSchedule:!1,postProcessors:[],cascadeMutations:i})},trackEvent:kt.COST_SPENT_ENTRY};function _v(t,e,n){let i=new Map;i.set(t.id,e);let r=[];for(let a of n.getAncestorIds(t.id)){let o=0;for(let s of n.getChildUsedCostInfo(a))o+=i.has(s.id)?i.get(s.id):s.usedCost;i.set(a,o),r.push({activityId:a,fields:{usedCost:o}})}return r}var tp={targetField:"workHours",canEdit(t,e){return Rt(t,e)?lt("summary","summary_column_value"):Q()},parseInput(t){if(String(t).trim()==="")return G(0,t);let e=parseFloat(String(t));return Number.isFinite(e)?G(e):tt("not_a_number")},validate(){return rt()},transform(t,e,n,i){let r=ep(e,t.progress),a=String(i).trim()===""?[]:Ev(t,e,r,n.hierarchy);return ot({workHours:e,...Li(r)},{autoSchedule:!1,postProcessors:[],cascadeMutations:a})},trackEvent:kt.LABOR_HOURS_BUDGETED_ENTRY};function ep(t,e){return Xt(t,e)}function Ev(t,e,n,i){let r=new Map,a=new Map;r.set(t.id,e),a.set(t.id,n);let o=[];for(let s of i.getAncestorIds(t.id)){let l=0,c=0;for(let d of i.getChildHhInfo(s)){let u=r.has(d.id)?r.get(d.id):d.workHours,p=a.has(d.id)?a.get(d.id):d.realWorkHours??ep(d.workHours,d.progress);l+=u,c+=p}r.set(s,l),a.set(s,c),o.push({activityId:s,fields:{workHours:l,...Li(c)}})}return o}function bi(t,e){return t.getUTCFullYear()===e.getUTCFullYear()&&t.getUTCMonth()===e.getUTCMonth()&&t.getUTCDate()===e.getUTCDate()}function sl(t,e){return t.getTime()<e.getTime()}function fn(t){return t instanceof Date&&!Number.isNaN(t.getTime())}var Xa=t=>({durationHours:t});var Pv="sir-apply",np={targetField:"startDate",canEdit(t,e,n){return Rt(t,e)?lt("summary","summary_column_value"):Mu(t)?n?.eventSource!==Pv?lt("has_progress","cant_edit_activity_with_progress"):fn(n.newValue)?bi(t.startDate,n.newValue)?Q():cn(t)?lt("completed","cant_edit_completed_activity"):Q():Q():Q()},parseInput(t,e,n){return fn(t)?G(dn(t,"UTC")):tt("invalid_date")},validate(t,e,n,i){if(bi(e,n))return _t("unchanged");let r=Rv(t,n,i);return r||rt()},transform(t,e,n){let i=n.calendars.getCalendar(t.calendarId);if(!i)throw new Error("startDatePipeline: no calendar resolved (integrity)");let r=Er(i,e),a=t.type===L.MILESTONE,o=a?r:i.calculateEndDate(r,t.durationHours),s=r;return{...ot({startDate:r,...Pi(o),...a?Xa(0):{},...pn(),...Wn(s)},{autoSchedule:!0,postProcessors:["adjustLinkLagOnTaskMove"]}),constraintWarning:kv(t,r,i)}},trackEvent:kt.START_DATE_ENTRY};function Rv(t,e,n){let i=n.hierarchy.getParentStartDateIfHasPredecessors(t.id);if(!i)return null;let r=dn(i,"UTC");return e.getTime()<r.getTime()?_t("before_parent_start"):null}function kv(t,e,n){let i=n.calculateEndDate(e,t.durationHours),r=bn(me(t),e,i),a=Ri(me(t),t.constraintDate,r);if(a.violated)return ki(a.constraintType,a.constraintDate,r)}var Lv=99.999,Ov="sir-apply",rp={targetField:"endDate",canEdit(t,e,n){return Rt(t,e)?lt("summary","summary_column_value"):Nv(t)&&!bv(t.endDate,n)?lt("completed","cant_edit_completed_activity"):Q()},parseInput(t,e,n){if(!fn(t))return tt("invalid_date");let i=dn(t,"UTC"),r=n.calendars.getCalendar(e.calendarId);return r?r.isWorkTime(i,dt.DAY)?G(rl(r,i)):G(r.getClosestWorkTime({direction:"past",date:i,unit:dt.HOUR})):G(i)},validate(t,e,n,i){if(bi(t.endDate,n))return _t("unchanged");if(Fv(n,t))return _t("before_date_origin");if(wv(n,t))return _t("before_start_date");let r=xv(n,t,i);return r||rt()},transform(t,e,n){let i=Mv(t,e),r=Uv(t,e,n,!!i);return{...ot(r,{autoSchedule:!0,postProcessors:["updateTaskTiming"]}),...i?{constraintWarning:i}:{}}},trackEvent:kt.END_DATE_ENTRY};function bv(t,e){return e?.eventSource===Ov&&fn(e.newValue)&&bi(t,e.newValue)}function Nv(t){return t.progress>=Lv}function Fv(t,e){return e.dateOrigin?sl(t,e.dateOrigin):!1}function wv(t,e){return sl(t,e.startDate)}function xv(t,e,n){let i=n.calendars.getCalendar(e.calendarId);return i?i.isWorkTime(t,dt.DAY)?null:_t("not_working_day"):null}function Mv(t,e){if(me(t)===_.MSO)return;let i=bn(me(t),t.startDate,e),r=Ri(me(t),t.constraintDate,i);if(r.violated)return ki(r.constraintType,r.constraintDate,i)}function Uv(t,e,n,i=!1){let r={};xe(t.type)&&!i&&ip(t)?Object.assign(r,Wn(t.startDate)):(i||ip(t))&&Object.assign(r,pn(),Wn(t.startDate));let s=Hv(t,e,n),l=hr(t.durationHours,s);return l&&(r.type=l),Object.assign(r,Xa(s)),r.endDate=e,r}function ip(t){return un.has(me(t))}function Hv(t,e,n){let i=n.calendars.getCalendar(t.calendarId);return i?i.calculateDuration(t.startDate,e):t.durationHours}var Bv=new Set(Object.values(_)),ap={targetField:"constraintType",canEdit(t,e){return cn(t)?lt("completed","cant_edit_completed_activity"):Rt(t,e)?lt("summary","summary_column_value"):Q()},parseInput(t){let e=String(t).toLowerCase();return jv(e)?G(e):tt("invalid_constraint_type")},validate(){return rt()},transform(t,e,n){let i=Wv(t,e,n);return ot(i,{autoSchedule:!0})}};function jv(t){return Bv.has(t)}function Wv(t,e,n){let i=Kv(t,e);return{constraintType:e,...Gu(Vv(t,e,i,n))}}function Vv(t,e,n,i){if(t.type!==L.MILESTONE||!n||_r.has(e))return n;let r=i.calendars.getCalendar(String(t.calendarId));return r?ge(n,r,e):n}function Kv(t,e){return un.has(e)?null:_r.has(e)?t.startDate:ol.has(e)?t.endDate:t.constraintDate}var op={targetField:"constraintDate",canEdit(t,e){return cn(t)?lt("completed","cant_edit_completed_activity"):Rt(t,e)?lt("summary","summary_column_value"):Q()},parseInput(t){return fn(t)?G(t):tt("invalid_date")},validate(){return rt()},transform(t,e,n){let i=sp(t)?za:me(t),r=n.calendars.getCalendar(t.calendarId);if(!r)throw new Error("constraintDatePipeline: no calendar resolved (integrity)");let a=ge(e,r,i),o=Yv(t,a);return ot(o,{autoSchedule:!0})}};function Yv(t,e){return{constraintDate:e,...sp(t)?pn():{}}}function sp(t){return un.has(me(t))||!t.constraintType}var lp={targetField:B.CALENDAR_ID,canEdit(){return Q()},parseInput(t){if(t===null)return G(null);let e=String(t).trim();return Gv(e)?tt(qu.EMPTY_CALENDAR):G(e)},validate(t,e,n,i){let r=n===null?i.getDefaultCalendarId():n;return $v(t.calendarId,r)&&(n!==null||t.assignedDefaultCalendar)?_t(Vn.UNCHANGED):r===null||!i.hasCalendar(r)?_t(Vn.UNKNOWN_CALENDAR):rt()},transform(t,e,n){let i=e===null?n.getDefaultCalendarId():e;return ot(qv(t,i,e===null,n),{autoSchedule:!0,postProcessors:[]})},trackEvent:kt.CALENDAR_ASSIGNMENT};function Gv(t){return t===""}function $v(t,e){return t===e}function qv(t,e,n,i){let r={calendarId:e,assignedDefaultCalendar:n},a=e===null?null:i.calendars.getCalendar(e);if(a){let o=a.isWorkTime(t.startDate,"hour"),s=a.getClosestWorkTime({date:o?cp(t.startDate):t.startDate,direction:"future",unit:"hour"});r.startDate=s;let l=zv(t,a);if(l&&(r.constraintDate=l),!t.autoScheduling)return r;Object.assign(r,Pi(a.calculateEndDate(s,t.durationHours)))}return r}function zv(t,e){return!t.constraintDate||!t.constraintType?null:dr({...t,constraintDate:cp(t.constraintDate)},{getClosestWorkTime:({date:n,dir:i})=>e.getClosestWorkTime({date:n,direction:i,unit:dt.HOUR})})}function cp(t){return new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()))}var dp={targetField:"customId",canEdit(t,e){return Rt(t,e)?lt("summary","summary_column_value"):Q()},parseInput(t){if(t==null)return tt("empty_custom_id");if(typeof t!="string")return tt("not_a_string");let e=t.trim();return e.length===0?tt("empty_custom_id"):e.length>20?tt("exceeds_max_length"):G(e)},validate(){return rt()},transform(t,e){return ot({customId:e},{autoSchedule:!1,postProcessors:[]})}};var up={targetField:"subcontractId",canEdit(){return Q()},parseInput(t){if(t==null)return G(null);if(typeof t=="string"){let e=t.trim();if(e.length===0)return G(null);let n=Number(e);return!Number.isFinite(n)||!Number.isInteger(n)?tt("not_an_integer"):G(n)}return typeof t=="number"?!Number.isFinite(t)||!Number.isInteger(t)?tt("not_an_integer"):G(t):tt("not_an_integer")},validate(){return rt()},transform(t,e){return ot({subcontractId:e},{autoSchedule:!1,postProcessors:[]})}};function Pr(t){if(t==null)return null;if(typeof t=="object"){if(!("id"in t))return null;let e=t.id;return e==null?null:String(e)}return String(t)}function Za(t){return t.some(e=>Pr(e)===null)}var pp={targetField:"responsableIds",canEdit(){return Q()},parseInput(t){return t==null?G([]):Array.isArray(t)?G(t):tt("not_an_array")},validate(t,e,n){return Za(n)?_t("missing_id"):rt()},transform(t,e){let n=e.map(Pr).filter(i=>i!==null);return ot({responsableIds:n},{autoSchedule:!1,postProcessors:[]})}};var fp={targetField:"tagIds",canEdit(){return Q()},parseInput(t){return t==null?G([]):Array.isArray(t)?G(t):tt("not_an_array")},validate(t,e,n){return Za(n)?_t("missing_id"):rt()},transform(t,e){let n=e.map(Pr).filter(i=>i!==null);return ot({tagIds:n},{autoSchedule:!1,postProcessors:[]})}};var Yn={TOTAL_FLOAT:"total_float",LONGEST_PATH:"longest_path"},It={DURATION:"duration",UNITS:"units",PHYSICAL:"physical"},Mt={TASK:"task",LEVEL_OF_EFFORT:"level_of_effort",START_MILESTONE:"start_milestone",FINISH_MILESTONE:"finish_milestone",WBS_SUMMARY:"wbs_summary",RESOURCE_DEPENDENT:"resource_dependent"},V={NOT_STARTED:"not_started",IN_PROGRESS:"in_progress",COMPLETED:"completed"},de={FIXED_DURATION_AND_UNITS:"fixed_duration_and_units",FIXED_DURATION_AND_UNITS_PER_TIME:"fixed_duration_and_units_per_time"};function Qa(t){return t==="start_on"||t==="mandatory_start"?"mso":t==="finish_on"||t==="mandatory_finish"?"mfo":t}function He(t){return t.remainingDurationHours!==null}var Ut={UNSTART:"unstart",UNCOMPLETE:"uncomplete",START_ON_PROGRESS:"start_on_progress",COMPLETE_ON_PROGRESS:"complete_on_progress",KEEP_IN_PROGRESS:"keep_in_progress",CLEAR_SECONDARY_CONSTRAINT:"clear_secondary_constraint"};function Rr(t,e){return e?.includes(t)??!1}var Jv={asap:[],alap:["fnlt","snlt"],snet:["fnlt","snlt"],fnet:["fnlt","snlt"],snlt:["fnet","snet"],fnlt:["fnet","snet"],mso:[],mfo:[]};function ll(t){return t===null?[]:Jv[t]}function Ni(t,e){return e===null||ll(t).includes(e)}var Zt=(t,e)=>({...ot({}),dataDatePatch:{[t]:e}}),to=t=>({...ot({}),dataDatePatch:t}),kr=(t,e)=>({...to(t),confirmation:e}),Lr=t=>t.p6===void 0?lt("data_date_unavailable"):Q(),yn=t=>({targetField:t,canEdit:Lr,parseInput(e){return e===null?G(null):!(e instanceof Date)||!Number.isFinite(e.getTime())?tt("invalid_date"):G(e)},validate(){return rt()},transform(e,n){return Zt(t,n)}}),mp=(t,e=Number.POSITIVE_INFINITY)=>({targetField:t,canEdit:Lr,parseInput(n){let i=typeof n=="number"||typeof n=="string"&&n.trim()!==""?Number(n):Number.NaN;return Number.isFinite(i)?G(i):tt("not_a_number")},validate(n,i,r){return r<0||r>e?_t("out_of_range"):rt()},transform(n,i){return Zt(t,i)}}),gp=(t,e)=>({targetField:t,canEdit:Lr,parseInput(n){return typeof n=="string"&&e.has(n)?G(n):tt("not_a_string")},validate(){return rt()},transform(n,i){return Zt(t,i)}}),Xv=new Set(["not_started","in_progress","completed"]),Zv=new Set(["duration","units","physical"]),Qv=new Set(["snet","snlt","fnet","fnlt"]),tC=(t,e)=>{let n=t.p6?.executionStatus;return n===e||n===void 0?Zt("executionStatus",e):n===V.NOT_STARTED?to(e===V.IN_PROGRESS?{actualStart:t.startDate}:{actualStart:t.startDate,actualFinish:t.endDate}):n===V.IN_PROGRESS?e===V.COMPLETED?Zt("actualFinish",t.endDate):kr({actualStart:null},Ut.UNSTART):e===V.IN_PROGRESS?kr({actualFinish:null},Ut.UNCOMPLETE):kr({actualStart:null,actualFinish:null},Ut.UNSTART)},yp=(t,e)=>{if(e!==null||t.p6?.actualStart==null)return Zt("actualStart",e);let i=t.p6?.actualFinish!=null;return kr(i?{actualStart:null,actualFinish:null}:{actualStart:null},Ut.UNSTART)},hp=(t,e)=>e!==null||t.p6?.actualFinish==null?Zt("actualFinish",e):kr({actualFinish:null},Ut.UNCOMPLETE),Or=(t,e)=>{let n=e.calendars.getCalendar(t.calendarId);if(!n)throw new Error("dataDatePipelines: no calendar resolved (integrity)");return n},Ap={...yn("actualStart"),transform(t,e,n){if(e===null)return yp(t,null);let i=Or(t,n),r=t.p6?.actualStart==null;return yp(t,r?Vu(e,i):new Date(e))}},Ip={...yn("actualFinish"),transform(t,e,n){if(e===null)return hp(t,null);let i=Or(t,n),r=t.p6?.actualFinish==null;return hp(t,r?Ku(e,i):new Date(e))}},Sp={...yn("plannedStart"),transform(t,e,n){if(e===null)return Zt("plannedStart",null);let i=Or(t,n);return Zt("plannedStart",Hu(e,i))}},vp={...yn("plannedFinish"),transform(t,e,n){if(e===null)return Zt("plannedFinish",null);let i=Or(t,n);return Zt("plannedFinish",Bu(e,i))}},Cp=mp("remainingDurationHours"),Dp={...gp("executionStatus",Xv),transform(t,e){return tC(t,e)}},Tp=yn("expectedFinish"),_p=yn("suspendDate"),Ep=yn("resumeDate"),Pp={targetField:"secondaryConstraintType",canEdit:Lr,parseInput(t){return t===null||t===""?G(null):typeof t=="string"&&Qv.has(t)?G(t):tt("not_a_string")},validate(t,e,n){return Ni(t.constraintType,n)?rt():_t("constraint_violation")},transform(t,e){return e===null?to({secondaryConstraintType:null,secondaryConstraintDate:null}):t.p6?.secondaryConstraintType!=null?Zt("secondaryConstraintType",e):to({secondaryConstraintType:e,secondaryConstraintDate:e.startsWith("s")?t.startDate:t.endDate})}},Rp={...yn("secondaryConstraintDate"),canEdit(t,e){let n=Lr(t,e);return n.allowed?t.p6?.secondaryConstraintType==null?lt("secondary_constraint_type_required"):Q():n},transform(t,e,n){let i=t.p6?.secondaryConstraintType??null;if(e===null||i===null)return Zt("secondaryConstraintDate",e);let r=Or(t,n);return Zt("secondaryConstraintDate",ge(e,r,i))}},kp=gp("percentCompleteType",Zv),Lp=mp("physicalPercentComplete",100);var eC=new Map([[T.TEXT,wu],[T.DESCRIPTION,xu],[T.DURATION,Ju],[T.PROGRESS,Oi],[T.COST,Zu],[T.USED_COST,Qu],[T.HH_WORK_TIME,tp],[T.START_DATE,np],[T.END_DATE,rp],[T.CONSTRAINT_TYPE,ap],[T.CONSTRAINT_DATE,op],[T.CALENDAR_ID,lp],[T.CUSTOM_ID,dp],[T.SUBCONTRACT_ID,up],[T.RESPONSABLES,pp],[T.TAGS,fp],[T.ACTUAL_START,Ap],[T.ACTUAL_FINISH,Ip],[T.PLANNED_START,Sp],[T.PLANNED_FINISH,vp],[T.REMAINING_DURATION_HOURS,Cp],[T.EXECUTION_STATUS,Dp],[T.EXPECTED_FINISH,Tp],[T.SUSPEND_DATE,_p],[T.RESUME_DATE,Ep],[T.SECONDARY_CONSTRAINT_TYPE,Pp],[T.SECONDARY_CONSTRAINT_DATE,Rp],[T.PERCENT_COMPLETE_TYPE,kp],[T.PHYSICAL_PERCENT_COMPLETE,Lp]]);function Qt(t){return eC.get(t)}var Lt={APPEND:"append",REPLACE:"replace"},eo={ACTION_BUTTON:"action-button"},no={SIR_AUTO_REJECT:"sir-auto-reject"},io={DATE_CHANGED:"date_changed",ACTIVITY_DELETED:"activity_deleted"},Gn={VIOLATION:"constraint_violation"},Kt={DISPATCH_MANY:"dispatch-many",INIT:"init",UNDO:"undo",REDO:"redo",P6_SETTINGS_UPDATE:"p6-settings-update",P6_ACTIVITY_UPDATE:"p6-activity-update",P6_SCHEDULE:"p6-schedule"};function $n(t,e){if(!e||e.type!==sa.CONSTRAINT)return null;let n=e.data;return!n?.constraintType||!n.constraintDate?null:{kind:Gn.VIOLATION,activityId:t,constraintType:n.constraintType,constraintDate:n.constraintDate,projectedDate:n.projectedDate??n.constraintDate,messageKey:e.messageKey}}var Op=["name","description","type","startDate","endDate","durationHours","constraintType","constraintDate","calendarId","assignedDefaultCalendar","autoScheduling","progress","cost","usedCost","workHours","realWorkHours","customId","subcontractId","responsableIds","tagIds"],bp=new Set(Op),V0=new Set([...Op,...Object.values(li)]),Np=new Set(Object.values(li));function ue(t,e,n,i){t.setActivityFieldDynamic(e,n,i)}function Fp(t,e,n,i){t.setLinkFieldDynamic(e,n,i)}function Be(t){return{...t,startDate:new Date(t.startDate),endDate:new Date(t.endDate),constraintDate:ke(t.constraintDate),dateOrigin:ke(t.dateOrigin),newActivityIds:[...t.newActivityIds],pendingRequestIds:[...t.pendingRequestIds],responsableIds:[...t.responsableIds],tagIds:[...t.tagIds],baselinePoints:t.baselinePoints.map(e=>({...e,startDate:ke(e.startDate),endDate:ke(e.endDate)})),baselineSnapshot:nC(t.baselineSnapshot),criticalPath:iC(t.criticalPath),...t.p6===void 0?{}:{p6:S(t.p6)}}}function ke(t){return t===null?null:new Date(t)}function nC(t){return t===null?null:{...t,startDate:ke(t.startDate),endDate:ke(t.endDate)}}function iC(t){return t===null?null:{...t,earlyStart:ke(t.earlyStart),earlyFinish:ke(t.earlyFinish),lateStart:ke(t.lateStart),lateFinish:ke(t.lateFinish)}}var Mp=200;function hn(t,e){let n=new Set([String(t)]);for(let i of e.cascadeMutations??[])n.add(String(i.activityId));return n}async function st(t,e){let n=new Map,i=0;for(let r of e){i+=1,i%Mp===0&&await St();let a=t.getActivity(r);a&&n.set(r,et(a))}return n}function et(t){return Be(t)}function ro(t,e){let n=t.getActivity(e);return n?Be(n):null}function mn(t,e,n){wp(t,e,n.patch),n.dataDateState!==void 0&&t.setActivityField(e,"p6",n.dataDateState);for(let i of n.cascadeMutations??[])wp(t,i.activityId,i.fields)}function wp(t,e,n){for(let[i,r]of Object.entries(n)){if(!bp.has(i))throw new Error(`applyFieldChanges: column write to non-writable field "${i}"`);ue(t,e,i,r)}}async function ao(t,e,n,i){let r=[],a=0;for(let o of n){a+=1,a%Mp===0&&await St();let s=rC(t,e,o,i);s&&r.push(s)}return r}function rC(t,e,n,i){let r=t.getActivity(n);if(!r)return{id:n,kind:H.DELETED,after:null};let a=e.get(n);if(!a&&i?.has(n))return aC(n,i.get(n),r);let o=dl(a,r);return oC(o,i,n,r),a&&Object.keys(o).length===0?null:{id:n,kind:a?H.UPDATED:H.CREATED,fields:o,after:et(r)}}function aC(t,e,n){return e===n.correlativeId?null:{id:t,kind:H.UPDATED,fields:{correlativeId:{before:e,after:n.correlativeId}},after:et(n)}}function oC(t,e,n,i){if(!e?.has(n)||Object.hasOwn(t,"correlativeId"))return;let r=e.get(n);r!==i.correlativeId&&(t.correlativeId={before:r,after:i.correlativeId})}var sC=[B.CALENDAR_DURATION,B.BASELINE_VARIANCE_DAYS];function dl(t,e){let n={},i=t??{},r=e,a=new Set([...Object.keys(i),...Object.keys(r)]);for(let o of sC)a.delete(o);for(let o of a)(Object.hasOwn(i,o)!==Object.hasOwn(r,o)||!cl(i[o],r[o]))&&(n[o]={before:xp(i[o]),after:xp(r[o])});return n}function xp(t){return t===null||typeof t!="object"?t:S(t)}function cl(t,e){if(Object.is(t,e))return!0;if(t instanceof Date&&e instanceof Date)return t.getTime()===e.getTime();if(t==null||e==null)return!1;if(Array.isArray(t)||Array.isArray(e))return!Array.isArray(t)||!Array.isArray(e)||t.length!==e.length?!1:t.every((o,s)=>cl(o,e[s]));if(typeof t!="object"||typeof e!="object")return!1;let n=t,i=e,r=Object.keys(n),a=Object.keys(i);return r.length!==a.length?!1:r.every(o=>Object.hasOwn(i,o)&&cl(n[o],i[o]))}function oo(t,e,n){let i=new Set;i.add(t);for(let r of e)i.add(r);for(let r of n)i.add(r);return i}function ul(t,e){let n=new Set;for(let i of t)n.add(String(i));for(let i of e)n.add(i);return n}function gn(t,e,n,i,r){for(let a of e){if(n.has(a.activityId)||(r.add(a.activityId),i.has(a.activityId)))continue;let o=t.getActivity(a.activityId);if(!o)continue;let s=et(o);a.before!==void 0&&(s.correlativeId=a.before),i.set(a.activityId,s)}}var lC=/^(\d{4})\/(\d{1,2})\/(\d{1,2})\s+(\d{1,2}):(\d{2})$/;function je(t){if(t==null||t==="")throw new Error(`[parseFromBackend] expected a date string, got "${t}"`);if(t.includes("T")||t.endsWith("Z")){let s=new Date(t);if(Number.isNaN(s.getTime()))throw new Error(`[parseFromBackend] invalid ISO date "${t}"`);return s}let e=t.match(lC);if(!e)throw new Error(`[parseFromBackend] unsupported date format "${t}" (expected "YYYY/MM/DD H:MM" or ISO)`);let[,n,i,r,a,o]=e;return new Date(Date.UTC(Number(n),Number(i)-1,Number(r),Number(a),Number(o)))}function Fi(t,e,n,i){if(t.getTime()>n.getTime())return 0;if(e.getTime()<n.getTime()||t.getTime()===e.getTime())return 100;let r=i.calculateDuration(t,n),a=i.calculateDuration(t,e);return a===0?0:r*100/a}var cC=t=>t.type===L.PROJECT,dC=(t,e,n)=>{let i=t.calendarId,r=i!=null?n.calendarReader.getCalendar(String(i)):null;if(!r)return 0;let a=o=>o instanceof Date?o:je(String(o));return Fi(a(t.startDate),a(t.endDate),e,r)};function uC(t,e,n){let i=[],r=(o,s)=>{let l=n.getActivity(o);l&&l.expectedProgress!==s&&(n.setActivityField(o,"expectedProgress",s),i.push(String(o)))},a=o=>{let s=n.getActivity(o);if(!s)return 0;if(!cC(s)){let d=dC(s,e,n);return r(o,d),d}let l=0;for(let d of n.getChildren(o)){let u=a(d),p=n.getActivity(d),f=typeof p?.ponderator=="number"?p.ponderator:0;l+=u*f}let c=l/100;return r(o,c),c};for(let o of t)a(o);return i}function qn(t,e){let n=[];t.forEachActivity((i,r)=>{i.parentId===null&&n.push(r)}),uC(n,e,t)}var pC=t=>t.type===L.PROJECT,fC=t=>Tt(t),yC=(t,e,n,i)=>{let r=fC(t);if(!r)return 0;let a=(r.baseCalendarId!=null?n.getBaseCalendar(`${r.baseCalendarId}-base`):null)??(i?n.getBaseCalendar(i):null);return!a||!r.startDate||!r.endDate?0:Fi(r.startDate,r.endDate,e,a)};function pl(t,e,n,i=null){let r=[],a=(s,l)=>{let c=n.getActivity(s);c&&c.expectedProgressBaseline!==l&&(n.setActivityField(s,"expectedProgressBaseline",l),r.push(s))},o=s=>{let l=n.getActivity(s);if(!l)return 0;if(!pC(l)){let u=yC(l,e,n,i);return a(s,u),u}let c=0;for(let u of n.getChildrenIds(s)){let p=o(u),f=n.getActivity(u),y=typeof f?.ponderator=="number"?f.ponderator:0;c+=p*y}let d=c/100;return a(s,d),d};for(let s of t)o(s);return r}function wi(t,e,n=null){let i={getChildrenIds:a=>t.getChildren(String(a)).map(o=>String(o)),getActivity:a=>t.getActivity(a),setActivityField:(a,o,s)=>ue(t,a,o,s),getBaseCalendar:a=>t.calendarReader.getCalendar(a)},r=[];return t.forEachActivity((a,o)=>{a.parentId===null&&r.push(o)}),pl(r,e,i,n)}var fl=ze.BASELINE;function so(t){return t===ze.ACTUAL?ze.ACTUAL:fl}var Up=t=>Math.round(t*100)/100;function hC(t,e){return(e===ze.BASELINE?t.expectedProgressBaseline:t.expectedProgress)??void 0}function mC(t,e){let n=Up(t),i=Up(e);return n>99.99?Wt.DONE:i>n?Wt.OVERDUE:t>0&&n>i?Wt.ADVANCEMENT:t===0&&e===0?Wt.WAITING:t>0&&n<i?Wt.DOING:Wt.WAITING}function We(t,e){let n=[];return t.forEachActivity((i,r)=>{let a=typeof i.progress=="number"?i.progress:0,o=mC(a,hC(i,e));i.status!==o&&(ue(t,r,T.STATUS,o),n.push(r))}),n}function Hp(t){let e=t?.baselinePoints;return!Array.isArray(e)||e.length===0?null:e.find(n=>n.isVisibleVersion)??null}var Bp=100,gC=t=>Math.round(t*Bp)/Bp;function AC(t,e,n){if(n<=0)return null;let i=Hp(t)?.endDate,r=t.endDate;if(!i||!r)return null;let a=r.getTime()>i.getTime(),o=i.getTime()>r.getTime();if(!a&&!o)return 0;let s=e.calculateDuration({startDate:a?i:r,endDate:a?r:i,task:t}),l=gC(s/n);return a?l:-l}function zn(t,e){let n=[];return t.forEachActivity((i,r)=>{let a=AC(i,t,e);i.baselineVarianceDays!==a&&(i.baselineVarianceDays=a,n.push(String(r)))}),n}function yl(t){let e=t instanceof Date?new Date(t.getTime()):t&&typeof t=="object"&&typeof t.valueOf=="function"?new Date(t.valueOf()):new Date(t),n=(r,a)=>o=>o===void 0?e[r]():(e[a](o),i),i={__isMomentShim:!0,clone:()=>yl(e),hours:n("getUTCHours","setUTCHours"),minutes:n("getUTCMinutes","setUTCMinutes"),seconds:n("getUTCSeconds","setUTCSeconds"),milliseconds:n("getUTCMilliseconds","setUTCMilliseconds"),valueOf:()=>e.getTime(),toDate:()=>new Date(e.getTime()),getTime:()=>e.getTime()};return i}yl.isMoment=t=>!!t&&typeof t=="object"&&t.__isMomentShim===!0;var pe=yl;function IC(t){return t&&t.constructor===Date?!!(t.getFullYear&&t.getMonth&&t.getDate):!1}function lo(t){return IC(t)&&!isNaN(t.getTime())}function w(t,e,n,i){if(!lo(new Date(e)))throw new Error(`Invalid date argument for calculateEndDate method. Date: ${e}, Activity: ${JSON.stringify(i)}`);let r=e;return t.calculateEndDate({start_date:new Date(r),duration:n,unit:"hour",task:i})}function ae(t){if(!lo(new Date(t.dateBaseToCalculate)))throw new Error("Invalid date argument for getClosestWorkTime method");let{dateBaseToCalculate:e,activityCalendar:n,direction:i,activity:r}=t;return n.$gantt.getClosestWorkTime({date:new Date(e),dir:i,unit:"hour",task:r})}var D=_;var X=Object.freeze({FS:xt.FINISH_TO_START,SS:xt.START_TO_START,FF:xt.FINISH_TO_FINISH,SF:xt.START_TO_FINISH});function Jn(t){return Ha[String(Number(t))]??xt.START_TO_FINISH}var nt=Object.freeze({FORWARD:"forward",BACKWARD:"backward"}),Xn=Object.freeze({GREATER:"greater",LESS:"less"}),Ie=Object.freeze({SOURCE:"$source"});var SC=t=>t?t.$level===1:!1,vC=t=>t.type===L.PROJECT,CC=t=>t.$level!==0,DC=t=>t.type===L.TASK,TC=t=>t.type===L.TASK||t.type===L.MILESTONE,qt={byFirstLevel:SC,filterByParentType:vC,avoidSubproject:CC,byTaskType:DC,byTaskTypeAndMilestone:TC};function jp(t){let{gantt:e,pendingParentsWithNoLinks:n,calculations:i,linkProperty:r}=t;try{let a=_C({gantt:e,pendingParentsWithNoLinks:n});if(a.length===0)return new Set;let o=EC({gantt:e,subprojectsWithNoLinks:a}),s=PC({gantt:e,childrenIds:o,linkProperty:r,getArrayOfLinkedActivities:RC,calculations:i});return new Set(s.map(l=>l.id))}catch(a){throw a}}function _C(t){let{gantt:e,pendingParentsWithNoLinks:n}=t;return e.getTaskByTime().filter(qt.filterByParentType).filter(i=>n.has(i.id)).map(i=>i.id)}function EC(t){let{gantt:e,subprojectsWithNoLinks:n}=t,i=new Set;for(let r of n)e.getChildren(r).filter(s=>{let l=e.getTask(s),c=qt.byTaskTypeAndMilestone(l),d=Number(l.progress)<100;return c&&d}).forEach(s=>i.add(s));return[...i]}function PC(t){let{gantt:e,childrenIds:n,linkProperty:i,getArrayOfLinkedActivities:r,calculations:a}=t,o=[];for(let s of n){let l=e.getTask(s),c=l[i]||[];r({gantt:e,links:c,linkDirection:i===Ie.SOURCE?"target":"source"}).every(p=>a.has(p))&&o.push(l)}return o}function RC(t){let{gantt:e,links:n,linkDirection:i}=t,r=[];for(let a of n){let o=e.getLink(a);if(!o){`${a}`;continue}let s=Number(o[i]);r.push(s)}return r}function Wp({gantt:t,linkProperty:e,direction:n}){try{let i=kC(t,e);if(n===nt.FORWARD)return{chainStartActivities:i,activitiesStartChainButChildrenOfLinkedParents:null};if(n===nt.BACKWARD)return LC(i,t,e)}catch(i){throw console.log("Critical Path",i),i}}function kC(t,e){return t.getTaskByTime().filter(qt.avoidSubproject).filter(qt.byTaskTypeAndMilestone).filter(n=>!n[e].length)}function LC(t,e,n){let i=[],r=new Set;return t.forEach(a=>{let o=Number(a.parent),s=e.getTask(o);s&&(s[n].length>0?r.add(a.id):s.constraint_type!==D.FNLT&&i.push(a))}),{chainStartActivities:i,activitiesStartChainButChildrenOfLinkedParents:r}}function Vp({gantt:t,direction:e,linkProperty:n}){try{let i=OC(t),r=new Set,a=new Set,o=new Set;e===nt.BACKWARD&&FC(i).forEach(d=>{r.add(d.id)});let s=bC(i,e,n),l=NC(i,s);return s.forEach(c=>{a.add(c.id)}),l.forEach(c=>{o.add(c.id)}),{parentsWithFullProgress:r,pendingParentsWithNoLinks:a,pendingParentsWithLinks:o}}catch(i){throw i}}function OC(t){return t.getTaskByTime().filter(qt.filterByParentType).filter(qt.avoidSubproject)}function bC(t,e,n){return t.filter(i=>{let r=i[n];if(!Array.isArray(r))return!1;let a=r.length>0,o=i.constraint_type||"",s=o!==D.FNLT;if(e===nt.FORWARD){let l=o!==D.SNET;return!a&&s&&l}else return!a&&s})}function NC(t,e){let n=new Set(e.map(i=>i.id));return t.filter(i=>!n.has(i.id))}function FC(t){return t.filter(e=>{let n=Number(e.progress);return Number.isNaN(n)?!1:n===100})}function Kp({pendingParentsWithLinks:t,gantt:e,direction:n}){try{let i=new Set;return t.forEach(r=>{let a=e.getTask(r),o=wC(n),s=xC(n),l=a[o];if(!Array.isArray(l))return;MC(e,l,s).forEach(d=>{i.add(d)})}),i}catch(i){throw i}}function wC(t){return t===nt.FORWARD?Ie.SOURCE:"$target"}function xC(t){return t===nt.FORWARD?"target":"source"}function MC(t,e,n){return e.map(i=>{let a=t.getLink(i)[n];return Number(a)})}var br={identifySecondLevelActivities:jp,identifyInitialActivities:Wp,identifyParentsWithAndWithoutLinks:Vp,identifyForbiddenActivities:Kp};function co(t){return t.length?t.reduce((e,n)=>n.ef>e.ef?n:e):!1}function hl({linkType:t,lag:e,predecessorTime:n,activityCalendar:i,activity:r}){return t===X.FS&&e===0?ae({predecessorTime:n,activityCalendar:i,direction:"future",activity:r}):Nr(n,t,i,r)}function Yp({duration:t,constraintDate:e,activityCalendar:n,activity:i}){let r=new Date(e);return{es:w(n,r,t,i),ef:r}}function Gp({duration:t,constraintDate:e,activityCalendar:n,activity:i}){let r=new Date(e),a=w(n,r,t,i);return{es:r,ef:a}}function Nr(t,e,n,i){if(![X.FS,X.SS,X.FF].includes(e))return t;let a=[X.FS,X.SS].includes(e)?"future":"past";return ae({dateBaseToCalculate:t,activityCalendar:n,direction:a,activity:i})}var ml=class{constructor(e,n,i,r){if(this.linkedActivitiesData=e,this.activity=n,this.gantt=i,this.linkCandidates=r,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 e=this.calculateLinks(),n=co(e),i=this.activity.constraint_type;return i===D.SNET?this.handleSNETConstraint(n):i===D.FNLT?this.handleFNLTConstraint(n):n}calculateLinks(){let e=[];for(let n of this.linkedActivitiesData){let i=n.linkType,r=Jn(i),a=n.linkLag,o=n.es,s=n.ef,l=null;if(r===X.SS)l=this.calculateSSLink({lag:a,predecessorEs:o});else if(r===X.FF)l=this.calculateFFLink({lag:a,predecessorEf:s});else if(r===X.FS)l=this.calculateFSLink({lag:a,predecessorEf:s});else if(r===X.SF)l=this.calculateSFLink({lag:a,predecessorEs:o,predecessorEf:s});else continue;l&&(this.linkCandidates?.set(n.linkId,{targetId:String(this.activity.id),...l}),e.push(l))}return e}handleSNETConstraint(e){let n=Gp({duration:this.activity.duration,constraintDate:this.activity.constraint_date,activityCalendar:this.activityCalendar,activity:this.activity});return e&&e.ef>n.ef?e:n}handleFNLTConstraint(e){let n=Yp({duration:-this.activity.duration,constraintDate:this.activity.constraint_date,activityCalendar:this.activityCalendar,activity:this.activity});return e?e.ef>n.ef?n:e:n}calculateSSLink({lag:e,predecessorEs:n}){let i=hl({linkType:X.SS,lag:e,predecessorTime:n,activityCalendar:this.activityCalendar,activity:this.activity}),r=w(this.activityCalendar,i,e,this.activity);e>0&&(r=Nr(r,X.SS,this.activityCalendar,this.activity));let a=w(this.activityCalendar,r,this.activity.duration,this.activity);return{es:r,ef:a}}calculateFFLink({lag:e,predecessorEf:n}){let i=hl({linkType:X.FF,lag:e,predecessorTime:n,activityCalendar:this.activityCalendar,activity:this.activity}),r=w(this.activityCalendar,i,e,this.activity),a=w(this.activityCalendar,r,-this.activity.duration,this.activity);return e>0&&(a=Nr(a,X.FF,this.activityCalendar,this.activity)),{es:a,ef:r}}calculateFSLink({lag:e,predecessorEf:n}){let i=n;e===0&&(i=ae({dateBaseToCalculate:n,activityCalendar:this.activityCalendar,direction:"future",activity:this.activity}));let r=w(this.activityCalendar,i,e,this.activity),a=w(this.activityCalendar,r,this.activity.duration,this.activity);return{es:r,ef:a}}calculateSFLink({lag:e,predecessorEs:n}){let i=w(this.activityCalendar,n,e,this.activity),r=w(this.activityCalendar,i,-this.activity.duration,this.activity);return e>0&&(r=Nr(r,X.SF,this.activityCalendar,this.activity)),{es:r,ef:i}}},$p=ml;var gl=class{constructor(e){this.linkedActivitiesData=e.linksWithActivityData,this.activity=e.activity,this.gantt=e.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 e=[];for(let n of this.linkedActivitiesData){let i=Jn(n.linkType);if(n.type===L.TASK&&Number(n.progress)>0||n.type===L.PROJECT&&Number(n.progress)===100)continue;let r=n.linkLag,a=n.ls,o=n.lf;if(i===X.SS){let s={lag:r,workTime:a,lsDataCalculation:-r,lfDataCalculation:this.activity.duration},{ls:l,lf:c}=this.calculateSSLink(s);e.push({ls:l,lf:c})}if(i===X.FF){let s={lag:r,workTime:o,lsDataCalculation:-this.activity.duration,lfDataCalculation:-r},{ls:l,lf:c}=this.calculateFFLink(s);e.push({ls:l,lf:c})}if(i===X.FS){let s={lag:r,workTime:a,lsDataCalculation:-this.activity.duration,lfDataCalculation:-r},{ls:l,lf:c}=this.calculateFsLink(s);e.push({ls:l,lf:c})}if(i===X.SF){let s={lag:r,workTime:o,lsDataCalculation:-r,lfDataCalculation:this.activity.duration},{ls:l,lf:c}=this.calculateSFLink(s);e.push({ls:l,lf:c})}}if(this.activity.constraint_type===D.FNLT){let n=this.getMinLfFromLinks(e),i=this.calculateSfRestrictionDates();return n?this.getMinLfFromLinks([i,n]):i}else{let n=this.getMinLfFromLinks(e);if(n===!1){let i=this.gantt.getSubtaskDates();return{ls:w(this.activityCalendar,i.end_date,-this.activity.duration,this.activity),lf:i.end_date}}return n}}calculateFFLink({lag:e,workTime:n,lsDataCalculation:i,lfDataCalculation:r}){let a=null,o=null;if(e===0)return a=w(this.activityCalendar,n,r,this.activity),o=w(this.activityCalendar,a,i,this.activity),{ls:o,lf:a};let s=n;return e>0&&(s=this.getLastWorkingHour(s,this.activityCalendar,z.PAST)),a=w(this.activityCalendar,s,r,this.activity),o=w(this.activityCalendar,a,i,this.activity),{ls:o,lf:a}}calculateFsLink({lag:e,workTime:n,lsDataCalculation:i,lfDataCalculation:r,isMilestone:a=!1}){let o=null,s=null;if(e===0){let c=this.getLastWorkingHour(n,this.activityCalendar,z.PAST);return o=w(this.activityCalendar,c,r,this.activity),o=this.getLastWorkingHour(o,this.activityCalendar,z.PAST),s=w(this.activityCalendar,o,i,this.activity),{ls:s,lf:o}}let l=n;return a||(l=this.getLastWorkingHour(n,this.activityCalendar)),o=w(this.activityCalendar,l,r,this.activity),s=w(this.activityCalendar,o,i,this.activity),a||(o=this.getLastWorkingHour(o,this.activityCalendar,z.PAST)),{ls:s,lf:o}}calculateSFLink({lag:e,workTime:n,lsDataCalculation:i,lfDataCalculation:r}){let a=null,o=null,s=n;return o=w(this.activityCalendar,s,i,this.activity),a=w(this.activityCalendar,o,r,this.activity),{ls:o,lf:a}}calculateSSLink({lag:e,workTime:n,lsDataCalculation:i,lfDataCalculation:r,isMilestone:a=!1}){let o=null,s=null;if(e===0)return s=w(this.activityCalendar,n,i,this.activity),o=w(this.activityCalendar,s,r,this.activity),{ls:s,lf:o};let l=n;return e<0&&!a&&(l=this.getLastWorkingHour(l,this.activityCalendar,"future")),s=w(this.activityCalendar,l,i,this.activity),o=w(this.activityCalendar,s,r,this.activity),{ls:s,lf:o}}getMinLfFromLinks(e=[]){return e.length?e.reduce((n,i)=>i.lf<n.lf?i:n):!1}calculateSfRestrictionDates(){let e=this.activity.constraint_date,n=this.activity.duration;return{ls:w(this.activityCalendar,e,-n,this.activity),lf:e}}getLastWorkingHour(e,n,i=z.PAST){let r=e instanceof Date?e:new Date(e),a=pe(r).clone();return this.isActivityInInitHour(n,r)&&i===z.PAST&&(a=a.hours(0).minutes(0).seconds(0).milliseconds(0)),ae({dateBaseToCalculate:new Date(a),direction:i,activityCalendar:n,activity:this.activity})}isActivityInInitHour(e,n){let i=n instanceof Date?n:new Date(n),a=e.getWorkHours(i)[0];if(!a||!a.includes("-"))return!1;let o=a.split("-")[0];if(!o.includes(":"))return!1;let s=o.split(":");return s.length<2?!1:(o=parseInt(s[0],10),pe.isMoment(n)?n.hours()===o:i.getUTCHours()===o)}},qp=gl;function zp(t){let{parent:e,linkProperty:n,linkDirection:i,calculations:r,gantt:a,direction:o,linkCandidates:s}=t,l=e[n],c=UC(e),d=null;if(o===nt.FORWARD){let u=HC(l,i,r,a);d=new $p(u,e,a,s),d=d.calculate()}else{let u=BC(l,i,r,a);d=new qp({linksWithActivityData:u,activity:e,parentData:c,gantt:a}).calculate()}return d}function UC(t){return{duration:t.duration,calendarId:t.calendar_id}}function HC(t,e,n,i){return t.length===0?[]:t.map(r=>{let a=i.getLink(r);if(!a)return console.warn(`Link not found: ${r}`),null;let o=Number(a[e]),s=n.get(o);return s?{linkId:String(a.id),es:s.es,ef:s.ef,linkLag:a.lag,linkType:a.type}:(console.warn(`Calculations not found for activity: ${o}`),null)}).filter(Boolean)}function BC(t,e,n,i){return t.length===0?[]:t.map(r=>{let a=i.getLink(r);if(!a)return console.warn(`Link not found: ${r}`),null;let o=Number(a[e]),s=n.get(o);if(!s)return null;let l=i.getTask(o);return l?{ls:s.ls,lf:s.lf,linkLag:a.lag||0,linkType:a.type,progress:l.progress,type:l.type}:null}).filter(Boolean)}function Zp(t){let{activityData:e,calculations:n,singleParents:i,direction:r}=t;if(jC(e.id,n))return null;let a=WC(e.id,i),o=VC(a,n);return o.length===0?null:KC(o,r)}function jC(t,e){return e.has(t)}function WC(t,e){let n=e.get(t);return n?n.childrens:[]}function VC(t,e){return t.filter(n=>e.has(n)).map(n=>e.get(n))}function KC(t,e){if(e===nt.FORWARD){let n=Jp(t,"es"),i=Xp(t,"ef");return{es:n,ef:i}}else{let n=Jp(t,"ls"),i=Xp(t,"lf");return{ls:n,lf:i}}}function Jp(t,e){return t.reduce((n,i)=>i[e]<n[e]?i:n)[e]}function Xp(t,e){return t.reduce((n,i)=>i[e]>n[e]?i:n)[e]}var Al={parentWithLinks:zp,parentWithNoLinks:Zp};var Il=class{constructor(e){this.activity=e.activity,this.direction=e.direction,this.linkProperty=e.direction===nt.FORWARD?"$target":Ie.SOURCE,this.linkDirection=e.direction===nt.FORWARD?"source":"target",this.calculationsOfParentThatImpactChildrens=e.calculationsOfParentThatImpactChildrens,this.calculations=e.calculations,this.calculationOfParentsFromLinks=e.calculationOfParentsFromLinks,this.singleParents=e.singleParents,this.parentCalculationFromChildren=e.parentCalculationFromChildren,this.linkCandidates=e.linkCandidates,this.gantt=e.gantt}handleParentWithLinks(){try{let e=this.getArrayOfIdOfLinkedActivities(this.activity[this.linkProperty]);if(this.direction===nt.BACKWARD){let i=[D.FNLT];if(this.shouldCalculateParentWithLinksBackward(i)){this.calculateAndStoreParentWithLinks(this.activity);return}if(this.shouldSetDatesToParentsWithLinks(i)){this.setDatesToParentsWithLinksBackward();return}}if(this.areAllLinksCalculated(e)&&this.calculationsOfParentThatImpactChildrens.has(this.activity.id)){this.direction===nt.FORWARD&&this.setDatesToParentsWithLinks(),this.direction===nt.BACKWARD&&this.setDatesToParentsWithLinksBackward();return}this.calculateAndStoreParentWithLinks(this.activity)}catch(e){throw e}}shouldCalculateParentWithLinksBackward(e){let n=e.includes(this.activity.constraint_type),i=!this.calculationOfParentsFromLinks.has(this.activity.id);return n&&i}calculateAndStoreParentWithLinks(e){let n=Al.parentWithLinks({parent:e,linkProperty:this.linkProperty,linkDirection:this.linkDirection,gantt:this.gantt,calculations:this.calculations,direction:this.direction,linkCandidates:this.linkCandidates});this.calculationsOfParentThatImpactChildrens.set(e.id,n),this.calculationOfParentsFromLinks.add(e.id)}areAllLinksCalculated(e){return e.every(n=>this.calculations.has(n))}shouldSetDatesToParentsWithLinks(e){let n=e.includes(this.activity.constraint_type),i=this.calculationOfParentsFromLinks.has(this.activity.id);return n&&i}handleParentWithNoLinks(){let e=Al.parentWithNoLinks({activityData:this.activity,gantt:this.gantt,singleParents:this.singleParents,calculations:this.calculations,direction:this.direction});e&&this.calculations.set(this.activity.id,e)}setDatesToParentsWithLinks(){if(!this.activity)throw new Error("Error trying to get parent",{cause:{parentActivity:this.activity}});let e=this.singleParents.get(this.activity.id)?.childrens,i=Array.from(this.calculations).filter(o=>e.includes(o[0])).map(o=>o[1]),{minEs:r,maxEf:a}=i.reduce((o,{es:s,ef:l})=>({minEs:new Date(Math.min(o.minEs.getTime(),new Date(s).getTime())),maxEf:new Date(Math.max(o.maxEf.getTime(),new Date(l).getTime()))}),{minEs:new Date(i[0].es),maxEf:new Date(i[0].ef)});this.calculations.set(this.activity.id,{es:r,ef:a}),this.parentCalculationFromChildren.add(this.activity.id)}setDatesToParentsWithLinksBackward(){if(!this.activity)throw new Error("Error trying to get parent",{cause:{parentActivity:this.activity}});let e=this.singleParents.get(this.activity.id)?.childrens,i=Array.from(this.calculations).filter(o=>e.includes(o[0])).map(o=>o[1]),{minLs:r,maxLf:a}=i.reduce((o,{ls:s,lf:l})=>({minLs:new Date(Math.min(o.minLs.getTime(),new Date(s).getTime())),maxLf:new Date(Math.max(o.maxLf.getTime(),new Date(l).getTime()))}),{minLs:new Date(i[0].ls),maxLf:new Date(i[0].lf)});this.calculations.set(this.activity.id,{ls:r,lf:a})}getArrayOfIdOfLinkedActivities(e,n=!1){return e.map(i=>{let a=this.gantt.getLink(i)[n||this.linkDirection];return Number(a)})}},Qp=Il;var Sl=class{constructor({gantt:e,linkProperty:n}){this.gantt=e,this.linkProperty=n,this.structureOfParents=new Map,this.singleParents=new Map}identifyThirdLevelActivities(){try{let e=this.getFirstLevelParents();for(let n of e){let i=this.processEachActivity(n),{activitiesByLevel:r}=i,a=this.getAllLevels(r),o=this.getDeepestLevel(a),s=this.createResult(n,i,o,a);this.structureOfParents.set(n.id,s)}return{structureOfParents:this.structureOfParents,singleParents:this.singleParents}}catch(e){throw e}}getFirstLevelParents(){return this.gantt.getTaskByTime().filter(qt.byFirstLevel).filter(qt.filterByParentType)}processEachActivity(e){let n=new Set,i=new Set,r=new Map;return this.initializeParent(e),this.gantt.eachTask(a=>{this.processActivity(a,n,i,r)},e.id),{parentsIds:n,allTasks:i,activitiesByLevel:r}}initializeParent(e){let n=Number(e.id),i=!!e[this.linkProperty]?.length,r=e.$level;this.singleParents.set(n,{level:r,hasLink:i,childrens:[]})}processActivity(e,n,i,r){let a=Number(e.id),o=Number(e.parent);i.add(a),this.isProjectActivity(e)&&this.addParentInfo(e,n);let l=this.doesParentExist(o);o!=null&&l&&this.addChildToParent(o,a),this.addActivityToLevel(e,r)}isProjectActivity(e){return e.type===L.PROJECT}hasLink(e){return!!e[this.linkProperty]?.length}addParentInfo(e,n){let i=Number(e.id),r=e.$level,a=this.hasLink(e),o={level:r,hasLink:a,childrens:[]};n.add(i),this.singleParents.set(i,o)}doesParentExist(e){return this.singleParents.has(e)}addChildToParent(e,n){this.singleParents.get(e).childrens.push(n)}addActivityToLevel(e,n){let i=e.$level,r=Number(e.parent);n.has(i)||n.set(i,new Map);let a=n.get(i);a.has(r)||a.set(r,[]),a.get(r).push({id:Number(e.id),isParent:this.isProjectActivity(e),calculated:!1})}getAllLevels(e){return new Set(e.keys())}getDeepestLevel(e){return e.size===0?0:Math.max(...e)}createResult(e,n,i,r){let{activitiesByLevel:a,parentsIds:o,allTasks:s}=n;return{parent:e.id,isALinkedParent:this.hasLink(e),levels:r,allParentChildrens:o,allChildrens:s,childrensByLevel:a,currentResolutionLevel:i,canBeCalculated:!1}}},tf=Sl;var vl=class{constructor(e,n){this.direction=n,this.gantt=e,this.linkProperty=this.direction===nt.FORWARD?"$target":Ie.SOURCE,this.linkDirection=this.direction===nt.FORWARD?"source":"target",this.projectDates=e.getSubtaskDates()}tryToCalculateLastLevelChildrens(){this.structureOfParents.forEach(e=>{let{currentResolutionLevel:n,childrensByLevel:i,isALinkedParent:r}=e;if(r)return;let a=i.get(n);for(let[o,s]of a)if(s.filter(c=>!this.calculations.has(c.id)).length===0){let c=this.gantt.getTask(o);this.calculateParentWithNoLinks(c,s);return}})}initActivitiesWaitingForCalculation(){try{this.gantt.getTaskByTime().filter(qt.avoidSubproject).forEach(e=>{this.activitiesWaitingForCalculation.add(e.id)})}catch(e){throw e}}identifyParentsWithAndWithoutLinks(){try{let{parentsWithFullProgress:e,pendingParentsWithNoLinks:n,pendingParentsWithLinks:i}=br.identifyParentsWithAndWithoutLinks({gantt:this.gantt,direction:this.direction,linkProperty:this.linkProperty});this.parentsWithFullProgress=e,this.pendingParentsWithNoLinks=n,this.pendingParentsWithLinks=i}catch(e){throw e}}identifyForbiddenActivitiesLinkedToParentsWithLinks(){try{this.forbiddenActivitiesLinkedToParentsWithLinks=br.identifyForbiddenActivities({pendingParentsWithLinks:this.pendingParentsWithLinks,gantt:this.gantt,direction:this.direction})}catch(e){throw e}}getArrayOfIdOfLinkedActivities(e,n=!1){return e.map(i=>{let a=this.gantt.getLink(i)[n||this.linkDirection];return Number(a)})}async identifyThirdLevelActivities(){try{let{structureOfParents:e,singleParents:n}=new tf({gantt:this.gantt,linkProperty:this.linkProperty}).identifyThirdLevelActivities();this.structureOfParents=e,this.singleParents=n}catch(e){throw e}}processEachActivity(e){let n=new Set,i=new Set,r=new Map,a=new Map;return this.singleParents.set(Number(e.id),{level:e.$level,hasLink:!!e[this.linkProperty].length,childrens:[]}),new Promise((o,s)=>{this.gantt.eachTask(function(l){let c=Number(l.parent);if(i.add(l.id),l.type===L.PROJECT){let u={level:l.$level,hasLink:!!l[this.linkProperty].length,childrens:[]};n.add(l.id),this.singleParents.set(Number(l.id),u)}c&&this.singleParents.has(c)&&this.singleParents.get(c).childrens.push(l.id),r.has(l.$level)||r.set(l.$level,new Map);let d=r.get(l.$level);d.has(Number(l.parent))||d.set(Number(l.parent),[]),d.get(Number(l.parent)).push({id:l.id,isParent:l.type===L.PROJECT,calculated:!1})}.bind(this),e.id),o({parentsIds:n,allTasks:i,activitiesByLevel:r,singleParents:a})})}identifySecondLevelActivities(){try{let e=br.identifySecondLevelActivities({gantt:this.gantt,pendingParentsWithNoLinks:this.pendingParentsWithNoLinks,calculations:this.calculations,linkProperty:this.linkProperty});this.secondLevelActivities=new Set([...this.secondLevelActivities,...e])}catch(e){throw e}}identifyInitialActivities(){try{let{chainStartActivities:e,activitiesStartChainButChildrenOfLinkedParents:n}=br.identifyInitialActivities({gantt:this.gantt,linkProperty:this.linkProperty,direction:this.direction});this.chainStartActivities=e,n&&(this.activitiesStartChainButChildrenOfLinkedParents=n)}catch(e){throw new Error("Error in identifyInitialActivities",{cause:e})}}calculateSecondLevelActivities(){try{this.direction===nt.FORWARD?this.recursiveCalculateEfAndEs(Array.from(this.secondLevelActivities),0,"secondLevel"):this.recursiveCalculateLfAndLs(Array.from(this.secondLevelActivities))}catch(e){throw e}}calculateStartAndFinishOfActivitiesThatStartChain(){try{this.chainStartActivities.forEach(e=>{if(!e||e.progress>100||e.type===L.PROJECT)return;let n=this.calculateStartAndFinishOfChainOrigin(e,this.direction);if(this.direction===nt.FORWARD){let{es:i,ef:r}=n;this.calculations.set(e.id,{es:i,ef:r,text:e.text}),this.activitiesWaitingForCalculation.delete(e.id)}else{let{ls:i,lf:r}=n;this.calculations.set(e.id,{ls:i,lf:r,text:e.text}),this.activitiesWaitingForCalculation.delete(e.id)}})}catch(e){throw e}}buildDependencyGraph(e){let n=new Map,i=new Set(this.calculations.keys()),r=new Map;return e.forEach(a=>{a&&r.set(a.id,a)}),r.forEach((a,o)=>{if(i.has(o))return;let s=[];(a[this.linkDirection]||[]).forEach(c=>{let d=this.gantt.getLink(c);if(d){let u=Number(d[this.linkProperty]);s.push(u)}}),s=s.filter(c=>r.has(c)||i.has(c)),n.set(o,s)}),{graph:n,activityMap:r,calculatedActivities:i}}topologicalSort(e,n){let i=new Set,r=new Set,a=[],o=s=>{if(r.has(s))throw new Error("Cyclical dependency detected",{cause:{nodeId:s}});if(!i.has(s)&&!n.has(s)){r.add(s);let l=e.get(s)||[];for(let c of l)o(c);r.delete(s),i.add(s),a.push(s)}};for(let s of e.keys())!i.has(s)&&!n.has(s)&&o(s);return a.reverse()}calculateStartAndFinishOfChainOrigin(e=null,n=null){try{let i=e,r=Number(i.progress);r==="0.00"&&(r=0);let a=this.gantt.getCalendar(i.calendar_id);if(!a)throw new Error(`Error trying to get calendar with id: ${i.calendar_id}`);if((n||this.direction)===nt.FORWARD){let s=i.start_date,l=i.end_date;return{es:s,ef:l}}else{if(r>=100)return{ls:pe(i.start_date).clone(),lf:pe(i.end_date).clone()};if(r===0)return this.calculateBackwardWhenZeroProgress(i,a);if(r<100&&r>0)return this.calculateWhenProgressIsBetweenZeroAndOneHundred(i,a)}}catch(i){throw i}}calculateBackwardWhenZeroProgress(e,n){let i=pe(e.start_date).clone(),r=pe(e.end_date).clone(),a=e.duration,o=[D.ASAP,D.ALAP,D.SNET,D.FNET],s=e.constraint_type||D.ASAP;if(o.includes(s))r=this.projectDates.end_date,i=w(n,r,-a,e);else{let l=[D.SNLT,D.MSO],c=[D.FNLT,D.MFO];l.includes(s)&&(i=e.constraint_date,r=w(n,i,a,e)),c.includes(s)&&(r=e.constraint_date,i=w(n,r,-a,e))}return{ls:i,lf:r}}calculateWhenProgressIsBetweenZeroAndOneHundred(e){let n=e.start_date,i=null,r=e.constraint_type||D.ASAP,a=this.projectDates.end_date,o=[D.ASAP,D.ALAP,D.SNET,D.FNET],s=[D.SNLT,D.FNLT];if(o.includes(r))i=Math.max(e.end_date,a);else if(r===D.MSO)i=e.end_date;else if(r===D.MFO||s.includes(r)){let l=Math.min(a,e.constraint_date);i=Math.max(l,e.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===L.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===nt.FORWARD?"es":"ls"]:i.start_date,[this.direction===nt.FORWARD?"ef":"lf"]:i.end_date}),this.calculationOfParentsFromLinks.add(i.id))})}catch(e){throw e}}doCalculationForParentType(e){let n=new Qp({activity:e,direction:this.direction,calculationsOfParentThatImpactChildrens:this.calculationsOfParentThatImpactChildrens,calculations:this.calculations,calculationOfParentsFromLinks:this.calculationOfParentsFromLinks,singleParents:this.singleParents,parentCalculationFromChildren:this.parentCalculationFromChildren,linkCandidates:this.linkCandidates,gantt:this.gantt});this.pendingParentsWithLinks.has(e.id)?n.handleParentWithLinks():n.handleParentWithNoLinks()}},An=vl;function YC(t,e,n){let i={es:null,ef:null};if(!t)return i;if([D.SNET,D.SNLT].includes(e)){let r=new Date(t.constraint_date);i.es=r,i.ef=w(n,r,t.duration,t)}else if([D.FNLT,D.FNET].includes(e)){let r=new Date(t.constraint_date);i.es=w(n,r,-t.duration,t),i.ef=r}else if(e===D.MSO){let r=new Date(t.constraint_date);i.es=r,i.ef=w(n,r,t.duration,t)}else if(e===D.MFO){let r=new Date(t.constraint_date);i.es=w(n,r,-t.duration,t),i.ef=r}return i}var uo=YC;var Cl=class{constructor(e){this.referenceActivity=e.activity,this.activityToCalculate=null,this.links=e.links,this.calculatedActivities=e.calculatedActivitiesMap,this.alapMap=e.calculatedAlapsMap,this.parentsWithLinks=e.parentsWithLinks,this.parentsCalculations=e.parentsCalculations,this.gantt=e.ganttInstance,this.linkCandidates=e.linkCandidates}getEsAndEfFromPreviousCalculatedActivities(e){return this.alapMap.has(e)?this.alapMap.get(Number(e)):this.calculatedActivities.get(Number(e))}calculateSucessorTimes(e,n,i=0,r,a=X.FS){let o=this.gantt.getCalendar(this.referenceActivity.calendar_id);if(!o)throw new Error(`Error trying to get calendar with id: ${this.referenceActivity.calendar_id}`);let s=e,l=null,c=null,d=this.referenceActivity.type===L.MILESTONE;return d||(a===X.FS&&r===0?s=ae({dateBaseToCalculate:s,activityCalendar:o,direction:"future",activity:this.referenceActivity}):s=this.mutateTheDateToFutureOrPastInBaseRestriction(e,a,o)),[X.FF,X.SF].includes(a)?(c=w(o,s,i,this.referenceActivity),l=w(o,c,n,this.referenceActivity),!d&&r>0&&(l=this.mutateTheDateToFutureOrPastInBaseRestriction(l,a,o))):(l=w(o,s,n,this.referenceActivity),!d&&r>0&&(l=this.mutateTheDateToFutureOrPastInBaseRestriction(l,a,o)),c=w(o,l,i,this.referenceActivity)),{es:l,ef:c}}calculateSS(e){let n=this.getEsAndEfFromPreviousCalculatedActivities(Number(e.source)),i=e.lag||0,a=this.referenceActivity.duration,o=e.lag||0;return this.calculateSucessorTimes(n.es,i,a,o,X.SS)}calculateFF(e){let n=this.getEsAndEfFromPreviousCalculatedActivities(Number(e.source)),r=-this.referenceActivity.duration,a=e.lag||0,o=e.lag||0;return this.calculateSucessorTimes(n.ef,r,a,o,X.FF)}calculateFS(e){let n=this.getEsAndEfFromPreviousCalculatedActivities(Number(e.source)),i=e.lag||0,a=this.referenceActivity.duration,o=e.lag||0;return this.calculateSucessorTimes(n.ef,i,a,o,X.FS)}calculateSF(e){let n=this.getEsAndEfFromPreviousCalculatedActivities(Number(e.source)),r=-this.referenceActivity.duration,a=e.lag||0,o=e.lag||0;return this.calculateSucessorTimes(n.es,r,a,o,X.SF)}mutateTheDateToFutureOrPastInBaseRestriction(e,n,i){if(![X.FS,X.SS,X.FF].includes(n))return e;let a=[X.FS,X.SS].includes(n)?"future":z.PAST;return ae({dateBaseToCalculate:e,activityCalendar:i,direction:a,activity:this.referenceActivity})}},ef=Cl;var Fr=class extends ef{constructor(e){super(e)}calculate(){if(this.links.length===0)return new An(this.gantt,"forward").calculateStartAndFinishOfChainOrigin(this.referenceActivity);let e=this.links.map(i=>{let r=this.gantt.getLink(i);if(!r)throw new Error("Link data not found",{cause:{linkId:i}});let a=this.calculateLink(r);return this.linkCandidates?.set(String(r.id),{targetId:String(this.referenceActivity.id),...a}),a}),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,a=w(i,r,this.referenceActivity.duration,this.referenceActivity);e.push({es:r,ef:a})}return co(e)}calculateLink(e){return{0:()=>this.calculateFS(e),1:()=>this.calculateSS(e),2:()=>this.calculateFF(e),3:()=>this.calculateSF(e)}[e.type]()}};var Dl=class{constructor(e){this.gantt=e.gantt,this.direction=e.direction,this.pendingParentsWithNoLinks=e.pendingParentsWithNoLinks,this.pendingParentsWithLinks=e.pendingParentsWithLinks,this.calculationOfParentsFromLinks=e.calculationOfParentsFromLinks,this.singleParents=e.singleParents,this.calculations=e.calculations,this.activitiesStartChainButChildrenOfLinkedParents=e.activitiesStartChainButChildrenOfLinkedParents,this.linkProperty=e.linkProperty,this.linkDirection=e.linkDirection}checkActivitiesThatNowCanBeCalculated(e){let n=new Set,i=new Set(e);for(let r of e){let a=this.gantt.getTask(r);a.type===L.PROJECT?this.handleProjectActivity(r,a,n,i):this.handleNonProjectActivity(r,a,n,i)}return{activitiesThatCanBeCalculated:n,pendingActivities:i}}handleProjectActivity(e,n,i,r){let a=this.pendingParentsWithNoLinks.has(e),o=this.pendingParentsWithLinks.has(e),s=this.calculationOfParentsFromLinks.has(e);if(a){let l=this.singleParents.get(e)?.childrens;if(!l)return;l.every(d=>this.calculations.has(d))&&(i.add(e),r.delete(e));return}if(o&&s){let l=this.singleParents.get(e)?.childrens;if(!l)return;l.every(d=>this.calculations.has(d))&&(i.add(e),r.delete(e));return}o&&!s&&this.canCalculateParentActivity(n)&&(i.add(e),r.delete(e))}canCalculateParentActivity(e){let n=(e[this.linkProperty]||[]).length===0,i=e.constraint_type;return(this.direction===nt.FORWARD?i===D.FNLT||i===D.SNLT:i===D.FNLT)&&n?!0:this.getArrayOfLinkedActivities(e[this.linkProperty]).every(o=>this.calculations.has(o))}handleNonProjectActivity(e,n,i,r){let a=Number(n.parent),o=this.pendingParentsWithLinks.has(a),s=this.calculationOfParentsFromLinks.has(a);if(o&&!s||this.direction===nt.BACKWARD&&this.activitiesStartChainButChildrenOfLinkedParents.has(e)&&!s)return;if(n.$target.length===0&&n[Ie.SOURCE].length===0){i.add(e),r.delete(e);return}let l=this.getLinkedActivities(n[this.linkProperty]),c=l.every(d=>this.calculations.has(d.id));if(this.direction===nt.BACKWARD&&(l.length===0||c)&&s){i.add(e),r.delete(e);return}c&&(i.add(e),r.delete(e))}getLinkedActivities(e){if(!Array.isArray(e))return[];let n=[];for(let i of e){let r=this.gantt.getLink(i);if(!r)continue;let a=r[this.linkDirection],o=this.gantt.getTask(a);o&&n.push(o)}return n}getArrayOfLinkedActivities(e){if(!Array.isArray(e))return[];let n=[];for(let i of e){let r=this.gantt.getLink(i);r&&n.push(Number(r[this.linkDirection]))}return n}},po=Dl;var Tl=(t,e)=>()=>e()===t;var _l=t=>!t?.fullyParsed;var GC=16,Zn=async t=>performance.now()-t>GC?(await St(),performance.now()):t;var wr=async({pending:t,activityCalculator:e,calculateFn:n,shouldKeepPending:i,isCalculated:r,onActivityProcessed:a,isCurrent:o})=>{let s=new Set(t),l=performance.now();for(;s.size>0;){if(!o())return;l=await Zn(l);let{activitiesThatCanBeCalculated:c,pendingActivities:d}=e.checkActivitiesThatNowCanBeCalculated(s);if(c.size===0)break;for(let u of c){if(!o())return;l=await Zn(l),n([u])}for(let u of c){if(!o())return;i(u)&&d.add(u),a(u),r(u)&&d.delete(u)}s=d}};var El=class extends An{constructor(e){super(e,nt.FORWARD),this.gantt=e,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.linkCandidates=new Map,this.calculationOfParentsFromLinks=new Set,this.parentCalculationFromChildren=new Set,this.forbiddenActivitiesLinkedToParentsWithLinks=new Set,this.activitiesStartChainButChildrenOfLinkedParents=new Set,this.identifyInitialActivities(),this.initActivitiesWaitingForCalculation()}async calculateAsync(e){this.identifyParentsWithAndWithoutLinks(),e()&&(this.identifyForbiddenActivitiesLinkedToParentsWithLinks(),e()&&(this.initializeActivitiesWithFullProgress(),e()&&(this.calculateStartAndFinishOfActivitiesThatStartChain(),e()&&(this.identifySecondLevelActivities(),e()&&(this.identifyThirdLevelActivities(),e()&&await this.iterativeCalculateEfAndEs(e))))))}async iterativeCalculateEfAndEs(e){let n=new po({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 wr({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:e})}calculateStartAndFinishTimes(e){e.forEach(n=>{let i=this.gantt.getTask(n);if(i.type===L.PROJECT)return this.doCalculationForParentType(i);if(!i)throw new Error("Error trying to get activity",{cause:{activityId:n}});let r=i.$target,a=i.constraint_type||D.ASAP,o=[D.SNET,D.SNLT,D.FNLT,D.FNET],s=[D.ASAP,D.ALAP,D.SNET,D.FNET,D.SNLT,D.FNLT],l=this.gantt.getCalendar(i.calendar_id);if(!l)throw new Error(`Error trying to get calendar with id: ${i.calendar_id}`);let c=Number(i.progress),d=null,u=null,p=null;if(c===100){this.setDatesForActivityWithFullProgress(i);return}c>0&&s.includes(a)?({es:d,ef:u}=this.getDatesForActivityWithZeroProgress(i),p=new Fr({links:r,activity:i,calculatedActivitiesMap:this.calculations,calculatedAlapsMap:this.alapMap,constraint:a,parentsWithLinks:this.pendingParentsWithLinks,parentsCalculations:this.calculationsOfParentThatImpactChildrens,ganttInstance:this.gantt,linkCandidates:this.linkCandidates}).calculate(),a===D.ASAP&&this.totalFloatForAsap.set(n,{es:p.es,ef:p.ef,text:i.text})):{es:d,ef:u}=new Fr({links:r,activity:i,calculatedActivitiesMap:this.calculations,calculatedAlapsMap:this.alapMap,constraint:a,parentsWithLinks:this.pendingParentsWithLinks,parentsCalculations:this.calculationsOfParentThatImpactChildrens,ganttInstance:this.gantt,linkCandidates:this.linkCandidates}).calculate(),a===D.ALAP&&this.alapMap.set(n,{es:i.start_date,ef:i.end_date,text:i.text});let f=uo(i,a,l);if(o.includes(a)&&(this.constraintsMap.set(n,f),this.totalFloatSnltFnlt.set(n,{es:d,ef:u}),{es:d,ef:u}=this.recalculateInBaseConstraint(a,f,{es:d,ef:u})),[D.MSO,D.MFO].includes(a))if(this.totalFloatForMsoMfo.set(n,{es:d,ef:u}),this.constraintsMap.set(n,f),i.progress===0)d=f.es,u=f.ef;else{let y=i.end_date;a===D.MFO&&(y=Math.max(f.ef,i.end_date)),d=i.start_date,u=y}this.calculations.set(n,{es:d,ef:u}),this.activitiesWaitingForCalculation.delete(n)})}getTheGreatesDateBetweenRestrictionAndEsEf(e,n,i=Xn.GREATER){if(i===Xn.GREATER)return n.ef>e.ef?n:e;if(i===Xn.LESS)return n.ef<e.ef?n:e}setDatesForActivityWithFullProgress(e){this.calculations.set(e.id,{es:e.start_date,ef:e.end_date})}getDatesForActivityWithZeroProgress(e){return{es:e.start_date,ef:e.end_date}}recalculateInBaseConstraint(e,n,i){let r=[D.SNET,D.FNET].includes(e)?Xn.GREATER:Xn.LESS,{es:a,ef:o}=this.getTheGreatesDateBetweenRestrictionAndEsEf(n,i,r);return{es:a,ef:o}}cleanAllActivityParentsFromLinks(e){return e.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,a=i.target;if(!(!this.gantt.getTask(r)||this.gantt.getTask(r)?.type===L.PROJECT)&&!(!this.gantt.getTask(a)||this.gantt.getTask(a)?.type===L.PROJECT))return n}).filter(Boolean)}},nf=El;var Pl=class{constructor(e){this.activity=e.activity,this.links=e.links,this.calculatedActivities=e.calculatedActivitiesMap,this.forwardPathCalculations=e.calculatedForwardActivitiesMap,this.gantt=e.ganttInstance}getForwardOrBackwardCalculations(e,n=null){return n===D.ALAP?this.forwardPathCalculations.get(e):this.calculatedActivities.get(e)}calculateSuccessorTimes(e,n,i=0,r,a=X.FS){let o=this.gantt.getCalendar(this.activity.calendar_id);if(!o)throw new Error(`Error trying to get calendar with id: ${this.activity.calendar_id}`);let s=e,l=this.activity.type===L.MILESTONE;if(l&&r===0){let d=w(o,s,n,this.activity),u=w(o,d,i,this.activity);return{ls:d,lf:u}}let c={lag:r,workTime:s,activityCalendar:o,lsDataCalculation:n,lfDataCalculation:i,isMilestone:l};if(a===X.FS){let{ls:d,lf:u}=this.calculateFsLink(c);return{ls:d,lf:u}}if(a===X.FF){let{ls:d,lf:u}=this.calculateFFLink(c);return{ls:d,lf:u}}if(a===X.SS){let{ls:d,lf:u}=this.calculateSSlink(c);return{ls:d,lf:u}}if(a===X.SF){let{ls:d,lf:u}=this.calculateSFLink(c);return{ls:d,lf:u}}}calculateSS(e,n=!1){let i=this.getValueForSS(e,n),r=-e.lag||0,a=this.activity.duration,o=e.lag;return this.calculateSuccessorTimes(i,r,a,o,X.SS)}calculateFF(e,n){let i=this.getForwardOrBackwardCalculations(Number(e.target)),r=n===D.ALAP?"ef":"lf",a=i[r],o=-this.activity.duration,s=-e.lag||0,l=e.lag;return this.calculateSuccessorTimes(a,o,s,l,X.FF)}calculateFS(e,n){let i="ls";i=n===D.ALAP?"es":"ls";let r=this.getForwardOrBackwardCalculations(Number(e.target),n),a=-this.activity.duration,o=e.lag||0,s=-e.lag||0;return this.calculateSuccessorTimes(r[i],a,s,o,X.FS)}calculateSF(e,n=!1){let i=n?this.getEarlyStartFromForwardPath(Number(e.target)).ef:this.getForwardOrBackwardCalculations(Number(e.target)).lf,r=-e.lag||0,a=this.activity.duration,o=e.lag;return this.calculateSuccessorTimes(i,r,a,o,X.SF)}getEarlyStartFromForwardPath(e){return this.forwardPathCalculations.get(e)}getValueForSS(e,n){return n?this.getEarlyStartFromForwardPath(Number(e.target)).es:this.getForwardOrBackwardCalculations(Number(e.target))["ls"]}calculateDate(e,n,i){let r=pe(n).clone();return w(e,new Date(r),i,this.activity)}getLastWorkingHour(e,n,i=z.PAST){let r=e instanceof Date?e:new Date(e),a=pe(r).clone();return this.isActivityInInitHour(n,r)&&i===z.PAST&&(a=a.hours(0).minutes(0).seconds(0).milliseconds(0)),ae({dateBaseToCalculate:new Date(a),direction:i,activityCalendar:n,activity:this.activity})}isActivityInInitHour(e,n){let i=n instanceof Date?n:new Date(n),a=e.getWorkHours(i)[0];if(!a||!a.includes("-"))return!1;let o=a.split("-")[0];if(!o.includes(":"))return!1;let s=o.split(":");return s.length<2?!1:(o=parseInt(s[0],10),pe.isMoment(n)?n.hours()===o:i.getUTCHours()===o)}calculateFsLink({lag:e,workTime:n,activityCalendar:i,lsDataCalculation:r,lfDataCalculation:a,isMilestone:o=!1}){let s=null,l=null;if(e===0){let d=this.getLastWorkingHour(n,i,z.PAST);return s=w(i,d,a,this.activity),s=this.getLastWorkingHour(s,i,z.PAST),l=w(i,s,r,this.activity),{ls:l,lf:s}}let c=n;return o||(c=this.getLastWorkingHour(n,i)),s=w(i,c,a,this.activity),l=w(i,s,r,this.activity),o||(s=this.getLastWorkingHour(s,i,z.PAST,!0)),{ls:l,lf:s}}calculateFFLink({lag:e,workTime:n,activityCalendar:i,lsDataCalculation:r,lfDataCalculation:a}){let o=null,s=null;if(e===0)return o=w(i,n,a,this.activity),s=w(i,o,r,this.activity),{ls:s,lf:o};let l=n;return e>0&&(l=this.getLastWorkingHour(l,i,z.PAST)),o=w(i,l,a,this.activity),s=w(i,o,r,this.activity),{ls:s,lf:o}}calculateSSlink({lag:e,workTime:n,activityCalendar:i,lsDataCalculation:r,lfDataCalculation:a,isMilestone:o=!1}){let s=null,l=null;if(e===0)return l=w(i,n,r,this.activity),s=w(i,l,a,this.activity),{ls:l,lf:s};let c=n;return e<0&&!o&&(c=this.getLastWorkingHour(c,i,"future")),l=w(i,c,r,this.activity),s=w(i,l,a,this.activity),{ls:l,lf:s}}calculateSFLink({lag:e,workTime:n,activityCalendar:i,lsDataCalculation:r,lfDataCalculation:a}){let o=null,s=null;return e===0?(s=w(i,n,r),o=w(i,s,a,this.activity),{ls:s,lf:o}):(s=w(i,n,r,this.activity),o=w(i,s,a,this.activity),{ls:s,lf:o})}},rf=Pl;var Rl=class extends rf{constructor(e){super(e),this.constraint=e.constraint||D.ASAP,this.parentsWithFullProgress=e.parentsWithFullProgress,this.parentsThatImpactChildrens=e.parentsThatImpactChildrens,this.projectDates=this.gantt.getSubtaskDates()}calculate(){if(this.links.length===0)return new An(this.gantt,nt.BACKWARD).calculateStartAndFinishOfChainOrigin(this.activity);let e=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(o=>{let s=this.gantt.getLink(o);if(!s)throw new Error("Link not found",{cause:{linkId:o}});if(!this.parentsWithFullProgress.has(Number(s.target)))return this.calculateLink(s)}).filter(o=>o);if(r.length!==0){let o=this.getMinLfFromLinks(r);if(r.push(this.calculateTheLsAndLfForTheActivity()),i){let d=this.parentsThatImpactChildrens.get(Number(this.activity.parent));r.push(this.calculateTheLsAndLfForTheActivity(d))}let s=this.getMinDateFromLinks(r),l=s.ls,c=s.lf;return e&&(l=this.activity.start_date,c=this.getMinCalculationLogic(s)),{ls:l,lf:c,minFromLinks:o}}if(i){r.push(this.calculateTheLsAndLfForTheActivity());let s=this.parentsThatImpactChildrens.get(Number(this.activity.parent)).lf,l=w(this.gantt.getCalendar(this.activity.calendar_id),s,-this.activity.duration,this.activity);r.push({ls:l,lf:s});let c=this.getMinDateFromLinks(r);return{ls:c.ls,lf:c.lf,minFromLinks:c}}let a=this.calculateTheLsAndLfForTheActivity();return{ls:a.ls,lf:a.lf,minFromLinks:a}}calculateTheLsAndLfForTheActivity(e=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=e?e.lf:this.projectDates.end_date;if(!r)throw new Error("End date not found for activity",{cause:{activityId:this.activity.id}});return{ls:w(i,r,-n,this.activity),lf:r}}catch(n){throw Error(n.message)}}SnetSnltMsoMinDate(e){let n=Math.min(e.lf,this.projectDates.end_date);return new Date(Math.max(n,this.activity.end_date))}calculateLink(e){let n=this.gantt.getTask(e.target);if(!n||n.progress>0&&n.type!==L.PROJECT)return;let i=this.getSpecialCalculationParamForConstraintLink(),r=this.getSpecialParamForSf(),a=this.getSpecialParamForFF();return{0:()=>this.calculateFS(e,i),1:()=>this.calculateSS(e),2:()=>this.calculateFF(e,a),3:()=>this.calculateSF(e,r)}[e.type]()}getSpecialCalculationParamForConstraintLink(){if(this.constraint===D.ALAP)return D.ALAP;if(this.constraint===D.FNET||this.constraint===D.SNET)return"snet-fnet";if(this.constraint===D.FNLT)return D.FNLT}getSpecialParamForSf(){return!![D.ALAP].includes(this.constraint)}getSpecialParamForFF(){return!![D.MFO,D.MSO].includes(this.constraint)}getMinCalculationLogic(e){if(this.constraint===D.ALAP)return this.getMinDateBasedOnConstraint(e);if(this.constraint===D.FNET)return this.getMinDateBasedOnConstraint(e);if(this.constraint===D.FNLT)return this.getMinDateBasedOnConstraint(e);if(this.constraint===D.MFO)return this.getMinDateBasedOnConstraint(e);if(this.constraint===D.SNET||this.constraint===D.SNLT||this.constraint===D.MSO)return this.SnetSnltMsoMinDate(e);if(this.constraint===D.ASAP)return this.getMinDateBasedOnConstraint(e)}getMinDateFromLinks(e){try{return this.constraint===D.ALAP||this.constraint===D.ASAP?e.reduce((i,r)=>r.lf<i.lf?r:i):e.reduce((n,i)=>i.ls<n.ls?i:n)}catch(n){throw new Error(`Function: getMinDateFromLinks in LinksConstraintCalculator - ${n.message}`)}}getMinLfFromLinks(e){return e.reduce((n,i)=>i.lf<n.lf?i:n)}getMinDateBasedOnConstraint(e,n=this.constraint){let i=Math.min(e.lf,this.projectDates.end_date),r=this.activity.end_date,a=this.activity.constraint_date;if(n===D.ASAP)return new Date(Math.max(i,r));if(n===D.FNET||n===D.FNLT){let o=Math.min(i,a);return new Date(Math.max(i,o))}if(n===D.ALAP)return new Date(Math.min(i,r))}},af=Rl;function $C(t,e,n){let i={ls:null,lf:null};return n===D.MSO&&(i.ls=e.constraint_date,i.lf=w(t,i.ls,e.duration,e)),n===D.MFO&&(i.lf=e.constraint_date,i.ls=w(t,i.lf,-e.duration,e)),i}var of=$C;var kl=class extends An{constructor(e,n,i){super(e,nt.BACKWARD),this.gantt=e,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(e){this.identifyParentsWithAndWithoutLinks(),e()&&(this.identifyForbiddenActivitiesLinkedToParentsWithLinks(),e()&&(this.initializeActivitiesWithFullProgress(),e()&&(this.calculateStartAndFinishOfActivitiesThatStartChain(),e()&&(this.identifySecondLevelActivities(),e()&&(this.identifyThirdLevelActivities(),e()&&await this.iterativeCalculateLfAndLs(e))))))}async iterativeCalculateLfAndLs(e){let n=new po({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 wr({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:e})}setDatesToParentsWithLinks(e){if(!e)throw new Error("Error trying to get parent",{cause:{receivedParentData:e}});let n=this.singleParents.get(e.id).childrens,r=Array.from(this.calculations).filter(s=>n.includes(s[0])).map(s=>s[1]),{minLs:a,maxLf:o}=r.reduce((s,{ls:l,lf:c})=>({minLs:new Date(Math.min(s.minLs.getTime(),new Date(l).getTime())),maxLf:new Date(Math.max(s.maxLf.getTime(),new Date(c).getTime()))}),{minLs:new Date(r[0].ls),maxLf:new Date(r[0].lf)});this.calculations.set(e.id,{ls:a,lf:o})}calculateStartAndFinishTimes(e){e.forEach(n=>{let i=this.gantt.getTask(n);if(!i)throw new Error("Activity not found",{cause:{activityId:n}});let r=i.$source,a=i.constraint_type||D.ASAP,o=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===L.PROJECT)return this.doCalculationForParentType(i);if(o===100){this.setDatesForActivityWithFullProgress(i);return}if(this.allLinkedActivitiesHasProgress(r,i)){this.setWhenAllLinkedActivitiesHasProgress(i);return}if(o>0&&o<100&&(a===D.MSO||a===D.MFO)){this.setWhenActivitiesHasProgressButLessThanOneHundred(i,a);return}if(a===D.MSO||a===D.MFO){this.recalculateInBaseRestriction(i,a);return}let{ls:s,lf:l,minFromLinks:c}=this.calculateLfandLsFromLinks(r,i,a,this.parentsWithFullProgress,this.calculationsOfParentThatImpactChildrens);(a===D.SNLT||a===D.FNLT)&&({ls:s,lf:l}=this.getTheLessLateInBasEsEfConstraint(i.id,{ls:s,lf:l},a)),this.setCalculations(i,s,l),this.minFromLinks.set(i.id,{ls:c.ls,lf:c.lf})})}getTheLessLateInBasEsEfConstraint(e,n,i){let r=this.forwardConstraintsMap.get(e);if(!r){let a=this.gantt.getTask(e),o=this.gantt.getCalendar(a.calendar_id);r=uo(a,i,o)}return n.lf<r.ef?n:{ls:r.es,lf:r.ef}}allLinkedActivitiesHasProgress(e){try{let n=!0;for(let i of e){let r=this.gantt.getLink(i);if(!r)continue;let a=this.gantt.getTask(r.target);a&&(a.type===L.PROJECT&&(n=!1),a.progress===0&&(n=!1))}return n}catch(n){throw new Error(n.message)}}setDatesForActivityWithFullProgress(e){this.setCalculations(e,e.start_date,e.end_date)}setWhenAllLinkedActivitiesHasProgress(e){let n=Number(e.parent),{ls:i,lf:r}=this.calculateStartAndFinishOfChainOrigin(e,nt.BACKWARD);if(this.calculationsOfParentThatImpactChildrens.has(n)){i=e.start_date;let a=this.calculationsOfParentThatImpactChildrens.get(n);a&&typeof a=="object"&&a.lf!=null&&(r=new Date(Math.min(r,a.lf)))}this.setCalculations(e,i,r)}setWhenActivitiesHasProgressButLessThanOneHundred(e,n){if(n===D.MSO){this.setCalculations(e,e.start_date,e.end_date);return}if(n===D.MFO){let i=Math.min(e.constraint_date,this.projectDates.end_date),r=new Date(Math.max(i,e.end_date));this.setCalculations(e,e.start_date,r);return}}setCalculations(e,n,i){this.calculations.set(e.id,{ls:n,lf:i,text:e.text})}calculateLfandLsFromLinks(e,n,i,r,a){return new af({links:e,activity:n,calculatedActivitiesMap:this.calculations,calculatedForwardActivitiesMap:this.forwardPathCalculations,constraint:i,parentsWithFullProgress:r,parentsThatImpactChildrens:a,ganttInstance:this.gantt}).calculate()}recalculateInBaseRestriction(e,n){try{let i=this.gantt.getCalendar(e.calendar_id);if(!i)throw new Error(`Error trying to get calendar with id: ${e.calendar_id}`);let r=of(i,e,n);this.constraintMap.set(e,r),this.setCalculations(e,r.ls,r.lf)}catch(i){throw new Error(i.message)}}cleanAllActivityParentsFromLinks(e){return e.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===L.PROJECT)&&!(!this.gantt.getTask(r)||this.gantt.getTask(r)?.type===L.PROJECT))return n}).filter(Boolean)}doCalculationForActivitiesThatStartLinkButHisParentIsLinked(e){let n=Number(e.parent),i=this.calculationsOfParentThatImpactChildrens.get(n),r=0,a=0;if([D.ASAP,D.ALAP,D.SNET,D.FNET].includes(e.constraint_type))if(Number(e.progress)>0){let c=this.projectDates.end_date;a=new Date(Math.min(c,i.lf)),r=e.start_date}else a=i.lf,r=w(this.gantt.getCalendar(e.calendar_id),a,-e.duration,e);if([D.SNLT].includes(e.constraint_type)){let c=this.calculationsOfParentThatImpactChildrens.get(n),d=w(this.gantt.getCalendar(e.calendar_id),c.lf,-e.duration,e),u=e.constraint_date??d;r=new Date(Math.min(u.getTime(),d.getTime())),a=w(this.gantt.getCalendar(e.calendar_id),r,e.duration,e)}if([D.FNLT].includes(e.constraint_type)){let c=this.calculationsOfParentThatImpactChildrens.get(n),d=e.constraint_date??c.lf;r=new Date(Math.min(d.getTime(),c.lf.getTime())),a=w(this.gantt.getCalendar(e.calendar_id),r,e.duration,e)}[D.MSO].includes(e.constraint_type)&&(r=e.constraint_date,a=w(this.gantt.getCalendar(e.calendar_id),r,e.duration,e)),[D.MFO].includes(e.constraint_type)&&(a=e.constraint_date,r=w(this.gantt.getCalendar(e.calendar_id),a,-e.duration,e));let o=this.projectDates.end_date,s=[{ls:r,lf:a}];s.push({ls:w(this.gantt.getCalendar(e.calendar_id),o,-e.duration,e),lf:o});let l=this.getMinLfFromLinks(s);this.calculations.set(e.id,{ls:l.ls,lf:l.lf,text:e.text})}getMinLfFromLinks(e=[]){return e.length?e.reduce((n,i)=>i.lf<n.lf?i:n):!1}},sf=kl;function lf(){return null}var cf=({forward:t,backward:e,id:n,activity:i,gantt:r,projectDates:a})=>({totalFloat:{es:t.calculations.get(n)?.es||0,ef:t.calculations.get(n)?.ef||0,ls:e.calculations.get(n)?.ls||0,lf:e.calculations.get(n)?.lf||0,constraintsMap:t.constraintsMap.get(n),totalFloatSnltFnlt:t.totalFloatSnltFnlt.get(n),totalFloatForMsoMfo:t.totalFloatForMsoMfo.get(n),minFromLinks:e.minFromLinks.get(n),activity:i,gantt:r},freeFloat:{forwardMap:t.calculations||new Map,backwardMap:e.calculations||new Map,activity:i,projectDates:a,gantt:r}});var Ll=class{constructor(e){this.gantt=e.gantt,this.activity=e.activity,this.es=e.es,this.ef=e.ef,this.ls=e.ls,this.lf=e.lf,this.constrainstMap=e.constraintsMap,this.totalFloatSnltFnlt=e.totalFloatSnltFnlt,this.totalFloatForMsoMfo=e.totalFloatForMsoMfo,this.minFromLinks=e.minFromLinks}getTotalFloat(){let{constraint_type:e}=this.activity,n=Number(this.activity.progress);if(n===100)return 0;if(e||(e=D.ASAP),e===D.ASAP||!e)return n===0?this.calculateAsap():this.calculateAsapWithProgress();if(e===D.ALAP)return n===0?this.calculateAlap():this.calculateAlapWithProgress();if(e===D.SNET||e===D.FNET)return n===0?this.calculateSnetFet():this.calculateSnetFnetSnltWithProgress();if(e===D.SNLT)return n===0?this.calculateSnltFnlt():this.calculateSnetFnetSnltWithProgress();if(e===D.FNLT)return n===0?this.calculateSnltFnlt():this.calculateFnltWithProgress();if(e===D.MSO||e===D.MFO)return n===0?this.calculateMsoMfo():this.calculateMsoMfoWithProgress()}calculateAsap(){let e=this.calculationWithCalendar(this.ls,this.es),n=this.calculationWithCalendar(this.lf,this.ef);return this.getMinValue(e,n)/this.gantt.config.hoursPerDay}calculateAsapWithProgress(){let e=this.calculationWithCalendar(this.lf,this.ef);if(this.minFromLinks){let n=this.calculationWithCalendar(this.minFromLinks.lf,this.ef);return this.getMinValue(e,n)/this.gantt.config.hoursPerDay}return e/this.gantt.config.hoursPerDay}calculateAlap(){let e=this.calculationWithCalendar(this.ls,this.es),n=this.calculationWithCalendar(this.lf,this.ef),i=this.getMinValue(e,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 e=this.calculationWithCalendar(this.lf,this.ef);if(this.minFromLinks){let n=this.calculationWithCalendar(this.minFromLinks.lf,this.ef);return this.getMinValue(e,n)/this.gantt.config.hoursPerDay}return e/this.gantt.config.hoursPerDay}calculateFnltWithProgress(){let e=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(e,n,i)/this.gantt.config.hoursPerDay}return this.getMinValue(e,n)/this.gantt.config.hoursPerDay}calculateMsoMfoWithProgress(){return this.calculationWithCalendar(this.lf,this.ef)/this.gantt.config.hoursPerDay}calculateSnetFet(){let e=this.calculationWithCalendar(this.ls,this.es),n=this.calculationWithCalendar(this.lf,this.ef);return this.getMinValue(e,n)/this.gantt.config.hoursPerDay}calculateSnltFnlt(){let e=this.calculationWithCalendar(this.ls,this.es),n=this.calculationWithCalendar(this.lf,this.ef),i=this.getMinValue(e,n);if(!this.totalFloatSnltFnlt&&!this.constrainstMap)return this.getMinValue(e,n)/this.gantt.config.hoursPerDay;let r=0;return this.activity.constraint_type===D.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 e=this.calculationWithCalendar(this.ls,this.es),n=this.calculationWithCalendar(this.lf,this.ef),i=this.getMinValue(e,n);if(!this.totalFloatForMsoMfo&&!this.constrainstMap)return this.getMinValue(e,n)/this.gantt.config.hoursPerDay;let r=0;return this.activity.constraint_type===D.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(...e){return Math.min(...e)}calculationWithCalendar(e,n){return this.gantt.getCalendar(this.activity.calendar_id).calculateDuration({start_date:new Date(n),end_date:new Date(e)})}},df=Ll;var Ol=class{constructor(e){this.gantt=e.gantt,this.activity=e.activity,this.forwardMap=e.forwardMap,this.backwardMap=e.backwardMap,this.projectDates=e.projectDates,this.linksFreeFloatArray=[],this.linksFreeFloatObject={},this.durationCache=new Map}getFreeFloat(){let e=Number(this.activity.progress),n=this.getConstraintType();return this.calculateFreeFloatOfLink(n),{activityFreeFloat:e===100?0:this.getFreeFloatBaseConstraint(n),linksFreeFloat:this.linksFreeFloatObject}}getFreeFloatBaseConstraint(e){return e===D.MSO||e===D.MFO?this.calculateMsoMfo(e):this.calculateGeneral(e)}calculateFreeFloatOfLink(e=D.ASAP){let n=this.activity.$source.map(i=>{let{LINK:r,LINK_TYPE:a}=this.getLinkData(i),o=this.gantt.getTask(r.target);if(!o)return{linkId:r.id,freeFloat:null,hasProgress:!1};let s=Number(o.progress)>0,{sucessorDateToCalculate:l,predecessorDateToCalculate:c}=this.getDatesFromSucessorAndPredecessor(a,e,o),d=this.calculationWithCalendar(l,c),u=this.parseHoursToDays(d)-this.parseHoursToDays(r.lag),p=Math.max(0,u);return this.linksFreeFloatObject[r.id]=p,{linkId:r.id,freeFloat:p,hasProgress:s}}).filter(i=>i.freeFloat!==null&&i.freeFloat!==void 0);return this.linksFreeFloatArray=n,n}calculateGeneral(e=D.ASAP){let n=this.getMinFloat(this.linksFreeFloatArray),i=this.calculateFreeFloatForEndOfProject(e),r=[D.SNLT,D.FNLT].includes(e)&&n===null?this.doCalculationForSnltFnlt(e,i,n):this.doGeneralCalculation(i,n);return Math.max(0,r)}getConstraintType(){let{constraint_type:e}=this.activity;return e||(e=D.ASAP),e}getDatesFromSucessorAndPredecessor(e,n,i){let r=i.constraint_type===D.ALAP,a=this.getSucessorAndPredecessorDates({constraint:n,isSuscessorAlap:r,sucessorId:i.id,predecessorId:this.activity.id}),o=new Date,s=new Date;return o=a[e].sucessor,s=a[e].predecessor,{sucessorDateToCalculate:o,predecessorDateToCalculate:s}}doGeneralCalculation(e,n){return n===null?e:this.getMinValue(n,e)}doCalculationForSnltFnlt(e,n,i){let r=this.calculateFreeFloatOfRestriction(e);return this.getMinValue(i,n,r)}calculateFreeFloatForEndOfProject(e){let n=e===D.ALAP?this.backwardMap.get(this.activity.id):this.forwardMap.get(this.activity.id);return this.parseHoursToDays(this.calculationWithCalendar(this.gantt.getSubtaskDates().end_date,e===D.ALAP?n?.lf:n?.ef))}calculateFreeFloatOfRestriction(e){let n=this.forwardMap.get(this.activity.id);return this.parseHoursToDays(this.calculationWithCalendar(this.activity.constraint_date,e===D.FNLT?n?.ef:n?.es))}getLinkData(e){let n=this.gantt.getLink(e)||{},i=Jn(n.type);return{LINK:n,LINK_TYPE:i}}getSucessorAndPredecessorDates({constraint:e,isSuscessorAlap:n,sucessorId:i,predecessorId:r}){let a=(n?this.backwardMap:this.forwardMap).get(i),o=(e===D.ALAP?this.backwardMap:this.forwardMap).get(r),s=e===D.ALAP?o?.ls:o?.es,l=e===D.ALAP?o?.lf:o?.ef;return{fs:{sucessor:a?.ls??a?.es,predecessor:l},ss:{sucessor:a?.ls??a?.es,predecessor:s},ff:{sucessor:a?.lf??a?.ef,predecessor:l},sf:{sucessor:a?.lf??a?.ef,predecessor:s}}}calculateMsoMfo(e){let n=this.activity.constraint_date||new Date,i=this.forwardMap.get(this.activity.id),r=e===D.MSO?i?.es:i?.ef,a=this.calculationWithCalendar(n,r);return Math.max(0,this.parseHoursToDays(a))}getMinValue(...e){let n=e.filter(i=>i!=null);return n.length?Math.min(...n):0}calculationWithCalendar(e,n){if(!(e instanceof Date)||!(n instanceof Date)||!Number.isFinite(e.getTime())||!Number.isFinite(n.getTime()))return Number.NaN;let i=`${n.getTime()}_${e.getTime()}`;if(this.durationCache.has(i))return this.durationCache.get(i);let a=this.gantt.getCalendar(this.activity.calendar_id).calculateDuration({start_date:new Date(n),end_date:new Date(e)});return this.durationCache.set(i,a),a}parseHoursToDays(e){return e==null?0:e/this.gantt.config.hoursPerDay}getMinFloat(e){if(!e?.length)return null;let n=e.filter(i=>!i.hasProgress).map(i=>i.freeFloat);return n.length===0?null:Math.min(...n)}},uf=Ol;var pf=t=>({totalFloat:new df(t.totalFloat).getTotalFloat(),freeFloat:new uf(t.freeFloat).getFreeFloat()});var bl=async({activityIds:t,forward:e,backward:n,gantt:i,projectDates:r,isCurrent:a})=>{let o=performance.now(),s=new Map,l=new Map;for(let c of t){if(a&&!a())return{totalFloatMap:s,freeFloatMap:l};let d=i.getTask(c);if(!d)continue;let u=cf({forward:e,backward:n,id:c,activity:d,gantt:i,projectDates:r}),{totalFloat:p,freeFloat:f}=pf(u);s.set(c,p),l.set(c,f),o=await Zn(o)}return{totalFloatMap:s,freeFloatMap:l}};var Nl=class{constructor(e){this.gantt=e,this.forwardPathCalculations=null,this.backwardPathCalculations=null,this.totalFloat=new Map,this.freeFloat=new Map,this.linkResidualHours=new Map,this.currentCalculationId=0}getCurrentCalculationId=()=>this.currentCalculationId;async calculate(e,n=()=>!0){let i=++this.currentCalculationId,r=Tl(i,this.getCurrentCalculationId),a=()=>r()&&n();try{let o=e||this.gantt;if(this.gantt=o||lf(),_l(this.gantt))return!1;let s=new nf(this.gantt);if(await s.calculateAsync(a),!a())return!1;let l=s.calculations,c=s.constraintsMap,d=new sf(this.gantt,l,c);if(await d.calculateAsync(a),!a())return!1;this.forwardPathCalculations=l,this.backwardPathCalculations=d.calculations;let u=await this.calculateLinkResidualHours(s.linkCandidates,l,a);if(!u||!a())return!1;this.linkResidualHours=u;let{totalFloatMap:p,freeFloatMap:f}=await this.calculateFloatsAsync(s,d,a);return a()?(this.totalFloat=p,this.freeFloat=f,this.gantt.refreshData(),!0):!1}catch(o){throw this.forwardPathCalculations?.size,o}}async calculateLinkResidualHours(e,n,i=()=>!0){let r=new Map,a=performance.now();for(let[o,s]of e){if(a=await Zn(a),!i())return null;let l=Number(s.targetId),c=this.gantt.getTask(l),d=n.get(l),u=s.ef,p=d?.ef,f=c&&this.gantt.getCalendar(c.calendar_id);if(!f||!(u instanceof Date)||!(p instanceof Date)||!Number.isFinite(u.getTime())||!Number.isFinite(p.getTime())){r.set(o,null);continue}let y=u.getTime(),m=p.getTime()>=y?f.calculateDuration({start_date:u,end_date:p}):-f.calculateDuration({start_date:p,end_date:u});r.set(o,Number.isFinite(m)?Object.is(m,-0)?0:m:null)}return r}async calculateFloatsAsync(e,n,i){try{let r=this.gantt.getSubtaskDates(),a=Array.from(this.forwardPathCalculations.keys());return await bl({activityIds:a,forward:e,backward:n,gantt:this.gantt,projectDates:r,isCurrent:i})}catch(r){throw this.forwardPathCalculations?.size,r}}},ff=Nl;var qC=t=>t===_.FNET||t===_.FNLT||t===_.MFO,zC=t=>new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()));function JC(t,e){let n=t.constraintDate;if(!n||!qC(t.constraintType))return n;let i=zC(n);if(n.getTime()!==i.getTime())return n;let r=e.getClosestWorkTime({date:i,dir:"future",task:t});return r.getUTCFullYear()===n.getUTCFullYear()&&r.getUTCMonth()===n.getUTCMonth()&&r.getUTCDate()===n.getUTCDate()?dr(t,e):n}function XC(t){let e=new Map,n=new Map,i=new Map;return{calculateEndDate:({start_date:r,duration:a})=>{let o=`${r.getTime()}|${a}`,s=e.get(o);if(s!==void 0)return new Date(s);let l=t.calculateEndDate(r,a);return e.set(o,l.getTime()),l},calculateDuration:({start_date:r,end_date:a})=>{let o=`${r.getTime()}|${a.getTime()}`,s=n.get(o);if(s!==void 0)return s;let l=t.calculateDuration(r,a);return n.set(o,l),l},getWorkHours:r=>t.getWorkHours(r),$gantt:{getClosestWorkTime:({date:r,dir:a,unit:o})=>{let s=o??"hour",l=`${r.getTime()}|${a}|${s}`,c=i.get(l);if(c!==void 0)return new Date(c);let d=t.getClosestWorkTime({date:r,direction:a,unit:s});return i.set(l,d.getTime()),d}}}}function ZC(t){let e=new Map;t.forEachActivity((r,a)=>e.set(String(a),r));let n=new Map,i=(r,a)=>{let o=n.get(r);if(o!=null)return o;let l=e.get(r)?.parentId??null,c=0;return l!==null&&!a.has(r)&&(a.add(r),c=i(String(l),a)+1),n.set(r,c),c};for(let r of e.keys())i(r,new Set);return n}function QC(t){let e=new Set;t.forEachActivity((s,l)=>{e.add(String(l)),s.parentId!==null&&e.add(String(s.parentId))});let n=new Map;for(let s of e){let l=Number(s);Number.isSafeInteger(l)&&l!==0&&n.set(l,(n.get(l)??0)+1)}let i=new Map,r=new Map;for(let s of e){let l=Number(s);Number.isSafeInteger(l)&&l!==0&&n.get(l)===1&&(i.set(s,l),r.set(l,s))}let a=1,o=s=>{let l=String(s),c=i.get(l);if(c!==void 0)return c;for(;r.has(a);)a+=1;return i.set(l,a),r.set(a,l),a++};for(let s of e)o(s);return{toLegacy:o,toCanonical:s=>typeof s=="number"?r.get(s)??null:i.has(String(s))?String(s):null}}function tD(t,e){let n=ZC(t),i=new Map;return t.forEachActivity((r,a)=>{let o=String(a);i.set(o,{id:e.toLegacy(o),parent:r.parentId===null?0:e.toLegacy(r.parentId),$level:n.get(o)??0,$source:t.getOutgoingLinkIds(o),$target:t.getIncomingLinkIds(o),start_date:r.startDate,end_date:r.endDate,duration:r.durationHours,progress:r.progress,type:r.type,calendar_id:r.calendarId,constraint_type:r.constraintType,constraint_date:JC(r,t)})}),i}function eD(t){let e=new Map;for(let o of t.values()){let s=e.get(o.parent);s?s.push(o):e.set(o.parent,[o])}let n=[],i=new Set,r=[],a=o=>{if(o)for(let s=o.length-1;s>=0;s-=1)r.push(o[s])};for(a(e.get(0));r.length>0;){let o=r.pop();i.has(o)||(i.add(o),n.push(o),a(e.get(o.id)))}if(n.length<t.size)for(let o of t.values())i.has(o)||n.push(o);return n}function nD(t){let e=null,n=null;return t.forEachActivity(i=>{if(i.startDate){let r=i.startDate.getTime();e=e==null?r:Math.min(e,r)}if(i.endDate){let r=i.endDate.getTime();n=n==null?r:Math.max(n,r)}}),{start_date:new Date(e??0),end_date:new Date(n??0)}}async function yf(t,e){let n=new Map,i=c=>{let d=c==null?"__default__":String(c),u=n.get(d);if(u)return u;let p=t.calendarReader.getCalendar(String(c)),f=XC(p);return n.set(d,f),f},r=nD(t);await St();let a=QC(t),o=tD(t,a);await St();let s=[...o.values()].sort((c,d)=>(c.start_date?.getTime()??0)-(d.start_date?.getTime()??0));await St();let l=eD(o);return{fullyParsed:!0,config:{hoursPerDay:e},getTask:c=>{let d=a.toCanonical(c);return d===null?null:o.get(d)??null},getLink:c=>{let d=t.getLink(c);return d?{...d,source:a.toLegacy(d.source),target:a.toLegacy(d.target),lag:d.lag}:null},getCalendar:i,getChildren:c=>{let d=a.toCanonical(c);return d===null?[]:t.getChildren(d).map(a.toLegacy)},eachTask:c=>{for(let d of l)c(d)},getTaskByTime:()=>s,getSubtaskDates:()=>r,getCanonicalActivityId:a.toCanonical,refreshData:()=>{}}}var wl=1e3,iD=t=>typeof t!="number"||!Number.isFinite(t)?null:Object.is(t,-0)?0:t,rD=(t,e)=>typeof t!="number"||t<0?null:Fl(t,e);function aD(t){let e=rD(t.freeFloatDays,t.hoursPerDay),n=iD(t.residualHours);return{freeSlackHours:e,isCritical:n!==null&&n<=0&&t.sourceIsCritical&&t.targetIsCritical&&t.targetProgress===0}}async function oD(t,e){let n=new Map,i=0;for(let r of t.values())for(let a in r.linksFreeFloat)if(Object.hasOwn(r.linksFreeFloat,a)){if(++i>=wl&&(i=0,await St(),!e()))return null;n.set(String(a),r.linksFreeFloat[a])}return e()?n:null}async function sD(t,e,n,i,r){let a=new Map,o=0;for(let s of e.forward?.keys()??[]){if(++o>=wl&&(o=0,await St(),!r()))return null;let l=i(s);if(l===null)continue;let c=t.getActivity(l);c&&a.set(String(l),cD(s,Number(c.progress??0),e,n))}return r()?a:null}async function lD(t,e,n,i,r,a){let o=new Map,s=0;for(let l of t.getAllLinks()){if(++s>=wl&&(s=0,await St(),!a()))return null;o.set(String(l.id),aD({freeFloatDays:e.get(String(l.id)),residualHours:n.get(String(l.id)),hoursPerDay:r,sourceIsCritical:i.get(l.source)?.isCritical===!0,targetIsCritical:i.get(l.target)?.isCritical===!0,targetProgress:t.getActivity(l.target)?.progress}))}return a()?o:null}var Fl=(t,e)=>{if(typeof t!="number"||!Number.isFinite(t)||!Number.isFinite(e)||e<=0)return null;let n=t*e;return Number.isFinite(n)?Object.is(n,-0)?0:n:null};function cD(t,e,n,i){let r=l=>{if(l==null)return null;let c=new Date(l);return Number.isFinite(c.getTime())?c:null},a=n.forward?.get(t),o=n.backward?.get(t),s=Fl(n.totalFloat.get(t),i);return{criticalPath:{earlyStart:r(a?.es),earlyFinish:r(a?.ef),lateStart:r(o?.ls),lateFinish:r(o?.lf),totalSlackHours:s},isCritical:e<100&&s!==null&&s<=0,freeSlackHours:Fl(n.freeFloat.get(t)?.activityFreeFloat,i)}}var fo=(t,e)=>t===e||t!==null&&e!==null&&t.getTime()===e.getTime();function xl(t,e,n){let i=t.getActivity(e),r=i?.criticalPath,a=n.criticalPath;i&&r&&fo(r.earlyStart,a.earlyStart)&&fo(r.earlyFinish,a.earlyFinish)&&fo(r.lateStart,a.lateStart)&&fo(r.lateFinish,a.lateFinish)&&Object.is(r.totalSlackHours,a.totalSlackHours)&&Object.is(i.isCritical,n.isCritical)&&Object.is(i.freeSlackHours,n.freeSlackHours)||t.setActivityFields(e,n)}function Ml(t,e,n){let i=t.getLink(e);!i||Object.is(i.freeSlackHours,n.freeSlackHours)&&Object.is(i.isCritical,n.isCritical)||(t.setLinkField(e,"freeSlackHours",n.freeSlackHours),t.setLinkField(e,"isCritical",n.isCritical))}async function Ul(t,e,n=()=>!0){if(!n())return null;let i=await yf(t,e);if(!n())return null;let r=new ff(i);if(!await r.calculate(i,n)){if(!n())return null;throw new Error("critical path calculation aborted")}if(!n())return null;let o={forward:r.forwardPathCalculations,backward:r.backwardPathCalculations,totalFloat:r.totalFloat,freeFloat:r.freeFloat},s=await sD(t,o,e,i.getCanonicalActivityId,n);if(!s)return null;let l=await oD(o.freeFloat,n);if(!l)return null;let c=await lD(t,l,r.linkResidualHours,s,e,n);return c?{activities:s,links:c}:null}async function hf(t,e,n=()=>!0){let i=await Ul(t,e,n);if(!i||!n())return!1;for(let[r,a]of i.activities){if(!n())return!1;xl(t,r,a)}for(let[r,a]of i.links){if(!n())return!1;Ml(t,r,a)}return!0}function xi(t){let e=[],n=[];t.forEachActivity((r,a)=>{r.parentId===null&&e.push(String(a))});let i=r=>{let a=t.getActivity(String(r));if(!a)return 0;let o=[...t.getChildren(String(r))],s;if(o.length===0){let l=Tt(a),c=l&&Number(l.cost)||0;s=(Number(a.progress)||0)/100*c}else{let l=0;for(let c of o)l+=i(String(c));s=l}return t.setActivityField(String(r),B.REAL_COST,s),n.push(String(r)),s};for(let r of e)i(r);return n}var mf=new Set;var gf=new Set(["activity-outdent","activity-indent"]);var xr=new Set([T.TEXT,T.DESCRIPTION,T.COST,T.USED_COST,T.CUSTOM_ID,T.RESPONSABLES,T.SUBCONTRACT_ID,T.TAGS]),dD=new Set([A.ACTIVITY_CLIPBOARD_CLEAR,A.ACTIVITY_CLIPBOARD_IMPORT,A.ACTIVITY_COPY,A.CELL_CLIPBOARD_CLEAR,A.CELL_COPY,A.SELECTION_TOGGLE,A.SELECTION_REPLACE,A.VISIBILITY_SET,A.FILTER_SET,A.SORT_SET,A.VIEW_ATTRIBUTES_SET,A.GROUP_SET,A.WBS_DEPTH_SET,A.SIR_SYNC,A.ACTIVITY_LOOKAHEAD_SYNC,A.PERSISTENCE_ACKNOWLEDGE,A.BASELINE_APPLY,A.PONDERATOR_CRITERION_SET,A.STATUS_CRITERIA_SET]),uD=new Set([A.ACTIVITY_CLIPBOARD_CLEAR,A.ACTIVITY_CLIPBOARD_IMPORT,A.ACTIVITY_COPY,A.CELL_CLIPBOARD_CLEAR,A.CELL_COPY,A.SELECTION_TOGGLE,A.SELECTION_REPLACE,A.VISIBILITY_SET,A.FILTER_SET,A.SORT_SET,A.VIEW_ATTRIBUTES_SET,A.GROUP_SET,A.WBS_DEPTH_SET]),Af=new Set(Object.values(li));function Sf(t){return!uD.has(t.kind)}var pD=new Set;function fD(t){return t.kind===A.INLINE_EDIT||t.kind===A.CELL_PASTE_COPIED?xr.has(t.column):t.kind===A.BULK_EDIT?t.edits.every(e=>xr.has(e.column)):!1}function Hl(t){return t.kind===A.INLINE_EDIT||t.kind===A.CELL_PASTE_COPIED?Af.has(t.column):t.kind===A.BULK_EDIT&&t.edits.every(e=>Af.has(e.column))}function Bl(t,e){return!(dD.has(t.kind)||e.has(t.kind)||fD(t))}function Mr(t){return t.kind===A.ACTIVITY_LOOKAHEAD_SYNC?t.persistedProgress!==void 0:Bl(t,pD)}function Qn(t){return Hl(t)?!1:t.kind===A.ACTIVITY_LOOKAHEAD_SYNC?t.persistedProgress!==void 0:Bl(t,mf)}function vf(t){return Hl(t)?!1:Bl(t,gf)}function jl(t){return t.kind===A.ACTIVITY_SET_PROGRESS?!0:t.kind===A.INLINE_EDIT?t.column===T.PROGRESS:t.kind===A.BULK_EDIT?t.edits.some(e=>e.column===T.PROGRESS):t.kind===A.CELL_PASTE_COPIED?t.column===T.PROGRESS:!1}function yD(t){return vf(t)&&jl(t)}var If=new Set([T.PROGRESS,T.HH_WORK_TIME,T.DURATION,T.COST,T.USED_COST,T.REAL_COST]);function hD(t){return t.kind===A.ACTIVITY_SET_PROGRESS?!0:t.kind===A.INLINE_EDIT||t.kind===A.CELL_PASTE_COPIED?If.has(t.column):t.kind===A.BULK_EDIT?t.edits.some(e=>If.has(e.column)):!1}var bt={AUTOSCHEDULE:"autoschedule",PARENT_BOUNDS:"parent-bounds",PARENT_PROGRESS:"parent-progress",REAL_WORK:"real-work",EXPECTED_PROGRESS:"expected-progress",REAL_COST:"real-cost",BASELINE_VARIANCE:"baseline-variance",CRITICAL_PATH:"critical-path"};function Cf(t,e,n){let i=new Set;if(e.ran&&i.add(bt.AUTOSCHEDULE),i.add(bt.PARENT_BOUNDS),Hl(t))return i;hD(t)&&i.add(bt.PARENT_PROGRESS),jl(t)&&i.add(bt.REAL_WORK);let r=!n.skipAutoSchedule;return r&&vf(t)&&i.add(bt.EXPECTED_PROGRESS),r&&yD(t)&&i.add(bt.REAL_COST),Mr(t)&&i.add(bt.BASELINE_VARIANCE),r&&Qn(t)&&!n.skipCriticalPath&&i.add(bt.CRITICAL_PATH),i}function at(t,e=!0){return e&&t?.dataDate!=null}var yo=(t,e)=>{if(!(t instanceof Date)||!Number.isFinite(t.getTime()))throw new TypeError(`Outbuild P6 ${e} must be a valid Date`);return new Date(t.getTime())};function mD(t){if(t.type==="project")return;if(!Number.isFinite(t.durationHours)||t.durationHours<0)throw new TypeError("Outbuild P6 durationHours must be a non-negative finite number");let e=yo(t.startDate,"plannedStart"),n=yo(t.endDate,"plannedFinish"),i=t.durationHours;return{activityType:"task",actualStart:null,actualFinish:null,plannedStart:e,plannedFinish:n,remainingDurationHours:i,executionStatus:"not_started",expectedFinish:null,suspendDate:null,resumeDate:null,secondaryConstraintType:null,secondaryConstraintDate:null,percentCompleteType:It.PHYSICAL,physicalPercentComplete:0,actualDurationHours:0,atCompletionDurationHours:i,durationPercentComplete:0,unitsPercentComplete:0,schedulePercentComplete:0,remainingFloatHours:null,remainingEarlyStart:null,remainingEarlyFinish:null,remainingLateStart:null,remainingLateFinish:null,earlyStart:null,earlyFinish:null,lateStart:null,lateFinish:null,floatPath:null,floatPathOrder:null,longestPath:!1,originalDurationHours:i,actualLaborUnits:0,remainingLaborUnits:0,actualNonlaborUnits:0,remainingNonlaborUnits:0,primaryBaselineStart:null,primaryBaselineFinish:null,freeFloatHours:null}}function Mi(t){let e=mD(t);if(e!==void 0)return{...e,...ho(t,t.durationHours)}}var Df=100,Tf=0;function ho(t,e){if(t.progress===0)return{executionStatus:V.NOT_STARTED,actualStart:null,actualFinish:null,remainingDurationHours:e,physicalPercentComplete:Tf,actualDurationHours:0,atCompletionDurationHours:e,durationPercentComplete:0};let n=yo(t.startDate,"actualStart");if(Ai(t.progress)){let i=e>0;return{executionStatus:V.COMPLETED,actualStart:n,actualFinish:yo(t.endDate,"actualFinish"),remainingDurationHours:0,physicalPercentComplete:Df,actualDurationHours:e,atCompletionDurationHours:e,durationPercentComplete:i?Df:Tf}}return{executionStatus:V.IN_PROGRESS,actualStart:n,actualFinish:null,remainingDurationHours:e,physicalPercentComplete:t.progress,actualDurationHours:0,atCompletionDurationHours:e,durationPercentComplete:0}}function Wl(t){return t.executionStatus===V.NOT_STARTED&&t.actualStart===null}function _f(t,e){if(!(t.progress!==0)||!Wl(e))return e;let i=ho(t,e.originalDurationHours),r=i.executionStatus===V.IN_PROGRESS&&e.remainingDurationHours!==null;return{...e,...i,...r?{remainingDurationHours:e.remainingDurationHours}:{}}}function Ef(t,e){let n=e??void 0,i=gD(t,n);return()=>AD(t,n,i)}function gD(t,e){return e===void 0||at(e.settings,t.isDataDateEnabled())?new Map:new Map(t.getAllActivities().filter(n=>n.p6!==void 0&&Object.hasOwn(e.activities,n.id)).map(n=>[n.id,et(n)]))}function AD(t,e,n){if(!(e===void 0||at(e.settings,t.isDataDateEnabled())))for(let i of t.getAllActivities()){if(!Object.hasOwn(e.activities,i.id)){let o=Mi(i);o!==void 0&&t.setActivityField(i.id,"p6",o);continue}let r=n.get(i.id);if(r?.p6===void 0||i.p6===void 0)continue;let a=Rf(r,i);Object.keys(a).length!==0&&t.setActivityField(i.id,"p6",{...i.p6,...a})}}function Pf(t){if(t.dataDateSettings()===null||at(t.dataDateSettings(),t.isDataDateEnabled()))return;let e=t.peekWriteCapture();if(e!==null)for(let[n,i]of e.before){let r=t.getActivity(n);if(r?.p6===void 0||i.p6===void 0)continue;let a=Rf(i,r);Object.keys(a).length!==0&&t.setActivityField(r.id,"p6",{...r.p6,...a})}}function Rf(t,e){let n=t.durationHours!==e.durationHours;return{...t.startDate.getTime()!==e.startDate.getTime()?{plannedStart:new Date(e.startDate)}:{},...t.endDate.getTime()!==e.endDate.getTime()?{plannedFinish:new Date(e.endDate)}:{},...n?{originalDurationHours:e.durationHours}:{},...n||t.progress!==e.progress?ID(t,e,n):{}}}function ID(t,e,n){let i=e.p6;if(i.remainingDurationHours!==t.p6.remainingDurationHours)return{};let a=t.progress!==e.progress,o=a&&e.progress===0;if(Wl(i)||o){let l=n?e.durationHours:i.originalDurationHours;return ho(e,l)}return!(i.actualStart!==null)||!a?{}:SD(i,e)}function SD(t,e){let n=t.percentCompleteType===It.PHYSICAL;if(!Ai(e.progress))return{...t.actualFinish===null?{}:{executionStatus:V.IN_PROGRESS,actualFinish:null},...n?{physicalPercentComplete:e.progress}:{}};let i=t.actualStart!==null&&e.endDate.getTime()>=t.actualStart.getTime();return t.actualFinish!==null||!i?{}:{executionStatus:V.COMPLETED,actualFinish:new Date(e.endDate),remainingDurationHours:0,physicalPercentComplete:100}}var Ct={INSERT:"insert",REMOVE:"remove",LINK_ADD:"link-add",LINK_REMOVE:"link-remove",LINK_FIELD:"link-field"},mo=class{_journal=null;begin(){this._journal={dirty:new Set,before:new Map,ops:[],linkFieldCaptured:new Set,correlativeBefore:new Map,scheduledBefore:new Map,progressFallbackBefore:new Map}}peek(){return this._journal}end(){this._journal=null}note(e,n){let i=this._journal;i&&(i.before.has(e)||i.before.set(e,Be(n)),i.dirty.add(e))}noteInsert(e){this._journal?.ops.push({kind:Ct.INSERT,activityId:e})}noteRemove(e,n){this._journal?.ops.push({kind:Ct.REMOVE,activityId:e,before:Be(n)})}noteLinkAdd(e){this._journal?.ops.push({kind:Ct.LINK_ADD,linkId:e})}noteLinkRemove(e,n){this._journal?.ops.push({kind:Ct.LINK_REMOVE,linkId:e,before:kf(n)})}noteCorrelativeBefore(e,n){let i=this._journal;if(!i||i.correlativeBefore.has(e))return;let r=i.before.get(e)?.correlativeId;i.correlativeBefore.set(e,typeof r=="number"?r:n)}noteScheduledBefore(e,n){let i=this._journal;if(!i)return;let r=Be(n);i.scheduledBefore.has(e)||i.scheduledBefore.set(e,r),i.before.has(e)||i.before.set(e,r),i.dirty.add(e)}noteLinkField(e,n){let i=this._journal;!i||i.linkFieldCaptured.has(e)||(i.linkFieldCaptured.add(e),i.ops.push({kind:Ct.LINK_FIELD,linkId:e,before:kf(n)}))}noteProgressFallback(e,n){let i=this._journal;!i||i.progressFallbackBefore.has(e)||i.progressFallbackBefore.set(e,n)}};function kf(t){return{...t}}function Vl(t,e,n){let i=[];for(let r of n){let a=t.get(r);if(!a)continue;let o=a.pendingRequestIds??[];if(Ze({pendingRequestIds:o})&&e.getActivity(r)==null)for(let s of o)i.push({kind:no.SIR_AUTO_REJECT,activityId:r,sirId:s,reason:io.ACTIVITY_DELETED})}return i}function te(t){let e={id:String(t.id),source:String(t.source),target:String(t.target),type:t.type,lag:Number(t.lag),freeSlackHours:typeof t.freeSlackHours=="number"&&Number.isFinite(t.freeSlackHours)?t.freeSlackHours:null,isCritical:t.isCritical===!0};return t.proplannerId!=null&&(e.proplannerId=Number(t.proplannerId)),t.ganttId!=null&&(e.ganttId=Number(t.ganttId)),t.sectorId!=null&&(e.sectorId=Number(t.sectorId)),e}var Yt={BEFORE_DIFF:"before-diff",AFTER_DIFF:"after-diff"};async function J(t,e){let n=TD(t,e),i=new Map(e.beforeSnap),r=t.peekWriteCapture();if(r){let p=ED(r);_D(t,r,p,i,n)}let a=e.sirDetection,o=a===Yt.BEFORE_DIFF?Vl(i,t,n):[],s=DD(e.correlativeShifts,n),l=await ao(t,i,n,s),c=a===Yt.AFTER_DIFF?Vl(i,t,n):o,d=e.warnings??[],u=CD(e.links??[],r?vD(t,r):[]);return{source:e.source,activities:l,links:u,calendars:[],trackingEvents:e.trackingEvents??[],...c.length>0?{effects:c}:{},...d.length>0?{warnings:d}:{}}}function vD(t,e){let n=[];for(let i of e.ops){if(i.kind!==Ct.LINK_FIELD)continue;let r=t.getLink(i.linkId);if(!r)continue;let a={};for(let o of["freeSlackHours","isCritical"])Object.is(i.before[o],r[o])||(a[o]={before:i.before[o],after:r[o]});Object.keys(a).length!==0&&n.push({id:i.linkId,kind:H.UPDATED,fields:a,after:te(r)})}return n}function CD(t,e){let n=[],i=new Map;for(let r of t){let a=i.get(r.id);if(a===void 0){i.set(r.id,n.length),n.push(r);continue}let o=n[a];if((o.kind===H.UPDATED||o.kind===H.CREATED)&&r.kind===H.UPDATED){n[a]={...o,fields:{...o.fields,...r.fields},after:r.after};continue}n[a]=r}for(let r of e){let a=i.get(r.id);if(a===void 0){i.set(r.id,n.length),n.push(r);continue}let o=n[a];if(o.kind===H.DELETED)continue;let s=o.kind===H.CREATED?Object.fromEntries(Object.entries(r.fields??{}).map(([l,c])=>[l,{before:void 0,after:c.after}])):r.fields;n[a]={...o,fields:{...o.fields,...s},after:r.after}}return n}function DD(t,e){if(!t||t.length===0)return;let n=new Map;for(let i of t)n.set(i.activityId,i.before),e.add(i.activityId);return n}function TD(t,e){let n=new Set;for(let i of e.touchedIds)n.add(i);for(let i of e.scheduledIds)n.add(i);if(e.includeAllIds)for(let i of t.getAllIds())n.add(i);return n}function _D(t,e,n,i,r){for(let a of e.dirty){if(n.has(a)||i.has(a))continue;let o=e.before.get(a),s=t.getActivity(a);!o||!s||Object.keys(dl(o,s)).length!==0&&(i.set(a,o),r.add(a))}}function ED(t){return new Set(t.ops.filter(e=>e.kind===Ct.INSERT).map(e=>e.activityId))}function go(t,e,n,i=new Map){if(!t||t==="0")return;let r=n.getChildren(t);if(r.length===0)return;let a=new Map,o=new Set,s=0;for(let u of r){let p=RD(String(u),e,n,i);a.set(String(u),p.magnitude),s+=p.magnitude,p.hasActiveBaseline&&o.add(String(u))}let l=s?100/s:0,d=e!==ct.COST&&o.size>0?100/o.size:0;for(let u of r){let p=n.getActivity(u);if(!p)continue;let f=PD(String(u),p,a,o,s,l,d);f!==null&&n.setActivityField(u,T.PONDERATOR,f)}}function PD(t,e,n,i,r,a,o){return e.type===L.PROJECT||Tt(e)?r?a*(n.get(t)??0):i.has(t)?o:0:!Array.isArray(e.baselinePoints)||e.baselinePoints.length===0?0:null}function RD(t,e,n,i){let r=[{id:t,expanded:!1}];for(;r.length>0;){let{id:a,expanded:o}=r.pop();if(i.has(a))continue;let s=n.getActivity(a),l=Tt(s);if(s?.type!==L.PROJECT){i.set(a,{magnitude:l&&s?.type!==L.MILESTONE?kD(l,e):0,hasActiveBaseline:l!==null});continue}let c=n.getChildren(a);if(!o){r.push({id:a,expanded:!0}),c.forEach(u=>{r.push({id:String(u),expanded:!1})});continue}let d={magnitude:0,hasActiveBaseline:l!==null};for(let u of c){let p=i.get(String(u));d.magnitude+=p.magnitude,d.hasActiveBaseline||=p.hasActiveBaseline}i.set(a,d)}return i.get(t)}function kD(t,e){return e===ct.COST?Kl(t.cost):e===ct.WORK_HOURS?Kl(t.workHours):Kl(t.durationDays)}function Kl(t){let e=typeof t=="string"?parseFloat(t):t;return typeof e=="number"&&Number.isFinite(e)?e:0}function Lf(t,e){let n=t.peekWriteCapture();if(!n)return;let i=new Map,r=new Map;for(let o of n.ops)o.kind===Ct.REMOVE&&r.set(o.activityId,o.before.parentId);let a=(o,s)=>{let l=o;for(;l!==null&&!W(l);){let c=i.get(l);if(c===!0||c===s)break;i.set(l,s),l=r.has(l)?r.get(l)??null:t.getParentId(l)}};for(let[o,s]of n.before){let l=t.getActivity(o);if(!(l&&s.parentId!==l.parentId)||!l)continue;let d=Tt(s)!==null||Yl(o,t);a(s.parentId,d),a(l.parentId,!1)}for(let o of n.ops)if(o.kind===Ct.REMOVE)Tt(o.before)&&a(o.before.parentId,!0);else if(o.kind===Ct.INSERT){let s=t.getActivity(o.activityId);s&&Yl(s.id,t)&&a(s.parentId,!1)}for(let[o,s]of i)(s||Yl(o,t))&&go(o,e,t)}function Yl(t,e){let n=[t];for(;n.length>0;){let i=n.pop();if(i===void 0)continue;let r=e.getActivity(i);if(r&&Tt(r))return!0;n.push(...e.getChildren(i))}return!1}var Dt={ROOTS:"roots"};async function it(t,e){e.action.kind===A.ACTIVITY_LOOKAHEAD_CONVERT||Lf(t.adapter,t.sector.activityCreter??ct.DURATION);let i=MD(t.adapter),r=LD(t.adapter,e),a=FD(t.adapter,r),o=xD(r,i,bf(t.adapter));a&&o.add(bt.AUTOSCHEDULE),o.has(bt.AUTOSCHEDULE)&&await KD(t.adapter,r);let s=a?await wD(t):o.has(bt.AUTOSCHEDULE)?await BD(t,r.autoscheduleFrom,r.preventSummaryTargetPullback):VD();return await YD(t.adapter,r,s.scheduledIds,o,i,t.sector.activityCreter??ct.DURATION),await $D(t,o,e.now),Pf(t.adapter),s}function LD(t,e){let n=OD(t,e.autoscheduleFrom);return n===e.autoscheduleFrom?e:{...e,autoscheduleFrom:n}}function OD(t,e){if(e===Dt.ROOTS)return Dt.ROOTS;let n=bD(t);if(n.size===0)return e;if(e!==null&&n.add(String(e)),n.size!==1)return Dt.ROOTS;let[i]=n;return i===void 0||!t.activityExists(i)||t.hasChildren(i)?Dt.ROOTS:i}function bD(t){let e=new Set,n=t.peekWriteCapture();if(!n)return e;for(let i of n.ops){if(i.kind===Ct.LINK_REMOVE){e.add(String(i.before.target));continue}if(i.kind===Ct.LINK_ADD){let r=t.getLink(i.linkId);r&&e.add(String(r.target));continue}if(i.kind===Ct.LINK_FIELD){e.add(String(i.before.target));let r=t.getLink(i.linkId);r&&e.add(String(r.target))}}return e}async function Of(t,e,n){if(t.activityId!==void 0&&!n.adapter.activityExists(t.activityId))return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};if(bf(n.adapter)&&!ND(n.adapter))return{ok:!1,reason:v.MANUAL_SCHEDULING_ACTIVE};let i=await st(n.adapter,new Set(n.adapter.getAllIds()));n.scheduler.invalidateAllCaches();let r=t.activityId===void 0?n.adapter.getRootIds():[t.activityId],{scheduledIds:a}=await it({adapter:n.adapter,scheduler:n.scheduler,sector:n.sector,defaultBaseCalendarId:n.defaultBaseCalendarId,runAutomaticP6Schedule:n.runAutomaticP6Schedule},{action:t,autoscheduleFrom:t.activityId??Dt.ROOTS,recomputeParentsFrom:r,now:n.now,options:e});return{ok:!0,changes:await J(n.adapter,{source:t,beforeSnap:i,touchedIds:r,scheduledIds:a,hoursPerDay:n.sector.hoursPerDay})}}function bf(t){return at(t.dataDateSettings(),t.isDataDateEnabled())}function ND(t){return t.dataDateSettings()?.scheduleAutomaticallyOnDateChange===!0}function FD(t,e){let n=t.dataDateSettings();return at(n,t.isDataDateEnabled())&&n?.scheduleAutomaticallyOnDateChange===!0&&e.autoscheduleFrom!==null&&e.options.skipAutoSchedule!==!0}async function wD(t){if(t.runAutomaticP6Schedule===void 0)throw new Error("Automatic P6 scheduling is not configured");return{scheduledIds:[...await t.runAutomaticP6Schedule()],warnings:[]}}function xD(t,e,n){let i=t.autoscheduleFrom!==null,r=!t.options.skipAutoSchedule&&i&&!n,a=n?{...t.options,skipCriticalPath:!0}:t.options,o=new Set(Cf(t.action,{requested:i,ran:r},a));return(t.recomputeParentProgress||e.affectedParents.size>0)&&o.add(bt.PARENT_PROGRESS),o}function MD(t){let e=new Set,n=new Set,i=t.peekWriteCapture();if(!i)return{affectedParents:e,dirtySeeds:n};let r=a=>{if(a===null||W(a))return;let o=String(a);e.add(o);let s=t.getChildren(o)[0];s!==void 0&&n.add(s)};return UD(t,i.ops,r),HD(t,i.before,n,r),{affectedParents:e,dirtySeeds:n}}function UD(t,e,n){for(let i of e)if(i.kind===Ct.INSERT){let r=t.getActivity(i.activityId);r&&n(r.parentId)}else i.kind===Ct.REMOVE&&n(i.before.parentId)}function HD(t,e,n,i){for(let[r,a]of e){let o=t.getActivity(r);if(!o)continue;let s=!Object.is(a.progress,o.progress),l=!Object.is(a.ponderator,o.ponderator),c=!Object.is(a.parentId,o.parentId);(s||l)&&(i(o.parentId),n.add(String(r))),c&&(i(a.parentId),i(o.parentId),n.add(String(r)))}}async function BD(t,e,n=!1){let i=e===Dt.ROOTS?{}:{triggerId:e};n&&(i.preventSummaryTargetPullback=!0);let r=await t.scheduler.schedule(i),a=WD(t.adapter,r.updatedIds),o=jD(t.adapter,r);return Ar(t.adapter,r),{...a,warnings:o}}function jD(t,e){let n=[];for(let i of e.plans.values()){let r=i.earliestSchedulingStart;if(!r||i.startDate>=r)continue;let a=t.getActivity(i.activityId);!a?.constraintType||!a.constraintDate||n.push({kind:Gn.VIOLATION,activityId:a.id,constraintType:a.constraintType,constraintDate:a.constraintDate,projectedDate:r,messageKey:Gn.VIOLATION})}return n}function WD(t,e){let n=[];for(let i of e){let r=String(i);n.push(r);let a=t.getActivity(r);a&&t.noteScheduledBefore(r,a)}return{scheduledIds:n,warnings:[]}}function VD(){return{scheduledIds:[],warnings:[]}}async function KD(t,e){let n=e.collectDirty?e.collectDirty([]):ul(e.recomputeParentsFrom,[]);n.size!==0&&await Ue(t,n,!1)}async function YD(t,e,n,i,r,a){i.has(bt.PARENT_PROGRESS)&&GD(t,r.affectedParents);let o=e.collectDirty?e.collectDirty(n):ul(e.recomputeParentsFrom,n);for(let s of r.dirtySeeds)o.add(s);await Ue(t,o,i.has(bt.PARENT_PROGRESS),{recomputeRealWork:i.has(bt.REAL_WORK),criterion:a,progressMode:"freeze-when-no-contribution"})}function GD(t,e){for(let n of e){if(t.hasChildren(n))continue;let i=t.getProgressFallback(n);i!==null&&(t.setActivityField(n,"progress",i),t.setProgressFallback(n,null))}}async function $D(t,e,n){e.has(bt.EXPECTED_PROGRESS)&&n!==null&&(qD(t.adapter)&&wi(t.adapter,n,t.defaultBaseCalendarId??null),qn(t.adapter,n),We(t.adapter,t.sector.statusCriteria)),e.has(bt.REAL_COST)&&xi(t.adapter),e.has(bt.BASELINE_VARIANCE)&&zn(t.adapter,t.sector.hoursPerDay),e.has(bt.CRITICAL_PATH)&&await hf(t.adapter,t.sector.hoursPerDay)}function qD(t){let e=!1;return t.forEachActivity(n=>{Tt(n)&&(e=!0)}),e}var zD=new Set([T.CONSTRAINT_TYPE,T.CONSTRAINT_DATE]),JD=new Set([_.MSO,_.MFO]);function Ui(t){return zD.has(t)}function Ao(t){return t===T.CONSTRAINT_DATE}function Io(t,e,n,i){let r=n.getActivity(t);if(!r)return!1;let a=r.constraintType;if(!a||un.has(a)||JD.has(a))return!1;let o=Gl(r.startDate),s=Gl(n.getLastStartDate(t));if(!s||!o||o.getTime()!==s.getTime())return!1;let l=XD(e,a,String(r.calendarId??""),i),c=Gl(r.constraintDate);return ZD(c,l)?!1:(n.setActivityField(t,"constraintDate",l),!0)}function XD(t,e,n,i){if(t===null)return null;let r=i.getCalendar(n);return r?ge(t,r,e):t}function Gl(t){if(t instanceof Date)return t;if(typeof t=="string"||typeof t=="number"){let e=new Date(t);return Number.isNaN(e.getTime())?null:e}return null}function ZD(t,e){return t===null&&e===null?!0:t===null||e===null?!1:t.getTime()===e.getTime()}async function So(t,{postMutationArgs:e,revertTargets:n,revert:i}){let{scheduledIds:r}=await it(t,Nf(e)),a=!1;for(let{activityId:o,priorConstraintDate:s}of n){let l=i(o,s);a=a||l}if(a){let o=await it(t,Nf(e));r=tT(r,o.scheduledIds)}return Qn(e.action)&&await it(t,QD(e)),{scheduledIds:r}}function Nf(t){return{...t,options:{...t.options,skipCriticalPath:!0}}}function QD(t){return{action:t.action,autoscheduleFrom:null,recomputeParentsFrom:[],now:null,options:t.options}}function tT(t,e){let n=new Set(t);for(let i of e)n.add(i);return[...n]}function Hi(t,e,n){let i=n?t.getIncomingLinkIds(e):t.getOutgoingLinkIds(e),r=[];for(let a of i){let o=t.getLink(a);o&&r.push(o)}return r}function In(t,e,n){let i=[];for(let{op:r,finalLinkId:a,rejected:o}of t){if(o!==null)continue;if(r.kind===vt.CREATE){if(!a)continue;let u=n.getLink(a);if(!u)continue;let p=e.get(a);if(p){let f={};String(p.source)!==String(u.source)&&(f.source={before:String(p.source),after:String(u.source)}),String(p.target)!==String(u.target)&&(f.target={before:String(p.target),after:String(u.target)}),p.type!==u.type&&(f.type={before:p.type,after:u.type}),Number(p.lag)!==Number(u.lag)&&(f.lag={before:Number(p.lag),after:Number(u.lag)}),Object.keys(f).length>0&&i.push({id:String(a),kind:H.UPDATED,fields:f,after:te(u)});continue}i.push({id:String(a),kind:H.CREATED,fields:{source:{before:void 0,after:String(u.source)},target:{before:void 0,after:String(u.target)},type:{before:void 0,after:u.type},lag:{before:void 0,after:Number(u.lag)}},after:te(u)});continue}if(r.kind===vt.DELETE){if(n.getLink(r.linkId))continue;let u=e.get(r.linkId);i.push({id:String(r.linkId),kind:H.DELETED,fields:u?{source:{before:String(u.source),after:void 0},target:{before:String(u.target),after:void 0},type:{before:u.type,after:void 0},lag:{before:Number(u.lag),after:void 0}}:void 0,after:null});continue}let s=e.get(r.linkId),l=n.getLink(r.linkId);if(!l)continue;let c={};s&&String(s.source)!==String(l.source)&&(c.source={before:String(s.source),after:String(l.source)}),s&&String(s.target)!==String(l.target)&&(c.target={before:String(s.target),after:String(l.target)}),s&&s.type!==l.type&&(c.type={before:s.type,after:l.type}),s&&Number(s.lag)!==Number(l.lag)&&(c.lag={before:Number(s.lag),after:Number(l.lag)}),!(s!==void 0&&Object.keys(c).length===0)&&i.push({id:String(r.linkId),kind:H.UPDATED,fields:c,after:te(l)})}return i}function Bi(t,e){let n=new Map;if(!t.getActivity(e))return n;for(let i of t.getIncomingLinkIds(e)){let r=t.getLink(i);r&&n.set(String(r.id),Number(r.lag))}return n}function ji(t,e,n){let i=[];if(!e.getActivity(n))return i;for(let r of e.getIncomingLinkIds(n)){let a=e.getLink(r);if(!a)continue;let o=t.get(String(a.id));o===void 0||o===Number(a.lag)||i.push({id:String(a.id),kind:H.UPDATED,fields:{lag:{before:o,after:Number(a.lag)}},after:te(a)})}return i}function Ff(t,e){typeof t=="string"&&t.length>0&&e.releaseCustomId(t)}function Wi(t,e){return Np.has(e)?t.p6?.[e]:Reflect.get(t,e)}var ee={MOVE:"move",RESIZE_START:"resize-start",RESIZE_END:"resize-end"},eT=()=>({constantStart:null,variableStartOffset:null,constantEnd:null,variableEndOffset:null}),$l=(t,e)=>t===null?e:Math.min(t,e),ql=(t,e)=>t===null?e:Math.max(t,e);function xf(t,e,n){let i=[...new Set(e.kind===ee.MOVE?e.activityIds.map(String):[String(e.activityId)])];if(i.length===0)throw new Error("[ScheduleCore] date gesture has no participants");let r=nT(t,e,i);return iT(t,i,r),{getDates(a,o){if(n(),!Number.isFinite(o))throw new Error("[ScheduleCore] invalid date gesture edge");let s=r.get(String(a));if(!s)return null;let l=aT(s,o),c=oT(s,o);if(l===null||c===null)throw new Error(`[ScheduleCore] incomplete date gesture bounds for ${String(a)}`);return{startTimeMs:l,endTimeMs:c}}}}function nT(t,e,n){let i=new Map,r=e.kind===ee.MOVE?String(e.anchorActivityId):null,a=r===null?null:wf(t,r);if(r!==null&&!n.includes(r))throw new Error("[ScheduleCore] move anchor is not a participant");for(let o of n){let s=wf(t,o);if(e.kind===ee.MOVE){let l=a.startDate.getTime();i.set(o,{constantStart:null,variableStartOffset:s.startDate.getTime()-l,constantEnd:null,variableEndOffset:s.endDate.getTime()-l})}else e.kind===ee.RESIZE_START?i.set(o,{constantStart:null,variableStartOffset:0,constantEnd:s.endDate.getTime(),variableEndOffset:null}):i.set(o,{constantStart:s.startDate.getTime(),variableStartOffset:null,constantEnd:null,variableEndOffset:0})}return i}function iT(t,e,n){let i=Tr(t,new Set(e));for(let r of i){let a=eT();for(let o of t.getChildren(r)){let s=n.get(o);if(s){rT(a,s);continue}let l=t.getActivity(o);if(!l)throw new Error(`[ScheduleCore] missing child ${o} while previewing parent ${r}`);a.constantStart=$l(a.constantStart,l.startDate.getTime()),a.constantEnd=ql(a.constantEnd,l.endDate.getTime())}n.set(r,a)}}function wf(t,e){let n=t.getActivity(e);if(!n)throw new Error(`[ScheduleCore] missing date gesture activity ${e}`);if(t.hasChildren(e))throw new Error(`[ScheduleCore] summary activity ${e} cannot be dragged directly`);return n}function rT(t,e){e.constantStart!==null&&(t.constantStart=$l(t.constantStart,e.constantStart)),e.variableStartOffset!==null&&(t.variableStartOffset=$l(t.variableStartOffset,e.variableStartOffset)),e.constantEnd!==null&&(t.constantEnd=ql(t.constantEnd,e.constantEnd)),e.variableEndOffset!==null&&(t.variableEndOffset=ql(t.variableEndOffset,e.variableEndOffset))}function aT(t,e){if(t.variableStartOffset===null)return t.constantStart;let n=e+t.variableStartOffset;return t.constantStart===null?n:Math.min(t.constantStart,n)}function oT(t,e){if(t.variableEndOffset===null)return t.constantEnd;let n=e+t.variableEndOffset;return t.constantEnd===null?n:Math.max(t.constantEnd,n)}function ti(t,e,n,i=!0){return t!==void 0&&at(e,i)?n===ee.RESIZE_END?t.executionStatus===V.COMPLETED?lt("data_date_activity_completed","data_date_edit_rejected"):Q():t.actualStart===null?Q():lt("data_date_actual_start_locked","data_date_edit_rejected"):Q()}var sT=new Set([Ae.HAS_PROGRESS,Ae.COMPLETED]),lT={[T.START_DATE]:ee.MOVE,[T.END_DATE]:ee.RESIZE_END};function vo(t,e,n,i,r=!0){let a=e.p6;if(!(a!==void 0&&at(n,r))||!t.allowed&&!sT.has(t.reason))return t;if(i===T.PROGRESS&&a.percentCompleteType===It.UNITS)return lt(Ae.DATA_DATE_UNITS_PERCENT_READ_ONLY,Ja.DATA_DATE_UNITS_PERCENT_READ_ONLY);let s=lT[i];return s===void 0?Q():ti(a,n,s,r)}var cT=100,dT=2;function Uf(t,e,n,i,r){let{progress:a}=i,o=i.writesProgress?{activityPercentComplete:a}:{};if(e.executionStatus===V.COMPLETED)return a>=100?n:Vi(n,{actualFinish:null,...o},Ut.UNCOMPLETE);if(e.executionStatus===V.IN_PROGRESS)return a<100?Vi(n,o):Mf(n,{actualFinish:t.endDate,...o},o,i,r);if(a===0)return n;let s={actualStart:t.startDate};return a<100?Vi(n,{...s,...o},Ut.START_ON_PROGRESS):Mf(n,{...s,actualFinish:t.endDate,...o},{...s,...o},i,r)}function Mf(t,e,n,i,r){return i.explicitCompletion||Rr(Ut.COMPLETE_ON_PROGRESS,r)?Vi(t,e):Rr(Ut.KEEP_IN_PROGRESS,r)?Vi(t,n):{...Vi(t,e,Ut.COMPLETE_ON_PROGRESS),confirmationAlternative:{kind:Ut.KEEP_IN_PROGRESS,effects:n}}}function Vi(t,e,n){return Object.keys(e).length===0?t:{...t,dataDatePatch:e,...n===void 0?{}:{confirmation:n}}}function Jl(t){switch(t.percentCompleteType){case It.PHYSICAL:return zl(t.physicalPercentComplete);case It.UNITS:return zl(t.unitsPercentComplete);default:return uT(t)}}function uT(t){if(t.remainingDurationHours===null)return null;if(t.originalDurationHours===0)return t.executionStatus===V.COMPLETED?100:0;let e=(t.originalDurationHours-t.remainingDurationHours)/t.originalDurationHours;return zl(Math.min(100,Math.max(0,e*cT)))}function zl(t){return Number(t.toFixed(dT))}function Ki(t,e,n,i,r){let a=t.canEdit(e,n.ctx.hierarchy,r);return n.dataDateCapability===null?a:vo(a,e,n.dataDateSettings,i,n.dataDateEnabled)}function Bf(t,e){return e?{...t,dataDatePatch:{...t.dataDatePatch,...e.dataDatePatch}}:t}function pT(t){return t.eventSource==="sir-apply"&&t.edits.some(e=>e.column==="actualStart"||e.column==="actualFinish")}function jf(t){if(!pT(t))return t.edits.map(i=>[i]);let e=new Map;for(let i of t.edits){if(i.column!=="actualStart"&&i.column!=="actualFinish")continue;let r=String(i.activityId),a=e.get(r)??[];a.push(i),e.set(r,a)}let n=new Map;for(let i of e.values())i.length!==2||i[0].column===i[1].column||i.every(r=>r.newValue instanceof Date)&&(n.set(i[0],i),n.set(i[1],[]));return t.edits.flatMap(i=>{let r=n.get(i);return r?.length===0?[]:[r??[i]]})}function Wf(t,e){let n=new Map;for(let i of fT(t)){let r=e.ctx.activityReader.getActivity(i);if(!r)continue;let a=ti(r.p6,e.dataDateSettings,ee.RESIZE_START,e.dataDateEnabled);a.allowed||n.set(i,Zl(a))}return n}function fT(t){let e=new Map;for(let i of t){let r=String(i.activityId),a=e.get(r)??new Set;a.add(i.column),e.set(r,a)}let n=new Set;for(let[i,r]of e)r.has(T.START_DATE)&&r.has(T.END_DATE)&&n.add(i);return n}function Zl(t){return{accepted:!1,reason:t.reason,...t.alertKey?{alertKey:t.alertKey}:{}}}var yT={patch:{},needsAutoSchedule:!1,postProcessors:[]};function Vf(t,e,n,i,r){return i.dataDateCapability!==null&&at(i.dataDateSettings,i.dataDateEnabled)?Rt(t,i.ctx.hierarchy)?{accepted:!1,reason:Ae.SUMMARY,alertKey:"summary_column_value"}:t.p6===void 0?null:ei(t,n??yT,i,T.PROGRESS,r,{progress:e,explicitCompletion:!0,writesProgress:n!==null}):null}function ei(t,e,n,i,r,a){let o=gT(t,mT(t,e,i),n,i,r,a);if(o===null)return Xl(v.INVALID_VALUE);if("accepted"in o)return o;if(o.dataDatePatch===void 0)return Hf(o);if(t.p6===void 0||n.dataDateCapability===null)return Xl(v.INVALID_VALUE);if(o.confirmation!==void 0&&!Rr(o.confirmation,r))return{accepted:!1,reason:v.CONFIRMATION_REQUIRED,confirmation:{kind:o.confirmation,activityId:t.id,effects:o.dataDatePatch,...o.confirmationAlternative===void 0?{}:{alternative:o.confirmationAlternative}}};try{let l=n.dataDateCapability.prepareActivityUpdate(t.p6,o.dataDatePatch,o.patch.constraintType??t.constraintType),c=TT(t,l.next,n),d=hT(t,{...o,patch:{...o.patch,...c.patch},dataDateState:c.p6},l.next,n,i);return Hf(at(n.dataDateSettings,n.dataDateEnabled)?{...d,needsAutoSchedule:!0}:d)}catch{return Xl(v.INVALID_VALUE)}}function hT(t,e,n,i,r){if(r===T.PROGRESS||t.p6===void 0||!at(i.dataDateSettings,i.dataDateEnabled))return e;let a=Jl(n);return a===null||a===t.progress||a===Jl(t.p6)||!Oi.canEdit(t,i.ctx.hierarchy).allowed?e:{...e,patch:{...e.patch,progress:a}}}function Hf(t){return{accepted:!0,changes:t}}function Xl(t){return{accepted:!1,reason:t}}function mT(t,e,n){let i=t.p6,r=e.patch.constraintType;return!(n===T.CONSTRAINT_TYPE&&i!==void 0&&r!==void 0)||Ni(r,i.secondaryConstraintType)?e:{...e,dataDatePatch:{secondaryConstraintType:null,secondaryConstraintDate:null},confirmation:Ut.CLEAR_SECONDARY_CONSTRAINT}}function gT(t,e,n,i,r,a){let o=t.p6;return o!==void 0&&n.dataDateCapability!==null&&at(n.dataDateSettings,n.dataDateEnabled)?i===T.PHYSICAL_PERCENT_COMPLETE?IT(t,o,e):i===T.PROGRESS?AT(t,o,e,r,a):i===T.DURATION?ST(o,e):i===T.END_DATE?vT(t,o,e,n):i===T.START_DATE?DT(o,e,n):e:e}function AT(t,e,n,i,r){let a=n.patch.progress,o=r??(typeof a=="number"?{progress:a,explicitCompletion:!1,writesProgress:!0}:void 0);return o===void 0?n:Uf(t,e,n,o,i)}function IT(t,e,n){let i=n.dataDatePatch?.physicalPercentComplete;return e.executionStatus!==V.NOT_STARTED||i===void 0||i<=0?n:{...n,dataDatePatch:{actualStart:t.startDate,physicalPercentComplete:i},confirmation:Ut.START_ON_PROGRESS}}function ST(t,e){let n=e.patch.durationHours;return typeof n!="number"?null:t.executionStatus===V.NOT_STARTED?{...e,dataDatePatch:{originalDurationHours:n,remainingDurationHours:n}}:{...e,patch:{durationHours:n},dataDatePatch:{originalDurationHours:n}}}function vT(t,e,n,i){let r=ti(e,i.dataDateSettings,ee.RESIZE_END,i.dataDateEnabled);if(!r.allowed)return Zl(r);let a=n.patch.endDate,o=i.ctx.calendars.getCalendar(t.calendarId);if(!(a instanceof Date)||o===null)return null;let s=i.dataDateCapability?.prepareFinishEdit(e,a,o);return s==null?null:{...n,patch:CT(n.patch),dataDatePatch:s}}function CT(t){let{constraintType:e,constraintDate:n,...i}=t;return i}function DT(t,e,n){let i=ti(t,n.dataDateSettings,ee.MOVE,n.dataDateEnabled);return i.allowed?e:Zl(i)}function TT(t,e,n){let i=n.dataDateSettings,r=n.ctx.calendars.getCalendar(t.calendarId);if(!at(i,n.dataDateEnabled)||r===null)return{p6:e,patch:{}};let a=n.dataDateCapability.projectLocalActivity(t.p6,e,{calendar:r,dataDate:i.dataDate,totalFloatMethod:i.totalFloatMethod});return{p6:a.p6,patch:{...a.startDate===void 0?{}:{startDate:a.startDate},...a.endDate===void 0?{}:{endDate:a.endDate}}}}async function Kf(t,e,n){let{adapter:i,ctx:r,scheduler:a,sector:o}=n,s=Qt(t.column);if(!s)return{ok:!1,reason:v.NO_PIPELINE_FOR_COLUMN};t.column===T.DURATION&&a.invalidateExpandedLinksCache();let l=r.activityReader.getActivity(t.activityId);if(!l)return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};let c=Ki(s,l,n,t.column);if(!c.allowed)return{ok:!1,reason:c.reason??v.CANNOT_EDIT,alertKey:c.alertKey};let d=s.parseInput(t.newValue,l,r);if(!d.ok)return{ok:!1,reason:d.reason??v.PARSE_ERROR};let u=Wi(l,s.targetField),p=s.validate(l,u,d.value,r);if(!p.valid)return{ok:!1,reason:p.reason??v.INVALID,alertKey:p.notification?.messageKey};if(t.column===T.CUSTOM_ID&&d.value!==null){let O=i.getActivity(t.activityId),F=O?O.customId:null,U=typeof F=="string"?F:null;if(n.customIdTracker.isCustomIdInUse(String(d.value),U))return{ok:!1,reason:v.CUSTOM_ID_DUPLICATE}}let f=s.transform(l,d.value,r,d.raw),y=ei(l,f,n,t.column,e.confirmations);if(!y.accepted)return{ok:!1,reason:y.reason,...y.alertKey?{alertKey:y.alertKey}:{},...y.confirmation?{confirmation:y.confirmation}:{}};let h=y.changes,m=hn(t.activityId,h),g=await st(i,m),C=Bi(i,String(t.activityId)),b=l.constraintDate;mn(i,t.activityId,h),ln(t.activityId,h.postProcessors??[],i,g.get(String(t.activityId))??null);let E=ji(C,i,String(t.activityId));if(t.column===T.CUSTOM_ID){let O=g.get(String(t.activityId)),F=O?O.customId:null,U=typeof F=="string"?F:null,$=typeof d.value=="string"?d.value:null;U!==$&&n.customIdTracker.trackCustomIdChange(U,$)}let P=()=>({action:t,autoscheduleFrom:h.needsAutoSchedule?String(t.activityId):null,recomputeParentsFrom:[],collectDirty:O=>oo(t.activityId,m,O),now:n.now,options:e}),N=Ui(t.column),{scheduledIds:I}=await(N?So({adapter:i,scheduler:a,sector:n.sector,defaultBaseCalendarId:n.defaultBaseCalendarId,runAutomaticP6Schedule:n.runAutomaticP6Schedule},{postMutationArgs:P(),revertTargets:Ao(t.column)?[]:[{activityId:t.activityId,priorConstraintDate:b}],revert:(O,F)=>Io(O,F,i,r.calendars)}):it({adapter:i,scheduler:a,sector:n.sector,defaultBaseCalendarId:n.defaultBaseCalendarId,runAutomaticP6Schedule:n.runAutomaticP6Schedule},P())),R=(h.trackingEvents??[]).map(O=>({name:O.name,properties:O.properties??{}}));s.trackEvent&&!(t.column===T.PROGRESS&&Number(d.value)<=0)&&R.unshift({name:s.trackEvent,properties:{activity_name:l.name,activity_id:l.id,activity_index:l.correlativeId}});let k=$n(t.activityId,h.constraintWarning);return{ok:!0,changes:await J(i,{source:t,beforeSnap:g,touchedIds:m,scheduledIds:I,sirDetection:Yt.BEFORE_DIFF,links:E,trackingEvents:R,...k?{warnings:[k]}:{},hoursPerDay:o.hoursPerDay})}}function Co(t){return ua(t)}function Do(t,e){return Object.hasOwn(t,e)}function _T(t){if(t.kind===A.LINK_CREATE)return Co(t.type)?t.lag===void 0||Number.isFinite(t.lag)?null:v.INVALID_LINK_LAG:v.INVALID_LINK_TYPE;if(t.kind===A.LINK_UPDATE){if(Do(t,"type")&&!Co(t.type))return v.INVALID_LINK_TYPE;if(Do(t,"lag")&&!Number.isFinite(t.lag))return v.INVALID_LINK_LAG}return null}function ET(t){return t.kind===ft.CREATE?Co(t.type)?t.lag===void 0||Number.isFinite(t.lag)?null:v.INVALID_LINK_LAG:v.INVALID_LINK_TYPE:t.kind===ft.UPDATE?Do(t,"type")&&!Co(t.type)?v.INVALID_LINK_TYPE:!Do(t,"lag")||Number.isFinite(t.lag)?null:v.INVALID_LINK_LAG:t.kind===ft.DELETE?null:v.INVALID_VALUE}function PT(t){for(let e of t){let n=ET(e);if(n!==null)return n}return null}function RT(t,e){let n=new Set,i=new Map;for(let r of t){if(r.kind===ft.CREATE){n.add(String(r.source)),n.add(String(r.target));continue}let a=e.getLink(r.linkId);a&&(n.add(String(a.source)),n.add(String(a.target)),r.kind===ft.UPDATE&&(r.source!==void 0&&n.add(String(r.source)),r.target!==void 0&&n.add(String(r.target))),i.set(r.linkId,{...a}))}return{activityIds:n,links:i}}function kT(t,e,n,i,r=!1){return t.map((a,o)=>{let s=a.kind===ft.CREATE?i?.get(o):void 0,l=Re(a,{port:e,newLinkId:s?()=>s:n.next,rejectParentLinkMutations:r});return{op:a,finalLinkId:l.applied?l.linkId:null,rejected:l.applied?null:l.rejected??v.INVALID}})}function LT(t){return new Map([...t].map(([e,n])=>[String(e),n]))}async function Yf(t,e,n){let i=_T(t);return i!==null?{ok:!1,reason:i}:Ur([xT(t,n.sector.hoursPerDay)],t,e,n,t.kind===A.LINK_CREATE&&t.linkId?new Map([[0,t.linkId]]):void 0)}async function Gf(t,e,n){let i=PT(t.operations);if(i!==null)return{ok:!1,reason:i};let{hoursPerDay:r}=n.sector,a=t.operations.map(s=>NT(s,r)),o=OT(t.operations);return Ur(a,t,e,n,o)}function OT(t){let e=new Map;return t.forEach((n,i)=>{n.kind===ft.CREATE&&n.linkId&&e.set(i,n.linkId)}),e.size>0?e:void 0}function bT(t,e){if(t===void 0)return;let n=new Map,i=new Set,r=()=>{let a=e.linkIdGen.next();for(;e.adapter.getLink(a)!==null||e.isLinkIdReserved(String(a))||i.has(String(a));)a=e.linkIdGen.next();return a};for(let[a,o]of t){let s=e.adapter.getLink(o)!==null||e.isLinkIdReserved(String(o))||i.has(String(o)),l=s?r():o;s||e.linkIdGen.bump(o),i.add(String(l)),n.set(a,l)}return n}function NT(t,e){return t.kind===ft.CREATE?{kind:ft.CREATE,source:t.source,target:t.target,type:t.type,lag:ce(t.lag??0,e)}:t.kind===ft.UPDATE?{kind:ft.UPDATE,linkId:t.linkId,source:t.source,target:t.target,type:t.type,lag:t.lag===void 0?void 0:ce(t.lag,e)}:{kind:ft.DELETE,linkId:t.linkId}}async function Ur(t,e,n,i,r){let{adapter:a,scheduler:o,sector:s,linkIdGen:l}=i;o.invalidateAllCaches();let{activityIds:c,links:d}=RT(t,a),u=await st(a,c),p=kT(t,a,l,bT(r,i),n.rejectParentLinkMutations);if(t.length===1&&p[0]&&p[0].rejected!==null&&e.kind!==A.INLINE_EDIT)return{ok:!1,reason:p[0].rejected};let f=FT(p,d,a),{scheduledIds:y,warnings:h}=await it({adapter:a,scheduler:o,sector:i.sector,defaultBaseCalendarId:i.defaultBaseCalendarId,runAutomaticP6Schedule:i.runAutomaticP6Schedule},{action:e,autoscheduleFrom:f,recomputeParentsFrom:c,now:i.now,options:n}),m=In(p,d,a);return{ok:!0,linkVerdicts:p.map((g,C)=>g.rejected===null?{operationIndex:C,kind:g.op.kind,ok:!0,linkId:String(g.finalLinkId)}:{operationIndex:C,kind:g.op.kind,ok:!1,reason:g.rejected}),__beforeLinks:LT(d),changes:await J(a,{source:e,beforeSnap:u,touchedIds:c,scheduledIds:y,links:m,warnings:h,hoursPerDay:s.hoursPerDay})}}function FT(t,e,n){for(let i of t){if(i.rejected!==null)continue;let r=wT(i.op,e,n);if(r!==null)return n.hasChildren(r)?Dt.ROOTS:String(r)}return null}function wT(t,e,n){return t.kind===ft.CREATE?t.target:t.kind===ft.DELETE?e.get(t.linkId)?.target??null:n.getLink(t.linkId)?.target??null}function xT(t,e){return t.kind===A.LINK_CREATE?{kind:ft.CREATE,source:t.source,target:t.target,type:t.type,lag:ce(t.lag??0,e)}:t.kind===A.LINK_UPDATE?{kind:ft.UPDATE,linkId:t.linkId,source:t.source,target:t.target,type:t.type,lag:t.lag===void 0?void 0:ce(t.lag,e)}:{kind:ft.DELETE,linkId:t.linkId}}async function $f(t,e,n){let{adapter:i,sector:r}=n;if(typeof t.newValue!="string")return{ok:!1,reason:v.INVALID_VALUE};if(!i.getActivity(t.activityId))return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};let o=t.column===T.CUSTOM_PREDECESSORS,{specs:s,errors:l}=ja(t.newValue,{daysPerWeek:r.hoursPerWeek/r.hoursPerDay});if(l.length>0)return{ok:!1,reason:v.INVALID_VALUE};let c=s.map(y=>({...y,lag:ce(Va(y.lag),r.hoursPerDay)})),d=new Map;i.forEachActivity(y=>{y.correlativeId!=null&&d.set(String(y.correlativeId),y.id)});let u=y=>d.get(y)??null,p=Hi(i,t.activityId,o),f=o?Di({targetActivityId:t.activityId,currentLinks:p,desiredSpecs:c,resolveActivityByCorrelative:u}):Ti({sourceActivityId:t.activityId,currentLinks:p,desiredSpecs:c,resolveActivityByCorrelative:u});return Ur(f.operations,t,e,n)}var fe={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 Nt(t){t.invalidateVisualOrderIds?.();let e=[];t.forEachActivity(a=>{W(a.parentId)&&e.push(a)}),e.sort(Jf);let n=[];qf(n,e);let i=[],r=0;for(;n.length>0;){let a=n.pop();if(a.correlativeId!==r){let s=typeof a.correlativeId=="number"?a.correlativeId:void 0;i.push({activityId:String(a.id),before:s}),s!==void 0&&t.noteCorrelativeBefore?.(String(a.id),s),MT(a,r)}r+=1;let o=yr(String(a.id),t);o.sort(Jf),qf(n,o)}return i}function qf(t,e){for(let n=e.length-1;n>=0;n-=1)t.push(e[n])}function zf(t){let e=t.correlativeId,n=typeof e=="number"?e:Number(e);return Number.isFinite(n)?n:js}var Jf=(t,e)=>zf(t)-zf(e);function MT(t,e){t.correlativeId=e}function Ql(t,e){if(!t||t==="0")return;let n=String(t);for(;n!==null;){let{workHours:i,realWorkHours:r}=Qf(n,e);e.setActivityField(n,B.WORK_HOURS,i),e.setActivityField(n,B.REAL_WORK_HOURS,r);let a=e.getActivity(n);if(!a)break;let o=a.parentId;if(!o||W(o))break;n=o}}function Xf(t,e){let n=e.getActivity(t);if(!n)return;let i=n.parentId;!i||W(i)||Ql(i,e)}function Zf(t,e,n){for(let i of t){if(n.hasChildren(i))continue;let r=n.getActivity(i);r&&n.setActivityField(i,B.REAL_WORK_HOURS,Xt(Hr(r,B.WORK_HOURS),Hr(r,B.PROGRESS)))}for(let i of e)n.setActivityField(i,B.REAL_WORK_HOURS,Qf(i,n).realWorkHours)}function Qf(t,e){let n=0,i=0;for(let r of e.getChildren(t)){let a=e.getActivity(r);if(!a)continue;let o=Hr(a,B.WORK_HOURS);n+=o,i+=UT(r,a,o,e)}return{workHours:n,realWorkHours:i}}function Hr(t,e){let n=t[e];return typeof n=="number"&&Number.isFinite(n)?n:0}function UT(t,e,n,i){return i.hasChildren(t)?Hr(e,B.REAL_WORK_HOURS):Xt(n,Hr(e,B.PROGRESS))}function tc(t,e){if(!t||t==="0")return;let n=String(t);for(;n!==null;){let i=e.getChildren(n),r=0;for(let s of i){let l=e.getActivity(s);l&&(r+=HT(l,B.USED_COST))}e.setActivityField(n,B.USED_COST,r);let a=e.getActivity(n);if(!a)break;let o=a.parentId;if(!o||W(o))break;n=o}}function ty(t,e){let n=e.getActivity(t);if(!n)return;let i=n.parentId;!i||W(i)||tc(i,e)}function HT(t,e){let n=t[e];return typeof n=="number"&&Number.isFinite(n)?n:0}function ec(t,e){if(!t||t==="0")return;let n=String(t);for(;n!==null;){let i=e.getChildren(n),r=0;for(let s of i){let l=e.getActivity(s);l&&(r+=BT(l,B.COST))}e.setActivityField(n,B.COST,r);let a=e.getActivity(n);if(!a)break;let o=a.parentId;if(!o||W(o))break;n=o}}function ey(t,e){let n=e.getActivity(t);if(!n)return;let i=n.parentId;!i||W(i)||ec(i,e)}function BT(t,e){let n=t[e];return typeof n=="number"&&Number.isFinite(n)?n:0}var To=Object.freeze({proplannerId:null,description:"",type:L.TASK,progress:0,constraintType:_.ASAP,constraintDate:null,autoScheduling:!0,assignedDefaultCalendar:!1,dateOrigin:null,cost:0,usedCost:0,realCost:0,workHours:0,realWorkHours:0,ponderator:0,hasCustomPonderator:!1,correlativeId:0,customId:null,subcontractId:null,isLookahead:!1,hasLookaheadTasks:!1,newActivityIds:[],hasNewActivities:!1,pendingRequestIds:[],responsableIds:[],tagIds:[],baselinePoints:[],baselineSnapshot:null,baselineVarianceDays:null,recursiveDurationHours:0,isCritical:!1,freeSlackHours:null,expectedProgress:null,expectedProgressBaseline:null,status:null,criticalPath:null}),ny="New Master Plan",iy="New Activity";var jT=["name","description","type","startDate","durationHours","constraintType","constraintDate","calendarId","assignedDefaultCalendar","autoScheduling","progress","cost","usedCost","realCost","workHours","realWorkHours","ponderator","hasCustomPonderator","customId","subcontractId","responsableIds","tagIds","isLookahead"],_o=new Set(jT);function WT(t){let e=Object.getPrototypeOf(t);if(e!==null&&e!==Object.prototype)throw new Error("activity-create: override bag must be a plain object with no custom prototype");for(let n of Reflect.ownKeys(t))if(typeof n=="symbol"||!_o.has(n))throw new Error(`activity-create: rejected override key "${String(n)}" \u2014 not a creation-writable canonical field`);return t}function ry(t,e){let n=t.parentId!=null?e.getActivity(t.parentId):null,i=WT(t.activityOverrides??{}),r=t.numTasksInGantt===0?ny:iy,a=i.name??r,o=i.durationHours??t.sector.hoursPerDay,s=i.calendarId??t.sector.defaultCalendar,l=VT(n,t.fallbackStartDate,i.startDate),c={...To,...i,id:t.id,parentId:t.parentId,uniqueCorrelativeId:t.nextUniqueCorrelativeId,name:a,durationHours:o,calendarId:s,startDate:l,endDate:l},d=i.startDate?new Date(c.startDate):e.getClosestWorkTime({date:c.startDate,dir:z.FUTURE,task:c});if(!i.startDate&&n&&xe(n.type)){let f=new Date(n.startDate);f.setUTCHours(0,0,0,0);let y=new Date(d);y.setUTCHours(0,0,0,0),y.getTime()!==f.getTime()&&(d=e.getClosestWorkTime({date:f,dir:z.FUTURE,task:c}))}let u=e.calculateEndDate({startDate:d,durationHours:c.durationHours,task:c});return{newTask:{...c,startDate:d,endDate:u,calendarDuration:Pe({type:c.type,startDate:d,endDate:u}),newActivityIds:[...c.newActivityIds],pendingRequestIds:[...c.pendingRequestIds],responsableIds:[...c.responsableIds],tagIds:[...c.tagIds],baselinePoints:[...c.baselinePoints]}}}function VT(t,e,n){return n?new Date(n):t?new Date(t.startDate):e?new Date(e):new Date}function Yi(t,e,n,i){let r=e,a=r==="0",o=Br(t,r);if(i!==void 0){let l=o.find(c=>c.id===i);if(l){let c=wt(l),d=o.map(wt).filter(p=>p<c);return d.length===0?c-1:(Math.max(...d)+c)/2}}if(n!==void 0){let l=o.find(c=>c.id===n);if(l){let c=wt(l),d=o.map(wt).filter(p=>p>c);if(d.length===0)return c+1;let u=Math.min(...d);return(c+u)/2}}return o.length===0?0:Math.max(...o.map(wt))+1}var ni=Number.MAX_SAFE_INTEGER,ay=Number.MAX_SAFE_INTEGER-1;function wt(t){let e=t.correlativeId,n=typeof e=="number"?e:Number(e);return Number.isFinite(n)?n:ni}function Br(t,e){return yr(e,t)}function oy(t,e,n){let i=t,r=Le(t,n);for(;r!=null&&e.has(r);)i=r,r=Le(r,n);return i}function Sn(t,e,n){let i=new Set([t]),r=re(n.getActivity(t)?.parentId);for(;r!=="0"&&!i.has(r);){if(e.has(r))return!0;i.add(r),r=re(n.getActivity(r)?.parentId)}return!1}function Le(t,e){let n=e.getActivity(t);if(!n)return null;let i=re(n.parentId),r=le(i,e),a=r.findIndex(o=>String(o)===String(t));return a<=0?null:r[a-1]??null}function sy(t,e,n,i){let r=le(e,t).filter(l=>String(l)!==String(i)).map(l=>t.getActivity(l)).filter(l=>l!==null);if(r.length===0)return 0;let a=r.map(wt);if(n<=0)return a[0]-1;if(n>=a.length)return a[a.length-1]+1;let o=a[n-1],s=a[n];return(o+s)/2}var KT=new Set([...[..._o].filter(t=>t!==B.DURATION_HOURS),"durationDays"]);function Eo(t,e){if(t===void 0)return{ok:!0,value:{}};let n=Object.getPrototypeOf(t);if(n!==null&&n!==Object.prototype)return{ok:!1,reason:v.INVALID_VALUE};for(let a of Reflect.ownKeys(t))if(typeof a=="symbol"||!KT.has(a))return{ok:!1,reason:v.INVALID_VALUE};let{durationDays:i,...r}=t;return i!==void 0&&(!Number.isFinite(i)||i<0)?{ok:!1,reason:v.INVALID_VALUE}:{ok:!0,value:{...r,...i===0&&(r.type===void 0||r.type===L.TASK)?{type:L.MILESTONE}:{},...i===void 0?{}:{durationHours:jn(i,e)}}}}function jt(t,e){Ql(t,e),tc(t,e),ec(t,e)}function Po(t,e){let n=new Set,i=[];for(let r of t){let a=String(r);n.has(a)||(n.add(a),i.push(a))}for(;i.length>0;){let r=i.pop(),a=e.getChildren(r);for(let o of a){let s=String(o);n.has(s)||(n.add(s),i.push(s))}}return n}function Ro(t,e){let n=new Set;for(let i of t){for(let r of e.getOutgoingLinkIds(i))n.add(String(r));for(let r of e.getIncomingLinkIds(i))n.add(String(r))}return[...n]}function YT(t){return t?{type:t.type,startDate:new Date(t.startDate),endDate:new Date(t.endDate),durationHours:t.durationHours,expectedProgressBaseline:t.expectedProgressBaseline,constraintType:t.constraintType,constraintDate:t.constraintDate?new Date(t.constraintDate):null,progress:t.progress}:null}function GT(t,e,n){let i=t.startDate;return!n||!(i instanceof Date)?{}:{endDate:n(i,e)}}function vn(t){if(t.remainingChildIds.length>0)return null;let e=t.parent,n=t.defaultDurationHours,i=Number.isFinite(n),r=YT(t.promotionSnapshot)??(i?{type:mi,durationHours:n,progress:0,autoScheduling:!0,constraintType:_.ASAP,constraintDate:null,hasNewActivities:!1,...GT(e,n,t.computeEndDate)}:{type:mi});if(t.idsRemoved&&t.idsRemoved.size>0){let o=Array.isArray(e.newActivityIds)?e.newActivityIds:[];if(o.length>0){let s=o.filter(l=>!t.idsRemoved.has(l)&&!t.idsRemoved.has(String(l)));s.length!==o.length&&(r.newActivityIds=s)}}e.hasLookaheadTasks&&(r.isLookahead=!0);let a=$T(e,r);return t.dataDateCapability&&a&&Object.assign(r,t.dataDateCapability.parentDemoted({activity:a,hasCompleteSchedulingState:t.hasCompleteSchedulingState===!0,promotionSnapshot:t.promotionSnapshot})),{parentId:String(e.id),fields:r}}function $T(t,e){let n=e.startDate??t.startDate,i=e.endDate??t.endDate,r=e.durationHours??t.durationHours,a=e.progress??t.progress,o=e.type??t.type;return!(n instanceof Date)||!(i instanceof Date)||typeof r!="number"||typeof a!="number"?null:{type:o,startDate:n,endDate:i,durationHours:r,progress:a}}function ko(t){if(t.idsRemoved.size===0)return null;let e=t.parent.newActivityIds;if(!Array.isArray(e)||e.length===0)return null;let n=e,i=n.filter(r=>!t.idsRemoved.has(r)&&!t.idsRemoved.has(String(r)));return i.length===n.length?null:{parentId:String(t.parent.id),fields:{newActivityIds:[...i],hasNewActivities:i.length>0}}}var ly=200;async function cy(t,e,n){let{adapter:i,scheduler:r,customIdTracker:a,sector:o}=n;if(r.invalidateAllCaches(),t.activityIds.length===0)return{ok:!1,reason:v.ACTIVITY_IDS_EMPTY};for(let R of t.activityIds)if(!i.getActivity(R))return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};let s=t.activityIds.filter(R=>{let k=i.getActivity(R);return!(k?.correlativeId===0&&k.type===L.PROJECT)}),l=Po(s,i),c=Ro(l,i),d=new Set;for(let R of t.activityIds){let k=i.getActivity(R);if(!k)continue;let O=k.parentId;if(W(O))continue;let F=String(O);l.has(F)||d.add(F)}let u=new Set([...l,...d]),p=await st(i,u),f=new Map;for(let R of c){let k=i.getLink(R);k&&f.set(R,{...k})}let y=new Set,h=0;for(let R of l){h+=1,h%ly===0&&await St();let k=i.getActivity(R);if(!k)continue;let O=W(k.parentId)?null:i.getActivity(String(k.parentId)),F=O?.hasNewActivities===!0&&O.newActivityIds.some($=>String($)===String(R));(k.isNewActivity===!0||F)&&y.add(R);let U=k.customId;typeof U=="string"&&U.length>0&&a.releaseCustomId(U)}for(let R of c)i.removeLink(R);let m=jr(i,l),g=0;for(let R of l)g+=1,g%ly===0&&await St(),i.removeActivity(R);for(let R of d){let k=i.getActivity(R);if(!k)continue;qT(k,y,i);let O=i.getChildren(R),F=vn({parent:k,remainingChildIds:O.map(String),defaultDurationHours:o.hoursPerDay,promotionSnapshot:i.getPromotionSnapshot(R),computeEndDate:(U,$)=>i.calculateEndDate({startDate:U,durationHours:$,task:k}),idsRemoved:l,dataDateCapability:n.dataDateCapability,hasCompleteSchedulingState:n.hasCompleteSchedulingState});if(!F){Ya(R,i);continue}if(i.setActivityFields(R,F.fields),k.customId==null||k.customId===""){let U=Le(R,i),$=U?i.getActivity(U)?.customId:null,ut=a.generateCustomIdForRestoredChild(typeof $=="string"&&$?$:null);i.setActivityField(R,B.CUSTOM_ID,ut)}}for(let R of d)jt(R,i);let C=Nt(i),{scheduledIds:b}=await it({adapter:i,scheduler:r,sector:n.sector,defaultBaseCalendarId:n.defaultBaseCalendarId,runAutomaticP6Schedule:n.runAutomaticP6Schedule},{action:t,autoscheduleFrom:Dt.ROOTS,recomputeParentsFrom:d,now:n.now,options:e}),E={name:fe.ACTIVITY_DELETION,properties:{activity_ids:[...t.activityIds],cascade_count:l.size}};t.eventSource!==void 0&&(E.properties.event_source=t.eventSource);let P=new Map;for(let[R,k]of f)P.set(R,k);let N=new Map;for(let R of l){let k=p.get(String(R));k&&N.set(String(R),k)}let I=await J(i,{source:t,beforeSnap:p,touchedIds:u,scheduledIds:b,sirDetection:Yt.AFTER_DIFF,links:Se(f),trackingEvents:[E],hoursPerDay:o.hoursPerDay,correlativeShifts:C});return{ok:!0,changes:m.length>0?{...I,viewState:m}:I,__beforeSnap:N,__beforeLinks:P}}function qT(t,e,n){let i=ko({parent:t,idsRemoved:e});if(i)for(let[r,a]of Object.entries(i.fields))ue(n,i.parentId,r,a)}function jr(t,e){let n=[];for(let i of e){let r=t.isChecked(i),a=t.isVisible(i);!r&&a||n.push({activityId:String(i),...r?{checked:{before:!0,after:!1}}:{},...a?{}:{visible:{before:!1,after:!0}}})}return n}function Se(t){let e=[];for(let[n,i]of t.entries())e.push({id:n,kind:H.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 e}var Gi={CREATE:"create",REPARENT:"reparent"};function zT(t,e={}){let n=t.type;if(n!==L.TASK&&n!==L.MILESTONE)return null;let i=t.startDate,r=t.endDate;return!(i instanceof Date)||!(r instanceof Date)?null:{type:n,startDate:new Date(i),endDate:new Date(r),durationHours:Number(t.durationHours??0),expectedProgressBaseline:typeof t.expectedProgressBaseline=="number"?t.expectedProgressBaseline:null,constraintType:t.constraintType??null,constraintDate:t.constraintDate instanceof Date?new Date(t.constraintDate):null,progress:Number(t.progress??0),...e}}function dy(t){let e=t.getParent(t.parentId);if(!e)return null;let n=t.isCurrentlyLeaf!==void 0?t.isCurrentlyLeaf&&nn(e.type):JT(e),i=Array.isArray(e.newActivityIds)?e.newActivityIds:[],a={isLookahead:!1,hasNewActivities:!0,newActivityIds:i.some(s=>String(s)===String(t.newChildId))?[...i]:[...i,t.newChildId]},o=n?t.dataDateCapability?.parentPromoted(e):void 0;return e.customId!=null&&e.customId!==""&&(a.customId=null),n&&(a.type=$s,o&&Object.assign(a,o.activityPatch),(t.promotionSource??Gi.CREATE)===Gi.CREATE&&(a.constraintType=_.ASAP,a.constraintDate=null)),{parentId:t.parentId,fields:a,promotionSnapshot:zT(e,o?.snapshotPatch)}}function JT(t){return nn(t.type)&&(!Array.isArray(t.newActivityIds)||t.newActivityIds.length===0)}function Cn(t,e){let i=e.adapter.getActivity(t.parentId)?.customId??null,r=dy({...t,getParent:o=>e.adapter.getActivity(o)??null,dataDateCapability:e.dataDateCapability});if(!r)return{applied:!1,removedLinks:new Map};let a=r.fields.type===L.PROJECT?XT(t.parentId,e):new Map;for(let[o,s]of Object.entries(r.fields))ue(e.adapter,r.parentId,o,s);return r.promotionSnapshot&&e.adapter.setPromotionSnapshot(r.parentId,r.promotionSnapshot),r.fields.customId===null&&e.customIdTracker.releaseCustomId(i),{applied:!0,removedLinks:a}}function XT(t,e){let n=new Map,i=new Set([...e.adapter.getIncomingLinkIds(t),...e.adapter.getOutgoingLinkIds(t)]);for(let r of i){let a=e.adapter.getLink(r);a&&(n.set(String(r),{...a}),e.adapter.removeLink(r))}return n}async function Dn(t,e,n={}){let{adapter:i,scheduler:r,sector:a,calendars:o,activityIdGen:s,uidGen:l}=e;n.skipCacheInvalidation||r.invalidateAllCaches();let c=ZT(t,i);if(!c.ok)return c;let{parent:d,anchorSiblingId:u,isRoot:p}=c,f=t_(t.activityId,i,s,e.isActivityIdReserved),y=l.next(),h={id:f,parentId:p?null:t.parentId,sector:{id:a.id,hoursPerDay:a.hoursPerDay,defaultCalendar:a_(o)},numTasksInGantt:i.activityCount(),nextUniqueCorrelativeId:y,activityOverrides:t.overrides??{}},g=ry(h,{getActivity:R=>i.getActivity(R),calculateEndDate:R=>i.calculateEndDate(R),getClosestWorkTime:R=>i.getClosestWorkTime(R)}).newTask;e.dataDateCapability!==null&&Object.assign(g,e.dataDateCapability.activityCreated({activity:g,hasCompleteSchedulingState:e.hasCompleteSchedulingState})),g.realWorkHours=Xt(g.workHours,g.progress),n_(g,t,e,u,d,n);let C=n.insertionCorrelativeId??Yi(i,p?"0":t.parentId,t.afterSiblingId,t.beforeSiblingId);g.correlativeId=C;let b=new Set([f]);d&&b.add(d.id);let E=d!==null&&i.getChildren(d.id).length===0,P=n.skipBeforeSnap?new Map:await st(i,b);i.addActivity(g);let N=d?Cn({parentId:d.id,newChildId:f,isCurrentlyLeaf:E},e).removedLinks:new Map;n.skipRollupCascades||(Xf(f,i),ty(f,i),ey(f,i));let I=i_(i,f,b,n);return{ok:!0,newId:f,parent:d,newActivity:g,beforeSnap:P,initialTouched:b,correlativeShifts:I,removedParentLinks:N}}function ZT(t,e){let n=W(t.parentId),i=n?null:e.getActivity(t.parentId);if(!n&&!i)return{ok:!1,reason:v.PARENT_NOT_FOUND};if(i!==null&&Ze(i))return{ok:!1,reason:v.PARENT_FROZEN_BY_SIR};if(t.afterSiblingId!==void 0&&t.beforeSiblingId!==void 0)return{ok:!1,reason:v.ANCHOR_SIBLING_CONFLICT};let o=t.afterSiblingId??t.beforeSiblingId,s=QT(t,e,n,o);return s||{ok:!0,parent:i,anchorSiblingId:o,isRoot:n}}function QT(t,e,n,i){if(i===void 0)return null;let r=e.getActivity(i);if(!r)return{ok:!1,reason:v.ANCHOR_SIBLING_NOT_FOUND};let a=n?"0":t.parentId;return(r.parentId==null?"0":String(r.parentId))!==a?{ok:!1,reason:v.ANCHOR_SIBLING_WRONG_PARENT}:null}function t_(t,e,n,i){let r=()=>{let a=n.next();for(;e.activityExists(a)||i(String(a));)a=n.next();return a};return t===void 0||e.activityExists(t)||i(String(t))?r():(n.bump(t),t)}function e_(t){let e=t.overrides?.customId;return typeof e=="string"?e:void 0}function n_(t,e,n,i,r,a){let{adapter:o,customIdTracker:s}=n,l=e_(e);if(l!==void 0){if(l.length===0)return;if(!s.isCustomIdInUse(l)){s.registerCustomId(l);return}}let c=a.customIdReferenceId??i,d=c!==void 0,u=d?o.getActivity(c):r;t.customId=s.generateCustomIdForNewChild({activity:u??{},useActivityCustomIdAsReference:d})}function i_(t,e,n,i){if(i.skipCorrelativeRecompute)return[];let r=Nt(t).filter(a=>a.activityId!==String(e));for(let a of r)n.add(a.activityId);return r}async function r_(t,e,n,i,r){let{newId:a,newActivity:o,beforeSnap:s,initialTouched:l,correlativeShifts:c,removedParentLinks:d}=n,u={name:fe.ACTIVITY_CREATION,properties:{parent_id:e.parentId,activity_id:a,created_duration:o.durationHours}};return e.eventSource!==void 0&&(u.properties.event_source=e.eventSource),J(t,{source:e,beforeSnap:s,touchedIds:l,scheduledIds:i,correlativeShifts:c,trackingEvents:[u],links:Se(new Map(d)),hoursPerDay:r})}async function uy(t,e,n){let{adapter:i,scheduler:r,sector:a}=n,o=Eo(t.overrides,a.hoursPerDay);if(!o.ok)return o;let s=await Dn({...t,overrides:o.value},n);if(!s.ok)return s;let{newId:l}=s,c=s.newActivity.autoScheduling;i.setActivityField(l,"autoScheduling",!1);let d;try{d=await it({adapter:i,scheduler:r,sector:n.sector,defaultBaseCalendarId:n.defaultBaseCalendarId,runAutomaticP6Schedule:n.runAutomaticP6Schedule},{action:t,autoscheduleFrom:l,recomputeParentsFrom:[l],preventSummaryTargetPullback:!0,now:n.now,options:e})}finally{i.setActivityField(l,"autoScheduling",c)}let{scheduledIds:u}=d;return{ok:!0,changes:await r_(i,t,s,u,a.hoursPerDay),...s.removedParentLinks.size>0?{__beforeLinks:new Map(s.removedParentLinks)}:{}}}function a_(t){for(let n of t.values())if(n.is_default)return n.id;let e=t.values().next();return!e.done&&e.value?e.value.id:"global"}async function yy(t,e,n){let i=o_(t,n);if(i)return{ok:!1,reason:i};let r=l_(t,n);if(!r.ok)return r;let a=t.mode===Lt.REPLACE?new Set(n.adapter.getAllIds().map(E=>String(E))):new Set,o=t.mode===Lt.REPLACE?await st(n.adapter,a):new Map,s=t.mode===Lt.REPLACE?y_(n):new Map,l=t.mode===Lt.REPLACE?jr(n.adapter,a):[];n.scheduler.invalidateAllCaches();let c=[];if(t.mode===Lt.REPLACE){for(let E of s.keys()){let P=Re({kind:ft.DELETE,linkId:E},{port:n.adapter});if(!P.applied)return{ok:!1,reason:P.rejected??v.INVALID};c.push({op:{kind:ft.DELETE,linkId:E},finalLinkId:E,rejected:null})}for(let E of a){let P=n.adapter.getActivity(E)?.customId;typeof P=="string"&&P.length>0&&n.customIdTracker.releaseCustomId(P),n.adapter.removeActivity(E)}}let d=await f_(t,r.plan.items,n);if(!d.ok)return d;for(let[E,P]of d.removedParentLinks)s.set(E,P),c.push({op:{kind:ft.DELETE,linkId:E},finalLinkId:E,rejected:null});let u=hy(t)?[]:Nt(n.adapter),p=new Set(r.plan.items.map(E=>String(E.activityId))),f=u.filter(E=>!p.has(E.activityId)),y=t.mode===Lt.REPLACE?new Set(a):new Set;gn(n.adapter,u,p,o,y);for(let E of r.plan.items)y.add(String(E.activityId));let h=r.plan.links.map(E=>({operation:{kind:ft.CREATE,source:E.source,target:E.target,type:E.type,lag:ce(E.lag??0,n.sector.hoursPerDay)},linkId:E.linkId})),m=Ua(h,{port:n.adapter,preserved:s,rejectParentLinkMutations:e.rejectParentLinkMutations??!1});if(!m.applied)return{ok:!1,reason:m.rejected??v.INVALID};for(let{operation:E,linkId:P}of h)c.push({op:E,finalLinkId:P,rejected:null});let g=r.plan.items.map(E=>E.activityId),{scheduledIds:C}=await it({adapter:n.adapter,scheduler:n.scheduler,sector:n.sector,defaultBaseCalendarId:n.defaultBaseCalendarId,runAutomaticP6Schedule:n.runAutomaticP6Schedule},{action:t,autoscheduleFrom:t.items.length>0||t.links.length>0?Dt.ROOTS:null,recomputeParentsFrom:g,now:n.now,options:e}),b=await J(n.adapter,{source:t,beforeSnap:o,touchedIds:y,scheduledIds:C,links:In(c,s,n.adapter),hoursPerDay:n.sector.hoursPerDay,correlativeShifts:f,...t.mode===Lt.REPLACE?{sirDetection:Yt.AFTER_DIFF}:{}});return{ok:!0,changes:l.length>0?{...b,viewState:l}:b,...t.mode===Lt.REPLACE||s.size>0?{...t.mode===Lt.REPLACE?{__beforeSnap:o}:{},__beforeLinks:h_(s)}:{}}}function o_(t,e){if(t.mode!==Lt.APPEND&&t.mode!==Lt.REPLACE)return v.INVALID;let n=new Set,i=new Set;for(let a of t.items){if(a.batchId.length===0||n.has(a.batchId))return v.INVALID;if(n.add(a.batchId),a.index!==void 0&&(!Number.isInteger(a.index)||a.index<0))return v.INVALID;if(a.activityId!==void 0){let o=String(a.activityId);if(o.length===0||o==="0"||i.has(o))return v.INVALID;i.add(o)}}for(let a of t.items)if(!ic(a.parent,!0,t.mode,n,e))return v.PARENT_NOT_FOUND;if(s_(t.items))return v.INVALID;let r=new Set;for(let a of t.links){if(!Object.values(M).includes(a.type))return v.INVALID_LINK_TYPE;if(a.lag!==void 0&&!Number.isFinite(a.lag))return v.INVALID_LINK_LAG;if(!ic(a.source,!1,t.mode,n,e)||!ic(a.target,!1,t.mode,n,e))return v.ACTIVITY_NOT_FOUND;if(a.linkId!==void 0){let o=String(a.linkId);if(o.length===0||r.has(o))return v.INVALID;r.add(o)}}return null}function ic(t,e,n,i,r){return typeof t=="string"?t==="0"?e:n===Lt.APPEND&&r.adapter.getActivity(String(t))!==null:t!==null&&t.batchId.length>0&&i.has(t.batchId)}function s_(t){let e=new Map;for(let i of t)typeof i.parent!="string"&&e.set(i.batchId,i.parent.batchId);let n=new Set;for(let i of t){let r=new Set,a=i.batchId;for(;a!==void 0&&!n.has(a);){if(r.has(a))return!0;r.add(a),a=e.get(a)}for(let o of r)n.add(o)}return!1}function l_(t,e){let n=new Map;for(let d of t.items){let u=Eo(d.overrides,e.sector.hoursPerDay);if(!u.ok)return u;n.set(d.batchId,u.value)}let i=new Map,r=new Set;for(let d of t.items){let u=c_(d.activityId,t.mode,r,e);r.add(String(u)),i.set(d.batchId,u)}let a=new Set,o=t.links.map(d=>{let u=d_(d.linkId,t.mode,a,e);return a.add(String(u)),u}),s=u_(t,i,e),l=[];for(let d of t.items){let u=i.get(d.batchId),p=s.get(d.batchId);if(u===void 0||p===void 0)return{ok:!1,reason:v.INVALID};let f=typeof d.parent=="string"?null:d.parent.batchId,y=typeof d.parent=="string"?d.parent:i.get(d.parent.batchId);if(y===void 0)return{ok:!1,reason:v.PARENT_NOT_FOUND};l.push({input:d,activityId:u,parentId:y,parentBatchId:f,insertionCorrelativeId:p,overrides:n.get(d.batchId)??{}})}let c=[];for(let[d,u]of t.links.entries()){let p=fy(u.source,i),f=fy(u.target,i),y=o[d];if(p===null||f===null||y===void 0)return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};c.push({source:p,target:f,type:u.type,lag:u.lag??0,linkId:y})}return{ok:!0,plan:{items:l,links:c}}}function c_(t,e,n,i){if(t!==void 0&&(e===Lt.REPLACE||i.adapter.getActivity(t)===null&&!i.isActivityIdReserved(String(t)))&&!n.has(String(t)))return i.activityIdGen.bump(t),t;let a=i.activityIdGen.next();for(;n.has(String(a))||e===Lt.APPEND&&(i.adapter.getActivity(a)!==null||i.isActivityIdReserved(String(a)));)a=i.activityIdGen.next();return a}function d_(t,e,n,i){if(t!==void 0&&(e===Lt.REPLACE||i.adapter.getLink(t)===null&&!i.isLinkIdReserved(String(t)))&&!n.has(String(t)))return i.linkIdGen.bump(t),t;let a=i.linkIdGen.next();for(;n.has(String(a))||e===Lt.APPEND&&(i.adapter.getLink(a)!==null||i.isLinkIdReserved(String(a)));)a=i.linkIdGen.next();return a}function u_(t,e,n){if(hy(t)){let s=n.adapter.activityCount();return new Map(t.items.map((l,c)=>[l.batchId,s+c]))}let i=new Set(Array.from(e.values(),s=>String(s))),r=new Map;for(let s of t.items){let l=e.get(s.batchId);if(l===void 0)continue;let c=typeof s.parent=="string"?s.parent:e.get(s.parent.batchId);if(c===void 0)continue;let d=String(c),u=r.get(d);u||(u={existing:t.mode===Lt.REPLACE||typeof s.parent!="string"&&e.has(s.parent.batchId)?[]:Br(n.adapter,d).sort((h,m)=>wt(h)-wt(m)||String(h.id).localeCompare(String(m.id))).map(h=>String(h.id)),newIdsByTarget:new Map},r.set(d,u));let p=s.index===void 0?u.existing.length:Math.min(s.index,u.existing.length),f=u.newIdsByTarget.get(p)??[];f.push(String(l)),u.newIdsByTarget.set(p,f)}let a=new Map,o=new Map(Array.from(e,([s,l])=>[String(l),s]));for(let s of r.values()){let l=[];for(let d=0;d<=s.existing.length;d+=1){for(let p of s.newIdsByTarget.get(d)??[])l.push(p);let u=s.existing[d];u!==void 0&&l.push(u)}let c=0;for(;c<l.length;){if(!i.has(l[c])){c+=1;continue}let d=c;for(;c<l.length&&i.has(l[c]);)c+=1;let u=c-d,p=d>0?py(l[d-1],n):null,f=c<l.length?py(l[c],n):null;for(let y=0;y<u;y+=1){let h=l[d+y],m=o.get(h);m!==void 0&&a.set(m,p_(p,f,y+1,u))}}}return a}function hy(t){return t.mode===Lt.APPEND&&t.items.every(e=>e.parent==="0"&&e.index===void 0)}function py(t,e){let n=e.adapter.getActivity(t);return n?wt(n):0}function p_(t,e,n,i){return t!==null&&e!==null&&e>t?t+(e-t)*n/(i+1):t!==null?t+n:e!==null?e-(i-n+1):n-1}async function f_(t,e,n){let i=new Map,r=new Map,a=[];for(let s of e){if(s.parentBatchId===null){a.push(s);continue}let l=i.get(s.parentBatchId)??[];l.push(s),i.set(s.parentBatchId,l)}for(let s=0;s<a.length;s+=1){let l=a[s],c=await Dn({kind:A.ACTIVITY_CREATE,parentId:l.parentId,activityId:l.activityId,overrides:l.overrides,...t.eventSource===void 0?{}:{eventSource:t.eventSource}},n,{skipCorrelativeRecompute:!0,skipBeforeSnap:!0,skipCacheInvalidation:!0,skipRollupCascades:!0,insertionCorrelativeId:l.insertionCorrelativeId});if(!c.ok)return c;for(let[d,u]of c.removedParentLinks)r.set(d,u);for(let d of i.get(l.input.batchId)??[])a.push(d)}if(a.length!==e.length)return{ok:!1,reason:v.INVALID};let o=new Set;for(let s=a.length-1;s>=0;s-=1){let l=a[s].parentId;l==="0"||o.has(String(l))||(o.add(String(l)),jt(l,n.adapter))}return{ok:!0,removedParentLinks:r}}function fy(t,e){return typeof t=="string"?t:e.get(t.batchId)??null}function y_(t){return new Map(t.adapter.getAllLinks().map(e=>[String(e.id),{...e}]))}function h_(t){return new Map(Array.from(t,([e,n])=>[String(e),n]))}function my(t,e){let{adapter:n}=e,i=t.activityId,r=n.getActivity(i);if(!r)return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};let a=r.pendingRequestIds??[],o=t.pendingRequests.map(c=>c.id);n.setActivityField(t.activityId,"pendingRequestIds",o);let s=n.getActivity(i);if(!s)return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};let l={id:i,kind:H.UPDATED,fields:{pendingRequestIds:{before:a,after:o}},after:et(s)};return{ok:!0,changes:{source:t,activities:[l],links:[],calendars:[],trackingEvents:[]}}}function gy(t){let e=new Map;for(let n of t){let i=n.proplannerId;typeof i=="number"&&Number.isSafeInteger(i)&&i>0&&e.set(i,String(n.id))}return e}function Ay(t,e,n){let i=new Set(e.map(({id:r})=>String(r)));for(let r of t)if((r.proplannerId==null||r.proplannerId===0)&&!i.has(String(r.id)))throw new Error(`persistence-acknowledge: missing ${n} proplannerId for "${String(r.id)}"`)}function m_(t,e,n,i,r,a){let o=String(t.id);if(o.length===0||r.has(o))throw new Error(`persistence-acknowledge: duplicate or empty ${e} id "${o}"`);if(!Number.isSafeInteger(t.proplannerId)||t.proplannerId<=0)throw new Error(`persistence-acknowledge: invalid ${e} proplannerId ${String(t.proplannerId)}`);if(a.has(t.proplannerId))throw new Error(`persistence-acknowledge: duplicate ${e} proplannerId ${String(t.proplannerId)}`);let s=n(o);if(!s.exists)throw new Error(`persistence-acknowledge: unknown ${e} id "${o}"`);if(s.current!==null&&s.current!==0&&s.current!==t.proplannerId)throw new Error(`persistence-acknowledge: ${e} "${o}" already has proplannerId ${String(s.current)}`);let l=i.get(t.proplannerId);if(l!==void 0&&l!==o)throw new Error(`persistence-acknowledge: ${e} proplannerId ${String(t.proplannerId)} already belongs to "${l}"`);r.add(o),a.add(t.proplannerId)}function Iy(t,e,n,i){let r=new Set,a=new Set;for(let o of t)m_(o,e,n,i,r,a)}async function Sy(t,e){let n=t.filter(s=>{let l=e.adapter.getActivity(String(s.activityId));return l!==null&&l.progress!==s.progress}),i=new Set(n.map(s=>String(s.activityId))),r=Tr(e.adapter,i),a=new Set(i);for(let s of r)a.add(String(s));let o=await st(e.adapter,a);return e.adapter.batchUpdate(()=>{for(let s of n){let l=String(s.activityId);e.adapter.setActivityField(l,"progress",s.progress),e.adapter.setActivityField(l,"autoScheduling",Hn(s.progress))}ku(r,e.adapter),Zf(i,r,e.adapter)}),[...await ao(e.adapter,o,a)]}async function vy(t,e){let n=t.activities??[],i=t.links??[],r=e.adapter.getAllActivities(),a=e.adapter.getAllLinks(),o=t.checkpoint?.activities??r,s=t.checkpoint?.links??a,l=new Map(o.map(y=>[String(y.id),y])),c=new Map(s.map(y=>[String(y.id),y])),d=gy(o),u=gy(s);Iy(n,"activity",y=>{let h=l.get(y);return{exists:h!==void 0,current:h?.proplannerId??null}},d),Iy(i,"link",y=>{let h=c.get(y);return{exists:h!==void 0,current:h?.proplannerId??null}},u),Ay(o,n,"activity"),Ay(s,i,"link");let p=[],f=[];return e.adapter.batchUpdate(()=>{for(let y of n){let h=e.adapter.getActivity(y.id);if(!h||h.proplannerId===y.proplannerId)continue;let m=h.proplannerId;e.adapter.setActivityField(y.id,"proplannerId",y.proplannerId),p.push({id:y.id,kind:H.UPDATED,fields:{proplannerId:{before:m,after:y.proplannerId}},after:{...h,proplannerId:y.proplannerId}})}for(let y of i){let h=e.adapter.getLink(y.id);if(!h||h.proplannerId===y.proplannerId)continue;let m=h.proplannerId;e.adapter.setLinkProplannerId(y.id,y.proplannerId),f.push({id:y.id,kind:H.UPDATED,fields:{proplannerId:{before:m,after:y.proplannerId}},after:{...h,proplannerId:y.proplannerId}})}}),{ok:!0,changes:{source:t,activities:p,links:f,calendars:[],trackingEvents:[]}}}async function Cy(t,e,n){if(g_(t))return{ok:!1,reason:v.INVALID_VALUE};let i=[...new Set(t.activityIds.map(String))];if(t.acknowledgePersistedLookahead===!0&&i.some(s=>!n.isActivityIdReserved(s)))return{ok:!1,reason:v.INVALID};let a=i.map(s=>n.adapter.getActivity(s));if(a.some(s=>!s))return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};let o=[];for(let[s,l]of i.entries()){let c=a[s];if(!c)continue;let d={};c.isLookahead!==t.isLookahead&&(d.isLookahead={before:c.isLookahead,after:t.isLookahead},n.adapter.setActivityField(l,"isLookahead",t.isLookahead)),c.hasLookaheadTasks!==t.hasLookaheadTasks&&(d.hasLookaheadTasks={before:c.hasLookaheadTasks,after:t.hasLookaheadTasks},n.adapter.setActivityField(l,"hasLookaheadTasks",t.hasLookaheadTasks)),Object.keys(d).length!==0&&o.push({id:l,kind:H.UPDATED,fields:d,after:{...c,isLookahead:t.isLookahead,hasLookaheadTasks:t.hasLookaheadTasks}})}return t.persistedProgress!==void 0&&(await Sy([{activityId:i[0],progress:t.persistedProgress}],n)).length>0?(await it({adapter:n.adapter,scheduler:n.scheduler,sector:n.sector,defaultBaseCalendarId:n.defaultBaseCalendarId,runAutomaticP6Schedule:n.runAutomaticP6Schedule},{action:t,autoscheduleFrom:t.persistedProgress===0?i[0]:null,recomputeParentsFrom:[],now:n.now,options:e}),{ok:!0,changes:await J(n.adapter,{source:t,beforeSnap:new Map,touchedIds:[],scheduledIds:[],hoursPerDay:n.sector.hoursPerDay})}):{ok:!0,changes:{source:t,activities:o,links:[],calendars:[],trackingEvents:[]}}}function g_(t){let e=t.persistedProgress;return e!==void 0&&(t.activityIds.length!==1||!Number.isFinite(e)||e<0||e>100)}function Ty(t,e){let n=new Map(t.map(a=>[a.id,et(a)])),i=new Map;for(let a of t){if(a.parentId===null)continue;let o=i.get(a.parentId)??[];o.push(a),i.set(a.parentId,o)}let r=new Map;for(let a of[...t].reverse()){let o=i.get(a.id)??[],s=o.length>0,l=s?o.reduce((y,h)=>y+Dy(r,h.id),0):A_(a,e);if(r.set(a.id,l),!s)continue;let c=l>0,d=e!==ct.COST;for(let y of o){let h=rc(n,y.id),m=c?100*Dy(r,y.id)/l:d?100/o.length:0;n.set(y.id,{...h,ponderator:m})}let u=o.map(y=>rc(n,y.id)),p=Ei(u),f=rc(n,a.id);n.set(a.id,{...f,progress:Ka(p??0)})}return n}function A_(t,e){return t.type===L.PROJECT?0:e===ct.COST?t.cost:e===ct.WORK_HOURS?t.workHours:t.durationHours}function Dy(t,e){let n=t.get(e);if(n===void 0)throw new Error(`Missing conversion magnitude ${e}`);return n}function rc(t,e){let n=t.get(e);if(!n)throw new Error(`Missing conversion snapshot ${e}`);return n}function oc(t,e){let{adapter:n}=e,i=new Set(t.conversionRootIds.map(p=>String(p)));if(i.size===0)throw new Error("Conversion requires at least one root");for(let p of i)R_(p,n);let r=n.getVisualOrderIds().filter(p=>i.has(p)&&!Sn(p,i,n)),a=r.map(p=>I_(p,n,t.criterion??e.sector.activityCreter??ct.DURATION)),o=a.map(({conversionRootId:p,convertedActivities:f})=>({conversionRootId:p,convertedActivities:f})),s=a.flatMap(p=>p.milestoneMoves),l=a.flatMap(p=>p.activityIdsToDelete),c=a.map(p=>p.formerParent),d=new Set(l),u=Ro(d,n);return{sourceStateRevision:e.stateRevision,conversionRootIds:r,conversionGroups:o,milestoneMoves:s,activityIdsToDelete:l,linkIdsToDelete:u,formerParents:c}}async function Py(t,e,n){if(t.expectedStateRevision!==n.stateRevision)return{ok:!1,reason:v.STALE_STATE_REVISION};let i=oc(t,n);if(!k_(i,n.adapter))return{ok:!1,reason:v.HIERARCHY_CYCLE};let{adapter:r,scheduler:a}=n;a.invalidateAllCaches();let o=await D_(i,r);T_(i,n),Ry(i,r),__(i,o.deletedIds,r);let s=E_(i,r);gn(r,s,o.deletedIds,o.beforeSnap,o.touchedIds);let{scheduledIds:l}=await it({adapter:r,scheduler:a,sector:n.sector,defaultBaseCalendarId:n.defaultBaseCalendarId,runAutomaticP6Schedule:n.runAutomaticP6Schedule},{action:t,autoscheduleFrom:"roots",recomputeParentsFrom:o.touchedIds,now:n.now,options:e,recomputeParentProgress:!0}),c=await J(r,{source:t,beforeSnap:o.beforeSnap,touchedIds:o.touchedIds,scheduledIds:l,sirDetection:"after-diff",links:Se(o.beforeLinks),hoursPerDay:n.sector.hoursPerDay,correlativeShifts:s});return P_(i,o,c)}function I_(t,e,n){let i=ac(t,e),r=Po([t],e);if(r.delete(t),r.size===0)throw new Error(`Conversion root ${t} has no descendants`);let a=e.getVisualOrderIds().filter(u=>r.has(u)).map(u=>ac(u,e));Ey(i);for(let u of a)Ey(u);let o=a.filter(u=>u.type!==L.MILESTONE),s=a.filter(u=>u.type===L.MILESTONE),l=S_(i,o),c=Ty([i,...o],n),d=c.get(i.id);if(!d)throw new Error(`Missing conversion snapshot ${i.id}`);return{conversionRootId:t,convertedActivities:[...c.values()].filter(u=>u.id!==t).map(u=>v_(u,l)),milestoneMoves:C_(i,s),activityIdsToDelete:o.map(u=>u.id),formerParent:{activity:d,hasConvertedActivities:o.length>0}}}function S_(t,e){let n=new Map;e.length>0&&n.set(t.id,_y(t));for(let i of e)n.set(i.id,_y(i));return n}function v_(t,e){let n=et(t),i=re(t.parentId),r=e.get(i);return n.parentId=r===void 0?null:String(r),n}function C_(t,e){let n=[],i=re(t.parentId),r=t.id;for(let a of e)n.push({activityId:a.id,parentId:i,afterSiblingId:r}),r=a.id;return n}async function D_(t,e){let n=new Set(t.activityIdsToDelete),i=new Set([...t.conversionRootIds,...t.activityIdsToDelete,...t.milestoneMoves.map(({activityId:r})=>r),...t.milestoneMoves.map(({parentId:r})=>r).filter(r=>r!=="0")]);return{deletedIds:n,touchedIds:i,beforeSnap:await st(e,i),beforeLinks:L_(t.linkIdsToDelete,e),viewStateChanges:jr(e,n)}}function T_(t,e){for(let n of t.activityIdsToDelete){let i=e.adapter.getActivity(n)?.customId;i&&e.customIdTracker.releaseCustomId(i)}}function Ry(t,e){for(let n of t.milestoneMoves)e.setActivityFields(n.activityId,{parentId:n.parentId,correlativeId:Yi(e,n.parentId,n.afterSiblingId,void 0)});for(let n of t.linkIdsToDelete)e.removeLink(n);for(let n of[...t.activityIdsToDelete].reverse())e.removeActivity(n);for(let{activity:n}of t.formerParents)e.setActivityField(n.id,B.TYPE,L.TASK)}function __(t,e,n){for(let{activity:i,hasConvertedActivities:r}of t.formerParents){let a=ac(i.id,n),o=ko({parent:a,idsRemoved:e});n.setActivityFields(i.id,{progress:i.progress,isLookahead:i.isLookahead||r,hasLookaheadTasks:i.hasLookaheadTasks||r,...o?.fields??{}}),n.setProgressFallback(i.id,null)}}function E_(t,e){for(let{activity:n}of t.formerParents)jt(n.parentId,e);return Nt(e)}function P_(t,e,n){let i=new Map;for(let r of e.deletedIds){let a=e.beforeSnap.get(r);a&&i.set(r,a)}return{ok:!0,changes:e.viewStateChanges.length===0?n:{...n,viewState:e.viewStateChanges},conversionGroups:t.conversionGroups.map(({conversionRootId:r,convertedActivities:a})=>({conversionRootId:r,convertedActivities:a.map(o=>et(o))})),__beforeSnap:i,__beforeLinks:e.beforeLinks}}function R_(t,e){let n=e.getActivity(t);if(!n)throw new Error(`Conversion root ${t} was not found`);if(n.type===L.PROJECT&&n.correlativeId===0)throw new Error(`Conversion root ${t} is the visual project root`)}function ac(t,e){let n=e.getActivity(t);if(!n)throw new Error(`Conversion activity ${t} is missing`);return n}function _y(t){if(t.proplannerId==null)throw new Error(`Conversion activity ${t.id} has no persisted identifier`);return t.proplannerId}function Ey(t){if(!Number.isFinite(t.startDate.getTime()))throw new Error(`Conversion activity ${t.id} has invalid startDate`);if(!Number.isFinite(t.endDate.getTime()))throw new Error(`Conversion activity ${t.id} has invalid endDate`)}function k_(t,e){let n=e.fork();return Ry(t,n),an({port:e,proposedPort:n,currentLinks:e.getAllLinks(),proposedLinks:n.getAllLinks()}).ok}function L_(t,e){let n=new Map;for(let i of t){let r=e.getLink(i);r&&n.set(i,{...r})}return n}function $i(t,e){let n=new Set;for(let r of t)n.add(String(r));let i=[];for(let r of e.getAllLinks()){let a=String(r.source),o=String(r.target);!n.has(a)&&!n.has(o)||Ly(r,e)&&i.push(String(r.id))}return i}function Ly(t,e){let n=String(t.source),i=String(t.target);return ky(i,n,e)||ky(n,i,e)}function Lo(t,e){return[...t].filter(([,n])=>Ly(n,e)).map(([n])=>String(n))}function ky(t,e,n){let i=String(t),r=new Set;for(;i!=null;){if(r.has(i))return!1;r.add(i);let a=n.getActivity(i);if(!a)return!1;let o=a.parentId;if(o===null||W(o))return!1;let s=o;if(s===e)return!0;i=s}return!1}function Oo(t,e){let n=t.getAllLinks();return!an({port:t,currentLinks:n,proposedLinks:n,proposal:{reparented:e}}).ok}function bo(t,e){let n=new Set;if(t.length===0)return n;let i=new Map(t.map(a=>[a.activityId,a.newParentId]));if(!Oo(e,i))return n;let r=new Map;for(let a of t){let o=new Map(r);if(o.set(a.activityId,a.newParentId),Oo(e,o)){n.add(a.activityId);continue}r.set(a.activityId,a.newParentId)}return n}async function Oy(t,e,n){let{adapter:i,scheduler:r,sector:a}=n;r.invalidateAllCaches();let o=i.getActivity(t.activityId);if(!o)return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};let s=W(t.parentId);if(!s&&!i.getActivity(t.parentId))return{ok:!1,reason:v.PARENT_NOT_FOUND};if(!s&&(t.parentId===t.activityId||i.isChildOf(t.parentId,t.activityId)))return{ok:!1,reason:v.CANNOT_MOVE_INTO_OWN_DESCENDANT};if(t.afterSiblingId!==void 0&&t.beforeSiblingId!==void 0)return{ok:!1,reason:v.ANCHOR_SIBLING_CONFLICT};let l=t.afterSiblingId??t.beforeSiblingId;if(l!==void 0){let I=i.getActivity(l);if(!I)return{ok:!1,reason:v.ANCHOR_SIBLING_NOT_FOUND};if((I.parentId===null?"0":String(I.parentId))!==t.parentId)return{ok:!1,reason:v.ANCHOR_SIBLING_WRONG_PARENT}}let c=o.parentId,d=re(c),u=String(t.parentId),p=d!==u;if(p){let I=new Map([[t.activityId,s?null:t.parentId]]);if(Oo(i,I))return{ok:!1,reason:v.HIERARCHY_CYCLE}}let f=new Set([t.activityId]);p?(d!=="0"&&f.add(d),u!=="0"&&f.add(u)):d!=="0"&&f.add(d);let y=await st(i,f),h=new Map;p&&i.setActivityField(t.activityId,B.PARENT,u);let m=Yi(i,t.parentId,t.afterSiblingId,t.beforeSiblingId);if(i.setActivityField(t.activityId,B.CORRELATIVE_ID,m),p){if(!s){let I=i.getActivity(t.parentId);if(I){let R=nn(I.type)&&i.getChildren(t.parentId).filter(O=>O!==t.activityId).length===0,k=Cn({parentId:t.parentId,newChildId:t.activityId,isCurrentlyLeaf:R,promotionSource:Gi.REPARENT},n);if(k.applied)for(let[O,F]of k.removedLinks)h.set(O,F)}}if(d!=="0"){let I=i.getActivity(d);if(I){let R=i.getChildren(d),k=vn({parent:I,remainingChildIds:R.map(String),defaultDurationHours:a.hoursPerDay,promotionSnapshot:i.getPromotionSnapshot(d),computeEndDate:(O,F)=>i.calculateEndDate({startDate:O,durationHours:F,task:I}),idsRemoved:new Set([t.activityId]),dataDateCapability:n.dataDateCapability,hasCompleteSchedulingState:n.hasCompleteSchedulingState});if(k){i.setActivityFields(d,k.fields);let O=Le(d,i),F=O?i.getActivity(O)?.customId:null,U=typeof F=="string"&&F?F:null,$=n.customIdTracker.generateCustomIdForRestoredChild(U);i.setActivityField(d,B.CUSTOM_ID,$)}}}}p&&(d!=="0"&&jt(d,i),s||jt(t.parentId,i));let g=Nt(i);for(let I of g){if(f.add(I.activityId),y.has(I.activityId))continue;let R=i.getActivity(I.activityId);if(!R)continue;let k=et(R);I.before!==void 0&&(k.correlativeId=I.before),y.set(I.activityId,k)}let C=p&&d!=="0"?i.getChildren(d).map(String):[],{scheduledIds:b}=await it({adapter:i,scheduler:r,sector:n.sector,defaultBaseCalendarId:n.defaultBaseCalendarId,runAutomaticP6Schedule:n.runAutomaticP6Schedule},{action:t,autoscheduleFrom:t.activityId,recomputeParentsFrom:[t.activityId,t.parentId,...C],now:n.now,options:e,recomputeParentProgress:p}),E=p?$i([t.activityId],i):[],P=Lo(h,i),N={name:fe.ACTIVITY_MOVE,properties:{activity_id:t.activityId,new_parent_id:t.parentId,after_sibling_id:t.afterSiblingId??null,before_sibling_id:t.beforeSiblingId??null,invalid_link_ids:[...new Set([...P,...E.map(String)])]}};return t.eventSource!==void 0&&(N.properties.event_source=t.eventSource),{ok:!0,changes:await J(i,{source:t,beforeSnap:y,touchedIds:f,scheduledIds:b,sirDetection:Yt.BEFORE_DIFF,links:Se(h),trackingEvents:[N],hoursPerDay:a.hoursPerDay}),...h.size>0?{__beforeLinks:h}:{}}}function No(t,e){let n=new Set(t),i=[],r=[],a=new Set,o=new Set(n),s=[...t].sort((d,u)=>{let p=e.getActivity(d),f=e.getActivity(u),y=p?wt(p):ni,h=f?wt(f):ni;return y-h});for(let d of s){if(!e.getActivity(d)){i.push({activityId:d,reason:v.ACTIVITY_NOT_FOUND}),o.delete(d);continue}if(Sn(d,a,e))continue;let p=$d(d,o,e);if(p==null){i.push({activityId:d,reason:v.INDENT_NO_ELIGIBLE_SIBLING}),o.delete(d);continue}let f=e.getActivity(d)?.parentId,y=W(f)?"0":String(f);r.push({activityId:d,newParentId:p,oldParentId:y}),a.add(d)}let l=bo(r,e);for(let d of l)i.push({activityId:d,reason:v.HIERARCHY_CYCLE});let c=r.filter(d=>!l.has(d.activityId));return{moves:r,cyclicMoveIds:l,allowedMoves:c,failed:i}}async function by(t,e,n){let{adapter:i,scheduler:r,sector:a}=n;if(r.invalidateAllCaches(),t.activityIds.length===0)return{ok:!1,reason:v.ACTIVITY_IDS_EMPTY};let o=new Set,s=[],l=No(t.activityIds,i),c=[...l.failed];for(let P of l.moves)o.add(String(P.activityId)),o.add(String(P.newParentId)),P.oldParentId!=="0"&&o.add(String(P.oldParentId));let d=l.allowedMoves,u=await st(i,o);for(let{activityId:P,newParentId:N}of d)i.setActivityField(P,B.PARENT,N),i.setActivityField(P,B.CORRELATIVE_ID,ay),s.push(P);let p=new Set,f=new Map;for(let{activityId:P,newParentId:N}of d){if(p.has(N))continue;p.add(N);let I=i.getActivity(N);if(!I)continue;let R=I.customId,k=nn(I.type)&&i.getChildren(N).filter(U=>!s.includes(U)).length===0,O=I.hasNewActivities&&I.newActivityIds.some(U=>String(U)===String(P)),F=Cn({parentId:N,newChildId:P,isCurrentlyLeaf:k,promotionSource:Gi.REPARENT},n);if(F.applied){for(let[U,$]of F.removedLinks)f.set(U,$);O||(i.setActivityField(N,B.HAS_NEW_ACTIVITIES,!1),i.setActivityField(N,B.NEW_ACTIVITIES_ARRAY,[]))}i.setActivityField(N,B.CONSTRAINT_TYPE,_.ASAP),i.setActivityField(N,B.CONSTRAINT_DATE,null),i.setActivityField(N,B.CUSTOM_ID,null),F.applied||Ff(R,n.customIdTracker)}let y=new Set;for(let P of d)P.oldParentId!=="0"&&y.add(P.oldParentId),y.add(P.newParentId);for(let P of y)jt(P,i);let h=Nt(i);for(let P of h){if(o.add(P.activityId),u.has(P.activityId))continue;let N=i.getActivity(P.activityId);if(!N)continue;let I=et(N);P.before!==void 0&&(I.correlativeId=P.before),u.set(P.activityId,I)}let m=Lo(f,i),g=$i(s,i);for(let P of g){let N=i.getLink(P);N&&(f.set(P,{...N}),i.removeLink(P))}let{scheduledIds:C}=await it({adapter:i,scheduler:r,sector:n.sector,defaultBaseCalendarId:n.defaultBaseCalendarId,runAutomaticP6Schedule:n.runAutomaticP6Schedule},{action:t,autoscheduleFrom:null,recomputeParentsFrom:s,now:n.now,options:e}),b={name:fe.ACTIVITY_INDENT,properties:{activity_ids:s,failed:c.map(P=>({activity_id:P.activityId,reason:P.reason})),invalid_link_ids:[...new Set([...m,...g.map(String)])]}};t.eventSource!==void 0&&(b.properties.event_source=t.eventSource);let E=await J(i,{source:t,beforeSnap:u,touchedIds:o,scheduledIds:C,links:Se(f),trackingEvents:[b],hoursPerDay:a.hoursPerDay});return{ok:!0,activityVerdicts:t.activityIds.map(P=>{let N=c.find(I=>String(I.activityId)===String(P));return N?{activityId:String(P),ok:!1,reason:N.reason}:{activityId:String(P),ok:!0}}),changes:E,__beforeLinks:f}}async function Ny(t,e,n){let{adapter:i,scheduler:r,sector:a}=n;if(r.invalidateAllCaches(),t.activityIds.length===0)return{ok:!1,reason:v.ACTIVITY_IDS_EMPTY};let o=new Set(t.activityIds),s=new Map,l=new Map;for(let I of t.activityIds){let R=I;i.getActivity(R)&&(s.set(R,Ws(R,i)),l.set(R,oy(R,o,i)))}let c=new Set,d=[],u=[],p=new Set,f=[],y=new Set,h=[...t.activityIds].sort((I,R)=>{let k=i.getActivity(I),O=i.getActivity(R),F=k?wt(k):ni,U=O?wt(O):ni;return F-U});for(let I of h){let R=I,k=i.getActivity(R);if(!k){d.push({activityId:R,reason:v.ACTIVITY_NOT_FOUND});continue}if(Sn(R,y,i))continue;let O=k.parentId;if(W(O)){d.push({activityId:R,reason:v.OUTDENT_ROOT_LEVEL_NOT_EDITABLE});continue}let F=String(O),U=i.getActivity(F);if(!U){d.push({activityId:R,reason:v.ACTIVITY_NOT_FOUND});continue}let $=U.parentId;if(W($)){d.push({activityId:R,reason:v.OUTDENT_ROOT_LEVEL_NOT_EDITABLE});continue}let ut=String($),q=Ws(F,i)+1,At=l.get(R);if(At!=null&&o.has(At)){let Pt=s.get(At)??-1,ne=s.get(R)??-1;Pt>=0&&ne>=0&&(q+=ne-Pt)}f.push({activityId:R,grandparentKey:ut,oldParentKey:F,targetIndexInGrandparent:q}),y.add(R),c.add(String(R)),c.add(String(F)),ut!=="0"&&c.add(String(ut)),p.add(F)}let m=bo(f.map(I=>({activityId:I.activityId,newParentId:I.grandparentKey})),i);for(let I of m)d.push({activityId:I,reason:v.HIERARCHY_CYCLE});let g=f.filter(I=>!m.has(I.activityId)),C=await st(i,c);for(let I of g){i.setActivityField(I.activityId,B.PARENT,I.grandparentKey);let R=sy(i,I.grandparentKey,I.targetIndexInGrandparent,I.activityId);i.setActivityField(I.activityId,B.CORRELATIVE_ID,R),u.push(I.activityId)}for(let I of p){let R=i.getActivity(I);if(!R)continue;let k=i.getChildren(I),O=vn({parent:R,remainingChildIds:k.map(String),defaultDurationHours:a.hoursPerDay,promotionSnapshot:i.getPromotionSnapshot(I),computeEndDate:(q,At)=>i.calculateEndDate({startDate:q,durationHours:At,task:R}),idsRemoved:new Set(g.filter(q=>q.oldParentKey===I).map(q=>q.activityId)),dataDateCapability:n.dataDateCapability,hasCompleteSchedulingState:n.hasCompleteSchedulingState});if(!O){Ya(I,i);continue}i.setActivityFields(I,O.fields);let F=Le(I,i),U=F?i.getActivity(F)?.customId:null,$=typeof U=="string"&&U?U:null,ut=n.customIdTracker.generateCustomIdForRestoredChild($);i.setActivityField(I,B.CUSTOM_ID,ut)}let b=new Set;for(let I of p)b.add(String(I));for(let I of g)I.grandparentKey!=="0"&&b.add(String(I.grandparentKey));for(let I of b)jt(I,i);let E=Nt(i);for(let I of E){if(c.add(I.activityId),C.has(I.activityId))continue;let R=i.getActivity(I.activityId);if(!R)continue;let k=et(R);I.before!==void 0&&(k.correlativeId=I.before),C.set(I.activityId,k)}let{scheduledIds:P}=await it({adapter:i,scheduler:r,sector:n.sector,defaultBaseCalendarId:n.defaultBaseCalendarId,runAutomaticP6Schedule:n.runAutomaticP6Schedule},{action:t,autoscheduleFrom:u.length>0?Dt.ROOTS:null,recomputeParentsFrom:u,now:n.now,options:e}),N={name:fe.ACTIVITY_OUTDENT,properties:{activity_ids:u.map(String),failed:d.map(I=>({activity_id:String(I.activityId),reason:I.reason}))}};return t.eventSource!==void 0&&(N.properties.event_source=t.eventSource),{ok:!0,activityVerdicts:t.activityIds.map(I=>{let R=d.find(k=>String(k.activityId)===String(I));return R?{activityId:String(I),ok:!1,reason:R.reason}:{activityId:String(I),ok:!0}}),changes:await J(i,{source:t,beforeSnap:C,touchedIds:c,scheduledIds:P,trackingEvents:[N],hoursPerDay:a.hoursPerDay})}}async function Fy(t,e,n){let{adapter:i,scheduler:r,sector:a}=n,o=i.getActivity(t.activityId);if(!o)return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};if(!fr(t.type))return{ok:!1,reason:v.INVALID_VALUE};let s=i.getChildren(t.activityId),l=t.type===L.PROJECT;if(l!==s.length>0)return{ok:!1,reason:v.INVALID_VALUE};let c=new Set(i.getAllIds()),d=await st(i,c);r.invalidateAllCaches();let u=l&&o.type!==L.PROJECT?Cn({parentId:t.activityId,newChildId:s[0],isCurrentlyLeaf:!0},n).removedLinks:new Map;!l&&o.type===L.PROJECT&&O_(t.activityId,n),t.type!==L.PROJECT?(b_(t.activityId,t.type,n),N_(t.activityId,n)):jt(t.activityId,i);let p=F_(t.activityId,n);for(let[y,h]of u)p.set(y,h);let{scheduledIds:f}=await it({adapter:i,scheduler:r,sector:a,defaultBaseCalendarId:n.defaultBaseCalendarId,runAutomaticP6Schedule:n.runAutomaticP6Schedule},{action:t,autoscheduleFrom:t.activityId,recomputeParentsFrom:[t.activityId],recomputeParentProgress:!0,now:n.now,options:e});return{ok:!0,changes:await J(i,{source:t,beforeSnap:d,touchedIds:c,scheduledIds:f,sirDetection:Yt.BEFORE_DIFF,links:Se(p),hoursPerDay:a.hoursPerDay}),__beforeLinks:new Map(p)}}function O_(t,e){let n=e.adapter.getActivity(t);if(!n)return;let i=vn({parent:n,remainingChildIds:[],defaultDurationHours:e.sector.hoursPerDay,promotionSnapshot:e.adapter.getPromotionSnapshot(t),computeEndDate:(r,a)=>e.adapter.calculateEndDate({startDate:r,durationHours:a,task:n}),dataDateCapability:e.dataDateCapability,hasCompleteSchedulingState:e.hasCompleteSchedulingState});i&&e.adapter.setActivityFields(t,i.fields)}function b_(t,e,n){let i=n.adapter.getActivity(t);if(!i)return;n.adapter.setActivityField(t,B.TYPE,e);let r=e===L.MILESTONE?0:i.durationHours===0?n.sector.hoursPerDay:i.durationHours;r!==i.durationHours&&n.adapter.setActivityField(t,B.DURATION_HOURS,r);let a=n.adapter.getActivity(t);if(!a)return;let o=n.adapter.calculateEndDate({startDate:a.startDate,durationHours:r,task:a});n.adapter.setActivityField(t,B.END_DATE,o)}function N_(t,e){if(e.adapter.getActivity(t)?.customId)return;let i=Le(t,e.adapter),r=i?e.adapter.getActivity(i)?.customId:null,a=e.customIdTracker.generateCustomIdForRestoredChild(r||null);e.adapter.setActivityField(t,B.CUSTOM_ID,a)}function F_(t,e){let n=new Map;for(let i of $i([t],e.adapter)){let r=e.adapter.getLink(i);r&&(n.set(String(i),{...r}),e.adapter.removeLink(i))}return n}async function wy(t,e,n){let{adapter:i,ctx:r,scheduler:a,sector:o}=n;if(t.newValue!==0&&t.newValue!==100)return{ok:!1,reason:v.INVALID_PROGRESS_VALUE};let s=r.activityReader.getActivity(t.activityId);if(!s)return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};let l=Qt(T.PROGRESS);if(!l)throw new Error("[ScheduleCore] progressPipeline not registered \u2014 cannot dispatch activity-set-progress");let c=l.canEdit(s,r.hierarchy);if(!c.allowed&&!M_(t,c))return{ok:!1,reason:c.reason,...c.alertKey?{alertKey:c.alertKey}:{}};let d=l.transform(s,t.newValue,r,t.newValue),u=Vf(s,t.newValue,c.allowed?d:null,n,e.confirmations);if(u!==null&&!u.accepted)return U_(u);let p=u===null?d:u.changes,f=u===null||c.allowed,y=hn(t.activityId,p),h=await st(i,y);mn(i,t.activityId,p),f&&Ou(t.activityId,t.newValue,i),ln(t.activityId,p.postProcessors??[],i);let m=w_(t.activityId,p,n),{scheduledIds:g}=await it({adapter:i,scheduler:a,sector:n.sector,defaultBaseCalendarId:n.defaultBaseCalendarId,runAutomaticP6Schedule:n.runAutomaticP6Schedule},{action:t,autoscheduleFrom:m,recomputeParentsFrom:[],collectDirty:C=>oo(t.activityId,y,C),now:n.now,options:e});return{ok:!0,changes:await J(i,{source:t,beforeSnap:h,touchedIds:y,scheduledIds:g,trackingEvents:x_(p),hoursPerDay:o.hoursPerDay})}}function w_(t,e,n){return e.needsAutoSchedule?n.ctx.hierarchy.hasChildren(t)?Dt.ROOTS:t:null}function x_(t){return(t.trackingEvents??[]).map(e=>({name:e.name,properties:e.properties??{}}))}function M_(t,e){return t.origin===eo.ACTION_BUTTON&&(e.reason===Ae.HAS_LOOKAHEAD_TASKS||e.reason===Ae.SUMMARY)}function U_(t){return{ok:!1,reason:t.reason,...t.alertKey?{alertKey:t.alertKey}:{},...t.confirmation?{confirmation:t.confirmation}:{}}}function H_(t){return t===T.START_DATE||t===T.END_DATE}async function xy(t,e,n){let i=B_(t,n);if(i!==null)return{ok:!1,reason:i};let{adapter:r,scheduler:a,sector:o}=n,s=[],l=new Map,c=new Set,d=[],u=[],p=[],f=!1;for(let h of t.edits){let m=j_(h,n,e);if(s.push(m.verdict),!m.verdict.ok||!m.changes)continue;let g=hn(h.activityId,m.changes);W_(l,g,n);for(let P of g)c.add(P);let C=Bi(r,h.activityId),b=ro(r,String(h.activityId));mn(r,h.activityId,m.changes),ln(h.activityId,m.changes.postProcessors??[],r,b),u.push(...ji(C,r,h.activityId)),f||=!!m.changes.needsAutoSchedule;for(let P of m.changes.trackingEvents??[])d.push({name:P.name,properties:P.properties??{}});let E=$n(h.activityId,m.changes.constraintWarning);E&&p.push(E)}let{scheduledIds:y}=await it({adapter:r,scheduler:a,sector:n.sector,defaultBaseCalendarId:n.defaultBaseCalendarId,runAutomaticP6Schedule:n.runAutomaticP6Schedule},{action:t,autoscheduleFrom:f?Dt.ROOTS:null,recomputeParentsFrom:c,now:n.now,options:e});return{ok:!0,verdicts:s,changes:await J(r,{source:t,beforeSnap:l,touchedIds:c,scheduledIds:y,sirDetection:Yt.BEFORE_DIFF,links:u,trackingEvents:d,warnings:p,hoursPerDay:o.hoursPerDay})}}function B_(t,e){return t.edits.some(r=>!H_(r.column))?v.INVALID_VALUE:t.edits.some(r=>e.ctx.activityReader.getActivity(r.activityId)===null)?v.ACTIVITY_NOT_FOUND:null}function j_(t,e,n){let{ctx:i}=e,r=t.activityId,a=Qt(t.column);if(!a)throw new Error(`[ScheduleCore] no pipeline registered for column "${t.column}"`);let o=i.activityReader.getActivity(t.activityId);if(!o)throw new Error(`[ScheduleCore] activity "${t.activityId}" not found`);let s=Ki(a,o,e,t.column);if(!s.allowed)return{verdict:{activityId:r,ok:!1,reason:s.reason??v.CANNOT_EDIT,...s.alertKey?{alertKey:s.alertKey}:{}},changes:null};let l=a.parseInput(t.newValue,o,i);if(!l.ok)return{verdict:{activityId:r,ok:!1,reason:l.reason??v.PARSE_ERROR},changes:null};let c=Reflect.get(o,a.targetField),d=a.validate(o,c,l.value,i);if(!d.valid)return{verdict:{activityId:r,ok:!1,reason:d.reason??v.INVALID,...d.notification?.messageKey?{alertKey:d.notification.messageKey}:{}},changes:null};let u=a.transform(o,l.value,i,l.raw),p=ei(o,u,e,t.column,n.confirmations);return p.accepted?{verdict:{activityId:r,ok:!0},changes:p.changes}:{verdict:{activityId:r,ok:!1,reason:p.reason,...p.alertKey?{alertKey:p.alertKey}:{},...p.confirmation?{confirmation:p.confirmation}:{}},changes:null}}function W_(t,e,n){let i=new Set;for(let r of e)t.has(r)||i.add(r);if(i.size!==0)for(let r of i){let a=n.adapter.getActivity(r);a&&t.set(r,et(a))}}var sc=T.CUSTOM_ID,V_="sir-apply";async function Fo(t,e,n){let{adapter:i,scheduler:r,sector:a}=n;t.edits.some(k=>k.column===T.DURATION)&&r.invalidateExpandedLinksCache();let s=[],l=new Map,c=new Map,d=new Set,u=new Set,p=[],f=[],y=[],h=new Set,m=new Map,g=new Map,C=!1,b=Wf(t.edits,n);for(let k of jf(t)){let O=k[0],F=b.get(String(O.activityId));if(F!==void 0&&(O.column===T.START_DATE||O.column===T.END_DATE)){s.push({activityId:O.activityId,ok:!1,reason:F.reason,...F.alertKey?{alertKey:F.alertKey}:{}});continue}let $=J_(k,n,t.eventSource,e);for(let yt of k)s.push($.verdict);if(!$.verdict.ok||!$.changes)continue;let ut=$n(O.activityId,$.changes.constraintWarning);ut&&y.push(ut);let q=hn(O.activityId,$.changes);tE(l,q,n);for(let yt of q)u.add(yt);Q_(c,O,l),Ao(O.column)&&d.add(String(O.activityId)),G_(m,O);let At=Bi(i,O.activityId),Pt=ro(i,String(O.activityId)),ne=X_(O,n),Gt=$.changes;mn(i,O.activityId,Gt),ln(O.activityId,$.changes.postProcessors??[],i,Pt),K_(h,y,O),Y_(g,O,i.getActivity(O.activityId)),Z_(O,ne,n),f.push(...ji(At,i,O.activityId)),C||=!!$.changes.needsAutoSchedule;for(let yt of $.changes.trackingEvents??[])p.push({name:yt.name,properties:yt.properties??{}})}let E=t.eventSource===V_?s.find(k=>!k.ok&&k.reason!==Vn.UNCHANGED):void 0;if(E&&!E.ok)return{ok:!1,reason:E.reason??v.INVALID,...E.alertKey?{alertKey:E.alertKey}:{}};let P={action:t,autoscheduleFrom:C?Dt.ROOTS:null,recomputeParentsFrom:u,now:n.now,options:e},N=$_(m,g,l,y,h,n),I=c.size>0,{scheduledIds:R}=await(I?So({adapter:i,scheduler:r,sector:a,defaultBaseCalendarId:n.defaultBaseCalendarId,runAutomaticP6Schedule:n.runAutomaticP6Schedule},{postMutationArgs:P,revertTargets:[...c].filter(([k])=>!d.has(k)).map(([k,O])=>({activityId:k,priorConstraintDate:O})),revert:(k,O)=>Io(k,O,i,n.ctx.calendars)}):it({adapter:i,scheduler:r,sector:a,defaultBaseCalendarId:n.defaultBaseCalendarId,runAutomaticP6Schedule:n.runAutomaticP6Schedule},P));return{ok:!0,verdicts:s,changes:await J(i,{source:t,beforeSnap:l,touchedIds:u,scheduledIds:R,sirDetection:Yt.BEFORE_DIFF,links:f,trackingEvents:p,warnings:N,hoursPerDay:a.hoursPerDay})}}function K_(t,e,n){if(!Ui(n.column))return;let i=String(n.activityId);for(let r of e)String(r.activityId)===i&&t.add(r)}function Y_(t,e,n){!Ui(e.column)||!n||t.set(String(e.activityId),{constraintType:n.constraintType,constraintDate:n.constraintDate?new Date(n.constraintDate.getTime()):null})}function G_(t,e){if(e.column!==T.START_DATE&&e.column!==T.END_DATE)return;let n=String(e.activityId),i=t.get(n)??new Set;i.add(e.column),t.set(n,i)}function $_(t,e,n,i,r,a){let o=new Set,s=[],l=new Set;for(let[c,d]of t){if(!d.has(T.START_DATE)||!d.has(T.END_DATE))continue;let u=e.get(c);if(u){a.adapter.setActivityFields(c,u);for(let m of r)String(m.activityId)===c&&l.add(m);continue}let p=n.get(c),f=a.adapter.getActivity(c);if(!p?.constraintType||!p.constraintDate||!f)continue;let y=bn(p.constraintType,f.startDate,f.endDate),h=q_(p.constraintType,p.constraintDate,y);if(o.add(c),h){a.adapter.setActivityField(c,"constraintType",_.SNET),a.adapter.setActivityField(c,"constraintDate",new Date(f.startDate.getTime()));let m=$n(c,da(p.constraintType,p.constraintDate,y));m&&s.push(m);continue}a.adapter.setActivityField(c,"constraintType",p.constraintType),a.adapter.setActivityField(c,"constraintDate",p.constraintDate)}return[...i.filter(c=>!l.has(c)&&!o.has(String(c.activityId))),...s]}function q_(t,e,n){return t===_.MSO||t===_.MFO?e.getTime()!==n.getTime():ca(t,e,n).violated}function z_(t,e,n){let{ctx:i}=e,r=t.activityId,a=Qt(t.column);if(!a)return{verdict:{activityId:r,ok:!1,reason:v.NO_PIPELINE_FOR_COLUMN},changes:null};let o=i.activityReader.getActivity(t.activityId);if(!o)return{verdict:{activityId:r,ok:!1,reason:v.ACTIVITY_NOT_FOUND},changes:null};let s=Ki(a,o,e,t.column,{eventSource:n,newValue:t.newValue});if(!s.allowed)return{verdict:{activityId:r,ok:!1,reason:s.reason??v.CANNOT_EDIT,...s.alertKey?{alertKey:s.alertKey}:{}},changes:null};let l=a.parseInput(t.newValue,o,i);if(!l.ok)return{verdict:{activityId:r,ok:!1,reason:l.reason??v.PARSE_ERROR},changes:null};let c=Wi(o,a.targetField),d=a.validate(o,c,l.value,i);if(!d.valid)return{verdict:{activityId:r,ok:!1,reason:d.reason??v.INVALID,...d.notification?.messageKey?{alertKey:d.notification.messageKey}:{}},changes:null};if(t.column===sc&&l.value!==null){let p=e.adapter.getActivity(t.activityId),f=p?p.customId:null,y=typeof f=="string"?f:null;if(e.customIdTracker.isCustomIdInUse(String(l.value),y))return{verdict:{activityId:r,ok:!1,reason:v.CUSTOM_ID_DUPLICATE},changes:null}}let u=a.transform(o,l.value,i,l.raw);return{verdict:{activityId:r,ok:!0},changes:u}}function J_(t,e,n,i){let r=t[0],a=t.map(d=>z_(d,e,n)),o=a.find(d=>!d.verdict.ok);if(o)return o;let s=a[0].changes,l=Bf(s,a[1]?.changes),c=ei(e.ctx.activityReader.getActivity(r.activityId),l,e,r.column,i.confirmations);return c.accepted?{verdict:{activityId:r.activityId,ok:!0},changes:c.changes}:{verdict:{activityId:r.activityId,ok:!1,reason:c.reason,...c.alertKey?{alertKey:c.alertKey}:{},...c.confirmation?{confirmation:c.confirmation}:{}},changes:null}}function X_(t,e){if(t.column!==sc)return null;let n=e.adapter.getActivity(t.activityId),i=n?n.customId:null;return typeof i=="string"?i:null}function Z_(t,e,n){if(t.column!==sc)return;let i=n.adapter.getActivity(t.activityId),r=i?i.customId:null,a=typeof r=="string"?r:null;e!==a&&n.customIdTracker.trackCustomIdChange(e,a)}function Q_(t,e,n){if(!Ui(e.column))return;let i=String(e.activityId);if(t.has(i))return;let r=n.get(i);r&&t.set(i,r.constraintDate??null)}function tE(t,e,n){let i=new Set;for(let r of e)t.has(r)||i.add(r);if(i.size!==0)for(let r of i){let a=n.adapter.getActivity(r);a&&t.set(r,et(a))}}var Ht={INVALID_BASELINE_POINT:"invalid_baseline_point",UNKNOWN_CONSTRAINT:"unknown_constraint",PROGRESS_OUT_OF_RANGE:"progress_out_of_range",ORPHAN_ACTIVITY:"orphan_activity",INVALID_LINK:"invalid_link",DUPLICATE_LINK:"duplicate_link"},eE=[Ht.INVALID_BASELINE_POINT,Ht.UNKNOWN_CONSTRAINT,Ht.PROGRESS_OUT_OF_RANGE,Ht.ORPHAN_ACTIVITY,Ht.INVALID_LINK,Ht.DUPLICATE_LINK],qi=()=>{};function My(){let t=new Map,e=new Map;return{record:(r,a)=>{t.set(r,(t.get(r)??0)+1);let o=e.get(r)??[];o.length<10&&!o.includes(a)&&(o.push(a),e.set(r,o))},snapshot:()=>Object.freeze(eE.flatMap(r=>{let a=t.get(r);return a===void 0?[]:[Object.freeze({code:r,count:a,sampleIds:Object.freeze([...e.get(r)??[]])})]}))}}function Uy(t){return typeof t=="string"&&t.length>0?je(t):t instanceof Date?t:null}function lc(t){let e=typeof t=="number"?t:typeof t=="string"&&t.trim()!==""?Number(t):Number.NaN;return!Number.isFinite(e)||e<0?null:e}function wo(t,e,n,i=!1){let r=lc(t.duration),a=lc(t.cost),o=lc(t.hh_work);if(r===null||a===null||o===null)return n&&n.record(Ht.INVALID_BASELINE_POINT,n.sampleId),e.warn(`[baseline] dropping point with non-finite/negative magnitude \u2014 duration=${JSON.stringify(t.duration)}, cost=${JSON.stringify(t.cost)}, hh_work=${JSON.stringify(t.hh_work)}`),null;let s=Uy(t.start_date),l=Uy(t.end_date),c=i&&r===0&&s!==null&&l!==null&&l<s;return c&&e.warn("[baseline] normalizing inverted zero-duration milestone to one instant"),{startDate:s,endDate:c?s:l,durationDays:r,cost:a,workHours:o,versionId:typeof t.sectorbaselineversionId=="number"?t.sectorbaselineversionId:null,isActiveVersion:!!t.sectorbaselineversion?.active,isVisibleVersion:!!t.sectorbaselineversion?.visible,baseCalendarId:t.baseCalendarId!=null?String(t.baseCalendarId):null,hoursPerDay:typeof t.hoursPerDay=="number"?t.hoursPerDay:null,hoursPerWeek:typeof t.hoursPerWeek=="number"?t.hoursPerWeek:null}}function Hy(t,e,n,i=qi){let r=new Map;t.forEachActivity((s,l)=>{let c=s.proplannerId;typeof c=="number"&&r.set(c,l)});let a=new Map;for(let s of e){let l=s.activityId;if(typeof l!="number"){i(Ht.INVALID_BASELINE_POINT,String(l??"unknown"));continue}let c=r.get(l);if(c===void 0){i(Ht.INVALID_BASELINE_POINT,String(l));continue}let d=a.get(c);d?d.push(s):a.set(c,[s])}let o=[];for(let[s,l]of a){let c=t.getActivity(s)?.type===L.MILESTONE;t.setActivityField(s,"baselinePoints",l.map(d=>wo(d,n,{record:i,sampleId:s},c)).filter(d=>d!==null)),o.push(s)}return t.forEachActivity((s,l)=>{if(a.has(l))return;let c=s.baselinePoints;Array.isArray(c)&&c.length>0&&(t.setActivityField(l,"baselinePoints",[]),o.push(l))}),o}function nE(t){let e=Tt(t);return e?{startDate:e.startDate,endDate:e.endDate,durationDays:e.durationDays,cost:e.cost,workHours:e.workHours}:null}function By(t){let e=[];return t.forEachActivity((n,i)=>{let r=nE(n);if(!r){n.baselineSnapshot!==null&&(t.setActivityField(i,"baselineSnapshot",null),e.push(i));return}t.setActivityField(i,"baselineSnapshot",r),e.push(i)}),e}function xo(t,e,n,i,r=null,a=qi){let o=new Set;for(let s of Hy(t,e,i,a))o.add(s);if(n)for(let s of wi(t,n,r))o.add(s);for(let s of By(t))o.add(s);for(let s of xi(t))o.add(s);return[...o]}function Mo(t,e){let n=new Map;e.forEachActivity((i,r)=>{e.setActivityField(r,T.PONDERATOR,0)}),e.forEachActivity((i,r)=>{e.getChildren(r).length>0&&go(String(r),t,e,n)})}function Uo(t,e){Mo(e,t.adapter),Cr(t.adapter,e),t.now&&(wi(t.adapter,t.now,t.defaultBaseCalendarId??null),qn(t.adapter,t.now)),xi(t.adapter),t.now&&We(t.adapter,t.sector.statusCriteria)}function jy(t){return JSON.stringify(t.adapter.getAllIds().map(e=>{let n=t.adapter.getActivity(e)?.baselinePoints.find(i=>i.isActiveVersion);return n?[String(e),n.versionId,n.startDate?.getTime()??null,n.endDate?.getTime()??null,n.durationDays,n.cost,n.workHours,n.baseCalendarId,n.hoursPerDay,n.hoursPerWeek]:[String(e),null]}))}async function Wy(t,e){let n=await st(e.adapter,new Set(e.adapter.getAllIds())),i=jy(e),r=xo(e.adapter,t.points,e.now,e.reporter,e.defaultBaseCalendarId??null,void 0);return zn(e.adapter,e.sector.hoursPerDay),jy(e)!==i&&Uo(e,e.sector.activityCreter??ct.DURATION),{ok:!0,changes:await J(e.adapter,{source:t,beforeSnap:n,touchedIds:r,scheduledIds:[],hoursPerDay:e.sector.hoursPerDay})}}function iE(t){return Object.values(ct).includes(t)}async function Vy(t,e){if(!iE(t.criterion))return{ok:!1,reason:v.INVALID_VALUE};let n=new Set(e.adapter.getAllIds()),i=await st(e.adapter,n);return Uo(e,t.criterion),e.sector.activityCreter=t.criterion,{ok:!0,changes:await J(e.adapter,{source:t,beforeSnap:i,touchedIds:n,scheduledIds:[],hoursPerDay:e.sector.hoursPerDay})}}async function Ky(t,e){let n=so(t.criteria),i=new Set(e.adapter.getAllIds()),r=await st(e.adapter,i),a=We(e.adapter,n);return e.sector.statusCriteria=n,{ok:!0,changes:await J(e.adapter,{source:t,beforeSnap:r,touchedIds:a,scheduledIds:[],hoursPerDay:e.sector.hoursPerDay})}}async function Gy(t,e,n){let i=new Map,r=new Set;for(let o of n.adapter.getAllActivities()){if(!rE(o,n))continue;let s=n.ctx.calendars.getCalendar(o.calendarId);if(!s)continue;let l=s.isWorkTime(o.startDate,dt.HOUR)?aE(o.startDate):o.startDate,c=s.getClosestWorkTime({date:l,direction:z.FUTURE,unit:dt.HOUR}),d=s.calculateEndDate(c,o.durationHours);if(Yy(c,o.startDate)&&Yy(d,o.endDate))continue;let u=String(o.id);i.set(u,et(o)),r.add(u),n.adapter.setActivityFields(u,{startDate:c,endDate:d})}let{scheduledIds:a}=await it({adapter:n.adapter,scheduler:n.scheduler,sector:n.sector,defaultBaseCalendarId:n.defaultBaseCalendarId,runAutomaticP6Schedule:n.runAutomaticP6Schedule},{action:t,autoscheduleFrom:Dt.ROOTS,recomputeParentsFrom:r,now:n.now,options:e});return{ok:!0,changes:await J(n.adapter,{source:t,beforeSnap:i,touchedIds:r,scheduledIds:a,hoursPerDay:n.sector.hoursPerDay})}}function rE(t,e){return!he(t.type,e.adapter.hasChildren(t.id))}function Yy(t,e){return t.getTime()===e.getTime()}function aE(t){return new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()))}var $y=["name","description","type","startDate","durationHours","constraintType","constraintDate","calendarId","cost","hasCustomPonderator","subcontractId","responsableIds","tagIds"];function Ho(t){let e={};for(let n of $y)Object.assign(e,{[n]:S(t[n])});return e}function oE(t,e){let n=[],i=r=>{e.has(String(r))&&n.push(r);for(let a of t.getChildren(r))i(a)};for(let r of t.getRootIds())i(r);return n}function zy(t,e){let n=new Set(e.adapter.checkedIds().map(String));if(n.size===0)return{ok:!1,reason:v.NO_ACTIVITY_SELECTION};let i=oE(e.adapter,n);e.clipboard.value={activities:i.map(a=>{let o=e.adapter.getActivity(a);if(o===null)throw new Error(`Selected activity ${a} is missing`);return{originalId:a,originalParentId:o.parentId??"0",overrides:Ho(o)}}),links:e.adapter.getAllLinks().filter(a=>n.has(String(a.source))&&n.has(String(a.target))).map(a=>S(a))};let r=fa({kind:A.SELECTION_REPLACE,activityIds:[]},{adapter:e.adapter});return r.ok?{...r,changes:{...r.changes,source:t}}:r}function Jy(t){return{ok:!0,changes:{source:t,activities:[],links:[],calendars:[],trackingEvents:[]}}}function Xy(t,e){return e.value=null,Jy(t)}function qy(t,e){if(t===void 0||e===void 0)return t;let n=new Set(e);return t.filter(i=>n.has(i))}function sE(t,e,n){let i=S(t);i.calendarId!=null&&!e.calendars.has(i.calendarId)&&delete i.calendarId,n?.subcontractIds!==void 0&&i.subcontractId!=null&&!n.subcontractIds.includes(i.subcontractId)&&(i.subcontractId=null);let o=qy(i.responsableIds,n?.responsableIds);o!==void 0&&(i.responsableIds=[...o]);let s=qy(i.tagIds,n?.tagIds);return s!==void 0&&(i.tagIds=[...s]),i}function lE(t){let e=new Set(t.activities.map(n=>String(n.originalId)));return t.links.some(n=>!e.has(String(n.source))||!e.has(String(n.target)))}function Zy(t,e){let{snapshot:n,references:i}=t;return n.activities.length===0?{ok:!1,reason:v.CLIPBOARD_EMPTY}:lE(n)?{ok:!1,reason:v.CLIPBOARD_SNAPSHOT_INVALID}:(e.clipboard.value={activities:n.activities.map(r=>({originalId:r.originalId,originalParentId:r.originalParentId,overrides:sE(r.overrides,e,i)})),links:n.links.map(r=>S(r))},Jy(t))}function cE(t,e){let n=e.getActivity(t);return n?n.parentId==null?e.getRootIds().length===1?{ok:!0,parentId:n.id,beforeSiblingId:e.getChildren(n.id)[0]}:{ok:!0,parentId:"0",afterSiblingId:t}:e.hasChildren(n.id)?{ok:!0,parentId:n.id,beforeSiblingId:e.getChildren(n.id)[0]}:{ok:!0,parentId:String(n.parentId),afterSiblingId:t}:{ok:!1,reason:v.ANCHOR_SIBLING_NOT_FOUND}}var Qy=()=>({ok:!1,reason:v.ACTIVITY_PASTE_INVARIANT_FAILED});async function th(t,e,n){let i=n.activityClipboard.value;if(i===null)return{ok:!1,reason:v.CLIPBOARD_EMPTY};let r=cE(t.destination.afterSiblingId,n.adapter);if(!r.ok)return r;let a=await st(n.adapter,new Set),o=new Set,s=new Map,l=[],c;for(let h of i.activities){let m=s.get(h.originalParentId),g=m===void 0?c??r.afterSiblingId:void 0,C=m===void 0&&g===void 0?r.beforeSiblingId:void 0,b=await Dn({kind:A.ACTIVITY_CREATE,parentId:m??r.parentId,...g===void 0?{}:{afterSiblingId:g},...C===void 0?{}:{beforeSiblingId:C},overrides:S(h.overrides),eventSource:t.eventSource},n,{skipCorrelativeRecompute:!0,skipBeforeSnap:!0,customIdReferenceId:t.destination.afterSiblingId});if(!b.ok)return b;s.set(h.originalId,b.newId),l.push(b.newId),m===void 0&&(c=b.newId)}let d=Nt(n.adapter),u=new Set(l.map(String));gn(n.adapter,d,u,a,o);for(let h of l)o.add(String(h));let p=[];for(let h of i.links){let m=s.get(h.source),g=s.get(h.target);if(m===void 0||g===void 0)return Qy();let C={kind:vt.CREATE,source:m,target:g,type:h.type,lag:h.lag},b=Re(C,{port:n.adapter,newLinkId:n.linkIdGen.next});if(!b.applied)return Qy();p.push({op:C,finalLinkId:b.linkId,rejected:null})}let{scheduledIds:f}=await it({adapter:n.adapter,scheduler:n.scheduler,sector:n.sector,defaultBaseCalendarId:n.defaultBaseCalendarId,runAutomaticP6Schedule:n.runAutomaticP6Schedule},{action:t,autoscheduleFrom:l[0]??null,recomputeParentsFrom:l,now:n.now,options:e}),y=In(p,new Map,n.adapter);return{ok:!0,changes:await J(n.adapter,{source:t,beforeSnap:a,touchedIds:o,scheduledIds:f,links:y,hoursPerDay:n.sector.hoursPerDay})}}var dE=200,eh={skipCorrelativeRecompute:!0,skipBeforeSnap:!0,skipCacheInvalidation:!0,skipRollupCascades:!0};async function nh(t,e,n){let i=uE(t.activityIds,n.adapter);if(!i.ok)return i;if(pE(i.runs,n.adapter))return{ok:!1,reason:v.PARENT_FROZEN_BY_SIR};n.scheduler.invalidateAllCaches();let a=await st(n.adapter,new Set),o={originalToNew:new Map,createdIds:[],createdParentIds:[]};for(let p of i.runs){let f=p.originals.at(-1);if(!f)continue;let y=f.id;for(let h of p.originals)y=await mE(h,p.parentId,y,t,n,o)}AE(o,n);let s=Nt(n.adapter),l=new Set(o.createdIds.map(String)),c=new Set;hE(n.adapter,s,l,a),gn(n.adapter,s,l,a,c);for(let p of o.createdIds)c.add(String(p));let d=IE(o,n),{scheduledIds:u}=await it({adapter:n.adapter,scheduler:n.scheduler,sector:n.sector,defaultBaseCalendarId:n.defaultBaseCalendarId,runAutomaticP6Schedule:n.runAutomaticP6Schedule},{action:t,autoscheduleFrom:o.createdIds.length>0?Dt.ROOTS:null,recomputeParentsFrom:o.createdIds,preventSummaryTargetPullback:!0,now:n.now,options:e});return{ok:!0,changes:await J(n.adapter,{source:t,beforeSnap:a,touchedIds:c,scheduledIds:u,links:In(d,new Map,n.adapter),hoursPerDay:n.sector.hoursPerDay})}}function uE(t,e){if(t.length===0)return{ok:!1,reason:v.ACTIVITY_IDS_EMPTY};let n=new Set,i=[];for(let o of t){let s=String(o);if(n.has(s))continue;let l=e.getActivity(s);if(!l)return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};n.add(s),i.push(l)}let r=i.filter(o=>!Sn(o.id,n,e));return e.getRootIds().length===1&&r.some(o=>o.parentId==null)?{ok:!1,reason:v.SOLE_SCHEDULE_ROOT}:{ok:!0,runs:fE(r,e)}}function pE(t,e){let n=new Set;for(let i of t){if(i.parentId==="0"||n.has(String(i.parentId)))continue;n.add(String(i.parentId));let r=e.getActivity(i.parentId);if(r&&Ze(r))return r}return null}function fE(t,e){let n=new Map;for(let r of t){let a=re(r.parentId),o=n.get(a)??[];o.push(r),n.set(a,o)}let i=[];for(let[r,a]of n){let o=r==="0"?"0":r,s=new Map(ih(e,r).map((d,u)=>[String(d.id),u])),l=d=>s.get(String(d.id))??-1,c=[...a].sort((d,u)=>l(d)-l(u));for(let d of yE(c,l))i.push({parentId:o,originals:d})}return i}function yE(t,e){let n=[],i=null;for(let r of t){let a=e(r),o=n.at(-1);o&&i!==null&&a===i+1?o.push(r):n.push([r]),i=a}return n}function hE(t,e,n,i){let r=t.peekWriteCapture();if(r)for(let a of e){if(n.has(a.activityId)||i.has(a.activityId))continue;let o=r.before.get(a.activityId);o&&i.set(a.activityId,o)}}function ih(t,e){return Br(t,e).sort((n,i)=>wt(n)-wt(i)||String(n.id).localeCompare(String(i.id)))}async function mE(t,e,n,i,r,a){let o=await Dn({kind:A.ACTIVITY_CREATE,parentId:e,afterSiblingId:n,overrides:Ho(t),...i.eventSource===void 0?{}:{eventSource:i.eventSource}},r,{...eh,customIdReferenceId:t.id});if(!o.ok)throw cc("create",o.reason);return rh(a,t,o.newId,e),await gE(t,o.newId,i,r,a),o.newId}async function gE(t,e,n,i,r){let a=new $t;a.enqueue({original:t,newParentId:e});let o=0;for(;!a.isEmpty();){let{original:s,newParentId:l}=a.dequeue();for(let c of ih(i.adapter,String(s.id))){let d=await Dn({kind:A.ACTIVITY_CREATE,parentId:l,overrides:Ho(c),...n.eventSource===void 0?{}:{eventSource:n.eventSource}},i,eh);if(!d.ok)throw cc("create",d.reason);rh(r,c,d.newId,l),a.enqueue({original:c,newParentId:d.newId}),o+=1,o%dE===0&&await St()}}}function cc(t,e){return new Error(`[ScheduleCore] activity-duplicate: unexpected ${t} rejection after preflight passed (${e})`)}function rh(t,e,n,i){t.originalToNew.set(String(e.id),n),t.createdIds.push(n),t.createdParentIds.push(i)}function AE(t,e){let n=new Set;for(let i of[...t.createdParentIds].reverse())i==="0"||n.has(String(i))||(n.add(String(i)),jt(i,e.adapter))}function IE(t,e){let n=[];for(let i of t.originalToNew.keys())for(let r of e.adapter.getOutgoingLinkIds(i)){let a=e.adapter.getLink(r);if(!a)continue;let o=t.originalToNew.get(String(a.source)),s=t.originalToNew.get(String(a.target));if(o===void 0||s===void 0)continue;let l={kind:vt.CREATE,source:o,target:s,type:a.type,lag:a.lag},c=Re(l,{port:e.adapter,newLinkId:e.linkIdGen.next});if(!c.applied)throw cc("link",c.rejected??v.INVALID);n.push({op:l,finalLinkId:c.linkId,rejected:null})}return n}var zi={FIELD:"field",LINKS:"links"};function SE(t,e,n){return Hi(t,e,n).map(i=>({otherActivityId:n?i.source:i.target,type:i.type,lag:i.lag}))}function dc(t){return{ok:!0,changes:{source:t,activities:[],links:[],calendars:[],trackingEvents:[]}}}function ah(t,e){let n=e.adapter.getActivity(t.activityId);if(!n)return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};if(t.column===T.CUSTOM_PREDECESSORS||t.column===T.CUSTOM_SUCESSORS)return e.clipboard.value={kind:zi.LINKS,specs:SE(e.adapter,t.activityId,t.column===T.CUSTOM_PREDECESSORS)},dc(t);let i=Qt(t.column);if(!i)return{ok:!1,reason:v.NO_PIPELINE_FOR_COLUMN};let r=Wi(n,i.targetField);if(t.column===T.DURATION&&!Number.isFinite(r))return{ok:!1,reason:v.INVALID_VALUE};let a=t.column===T.DURATION?r/e.hoursPerDay:S(r);return e.clipboard.value={kind:zi.FIELD,raw:a,sourceColumn:t.column,text:t.copiedText??null},dc(t)}function oh(t,e){return e.value=null,dc(t)}var sh=new Set([T.TAGS,T.RESPONSABLES,T.SUBCONTRACT_ID,T.CONSTRAINT_TYPE,T.CALENDAR_ID]);function vE(t,e){return t===e?!1:sh.has(t)||sh.has(e)}function CE(t,e){return e===void 0||t!==null&&(t.text===null||t.text===e)?null:e}function DE(t,e,n){let i=t!==null&&t.kind===zi.FIELD?t:null,r=CE(i,n);return r!==null?{ok:!0,newValue:r}:t!==null&&t.kind!==zi.FIELD?{ok:!1,reason:v.INVALID_VALUE}:i===null?{ok:!1,reason:v.CLIPBOARD_EMPTY}:vE(i.sourceColumn,e)?{ok:!1,reason:v.CELL_PASTE_COLUMN_MISMATCH}:{ok:!0,newValue:i.raw}}function TE(t){return String(t)}function _E(t,e){let n=e;return t.activityExists(n)?n:null}function EE(t,e,n,i){let r=n.specs.map(l=>({correlativeId:TE(l.otherActivityId),type:l.type,lag:l.lag})),a=Hi(i.adapter,t,e),o=l=>_E(i.adapter,l);return(e?Di({targetActivityId:t,currentLinks:a,desiredSpecs:r,resolveActivityByCorrelative:o}):Ti({sourceActivityId:t,currentLinks:a,desiredSpecs:r,resolveActivityByCorrelative:o})).operations}async function PE(t,e,n,i){if(e===null)return{ok:!1,reason:v.CLIPBOARD_EMPTY};if(e.kind!==zi.LINKS)return{ok:!1,reason:v.INVALID_VALUE};if(t.activityIds.some(c=>e.specs.some(d=>String(d.otherActivityId)===String(c))))return{ok:!1,reason:ht.SELF_LINK};let a=t.column===T.CUSTOM_PREDECESSORS,o=t.activityIds.flatMap(c=>EE(c,a,e,i)),s=o.filter(c=>c.kind===vt.CREATE).map(c=>({operation:c,linkId:i.linkIdGen.next()})),l=vr(s,{port:i.adapter,rejectParentLinkMutations:n.rejectParentLinkMutations??!1});return l.applied?Ur(o,t,n,i):{ok:!1,reason:l.rejected??v.INVALID}}async function lh(t,e,n){let i=n.cellClipboard.value;if(t.activityIds.length===0)return{ok:!1,reason:v.ACTIVITY_IDS_EMPTY};if(t.activityIds.some(l=>!n.adapter.activityExists(l)))return{ok:!1,reason:v.ACTIVITY_NOT_FOUND};if(t.column===T.CUSTOM_PREDECESSORS||t.column===T.CUSTOM_SUCESSORS)return PE(t,i,e,n);if(!Qt(t.column))return{ok:!1,reason:v.NO_PIPELINE_FOR_COLUMN};let a=t.column,o=DE(i,a,t.clipboardText);if(!o.ok)return o;let s=await Fo({kind:A.BULK_EDIT,edits:t.activityIds.map(l=>({activityId:l,column:a,newValue:o.newValue})),...t.eventSource===void 0?{}:{eventSource:t.eventSource}},e,n);return s.ok?{...s,changes:{...s.changes,source:t}}:s}async function ch(t,e,n){return t.kind===A.ACTIVITY_COPY?zy(t,{adapter:n.adapter,clipboard:n.activityClipboard}):t.kind===A.CALENDAR_RECONCILE?Gy(t,e,n):t.kind===A.ACTIVITY_CLIPBOARD_CLEAR?Xy(t,n.activityClipboard):t.kind===A.ACTIVITY_CLIPBOARD_IMPORT?Zy(t,{clipboard:n.activityClipboard,calendars:n.calendars}):t.kind===A.ACTIVITY_PASTE_COPIED?th(t,e,n):t.kind===A.ACTIVITY_DUPLICATE?nh(t,e,n):t.kind===A.CELL_COPY?ah(t,{adapter:n.adapter,clipboard:n.cellClipboard,hoursPerDay:n.sector.hoursPerDay}):t.kind===A.CELL_CLIPBOARD_CLEAR?oh(t,n.cellClipboard):t.kind===A.CELL_PASTE_COPIED?lh(t,e,n):t.kind===Xe?yy(t,e,n):t.kind===A.PERSISTENCE_ACKNOWLEDGE?vy(t,n):t.kind===A.BASELINE_APPLY?Wy(t,n):t.kind===A.PONDERATOR_CRITERION_SET?Vy(t,n):t.kind===A.STATUS_CRITERIA_SET?Ky(t,n):t.kind===A.LINK_CREATE||t.kind===A.LINK_UPDATE||t.kind===A.LINK_DELETE?Yf(t,e,n):t.kind===A.LINKS_BATCH?Gf(t,e,n):t.kind===A.ACTIVITY_CREATE?uy(t,e,n):t.kind===A.ACTIVITY_DELETE?cy(t,e,n):t.kind===A.ACTIVITY_MOVE?Oy(t,e,n):t.kind===A.ACTIVITY_INDENT?by(t,e,n):t.kind===A.ACTIVITY_OUTDENT?Ny(t,e,n):t.kind===A.ACTIVITY_TYPE_SET?Fy(t,e,n):t.kind===A.ACTIVITY_SET_PROGRESS?wy(t,e,n):t.kind===A.DATES_BATCH?xy(t,e,n):t.kind===A.BULK_EDIT?Fo(t,e,n):t.kind===A.SELECTION_TOGGLE?Pd(t,uc(n)):t.kind===A.SELECTION_REPLACE?fa(t,uc(n)):t.kind===A.VISIBILITY_SET?Rd(t,uc(n)):t.kind===A.FILTER_SET?Vd(t,{adapter:n.adapter,hoursPerDay:n.sector.hoursPerDay}):t.kind===A.SORT_SET?zd(t,{adapter:n.adapter}):t.kind===A.VIEW_ATTRIBUTES_SET?Zd(t,{adapter:n.adapter,hoursPerDay:n.sector.hoursPerDay}):t.kind===A.GROUP_SET?Qd(t,{adapter:n.adapter,hoursPerDay:n.sector.hoursPerDay}):t.kind===A.WBS_DEPTH_SET?tu(t,{adapter:n.adapter,hoursPerDay:n.sector.hoursPerDay}):t.kind===A.SIR_SYNC?my(t,n):t.kind===A.ACTIVITY_LOOKAHEAD_SYNC?Cy(t,e,n):t.kind===A.ACTIVITY_LOOKAHEAD_CONVERT?Py(t,e,n):t.kind===A.SCHEDULE_AUTO_SCHEDULE?Of(t,e,n):t.kind===A.INLINE_EDIT&&(t.column===T.CUSTOM_PREDECESSORS||t.column===T.CUSTOM_SUCESSORS)?$f(t,e,n):t.kind!==A.INLINE_EDIT?eu(t,`[ScheduleCore] dispatch kind "${t.kind}" not supported yet`):Kf(t,e,n)}function uc(t){return{adapter:t.adapter}}var RE=new Set(["startDate","endDate","constraintDate"]);function dh(t,e){return RE.has(t)&&typeof e=="string"?new Date(e):e}var Oe={MINUTE:"minute"};function uh(t,e={}){let n=e.defaultUnit??dt.HOUR;return{getCalendar(i){let r=t.getCalendar(String(i));return r?kE(r,n):null}}}function kE(t,e){return{getClosestWorkTime(n){return t.getClosestWorkTime({date:n.date,dir:n.direction,unit:n.unit})},calculateEndDate(n,i){let r=e===dt.HOUR&&!Number.isInteger(i),a=n.getUTCSeconds()*1e3+n.getUTCMilliseconds(),o=r&&a!==0&&t.isWorkTime({date:n,unit:Oe.MINUTE}),s=o?new Date(n.getTime()-a):n,l=r?LE(t,s,i):t.calculateEndDate({start_date:s,duration:i,unit:e});if(!o)return l;let c=ph(t,l);return new Date(c.getTime()+a)},calculateDuration(n,i){return t.calculateDuration({start_date:n,end_date:i,unit:e})},isWorkTime(n,i){return t.isWorkTime({date:n,unit:i})},getWorkHours(n){return t.getWorkHours(n)}}}function LE(t,e,n){let i=Math.round(Math.abs(n)*60);if(!(i>0&&t.isWorkTime({date:e,unit:Oe.MINUTE})))return t.calculateEndDate({start_date:e,duration:n*60,unit:Oe.MINUTE});let a=e,o=i,s=n<0?-1:1;for(;o>0;){let l=s<0?new Date(a.getTime()-1):a;t.isWorkTime({date:l,unit:Oe.MINUTE})||(a=s<0?t.getClosestWorkTime({date:l,dir:z.PAST,unit:Oe.MINUTE}):ph(t,a));let c=OE(t,a,Math.min(o,60),s);a=c.end,o-=c.minutes}return a}function OE(t,e,n,i){let r=t.calculateEndDate({start_date:e,duration:i*n,unit:Oe.MINUTE});if(r.getTime()===e.getTime()+i*n*6e4)return{end:r,minutes:n};let o=0,s=n-1,l=e;for(;o<s;){let c=Math.ceil((o+s)/2),d=t.calculateEndDate({start_date:e,duration:i*c,unit:Oe.MINUTE});d.getTime()===e.getTime()+i*c*6e4?(o=c,l=d):s=c-1}if(o===0)throw new Error("Calendar cannot calculate a working-minute prefix");return{end:l,minutes:o}}function ph(t,e){if(t.isWorkTime({date:e,unit:Oe.MINUTE}))return e;let n=t.calculateEndDate({start_date:e,duration:1,unit:dt.DAY}),i=new Date(n);i.setUTCHours(0,0,0,0);let r=t.getClosestWorkTime({date:i,dir:z.FUTURE,unit:Oe.MINUTE}),a=t.getClosestWorkTime({date:e,dir:z.FUTURE,unit:Oe.MINUTE});return new Date(Math.min(a.getTime(),r.getTime()))}function bE(t){return Array.isArray?Array.isArray(t):t&&t.length!==void 0&&t.pop&&t.push}function ii(t){return t&&typeof t=="object"?!!(t.getFullYear&&t.getMonth&&t.getDate):!1}function ri(t){return ii(t)&&!isNaN(t.getTime())}var NE={}.constructor.toString();function FE(t){var e=t.constructor.toString();return e!==NE}function wE(t){return t.$$typeof&&t.$$typeof.toString().includes("react.")}function ve(t){var e,n;if(t&&typeof t=="object")switch(!0){case ii(t):n=new Date(t);break;case bE(t):for(n=new Array(t.length),e=0;e<t.length;e++)n[e]=ve(t[e]);break;default:if(FE(t))n=Object.create(t);else{if(wE(t))return n=t,n;n={}}for(e in t)Object.prototype.hasOwnProperty.apply(t,[e])&&(n[e]=ve(t[e]));break}return n||t}function Ji(t,e,n){for(var i in e)(t[i]===void 0||n)&&(t[i]=e[i]);return t}function fh(t){return typeof t<"u"}var Bo;function pc(){return Bo||(Bo=new Date().valueOf()),Bo++,Bo}function oe(t,e){return t.bind?t.bind(e):function(){return t.apply(e,arguments)}}var ME=(t,e,n)=>{t=t.replace(/%[a-zA-Z]/g,r=>{switch(r){case"%d":return`"+to_fixed(date.get${e?"UTC":""}Date())+"`;case"%m":return`"+to_fixed((date.get${e?"UTC":""}Month()+1))+"`;case"%j":return`"+date.get${e?"UTC":""}Date()+"`;case"%n":return`"+(date.get${e?"UTC":""}Month()+1)+"`;case"%y":return`"+to_fixed(date.get${e?"UTC":""}FullYear()%100)+"`;case"%Y":return`"+date.get${e?"UTC":""}FullYear()+"`;case"%D":return`"+locale.date.day_short[date.get${e?"UTC":""}Day()]+"`;case"%l":return`"+locale.date.day_full[date.get${e?"UTC":""}Day()]+"`;case"%M":return`"+locale.date.month_short[date.get${e?"UTC":""}Month()]+"`;case"%F":return`"+locale.date.month_full[date.get${e?"UTC":""}Month()]+"`;case"%h":return`"+to_fixed((date.get${e?"UTC":""}Hours()+11)%12+1)+"`;case"%g":return`"+((date.get${e?"UTC":""}Hours()+11)%12+1)+"`;case"%G":return`"+date.get${e?"UTC":""}Hours()+"`;case"%H":return`"+to_fixed(date.get${e?"UTC":""}Hours())+"`;case"%i":return`"+to_fixed(date.get${e?"UTC":""}Minutes())+"`;case"%a":return`"+(date.get${e?"UTC":""}Hours()>11?"pm":"am")+"`;case"%A":return`"+(date.get${e?"UTC":""}Hours()>11?"PM":"AM")+"`;case"%s":return`"+to_fixed(date.get${e?"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 "${t}";`);return r=>i(r,n.date.to_fixed,n.locale,n.date.getISOWeek,n.date.getWeek)},UE=(t,e,n)=>{let i="var temp=date.match(/[a-zA-Z]+|[0-9]+/g);",r=t.match(/%[a-zA-Z]/g);for(let s=0;s<r.length;s++)switch(r[s]){case"%j":case"%d":i+=`set[2]=temp[${s}]||1;`;break;case"%n":case"%m":i+=`set[1]=(temp[${s}]||1)-1;`;break;case"%y":i+=`set[0]=temp[${s}]*1+(temp[${s}]>50?1900:2000);`;break;case"%g":case"%G":case"%h":case"%H":i+=`set[3]=temp[${s}]||0;`;break;case"%i":i+=`set[4]=temp[${s}]||0;`;break;case"%Y":i+=`set[0]=temp[${s}]||0;`;break;case"%a":case"%A":i+=`set[3]=set[3]%12+((temp[${s}]||'').toLowerCase()=='am'?0:12);`;break;case"%s":i+=`set[5]=temp[${s}]||0;`;break;case"%M":i+=`set[1]=locale.date.month_short_hash[temp[${s}]]||0;`;break;case"%F":i+=`set[1]=locale.date.month_full_hash[temp[${s}]]||0;`;break}let a="set[0],set[1],set[2],set[3],set[4],set[5]";e&&(a=` Date.UTC(${a})`);let o=new Function("date","locale",`var set=[0,0,1,0,0,0]; ${i} return new Date(${a});`);return s=>o(s,n.locale)},yh={date_to_str:ME,str_to_date:UE},HE=(t,e,n)=>i=>t.replace(/%[a-zA-Z]/g,r=>{switch(r){case"%d":return e?n.date.to_fixed(i.getUTCDate()):n.date.to_fixed(i.getDate());case"%m":return e?n.date.to_fixed(i.getUTCMonth()+1):n.date.to_fixed(i.getMonth()+1);case"%j":return e?i.getUTCDate():i.getDate();case"%n":return e?i.getUTCMonth()+1:i.getMonth()+1;case"%y":return e?n.date.to_fixed(i.getUTCFullYear()%100):n.date.to_fixed(i.getFullYear()%100);case"%Y":return e?i.getUTCFullYear():i.getFullYear();case"%D":return e?n.locale.date.day_short[i.getUTCDay()]:n.locale.date.day_short[i.getDay()];case"%l":return e?n.locale.date.day_full[i.getUTCDay()]:n.locale.date.day_full[i.getDay()];case"%M":return e?n.locale.date.month_short[i.getUTCMonth()]:n.locale.date.month_short[i.getMonth()];case"%F":return e?n.locale.date.month_full[i.getUTCMonth()]:n.locale.date.month_full[i.getMonth()];case"%h":return e?n.date.to_fixed((i.getUTCHours()+11)%12+1):n.date.to_fixed((i.getHours()+11)%12+1);case"%g":return e?(i.getUTCHours()+11)%12+1:(i.getHours()+11)%12+1;case"%G":return e?i.getUTCHours():i.getHours();case"%H":return e?n.date.to_fixed(i.getUTCHours()):n.date.to_fixed(i.getHours());case"%i":return e?n.date.to_fixed(i.getUTCMinutes()):n.date.to_fixed(i.getMinutes());case"%a":return e?i.getUTCHours()>11?"pm":"am":i.getHours()>11?"pm":"am";case"%A":return e?i.getUTCHours()>11?"PM":"AM":i.getHours()>11?"PM":"AM";case"%s":return e?n.date.to_fixed(i.getUTCSeconds()):n.date.to_fixed(i.getSeconds());case"%W":return e?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}}),BE=(t,e,n)=>i=>{let r=[0,0,1,0,0,0],a=i.match(/[a-zA-Z]+|[0-9]+/g),o=t.match(/%[a-zA-Z]/g);for(let s=0;s<o.length;s++)switch(o[s]){case"%j":case"%d":r[2]=a[s]||1;break;case"%n":case"%m":r[1]=(a[s]||1)-1;break;case"%y":r[0]=a[s]*1+(a[s]>50?1900:2e3);break;case"%g":case"%G":case"%h":case"%H":r[3]=a[s]||0;break;case"%i":r[4]=a[s]||0;break;case"%Y":r[0]=a[s]||0;break;case"%a":case"%A":r[3]=r[3]%12+((a[s]||"").toLowerCase()==="am"?0:12);break;case"%s":r[5]=a[s]||0;break;case"%M":r[1]=n.locale.date.month_short_hash[a[s]]||0;break;case"%F":r[1]=n.locale.date.month_full_hash[a[s]]||0;break}return e?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])},hh={date_to_str:HE,str_to_date:BE};function mh(t){var e=/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:?\d{2})?)?$/;function n(s){var l=new Date(s);return isNaN(l.getTime())?null:l}var i=null;function r(){try{new Function("canUseCsp = false;")}catch{i=!0}}function a(){var s=!1;return t.config.csp==="auto"?(i===null&&r(),s=i):s=t.config.csp,s}var o={_isoDateDetected:!1,_isoDateOnly:!1,formatISODate:function(s){return s.toISOString()},formatISODateOnly:function(s){return s.getUTCFullYear()+"-"+t.date.to_fixed(s.getUTCMonth()+1)+"-"+t.date.to_fixed(s.getUTCDate())},init:function(){for(var s=t.locale,c=s.date.month_short,d=s.date.month_short_hash={},l=0;l<c.length;l++)d[c[l]]=l;for(var c=s.date.month_full,d=s.date.month_full_hash={},l=0;l<c.length;l++)d[c[l]]=l},date_part:function(s){return s.setUTCHours(0,0,0,0),s},time_part:function(s){return s.valueOf()/1e3%86400},week_start:function(s){var l=s.getUTCDay();return t.config.start_on_monday&&(l===0?l=6:l--),this.date_part(this.add(s,-1*l,"day"))},month_start:function(s){return s.setUTCDate(1),this.date_part(s)},quarter_start:function(s){this.month_start(s);var l=s.getUTCMonth(),c;return l>=9?c=9:l>=6?c=6:l>=3?c=3:c=0,s.setUTCMonth(c),s},year_start:function(s){return s.setUTCMonth(0),this.month_start(s)},day_start:function(s){return this.date_part(s)},hour_start:function(s){return s.getUTCMinutes()&&s.setUTCMinutes(0),this.minute_start(s),s},minute_start:function(s){return s.getUTCSeconds()&&s.setUTCSeconds(0),s.getUTCMilliseconds()&&s.setUTCMilliseconds(0),s},_add_days:function(s,l,c){return s.setUTCDate(s.getUTCDate()+l),s},add:function(s,l,c){var d=new Date(s.valueOf());switch(c){case"day":d=this._add_days(d,l,s);break;case"week":d=this._add_days(d,l*7,s);break;case"month":d.setUTCMonth(d.getUTCMonth()+l);break;case"year":d.setUTCFullYear(d.getUTCFullYear()+l);break;case"hour":d.setTime(d.getTime()+l*60*60*1e3);break;case"minute":d.setTime(d.getTime()+l*60*1e3);break;default:return this["add_"+c](s,l,c)}return d},add_quarter:function(s,l){return this.add(s,l*3,"month")},to_fixed:function(s){return s<10?"0"+s:s},copy:function(s){return new Date(s.valueOf())},date_to_str:function(s,l){var c=yh;return a()&&(c=hh),c.date_to_str(s,l,t)},str_to_date:function(s,l){var c=yh;return a()&&(c=hh),c.str_to_date(s,l,t)},getISOWeek:function(s){return t.date._getWeekNumber(s,!0)},_getWeekNumber:function(s,l){if(!s)return!1;var c=s.getUTCDay();l&&c===0&&(c=7);var d=new Date(s.valueOf());d.setUTCDate(s.getUTCDate()+(4-c));var u=d.getUTCFullYear(),p=Math.round((d.getTime()-Date.UTC(u,0,1))/864e5),f=1+Math.floor(p/7);return f},getWeek:function(s){return t.date._getWeekNumber(s,t.config.start_on_monday)},getUTCISOWeek:function(s){return t.date.getISOWeek(s)},parseDate:function(s,l){if(s&&!s.getFullYear){var c=!l||l==="parse_date"||l==="xml_date",d=c&&(t.defined(t.templates.xml_date)||t.templates.parse_date&&!t.templates.parse_date._ganttAuto);if(!d&&typeof s=="string"&&e.test(s)){var u=s.indexOf("T")!==-1,p=n(s);if(p)return o._isoDateDetected?u&&(o._isoDateOnly=!1):(o._isoDateDetected=!0,o._isoDateOnly=!u),p}typeof l!="function"&&(typeof l=="string"?l==="parse_date"||l==="xml_date"?l=t.defined(t.templates.xml_date)?t.templates.xml_date:t.templates.parse_date:l=t.defined(t.templates[l])?t.templates[l]:t.date.str_to_date(l,!0):l=t.defined(t.templates.xml_date)?t.templates.xml_date:t.templates.parse_date),s?s=l(s):s=null}return s}};return o}function fc(t,e,n,i,r){return this.date=t,this.unit=e,this.task=n,this.id=i,this.calendar=r,this}function yc(t,e,n,i,r,a){return this.date=t,this.dir=e,this.unit=n,this.task=i,this.id=r,this.calendar=a,this}function hc(t,e,n,i,r,a,o){return this.start_date=t,this.duration=e,this.unit=n,this.step=i,this.task=r,this.id=a,this.calendar=o,this}function jE(t,e,n,i){return this.start_date=t,this.end_date=e,this.task=n,this.calendar=i,this.unit=null,this.step=null,this}var gh=function(t){return{getWorkHoursArguments:function(){var e=arguments[0];if(ii(e)?e={date:e}:e=Ji({},e),!ri(e.date))throw t.assert(!1,"Invalid date argument for getWorkHours method"),new Error("Invalid date argument for getWorkHours method");return e},setWorkTimeArguments:function(){return arguments[0]},unsetWorkTimeArguments:function(){return arguments[0]},isWorkTimeArguments:function(){var e=arguments[0];if(e instanceof fc)return e;var n;if(e.date?n=new fc(e.date,e.unit,e.task,null,e.calendar):n=new fc(arguments[0],arguments[1],arguments[2],null,arguments[3]),n.unit=n.unit||t.config.duration_unit,!ri(n.date))throw t.assert(!1,"Invalid date argument for isWorkTime method"),new Error("Invalid date argument for isWorkTime method");return n},getClosestWorkTimeArguments:function(e){var n=arguments[0];if(n instanceof yc)return n;var i;if(ii(n)?i=new yc(n):i=new yc(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||t.config.duration_unit,!ri(i.date))throw t.assert(!1,"Invalid date argument for getClosestWorkTime method"),new Error("Invalid date argument for getClosestWorkTime method");return i},_getStartEndConfig:function(e){var n=jE,i;if(e instanceof n)return e;if(ii(e)?i=new n(arguments[0],arguments[1],arguments[2],arguments[3]):(i=new n(e.start_date,e.end_date,e.task),e.id!==null&&e.id!==void 0&&(i.task=e)),i.unit=i.unit||t.config.duration_unit,i.step=i.step||t.config.duration_step,i.start_date=i.start_date||i.start||i.date,!ri(i.start_date))throw t.assert(!1,"Invalid start_date argument for getDuration method"),new Error("Invalid start_date argument for getDuration method");if(!ri(i.end_date))throw t.assert(!1,"Invalid end_date argument for getDuration method"),new Error("Invalid end_date argument for getDuration method");return i},getDurationArguments:function(e,n,i,r){return this._getStartEndConfig.apply(this,arguments)},hasDurationArguments:function(e,n,i,r){return this._getStartEndConfig.apply(this,arguments)},calculateEndDateArguments:function(e,n,i,r){var a=arguments[0];if(a instanceof hc)return a;var o;if(ii(a)?o=new hc(arguments[0],arguments[1],arguments[2],void 0,arguments[3],void 0,arguments[4]):o=new hc(a.start_date,a.duration,a.unit,a.step,a.task,null,a.calendar),a.id!==null&&a.id!==void 0&&(o.task=a,o.unit=null,o.step=null),o.unit=o.unit||t.config.duration_unit,o.step=o.step||t.config.duration_step,!ri(o.start_date))throw t.assert(!1,"Invalid start_date argument for calculateEndDate method"),new Error("Invalid start_date argument for calculateEndDate method");return o}}};function Ah(){}Ah.prototype={_getIntervals:function(t){for(var e=[],n=0;n<t.length;n+=2)e.push({start:t[n],end:t[n+1]});return e},_toHoursArray:function(t){var e=[];function n(a){var o=String(a);return o.length<2&&(o="0"+o),o}function i(a){var o=Math.floor(a/3600),s=a-o*60*60,l=Math.floor(s/60);return o+":"+n(l)}for(var r=0;r<t.length;r++)e.push(i(t[r].start)+"-"+i(t[r].end));return e},_intersectHourRanges:function(t,e){var r=[],n=t.length>e.length?t:e,i=t===n?e:t;n=n.slice(),i=i.slice();for(var r=[],a=0;a<n.length;a++)for(var o=n[a],s=0;s<i.length;s++){var l=i[s];l.start<o.end&&l.end>o.start&&(r.push({start:Math.max(o.start,l.start),end:Math.min(o.end,l.end)}),o.end>l.end&&(i.splice(s,1),s--,a--))}return r},_mergeAdjacentIntervals:function(t){var e=t.slice();e.sort(function(a,o){return a.start-o.start});for(var n=e[0],i=1;i<e.length;i++){var r=e[i];r.start<=n.end?(r.end>n.end&&(n.end=r.end),e.splice(i,1),i--):n=r}return e},_mergeHoursConfig:function(t,e){return this._mergeAdjacentIntervals(this._intersectHourRanges(t,e))},merge:function(t,e){let n=ve(t.getConfig()),i=ve(e.getConfig()),r=n.parsed,a=i.parsed;r.customWeeks=n.customWeeks,a.customWeeks=i.customWeeks;var o={hours:this._toHoursArray(this._mergeHoursConfig(r.hours,a.hours)),dates:{},customWeeks:{}};let s=(c,d)=>{for(let u in c.dates){let p=c.dates[u];+u>1e3&&(o.dates[u]=!1);for(let f in d.dates){let y=d.dates[f];if(f==u&&(o.dates[u]=!!(p&&y)),Array.isArray(p)){let h=Array.isArray(y)?y:d.hours;o.dates[u]=this._toHoursArray(this._mergeHoursConfig(p,h))}}}};if(s(r,a),s(a,r),r.customWeeks)for(var l in r.customWeeks)o.customWeeks[l]=r.customWeeks[l];if(a.customWeeks)for(var l in a.customWeeks)o.customWeeks[l]?o.customWeeks[l+"_second"]=a.customWeeks[l]:o.customWeeks[l]=a.customWeeks[l];return o}};var mc=class{constructor(){this.clear()}getItem(e,n,i){if(this._cache.has(e)){let a=this._cache.get(e)[i.getUTCFullYear()];if(a&&a.has(n))return a.get(n)}return-1}setItem(e,n,i,r){if(!e||!n)return;let a=this._cache,o=r.getUTCFullYear(),s;a.has(e)?s=a.get(e):(s=[],a.set(e,s));let l=s[o];l||(l=s[o]=new Map),l.set(n,i)}clear(){this._cache=new Map}},gc=class{constructor(){this.clear()}getItem(e,n,i){let r=this._cache;if(r&&r[e]){let a=r[e];if(a===void 0)return-1;let o=a[i.getUTCFullYear()];if(o&&o[n]!==void 0)return o[n]}return-1}setItem(e,n,i,r){if(!e||!n)return;let a=this._cache;if(!a)return;a[e]||(a[e]=[]);let o=a[e],s=r.getUTCFullYear(),l=o[s];l||(l=o[s]={}),l[n]=i}clear(){this._cache={}}},Ac=class{constructor(e){this.getMinutesPerWeek=n=>{let i=n.valueOf();if(this._weekCache.has(i))return this._weekCache.get(i);let r=this._calendar,a=this._calendar.$gantt,o=0,s=a.date.week_start(new Date(n));for(let l=0;l<7;l++)o+=r.getHoursPerDay(s)*60,s=a.date.add(s,1,"day");return this._weekCache.set(i,o),o},this.getMinutesPerMonth=n=>{let i=n.valueOf();if(this._monthCache.has(i))return this._monthCache.get(i);let r=this._calendar,a=this._calendar.$gantt,o=0,s=a.date.week_start(new Date(n)),l=a.date.add(s,1,"month").valueOf();for(;s.valueOf()<l;)o+=r.getHoursPerDay(s)*60,s=a.date.add(s,1,"day");return this._monthCache.set(i,o),o},this.clear=()=>{this._weekCache=new Map,this._monthCache=new Map},this.clear(),this._calendar=e}};function WE(){return typeof Map<"u"?new mc:new gc}var Ic=class{constructor(){this.clear()}_getCacheObject(e,n,i){let r=this._cache;r[n]||(r[n]=[]);let a=r[n];a||(a=r[n]={});let o=a[i];o||(o=a[i]={});let s=e.getUTCFullYear(),l=o[s];return l||(l=o[s]={durations:{},endDates:{}}),l}_endDateCacheKey(e,n){return String(e)+"-"+String(n)}_durationCacheKey(e,n){return String(e)+"-"+String(n)}getEndDate(e,n,i,r,a){let o=this._getCacheObject(e,i,r),s=e.valueOf(),l=this._endDateCacheKey(s,n),c;if(o.endDates[l]===void 0){let d=a(),u=d.valueOf();o.endDates[l]=u,o.durations[this._durationCacheKey(s,u)]=n,c=d}else c=new Date(o.endDates[l]);return c}getDuration(e,n,i,r,a){let o=this._getCacheObject(e,i,r),s=e.valueOf(),l=n.valueOf(),c=this._durationCacheKey(s,l),d;if(o.durations[c]===void 0){let u=a();o.durations[c]=u.valueOf(),d=u}else d=o.durations[c];return d}clear(){this._cache={}}};function Sc(t,e){this.argumentsHelper=e,this.$gantt=t,this._workingUnitsCache=WE(),this._largeUnitsCache=new Ac(this),this._dateDurationCache=new Ic,this._worktime=null,this._cached_timestamps={},this._cached_timestamps_count=0}Sc.prototype={units:["year","month","week","day","hour","minute"],_clearCaches:function(){this._workingUnitsCache.clear(),this._largeUnitsCache.clear(),this._dateDurationCache.clear()},_getUnitOrder:function(t){for(var e=0,n=this.units.length;e<n;e++)if(this.units[e]==t)return e},_resetTimestampCache:function(){this._cached_timestamps={},this._cached_timestamps_count=0},_timestamp:function(t){this._cached_timestamps_count>1e6&&this._resetTimestampCache();var e=null;if(t.day||t.day===0)e=t.day;else if(t.date){var n=String(t.date.valueOf());this._cached_timestamps[n]?e=this._cached_timestamps[n]:(e=Date.UTC(t.date.getUTCFullYear(),t.date.getUTCMonth(),t.date.getUTCDate()),this._cached_timestamps[n]=e,this._cached_timestamps_count++)}return e},_checkIfWorkingUnit:function(t,e){if(!this["_is_work_"+e]){let n=this.$gantt.date[`${e}_start`](new Date(t)),i=this.$gantt.date.add(n,1,e);return this.hasDuration(n,i)}return this["_is_work_"+e](t)},_is_work_day:function(t){var e=this._getWorkHours(t);return Array.isArray(e)?e.length>0:!1},_is_work_hour:function(t){for(var e=this._getWorkHours(t),n=t.getUTCHours(),i=0;i<e.length;i++)if(n>=e[i].startHour&&n<e[i].endHour)return!0;return!1},_getTimeOfDayStamp:function(t,e){var n=t.getUTCHours();return!t.getUTCHours()&&!t.getUTCMinutes()&&e&&(n=24),n*60*60+t.getUTCMinutes()*60},_is_work_minute:function(t){for(var e=this._getWorkHours(t),n=this._getTimeOfDayStamp(t),i=0;i<e.length;i++)if(n>=e[i].start&&n<e[i].end)return!0;return!1},_nextDate:function(t,e,n){return this.$gantt.date.add(t,n,e)},_getWorkUnitsBetweenGeneric:function(t,e,n,i){var r=this.$gantt.date,a=new Date(t),o=new Date(e);i=i||1;var s=0,l=null,c,d,u=!1;c=r[n+"_start"](new Date(a)),c.valueOf()!=a.valueOf()&&(u=!0);var p=!1;d=r[n+"_start"](new Date(e)),d.valueOf()!=e.valueOf()&&(p=!0);for(var f=!1;a.valueOf()<o.valueOf();){if(l=this._nextDate(a,n,i),f=l.valueOf()>o.valueOf(),this._isWorkTime(a,n))(u||p&&f)&&(c=r[n+"_start"](new Date(a)),d=r.add(c,i,n)),u?(u=!1,l=this._nextDate(c,n,i),s+=(d.valueOf()-a.valueOf())/(d.valueOf()-c.valueOf())):p&&f?(p=!1,s+=(o.valueOf()-a.valueOf())/(d.valueOf()-c.valueOf())):s++;else{var y=this._getUnitOrder(n),h=this.units[y-1];h&&!this._isWorkTime(a,h)&&(l=this._getClosestWorkTimeFuture(a,h))}a=l}return s},_getMinutesPerHour:function(t){var e=this._getTimeOfDayStamp(t),n=this._getTimeOfDayStamp(this._nextDate(t,"hour",1));n===0&&(n=1440*60);for(var i=this._getWorkHours(t),r=0;r<i.length;r++){var a=i[r];if(e>=a.start&&n<=a.end)return 60;if(e<a.end&&n>a.start){var o=Math.min(n,a.end)-Math.max(e,a.start);return o/60}}return 0},_getMinutesPerDay:function(t){var e=this._getWorkHours(t),n=0;return e.forEach(function(i){n+=i.durationMinutes}),n},getHoursPerDay:function(t){var e=this._getWorkHours(t),n=0;return e.forEach(function(i){n+=i.durationHours}),n},_getWorkUnitsForRange:function(t,e,n,i){var r=0,a=new Date(t),o=new Date(e),s;for(n=="minute"?s=oe(this._getMinutesPerDay,this):s=oe(this.getHoursPerDay,this);a.valueOf()<o.valueOf();){if(o-a>1e3*60*60*24*32&&a.getUTCDate()===0){var l=this._largeUnitsCache.getMinutesPerMonth(a);n=="hour"&&(l=l/60),r+=l,a=this.$gantt.date.add(a,1,"month");continue}else if(o-a>1e3*60*60*24*16){var c=this.$gantt.date.week_start(new Date(a));if(a.valueOf()===c.valueOf()){var l=this._largeUnitsCache.getMinutesPerWeek(a);n=="hour"&&(l=l/60),r+=l,a=this.$gantt.date.add(a,7,"day");continue}}r+=s(a),a=this._nextDate(a,"day",1)}return r/i},_getMinutesBetweenSingleDay:function(t,e){for(var n=this._getIntervalTimestamp(t,e),i=this._getWorkHours(t),r=0,a=0;a<i.length;a++){var o=i[a];if(n.end>=o.start&&n.start<=o.end){var s=Math.max(o.start,n.start),l=Math.min(o.end,n.end);r+=(l-s)/60,n.start=l}}return Math.floor(r)},_getMinutesBetween:function(t,e,n,i){var r=new Date(t),a=new Date(e);i=i||1;var o=new Date(r),s=this.$gantt.date.add(this.$gantt.date.day_start(new Date(r)),1,"day");if(a.valueOf()<=s.valueOf())return this._getMinutesBetweenSingleDay(t,e);var l=this.$gantt.date.day_start(new Date(a)),c=a,d=this._getMinutesBetweenSingleDay(o,s),u=this._getMinutesBetweenSingleDay(l,c),p=this._getWorkUnitsForRange(s,l,n,i),f=d+p+u;return f},_getHoursBetween:function(t,e,n,i){var r=new Date(t),a=new Date(e);i=i||1;var o=new Date(r),s=this.$gantt.date.add(this.$gantt.date.day_start(new Date(r)),1,"day");if(a.valueOf()<=s.valueOf())return Math.round(this._getMinutesBetweenSingleDay(t,e)/60);var l=this.$gantt.date.day_start(new Date(a)),c=a,d=this._getMinutesBetweenSingleDay(o,s,n,i)/60,u=this._getMinutesBetweenSingleDay(l,c,n,i)/60,p=this._getWorkUnitsForRange(s,l,n,i),f=d+p+u;return Math.round(f)},getConfig:function(){return this._worktime},_setConfig:function(t){this._worktime=t,this._parseSettings(),this._clearCaches()},_parseSettings:function(){var t=this.getConfig();t.parsed={dates:{},hours:null,haveCustomWeeks:!1,customWeeks:{},customWeeksRangeStart:null,customWeeksRangeEnd:null,customWeeksBoundaries:[]},t.parsed.hours=this._parseHours(t.hours);for(var e in t.dates)t.parsed.dates[e]=this._parseHours(t.dates[e]);if(t.customWeeks){var n=null,i=null;for(var e in t.customWeeks){var r=t.customWeeks[e];if(r.from&&r.to){var a=r.from,o=r.to;(!n||n>a.valueOf())&&(n=a.valueOf()),(!i||i<o.valueOf())&&(i=o.valueOf()),t.parsed.customWeeksBoundaries.push({from:a.valueOf(),fromReadable:new Date(a),to:o.valueOf(),toReadable:new Date(o),name:e}),t.parsed.haveCustomWeeks=!0;var s=t.parsed.customWeeks[e]={from:r.from,to:r.to,hours:this._parseHours(r.hours),dates:{}};if(r.days&&!r.dates){r.dates=r.dates||{};for(var e=0;e<r.days.length;e++)r.dates[e]=r.days[e],r.days[e]instanceof Array||(r.dates[e]=!!r.days[e]);delete r.days}for(var l in r.dates)s.dates[l]=this._parseHours(r.dates[l])}}t.parsed.customWeeksRangeStart=n,t.parsed.customWeeksRangeEnd=i}},_tryChangeCalendarSettings:function(t){var e=JSON.stringify(this.getConfig());return t(),this.hasWorkTime()?!0:(this._setConfig(JSON.parse(e)),this._clearCaches(),!1)},_arraysEqual:function(t,e){if(t===e)return!0;if(!t||!e||t.length!=e.length)return!1;for(var n=0;n<t.length;++n)if(t[n]!==e[n])return!1;return!0},_compareSettings:function(t,e){if(!this._arraysEqual(t.hours,e.hours))return!1;var n=Object.keys(t.dates),i=Object.keys(e.dates);if(n.sort(),i.sort(),!this._arraysEqual(n,i))return!1;for(var r=0;r<n.length;r++){var a=n[r],o=t.dates[a],s=e.dates[a];if(o!==s&&!(Array.isArray(o)&&Array.isArray(s)&&this._arraysEqual(o,s)))return!1}return!0},equals:function(t){if(!(t instanceof Sc))return!1;var e=this.getConfig(),n=t.getConfig();if(!this._compareSettings(e,n))return!1;if(e.parsed.haveCustomWeeks&&n.parsed.haveCustomWeeks){if(e.parsed.customWeeksBoundaries.length!=n.parsed.customWeeksBoundaries.length)return!1;for(var i in e.parsed.customWeeks){var r=e.parsed.customWeeks[i],a=n.parsed.customWeeks[i];if(!a||!this._compareSettings(r,a))return!1}}else if(e.parse.haveCustomWeeks!==n.parsed.haveCustomWeeks)return!1;return!0},getWorkHours:function(){var t=this.argumentsHelper.getWorkHoursArguments.apply(this.argumentsHelper,arguments);return this._getWorkHours(t.date,!1)},_getWorkHours:function(t,e){var n=this.getConfig();if(e!==!1&&(n=n.parsed),!t)return n.hours;let i=new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()));var r=this._timestamp({date:i});if(n.haveCustomWeeks&&n.customWeeksRangeStart<=r&&n.customWeeksRangeEnd>r){for(var a=0;a<n.customWeeksBoundaries.length;a++)if(n.customWeeksBoundaries[a].from<=r&&n.customWeeksBoundaries[a].to>r){n=n.customWeeks[n.customWeeksBoundaries[a].name];break}}var o=!0;return n.dates[r]!==void 0?o=n.dates[r]:n.dates[t.getUTCDay()]!==void 0&&(o=n.dates[t.getUTCDay()]),o===!0?n.hours:o||[]},_getIntervalTimestamp:function(t,e){var n={start:0,end:0};n.start=t.getUTCHours()*60*60+t.getUTCMinutes()*60+t.getUTCSeconds();var i=e.getUTCHours();return!i&&!e.getUTCMinutes()&&!e.getUTCSeconds()&&t.valueOf()<e.valueOf()&&(i=24),n.end=i*60*60+e.getUTCMinutes()*60+e.getUTCSeconds(),n},_parseHours:function(t){if(Array.isArray(t)){var e=[];t.forEach(function(s){typeof s=="number"?e.push(s*60*60):typeof s=="string"&&s.split("-").map(function(l){return l.trim()}).forEach(function(l){var c=l.split(":").map(function(u){return u.trim()}),d=parseInt(c[0]*60*60);c[1]&&(d+=parseInt(c[1]*60)),c[2]&&(d+=parseInt(c[2])),e.push(d)})});for(var n=[],i=0;i<e.length;i+=2){var r=e[i],a=e[i+1],o=a-r;n.push({start:r,end:a,startHour:Math.floor(r/3600),startMinute:Math.floor(r/60),endHour:Math.ceil(a/3600),endMinute:Math.ceil(a/60),durationSeconds:o,durationMinutes:o/60,durationHours:o/3600})}return n}else return t},setWorkTime:function(t){return this._tryChangeCalendarSettings(oe(function(){var e=t.hours!==void 0?t.hours:!0,n=this._timestamp(t),i=this.getConfig();if(n!==null?i.dates[n]=e:t.customWeeks||(i.hours=e),t.customWeeks){if(i.customWeeks||(i.customWeeks={}),typeof t.customWeeks=="string")n!==null?i.customWeeks[t.customWeeks].dates[n]=e:t.customWeeks||(i.customWeeks[t.customWeeks].hours=e);else if(typeof t.customWeeks=="object"&&t.customWeeks.constructor===Object)for(var r in t.customWeeks)i.customWeeks[r]=t.customWeeks[r]}this._parseSettings(),this._clearCaches()},this))},unsetWorkTime:function(t){return this._tryChangeCalendarSettings(oe(function(){if(!t)this.reset_calendar();else{var e=this._timestamp(t);e!==null&&delete this.getConfig().dates[e]}this._parseSettings(),this._clearCaches()},this))},_isWorkTime:function(t,e){var n=-1,i=null;return i=String(t.valueOf()),n=this._workingUnitsCache.getItem(e,i,t),n==-1&&(n=this._checkIfWorkingUnit(t,e),this._workingUnitsCache.setItem(e,i,n,t)),n},isWorkTime:function(){var t=this.argumentsHelper.isWorkTimeArguments.apply(this.argumentsHelper,arguments);return this._isWorkTime(t.date,t.unit)},calculateDuration:function(){var t=this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper,arguments);if(!t.unit)return!1;var e=this;return this._dateDurationCache.getDuration(t.start_date,t.end_date,t.unit,t.step,function(){return e._calculateDuration(t.start_date,t.end_date,t.unit,t.step)})},_calculateDuration:function(t,e,n,i){var r=0,a=1;if(t.valueOf()>e.valueOf()){var o=e;e=t,t=o,a=-1}return n=="hour"&&i==1?r=this._getHoursBetween(t,e,n,i):n=="minute"&&i==1?r=this._getMinutesBetween(t,e,n,i):r=this._getWorkUnitsBetweenGeneric(t,e,n,i),a*Math.round(r)},hasDuration:function(){var t=this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper,arguments),e=t.start_date,n=t.end_date,i=t.unit,r=t.step;if(!i)return!1;var a=new Date(e),o=new Date(n);for(r=r||1;a.valueOf()<o.valueOf();){if(this._isWorkTime(a,i))return!0;a=this._nextDate(a,i,r)}return!1},calculateEndDate:function(){var t=this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper,arguments),e=t.start_date,n=t.duration,i=t.unit,r=t.step;if(!i)return!1;var a=t.duration>=0?1:-1;n=Math.abs(n*1);var o=this;return this._dateDurationCache.getEndDate(e,n,i,r*a,function(){return o._calculateEndDate(e,n,i,r*a)})},_calculateEndDate:function(t,e,n,i){if(!n)return!1;if(i==1&&n=="minute")return this._calculateMinuteEndDate(t,e,i);if(i==-1&&n=="minute")return this._subtractMinuteDate(t,e,i);if(i==1&&n=="hour")return this._calculateHourEndDate(t,e,i);var r=this._addInterval(t,e,n,i,null);return r.end},_addInterval:function(t,e,n,i,r){for(var a=0,o=t;a<e&&!(r&&r(o));){var s=this._nextDate(o,n,i),l=new Date(s.valueOf()+1);i>0&&(l=new Date(s.valueOf()-1));var c=this._isWorkTime(l,n);c&&a++,o=s}return{end:o,start:t,added:a}},_addHoursUntilDayEnd:function(t,e){for(var n=this.$gantt.date.add(this.$gantt.date.day_start(new Date(t)),1,"day"),i=0,r=e,a=this._getIntervalTimestamp(t,n),o=this._getWorkHours(t),s=0;s<o.length&&i<e;s++){var l=o[s];if(a.end>=l.start&&a.start<=l.end){var c=Math.max(l.start,a.start),d=Math.min(l.end,a.end),u=(d-c)/3600;u>r&&(u=r,d=c+r*60*60);var p=Math.round((d-c)/3600);i+=p,r-=p,a.start=d}}var f=n;return i===e&&(f=new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),0,0,a.start))),{added:i,end:f}},_calculateHourEndDate:function(t,e,n){var i=new Date(t),r=0;n=n||1,e=Math.abs(e*1);var a=this._addHoursUntilDayEnd(i,e);r=a.added,i=a.end;var o=e-r;if(o){for(var s=i;r<e;){var l=this._nextDate(s,"day",n);l.setUTCHours(0),l.setUTCMinutes(0),l.setUTCSeconds(0);var c=0;if(n>0?c=this.getHoursPerDay(new Date(l.valueOf()-1)):c=this.getHoursPerDay(new Date(l.valueOf()+1)),r+c>=e)break;r+=c,s=l}i=s}if(r<e){var o=e-r;a=this._addHoursUntilDayEnd(i,o),i=a.end}return i},_addMinutesUntilHourEnd:function(t,e){if(t.getUTCMinutes()===0)return{added:0,end:new Date(t)};for(var n=this.$gantt.date.add(this.$gantt.date.hour_start(new Date(t)),1,"hour"),i=0,r=e,a=this._getIntervalTimestamp(t,n),o=this._getWorkHours(t),s=0;s<o.length&&i<e;s++){var l=o[s];if(a.end>=l.start&&a.start<=l.end){var c=Math.max(l.start,a.start),d=Math.min(l.end,a.end),u=(d-c)/60;u>r&&(u=r,d=c+r*60);var p=Math.round((d-c)/60);r-=p,i+=p,a.start=d}}var f=n;return i===e&&(f=new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),0,0,a.start))),{added:i,end:f}},_subtractMinutesUntilHourStart:function(t,e){for(var n=this.$gantt.date.hour_start(new Date(t)),i=0,r=e,a=n.getUTCHours()*60*60+n.getUTCMinutes()*60+n.getUTCSeconds(),o=t.getUTCHours()*60*60+t.getUTCMinutes()*60+t.getUTCSeconds(),s=this._getWorkHours(t),l=s.length-1;l>=0&&i<e;l--){var c=s[l];if(o>c.start&&a<=c.end){var d=Math.min(o,c.end),u=Math.max(a,c.start),p=(d-u)/60;p>r&&(p=r,u=d-r*60);var f=Math.abs(Math.round((d-u)/60));r-=f,i+=f,o=u}}var y=n;return i===e&&(y=new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),0,0,o))),{added:i,end:y}},_subtractMinuteDate:function(t,e,n){var i=this.getClosestWorkTime({date:t,dir:"past",unit:"minute"}),r=0;n=n||-1,e=Math.abs(e*1),e=Math.round(e);let a=this._isMinutePrecision(i),o=this._subtractMinutesUntilHourStart(i,e);r+=o.added,i=o.end;for(var s=0,l=[],c=0;r<e;){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 p=new Date(Date.UTC(d.getUTCFullYear(),d.getUTCMonth(),d.getUTCDate(),23,59,59,999)).valueOf();p!==s&&(l=this._getWorkHours(d),c=this._getMinutesPerDay(d),s=p);var f=e-r,y=this._getTimeOfDayStamp(i,u);if(!l.length||!c){i=this.$gantt.date.add(i,-1,"day");continue}if(l[l.length-1].end<=y&&f>c){r+=c,i=this.$gantt.date.add(i,-1,"day");continue}for(var h=!1,m=null,g=null,C=l.length-1;C>=0;C--)if(l[C].start<y-1&&l[C].end>=y-1){h=!0,m=l[C],g=l[C-1];break}if(h)if(y===m.end&&f>=m.durationMinutes)r+=m.durationMinutes,i=this.$gantt.date.add(i,-m.durationMinutes,"minute");else if(!a&&f<=y/60-m.startMinute)r+=f,i=this.$gantt.date.add(i,-f,"minute");else if(a)f<=y/60-m.startMinute?(r+=f,i=this.$gantt.date.add(i,-f,"minute")):(r+=y/60-m.startMinute,g?i=new Date(Date.UTC(i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate(),0,0,g.end)):i=this.$gantt.date.day_start(i));else{var b=this._getMinutesPerHour(i);b<=f?(r+=b,i=this._nextDate(i,"hour",n)):(o=this._subtractMinutesUntilHourStart(i,f),r+=o.added,i=o.end)}else if(i.getUTCHours()===0&&i.getUTCMinutes()===0&&i.getUTCSeconds()===0){var E=this._getClosestWorkTimePast(i,"hour");if(E.valueOf()===i.valueOf()){var E=this.$gantt.date.add(i,-1,"day"),P=this._getWorkHours(E);if(P.length){var N=P[P.length-1];E.setUTCSeconds(N.durationSeconds)}}i=E}else i=this._getClosestWorkTimePast(new Date(i-1),"hour")}if(r<e){var I=e-r;o=this._subtractMinutesUntilHourStart(i,I),r+=o.added,i=o.end}return i},_calculateMinuteEndDate:function(t,e,n){var i=new Date(t),r=0;n=n||1,e=Math.abs(e*1),e=Math.round(e);var a=this._addMinutesUntilHourEnd(i,e);r+=a.added,i=a.end;for(var o=0,s=[],l=0,c=this._isMinutePrecision(i);r<e;){var d=this.$gantt.date.day_start(new Date(i)).valueOf();d!==o&&(s=this._getWorkHours(i),l=this._getMinutesPerDay(i),o=d);var u=e-r,p=this._getTimeOfDayStamp(i);if(!s.length||!l){i=this.$gantt.date.add(this.$gantt.date.day_start(i),1,"day");continue}if(s[0].start>=p&&u>=l){if(r+=l,u==l){i=new Date(Date.UTC(i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate(),0,0,s[s.length-1].end));break}else i=this.$gantt.date.add(i,1,"day"),i=this.$gantt.date.day_start(i);continue}for(var f=!1,y=null,h=0;h<s.length;h++)if(s[h].start<=p&&s[h].end>p){f=!0,y=s[h];break}if(f)if(p===y.start&&u>=y.durationMinutes)r+=y.durationMinutes,i=this.$gantt.date.add(i,y.durationMinutes,"minute");else if(u<=y.endMinute-p/60)r+=u,i=this.$gantt.date.add(i,u,"minute");else{var m=this._getMinutesPerHour(i);m<=u?(r+=m,c?i=this.$gantt.date.add(i,m,"minute"):i=this._nextDate(i,"hour",n)):(a=this._addMinutesUntilHourEnd(i,u),r+=a.added,i=a.end)}else i=this._getClosestWorkTimeFuture(i,"hour")}if(r<e){var g=e-r;a=this._addMinutesUntilHourEnd(i,g),r+=a.added,i=a.end}return i},getClosestWorkTime:function(){var t=this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper,arguments);return this._getClosestWorkTime(t.date,t.unit,t.dir)},_getClosestWorkTime:function(t,e,n){var i=new Date(t);if(this._isWorkTime(i,e))return i;if(i=this.$gantt.date[e+"_start"](i),n=="any"||!n){var r=this._getClosestWorkTimeFuture(i,e),a=this._getClosestWorkTimePast(i,e);Math.abs(r-t)<=Math.abs(t-a)?i=r:i=a}else n=="past"?i=this._getClosestWorkTimePast(i,e):i=this._getClosestWorkTimeFuture(i,e);return i},_getClosestWorkTimeFuture:function(t,e){return this._getClosestWorkTimeGeneric(t,e,1)},_getClosestWorkTimePast:function(t,e){var n=this._getClosestWorkTimeGeneric(t,e,-1);return this.$gantt.date.add(n,1,e)},_findClosestTimeInDay:function(t,e,n){var i=new Date(t),r=null,a=!1;this._getWorkHours(i).length||(i=this._getClosestWorkTime(i,"day",e<0?"past":"future"),e<0&&(i=new Date(i.valueOf()-1),a=!0),n=this._getWorkHours(i));var o=this._getTimeOfDayStamp(i);if(a&&(o=this._getTimeOfDayStamp(new Date(i.valueOf()+1),a)),e>0){for(var s=0;s<n.length;s++)if(n[s].start>=o){r=new Date(Date.UTC(i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate(),0,0,n[s].start));break}}else for(var s=n.length-1;s>=0;s--)if(n[s].end<=o){r=new Date(Date.UTC(i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate(),0,0,n[s].end));break}else if(n[s].end>o&&n[s].start<=o){r=new Date(Date.UTC(i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate(),0,0,o));break}return r},_getClosestWorkMinute:function(t,e,n){var i=new Date(t),r=this._getWorkHours(i),a=this._findClosestTimeInDay(i,n,r);return a||(n>0?(i=this.calculateEndDate(i,n,e),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),a=this._findClosestTimeInDay(i,n,r)),n<0&&(a=this.$gantt.date.add(a,-1,e)),a},_getClosestWorkTimeGeneric:function(t,e,n){if(e==="hour"||e==="minute")return this._getClosestWorkMinute(t,e,n);for(var i=this._getUnitOrder(e),r=this.units[i-1],a=t,o=3e3,s=0;!this._isWorkTime(a,e)&&!(r&&!this._isWorkTime(a,r)&&(n>0?a=this._getClosestWorkTimeFuture(a,r):a=this._getClosestWorkTimePast(a,r),this._isWorkTime(a,e)));){if(s++,s>o)return this.$gantt.assert(!1,"Invalid working time check"),!1;a=this.$gantt.date.add(a,n,e),this.$gantt.date[e+"_start"]&&(a=this.$gantt.date[e+"_start"](a))}return a},hasWorkTime:function(){var t=this.getConfig(),e=t.dates,n=[0,1,2,3,4,5,6];for(var i in t.dates);var r=this._checkWorkHours(t.hours),a=!1;return n.forEach((function(o){if(!a){var s=e[o];s===!0?a=r:Array.isArray(s)&&(a=this._checkWorkHours(s))}}).bind(this)),a},_checkWorkHours:function(t){if(t.length===0)return!1;for(var e=!1,n=0;n<t.length;n+=2)t[n]!==t[n+1]&&(e=!0);return e},_isMinutePrecision:function(t){let e=!1;return this._getWorkHours(t).forEach(function(n){(n.startMinute%60||n.endMinute%60)&&(e=!0)}),e}};var Wr={isLegacyResourceCalendarFormat:function(t){if(!t)return!1;for(var e in t)if(t[e]&&typeof t[e]=="object")return!0;return!1},getResourceProperty:function(t){var e=t.resource_calendars,n=t.resource_property;if(this.isLegacyResourceCalendarFormat(e))for(var i in t){n=i;break}return n},getCalendarIdFromLegacyConfig:function(t,e){if(e)for(var n in e){var i=e[n];if(t[n]){var r=i[t[n]];if(r)return r}}return null}};function VE(){function t(r){return r.map(function(a){return a&&a.resource_id?a.resource_id:a}).sort().join("-")}var e={};function n(r,a){return a.mergeCalendars(r.map(function(o){var s=o&&o.resource_id?o.resource_id:o;return a.getResourceCalendar(s)}))}function i(r,a){var o=t(r);if(r.length){if(r.length===1)return a.getResourceCalendar(o).id;if(e[o])return e[o].id;var s=n(r,a);return e[o]=s,a.addCalendar(s)}else return null}return{getCalendarIdFromMultipleResources:i}}var KE=VE();function Ih(t){this.$gantt=t,this._calendars={},this._legacyConfig=void 0,this.$gantt.attachEvent("onGanttReady",(function(){this.$gantt.config.resource_calendars&&(this._isLegacyConfig=Wr.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))}Ih.prototype={_calendars:{},_convertWorkTimeSettings:function(t){let e=t.days;if(typeof e=="object"&&!Array.isArray(e)&&e!==null){let n={};if(e?.weekdays)for(let i=0;i<7;i++)n[i]=e.weekdays[i];e?.dates&&Object.entries(e.dates).forEach(([i,r])=>{n[new Date(i).valueOf()]=r}),Object.entries(n).forEach(([i,r])=>{r instanceof Array||(n[i]=!!r)}),t={...t,dates:n}}else if(e&&!t.dates){t.dates=t.dates||{};for(let n=0;n<e.length;n++)t.dates[n]=e[n],e[n]instanceof Array||(t.dates[n]=!!e[n])}return delete t.days,t},mergeCalendars:function(){var t=[],e=arguments;if(Array.isArray(e[0]))t=e[0].slice();else for(var n=0;n<arguments.length;n++)t.push(arguments[n]);var i=new Ah,r;return t.forEach((function(a){r?r=this._createCalendarFromConfig(i.merge(r,a)):r=a}).bind(this)),this.createCalendar(r)},_createCalendarFromConfig:function(t){var e=new Sc(this.$gantt,gh(this.$gantt));e.id=String(pc());var n=this._convertWorkTimeSettings(t);if(n.customWeeks)for(var i in n.customWeeks)n.customWeeks[i]=this._convertWorkTimeSettings(n.customWeeks[i]);return e._setConfig(n),e},createCalendar:function(t){var e;t||(t={}),t.getConfig?e=ve(t.getConfig()):t.worktime?e=ve(t.worktime):e=ve(t);var n=ve(this.defaults.fulltime.worktime);return Ji(e,n),this._createCalendarFromConfig(e)},getCalendar:function(t){t=t||"global";var e=this._calendars[t];return e||(this.createDefaultCalendars(),e=this._calendars[t]),e},getCalendars:function(){var t=[];for(var e in this._calendars)t.push(this.getCalendar(e));return t},_getOwnCalendar:function(t){var e=this.$gantt.config;if(t[e.calendar_property])return this.getCalendar(t[e.calendar_property]);if(e.resource_calendars){var n,i,r;if(this._legacyConfig===!1?r=e.resource_property:r=Wr.getResourceProperty(e),Array.isArray(t[r])&&t[r].length)e.dynamic_resource_calendars?i=KE.getCalendarIdFromMultipleResources(t[r],this):n=this.getResourceCalendar(t[r]);else if(this._legacyConfig===void 0&&(this._legacyConfig=Wr.isLegacyResourceCalendarFormat(e.resource_calendars)),this._legacyConfig)var i=Wr.getCalendarIdFromLegacyConfig(t,e.resource_calendars);else if(r&&t[r]&&e.resource_calendars[t[r]])var n=this.getResourceCalendar(t[r]);if(i&&(n=this.getCalendar(i)),n)return n}return null},getResourceCalendar:function(t){if(t==null)return this.getCalendar();var e=null;typeof t=="number"||typeof t=="string"?e=t:e=t.id||t.key;var n=this.$gantt.config,i=n.resource_calendars,r=null;if(Array.isArray(t)&&t.length===1&&(typeof t[0]=="object"?e=t[0].resource_id:e=t[0]),i){if(this._legacyConfig===void 0&&(this._legacyConfig=Wr.isLegacyResourceCalendarFormat(n.resource_calendars)),this._legacyConfig){for(var a in i)if(i[a][e]){r=i[a][e];break}}else var r=i[e];if(r)return this.getCalendar(r)}return this.getCalendar()},getTaskCalendar:function(t){var e=this.$gantt,n;if(t==null)return this.getCalendar();if((typeof t=="number"||typeof t=="string")&&e.isTaskExists(t)?n=e.getTask(t):n=t,!n)return this.getCalendar();var i=this._getOwnCalendar(n),r=!!e.getState().group_mode;if(!i&&e.config.inherit_calendar&&e.isTaskExists(n.parent)){for(var a=n;e.isTaskExists(a.parent)&&(a=e.getTask(a.parent),!(e.isSummaryTask(a)&&(i=this._getOwnCalendar(a),i))););r&&!i&&t.$effective_calendar&&(i=this.getCalendar(t.$effective_calendar))}return i||this.getCalendar()},addCalendar:function(t){if(!this.isCalendar(t)){var e=t.id;t=this.createCalendar(t),t.id=e}if(t._tryChangeCalendarSettings(function(){})){var n=this.$gantt.config;return t.id=t.id||pc(),this._calendars[t.id]=t,n.worktimes||(n.worktimes={}),n.worktimes[t.id]=t.getConfig(),t.id}else return this.$gantt.callEvent("onCalendarError",[{message:"Invalid calendar settings, no worktime available"},t]),null},deleteCalendar:function(t){var e=this.$gantt.config;return t&&this._calendars[t]?(delete this._calendars[t],e.worktimes&&e.worktimes[t]&&delete e.worktimes[t],!0):!1},restoreConfigCalendars:function(t){for(var e in t)if(!this._calendars[e]){var n=t[e],i=this.createCalendar(n);i.id=e,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 t=this.$gantt.config;this.restoreConfigCalendars(this.defaults),this.restoreConfigCalendars(t.worktimes)},isCalendar:function(t){var e=[t.isWorkTime,t.setWorkTime,t.getWorkHours,t.unsetWorkTime,t.getClosestWorkTime,t.calculateDuration,t.hasDuration,t.calculateEndDate];return e.every(function(n){return n instanceof Function})}};function vc(t,e){this.argumentsHelper=e,this.$gantt=t}vc.prototype={getWorkHours:function(){return[0,24]},setWorkTime:function(){return!0},unsetWorkTime:function(){return!0},isWorkTime:function(){return!0},getClosestWorkTime:function(e){var e=this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper,arguments);return e.date},calculateDuration:function(){var t=this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper,arguments),e=t.start_date,n=t.end_date,i=t.unit,r=t.step;return this._calculateDuration(e,n,i,r)},_calculateDuration:function(t,e,n,i){var r=this.$gantt.date,a={week:1e3*60*60*24*7,day:1e3*60*60*24,hour:1e3*60*60,minute:1e3*60},o=0;if(a[n])o=Math.round((e-t)/(i*a[n]));else{for(var s=new Date(t),l=new Date(e);s.valueOf()<l.valueOf();)o+=1,s=r.add(s,i,n);s.valueOf()!=e.valueOf()&&(o+=(l-s)/(r.add(s,i,n)-s))}return Math.round(o)},hasDuration:function(){var t=this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper,arguments),e=t.start_date,n=t.end_date,i=t.unit;return i?(e=new Date(e),n=new Date(n),e.valueOf()<n.valueOf()):!1},hasWorkTime:function(){return!0},equals:function(t){return t instanceof vc},calculateEndDate:function(){var t=this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper,arguments),e=t.start_date,n=t.duration,i=t.unit,r=t.step;return this.$gantt.date.add(e,r*n,i)}};function Sh(t){this.$gantt=t.$gantt,this.argumentsHelper=gh(this.$gantt),this.calendarManager=t,this.$disabledCalendar=new vc(this.$gantt,this.argumentsHelper)}Sh.prototype={_getCalendar:function(t){var e;if(!this.$gantt.config.work_time)e=this.$disabledCalendar;else{var n=this.calendarManager;t.task?e=n.getTaskCalendar(t.task):t.id?e=n.getTaskCalendar(t):t.calendar&&(e=t.calendar),e||(e=n.getTaskCalendar())}return e},getWorkHours:function(t){t=this.argumentsHelper.getWorkHoursArguments.apply(this.argumentsHelper,arguments);var e=this._getCalendar(t);return e.getWorkHours(t.date)},setWorkTime:function(t,e){return t=this.argumentsHelper.setWorkTimeArguments.apply(this.argumentsHelper,arguments),e||(e=this.calendarManager.getCalendar()),e.setWorkTime(t)},unsetWorkTime:function(t,e){return t=this.argumentsHelper.unsetWorkTimeArguments.apply(this.argumentsHelper,arguments),e||(e=this.calendarManager.getCalendar()),e.unsetWorkTime(t)},isWorkTime:function(t,e,n,i){var r=this.argumentsHelper.isWorkTimeArguments.apply(this.argumentsHelper,arguments);return i=this._getCalendar(r),i.isWorkTime(r)},getClosestWorkTime:function(t){t=this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper,arguments);var e=this._getCalendar(t);return e.getClosestWorkTime(t)},calculateDuration:function(){var t=this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper,arguments),e=this._getCalendar(t);return e.calculateDuration(t)},hasDuration:function(){var t=this.argumentsHelper.hasDurationArguments.apply(this.argumentsHelper,arguments),e=this._getCalendar(t);return e.hasDuration(t)},calculateEndDate:function(e){var e=this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper,arguments),n=this._getCalendar(e);return n.calculateEndDate(e)}};var YE=function(t,e){return{getWorkHours:function(n){return e.getWorkHours(n)},setWorkTime:function(n){return e.setWorkTime(n)},unsetWorkTime:function(n){e.unsetWorkTime(n)},isWorkTime:function(n,i,r){return e.isWorkTime(n,i,r)},getClosestWorkTime:function(n){return e.getClosestWorkTime(n)},calculateDuration:function(n,i,r){return e.calculateDuration(n,i,r)},_hasDuration:function(n,i,r){return e.hasDuration(n,i,r)},calculateEndDate:function(n,i,r,a){return e.calculateEndDate(n,i,r,a)},mergeCalendars:oe(t.mergeCalendars,t),createCalendar:oe(t.createCalendar,t),addCalendar:oe(t.addCalendar,t),getCalendar:oe(t.getCalendar,t),getCalendars:oe(t.getCalendars,t),getResourceCalendar:oe(t.getResourceCalendar,t),getTaskCalendar:oe(t.getTaskCalendar,t),deleteCalendar:oe(t.deleteCalendar,t)}},GE={create:YE};function vh(t){var e=new Ih(t),n=new Sh(e),i=GE.create(e,n);Ji(t,i)}var Ch={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 Dh(t={}){let e=t.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},e),locale:t.locale||Ch,templates:t.templates||{},getTask:t.getTask||function(i){return null},isTaskExists:t.isTaskExists||function(i){return!1},isSummaryTask:t.isSummaryTask||function(i){return!1},getState:function(){return{group_mode:!1}},callEvent:function(i,r){let a=t.onEvent;return a&&a(i,r),!0},attachEvent:function(){return 0},checkEvent:function(){return!1},detachEvent:function(){},defined:fh,mixin:Ji,copy:ve,assert:function(i,r){if(!i){if(t.throwOnAssert)throw new Error("[calendar] "+r);t.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=mh(n),n.date.init(),vh(n),n}function $E(t={}){let e=Dh(t);return{addCalendar:function(n){return e.addCalendar(n)},deleteCalendar:function(n){return e.deleteCalendar(n)},getCalendar:function(n){return e.getCalendar(n)},getCalendars:function(){return e.getCalendars()},mergeCalendars:function(){return e.mergeCalendars.apply(e,arguments)},getTaskCalendar:function(n){return e.getTaskCalendar(n)},getResourceCalendar:function(n){return e.getResourceCalendar(n)},setWorkTime:function(n){return e.setWorkTime(n)},unsetWorkTime:function(n){return e.unsetWorkTime(n)},isWorkTime:function(){return e.isWorkTime.apply(e,arguments)},getClosestWorkTime:function(){return e.getClosestWorkTime.apply(e,arguments)},getWorkHours:function(){return e.getWorkHours.apply(e,arguments)},calculateDuration:function(){return e.calculateDuration.apply(e,arguments)},calculateEndDate:function(){return e.calculateEndDate.apply(e,arguments)},_internals:e}}var Th={createCalendar:$E};var OJ=3600*1e3;function Rh(t){return{getActivity(e){return t.getActivity(e)}}}var{createCalendar:qE}=Th,Vr="__replay_default__";function zE(t){if(!t||t.length===0||typeof t[0]=="string")return t;let e=t.map(Number);if(e.some(a=>Number.isNaN(a)))return t;let n=e[0],i=e[e.length-1];return e.every((a,o)=>a===n+o)?[`${n}:00-${i+1}:00`]:t}var _h={hours:["8:00-16:00"],days:[!1,!0,!0,!0,!0,!0,!1]},Eh="__main_global__",JE={hours:["8:00-12:00","13:00-17:00"],days:[!1,!0,!0,!0,!0,!0,!1]};function Ph(t){return!t||t.hours===void 0||t.hours.length>0||t.days?.some(e=>Array.isArray(e)&&e.length>0)===!0?!0:Object.values(t.dates??{}).some(e=>Array.isArray(e)&&e.length>0)}function XE(t){let e={};if(Array.isArray(t.days))for(let i=0;i<t.days.length;i+=1)e[i]=t.days[i];if(t.dates)for(let[i,r]of Object.entries(t.dates))e[i]=r;let n={hours:zE(t.hours),dates:e};return t.customWeeks&&(n.customWeeks=t.customWeeks),n}function jo(t){let e=qE({config:{work_time:!0}});e.addCalendar({id:Vr,worktime:_h}),e.addCalendar({id:Eh,worktime:JE});let n=new Set(t.filter(d=>!Ph(d.worktime)).map(d=>String(d.id))),i=t.filter(d=>Ph(d.worktime));for(let d of i)e.addCalendar({id:d.id,worktime:d.worktime?XE(d.worktime):_h});let r=uh(e),a=r.getCalendar(Vr),o=r.getCalendar(Eh);if(!a||!o)throw new Error("[replay-calendar] fallback calendars failed to register in work-calendar instance");let s=new Set([Vr]);for(let d of i)s.add(String(d.id));let l=new Map;return{reader:{getCalendar(d){let u=String(d),p=l.get(u);if(p)return p;let f=a;return s.has(u)?f=r.getCalendar(d)??a:n.has(u)&&(f=o),l.set(u,f),f}}}}function kh(t){return{hasChildren(e){return t.hasChildren(e)},getParentStartDateIfHasPredecessors(e){let n=t.getActivity(e);if(!n)return null;let i=t.getParent(n.id);return!i||t.getIncomingLinkIds(i.id).length===0?null:i.startDate},getDescendantIds(e){return ZE(t,e).map(n=>String(n))},getAncestorIds(e){let n=[],i=t.getActivity(e);for(;i;){let r=i.parentId;if(r===null)break;let a=t.getActivity(r);if(!a)break;n.push(String(r)),i=a}return n},getChildProgressInfo(e){return t.getChildren(e).map(i=>{let r=t.getActivity(i);return{id:i,progress:Number(r?.progress??0),ponderator:Number(r?.ponderator??0)}})},getChildHhInfo(e){return t.getChildren(e).map(i=>{let r=t.getActivity(i);return{id:i,workHours:Number(r?.workHours??0),progress:Number(r?.progress??0),realWorkHours:Number(r?.realWorkHours??0)}})},getChildUsedCostInfo(e){return t.getChildren(e).map(i=>{let r=t.getActivity(i);return{id:i,usedCost:Number(r?.usedCost??0)}})},getChildCostInfo(e){return t.getChildren(e).map(i=>{let r=t.getActivity(i);return{id:i,cost:Number(r?.cost??0)}})}}}function ZE(t,e){let n=[],i=new $t;for(let r of t.getChildren(e))i.enqueue(r);for(;!i.isEmpty();){let r=i.dequeue();n.push(r);for(let a of t.getChildren(r))i.enqueue(a)}return n}var Wo=class{_cache={closestWorkTime:new Map,endDate:new Map,duration:new Map};reader;constructor(e){this.reader=e.reader}resolveCalendar(e){let n=Lh(e);return this.reader.getCalendar(n??Vr)}getClosestWorkTime(e){let n=`${Dc(e.task)}|${e.dir}|${e.date.getTime()}`;return Cc(this._cache.closestWorkTime,n,()=>this.resolveCalendar(e.task).getClosestWorkTime({direction:e.dir,date:e.date,unit:dt.HOUR}))}isWorkTime(e){return this.resolveCalendar(e.task).isWorkTime(e.date,dt.MINUTE)}calculateEndDate(e){let n=`${Dc(e.task)}|${e.startDate.getTime()}|${e.durationHours}`;return Cc(this._cache.endDate,n,()=>this.resolveCalendar(e.task).calculateEndDate(e.startDate,e.durationHours))}calculateDuration(e){let n=`${Dc(e.task)}|${e.startDate.getTime()}|${e.endDate.getTime()}`;return Cc(this._cache.duration,n,()=>this.resolveCalendar(e.task).calculateDuration(e.startDate,e.endDate))}clearCache(){this._cache.closestWorkTime.clear(),this._cache.endDate.clear(),this._cache.duration.clear()}};function Cc(t,e,n){let i=t.get(e);if(i!==void 0)return i;let r=n();return t.set(e,r),r}var QE="__default__";function Lh(t){if(!t)return null;let e=t.calendarId;return e==null?null:String(e)}function Dc(t){return Lh(t)??QE}var Vo=class{constructor(e){this.activities=e}activities;_childrenByParent=new Map;_roots=[];_dirty=!1;markDirty(){this._dirty=!0}getChildren(e){return this._dirty&&(this.rebuild(),this._dirty=!1),this._childrenByParent.get(String(e))??[]}hasChildren(e){return this._dirty&&(this.rebuild(),this._dirty=!1),(this._childrenByParent.get(String(e))?.length??0)>0}getRootIds(){return this._dirty&&(this.rebuild(),this._dirty=!1),[...this._roots]}isChildOf(e,n){let i=this.activities.get(e)?.parentId,r=0,a=this.activities.size;for(;i&&!W(i);){if(i===n)return!0;if(++r>a)return!1;i=this.activities.get(i)?.parentId}return!1}getParent(e){let n=this.activities.get(e)?.parentId;return!n||W(n)?null:this.activities.get(n)??null}getParentId(e){return this.activities.get(e)?.parentId??null}addChild(e,n){if(this._dirty)return;if(W(e)){this._roots.push(n);return}let i=String(e),r=this._childrenByParent.get(i);r?r.push(n):this._childrenByParent.set(i,[n])}rebuild(){this._childrenByParent.clear(),this._roots=[];for(let n of this.activities.values()){if(W(n.parentId)){this._roots.push(n.id);continue}let i=String(n.parentId),r=this._childrenByParent.get(i)??[];r.push(n.id),this._childrenByParent.set(i,r)}let e=(n,i)=>{let r=this.activities.get(n),a=this.activities.get(i);return r&&a?yi(r,a):String(n).localeCompare(String(i))};this._roots.sort(e);for(let n of this._childrenByParent.values())n.sort(e)}};var Ko=class{checkedSet=new Set;hiddenSet=new Set;activeFilter=null;activeOrder=null;isChecked(e){return this.checkedSet.has(e)}isVisible(e){return!this.hiddenSet.has(e)}hiddenIds(){return[...this.hiddenSet]}getActiveFilter(){return this.activeFilter}setActiveFilter(e){this.activeFilter=e}getActiveOrder(){return this.activeOrder}setActiveOrder(e){this.activeOrder=e}checkedIds(){return[...this.checkedSet]}checkedCount(){return this.checkedSet.size}setChecked(e,n){return n===this.checkedSet.has(e)?!1:(n?this.checkedSet.add(e):this.checkedSet.delete(e),!0)}setVisible(e,n){return n===!this.hiddenSet.has(e)?!1:(n?this.hiddenSet.delete(e):this.hiddenSet.add(e),!0)}forget(e){this.checkedSet.delete(e),this.hiddenSet.delete(e)}hydrate(e){this.checkedSet=new Set(e.checkedIds??[]),this.hiddenSet=new Set(e.hiddenIds??[]),this.activeFilter=null,this.activeOrder=null}snapshot(){return{checked:new Set(this.checkedSet),hidden:new Set(this.hiddenSet),activeFilter:this.activeFilter,activeOrder:this.activeOrder}}restore(e){this.checkedSet=new Set(e.checked),this.hiddenSet=new Set(e.hidden),this.activeFilter=e.activeFilter,this.activeOrder=e.activeOrder}};function Pc(t,e,n,i,r,a){return{valueId:e,id:t,label:n,color:i,level:r,sequence:a,children:new Map,activities:[]}}function Oh(t,e,n,i,r){let{attributeKey:a,startLevel:o,depth:s}=e;for(let l of t){let c=n.assignmentByActivityId.get(String(l.id)),d=c===void 0?[]:Fd(n,c,o,s),u=d.length===0?[Mn]:d,p=i;u.forEach((f,y)=>{let h=p.children.get(f);if(h===void 0){let m=n.valueById.get(f);h=Pc(r?Aa(p.id,a,f):ga(a,f),f,m?.label??(f===Mn?ya:f),m?.color??null,i.level+1+y,m?.sequence??Number.MAX_SAFE_INTEGER),p.children.set(f,h)}p=h}),p.activities.push(l)}return i}function bh(t){let e=t.activities.length;for(let n of t.children.values())e+=bh(n);return e}function Tc(t,e){let n=[...t.children.values()];return n.sort((i,r)=>i.valueId===Mn?1:r.valueId===Mn?-1:i.sequence!==r.sequence?i.sequence-r.sequence:i.valueId.localeCompare(r.valueId)),e===Vt.DESCENDING&&n.reverse(),n}var tP=1,eP=Number.POSITIVE_INFINITY;function _c(t){return{kind:pi.ACTIVITY,activityId:String(t.id)}}function nP(t,e,n){let i=[],r=new Map;for(let a of e){if(!t.has(String(a.id)))continue;let o=n(a.id),s=o===null?null:String(o);if(s===null||!t.has(s)){i.push(a);continue}let l=r.get(s);l===void 0?r.set(s,[a]):l.push(a)}return{roots:i,childrenOf:r}}function Nh(t,e){let{roots:n,childrenOf:i}=nP(t,e.activitiesInVisualOrder,e.parentOf),r=e.wbsDepth??eP,a=l=>i.get(String(l.id))??[],o=l=>{let c=[],d=u=>{for(let p of u){let f=a(p);f.length===0?c.push(p):d(f)}};return d(l),c},s=(l,c)=>{if(c>r){let d=o(l),u=e.comparator===null?d:Da(d,e.comparator,e.orderMode,()=>!1);for(let p of u)e.rows.push(_c(p));return}for(let d of l){e.rows.push(_c(d));let u=a(d);u.length>0&&s(u,c+1)}};s(n,tP)}function iP(t,e){let n=new Set(t.map(i=>String(i.id)));for(let i of t){let r=e.parentOf(i.id);for(;r!==null;)n.add(String(r)),r=e.parentOf(r)}Nh(n,e)}function rP(t,e){let{rows:n}=e;if(e.group.includeWbs){iP(t.activities,{activitiesInVisualOrder:e.activitiesInVisualOrder,parentOf:e.parentOf,wbsDepth:e.wbsDepth,comparator:e.comparator,orderMode:e.orderMode,rows:n});return}for(let i of Da([...t.activities],e.comparator,e.orderMode,e.hasChildren))n.push({kind:pi.ACTIVITY,activityId:String(i.id)})}function Ec(t,e,n,i){let{group:r,rows:a}=i;if(a.push({kind:pi.GROUP,id:t.id,label:t.label,level:t.level,color:t.color,activityCount:bh(t)}),r.collapsedIds.has(t.id))return;for(let s of Tc(t,e))Ec(s,e,n,i);if(t.activities.length===0)return;let o=r.secondary;if(n&&o!=null&&i.secondaryCatalog!=null){let s=Oh(t.activities,o,i.secondaryCatalog,Pc(t.id,"","",null,t.level,0),!0);for(let l of Tc(s,o.direction))Ec(l,o.direction,!1,i);return}rP(t,i)}function Fh(t){let e=t.activitiesInVisualOrder.filter(s=>t.isVisible(s.id));if(t.group===null||t.catalog===null){if(t.wbsDepth===null)return e.map(_c);let s=[];return Nh(new Set(e.map(l=>String(l.id))),{activitiesInVisualOrder:e,parentOf:t.parentOf,wbsDepth:t.wbsDepth,comparator:t.comparator,orderMode:t.orderMode,rows:s}),s}let{group:n,catalog:i}=t,r=Oh(e,n,i,Pc("","","",null,-1,0),!1),a=[],o={group:n,activitiesInVisualOrder:t.activitiesInVisualOrder,parentOf:t.parentOf,hasChildren:t.hasChildren,comparator:t.comparator,orderMode:t.orderMode,wbsDepth:t.wbsDepth,secondaryCatalog:t.secondaryCatalog,rows:a};for(let s of Tc(r,n.direction))Ec(s,n.direction,!0,o);return a}var Yo=class t{catalogs=new Map;group=null;wbsDepth=null;getCatalog(e){return this.catalogs.get(e)??null}getCatalogMap(){return this.catalogs}setCatalogs(e){let n=new Map;for(let i of e)n.set(i.key,bd(i));this.catalogs=n}getGroup(){return this.group}setGroup(e){this.group=e}getWbsDepth(){return this.wbsDepth}setWbsDepth(e){this.wbsDepth=e}clone(){let e=new t;return e.catalogs=new Map(this.catalogs),e.group=this.group===null?null:S(this.group),e.wbsDepth=this.wbsDepth,e}};var aP={settings:null,projectState:null,latestRunLog:null},Xi=class t{_activities=new Map;_missingSchedulingStateCount=0;_lastStartDate=new Map;_promotionSnapshot=new Map;_progressFallback=new Map;_links=new Map;_outgoing=new Map;_incoming=new Map;_hierarchy;_buildOrderComparator;_cache={ids:null,visualOrderIds:null,visualRows:null,orderComparator:null};_writeCapture=new mo;_viewState=new Ko;_viewAttributes=new Yo;_filterProjection=null;_viewStateBefore=null;_lastStartDateBefore=null;_promotionSnapshotBefore=null;_missingSchedulingStateCountBefore=null;_dataDate=aP;_dataDateBefore=null;_calendar;_flags;_calendarSnapshot;_isDataDateEnabled;constructor(e,n=()=>null,i=()=>!0){this._buildOrderComparator=n,this._isDataDateEnabled=i,this._calendarSnapshot=S(e.calendars);for(let r of e.activities)this._activities.set(r.id,r);for(let r of this._activities.values())Tn(r)&&(this._missingSchedulingStateCount+=1);for(let r of e.links){let a={...r,freeSlackHours:r.freeSlackHours??null,isCritical:r.isCritical===!0};this._links.set(String(r.id),a),this._indexLink(a)}this._calendar=new Wo(jo(this._calendarSnapshot)),this._flags=sP(e),this._hierarchy=new Vo(this._activities),this._hierarchy.rebuild()}fork(){let e=new t({activities:this.getAllActivities().map(Be),links:this.getAllLinks().map(n=>({...n})),calendars:S(this._calendarSnapshot)},this._buildOrderComparator,this._isDataDateEnabled);return e._viewState.restore(S(this._viewState.snapshot())),e._lastStartDate=new Map(Array.from(this._lastStartDate,([n,i])=>[n,new Date(i)])),e._promotionSnapshot=new Map(Array.from(this._promotionSnapshot,([n,i])=>[n,S(i)])),e._progressFallback=new Map(this._progressFallback),e._flags=S(this._flags),e._filterProjection=S(this._filterProjection),e._viewAttributes=this._viewAttributes.clone(),e._dataDate=S(this._dataDate),e}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}hasCompleteSchedulingState(){return this._missingSchedulingStateCount===0}restoreFork(e){this._activities=e._activities,this._missingSchedulingStateCount=e._missingSchedulingStateCount,this._lastStartDate=e._lastStartDate,this._promotionSnapshot=e._promotionSnapshot,this._progressFallback=e._progressFallback,this._links=e._links,this._outgoing=e._outgoing,this._incoming=e._incoming,this._hierarchy=e._hierarchy,this._cache=e._cache,this._calendar=e._calendar,this._flags=e._flags,this._viewState=e._viewState,this._viewAttributes=e._viewAttributes,this._filterProjection=e._filterProjection,this._dataDate=e._dataDate}dataDateSettings(){return this._dataDate.settings}isDataDateEnabled(){return this._isDataDateEnabled()}dataDateProjectState(){return this._dataDate.projectState}dataDateLatestRunLog(){return this._dataDate.latestRunLog}setDataDateSettings(e){this._captureDataDateOnce(),this._dataDate={...this._dataDate,settings:S(e)}}setDataDateProjectState(e){this._captureDataDateOnce(),this._dataDate={...this._dataDate,projectState:S(e)}}setDataDateLatestRunLog(e){this._captureDataDateOnce(),this._dataDate={...this._dataDate,latestRunLog:S(e)}}_captureDataDateOnce(){this._writeCapture.peek()!==null&&this._dataDateBefore===null&&(this._dataDateBefore=this._dataDate)}getVisualOrderIds(){return this._cache.visualOrderIds?this._cache.visualOrderIds:(this._cache.visualOrderIds=Gd(this).map(e=>String(e.id)),this._cache.visualOrderIds)}invalidateVisualOrderIds(){this._cache.visualOrderIds=null,this.invalidateVisualRows()}forEachActivity(e){for(let[n,i]of this._activities)e(i,n)}getParentId(e){return this._hierarchy.getParentId(e)}getActivity(e){return this._activities.get(String(e))??null}getLastStartDate(e){return this._lastStartDate.get(String(e))??null}setLastStartDate(e,n){this._captureLastStartDateOnce(),this._lastStartDate.set(String(e),n)}getPromotionSnapshot(e){return this._promotionSnapshot.get(String(e))??null}setPromotionSnapshot(e,n){this._capturePromotionSnapshotOnce(),this._promotionSnapshot.set(String(e),n)}getProgressFallback(e){return this._progressFallback.get(String(e))??null}setProgressFallback(e,n){let i=String(e),r=this._progressFallback.get(i)??null;Object.is(r,n)||(this._writeCapture.noteProgressFallback(i,r),n===null?this._progressFallback.delete(i):this._progressFallback.set(i,n))}_capturePromotionSnapshotOnce(){this._writeCapture.peek()!==null&&this._promotionSnapshotBefore===null&&(this._promotionSnapshotBefore=new Map(this._promotionSnapshot))}_captureLastStartDateOnce(){this._writeCapture.peek()!==null&&this._lastStartDateBefore===null&&(this._lastStartDateBefore=new Map(this._lastStartDate))}getLink(e){return this._links.get(String(e))??null}activityExists(e){return this._activities.has(String(e))}isChecked(e){return this._viewState.isChecked(String(e))}isVisible(e){return this._viewState.isVisible(String(e))}checkedIds(){return this._viewState.checkedIds()}hiddenIds(){return this._viewState.hiddenIds()}setChecked(e,n){return this._captureViewStateOnce(),this._viewState.setChecked(String(e),n)}setVisible(e,n){this._captureViewStateOnce();let i=this._viewState.setVisible(String(e),n);return i&&this.invalidateVisualRows(),i}getActiveFilter(){return this._viewState.getActiveFilter()}setActiveFilter(e){this._captureViewStateOnce(),this._viewState.setActiveFilter(e),this._filterProjection=null,this.invalidateVisualRows()}getFilterProjection(){return this._filterProjection}setFilterProjection(e){this._filterProjection=e}getActiveOrder(){return this._viewState.getActiveOrder()}setActiveOrder(e){this._captureViewStateOnce(),this._viewState.setActiveOrder(e),this.invalidateDerivedOrder()}getOrderComparator(){let e=this._viewState.getActiveOrder();return e===null?(this._cache.orderComparator=null,null):this._cache.orderComparator?this._cache.orderComparator:(this._cache.orderComparator=this._buildOrderComparator(e,this._viewAttributes.getCatalogMap()),this._cache.orderComparator)}getOrderMode(){return this._viewState.getActiveOrder()?.mode??we.STANDARD}invalidateDerivedOrder(){this._cache.orderComparator=null,this._cache.visualOrderIds=null,this.invalidateVisualRows()}getViewAttributeCatalogMap(){return this._viewAttributes.getCatalogMap()}setViewAttributeCatalogs(e){this._viewAttributes.setCatalogs(e),this.invalidateDerivedOrder()}getGroup(){return this._viewAttributes.getGroup()}setGroup(e){this._viewAttributes.setGroup(e),this.invalidateVisualRows()}getWbsDepth(){return this._viewAttributes.getWbsDepth()}setWbsDepth(e){this._viewAttributes.setWbsDepth(e),this.invalidateVisualRows()}invalidateVisualRows(){this._cache.visualRows=null}getVisualRows(){if(this._cache.visualRows)return this._cache.visualRows;let e=this._viewAttributes.getGroup(),n=e===null?null:this._viewAttributes.getCatalog(e.attributeKey),i=e?.secondary==null?null:this._viewAttributes.getCatalog(e.secondary.attributeKey),r=[];for(let a of this.getVisualOrderIds()){let o=this.getActivity(a);o!==null&&r.push(o)}return this._cache.visualRows=Fh({activitiesInVisualOrder:r,isVisible:a=>this.isVisible(a),parentOf:a=>this.getParentId(a),hasChildren:a=>this.hasChildren(a),group:e,catalog:n,secondaryCatalog:i,comparator:this.getOrderComparator(),orderMode:this.getOrderMode(),wbsDepth:this._viewAttributes.getWbsDepth()}),this._cache.visualRows}hydrateViewState(e){this._viewState.hydrate(e),this._filterProjection=null,this.invalidateDerivedOrder()}_captureViewStateOnce(){this._writeCapture.peek()!==null&&this._viewStateBefore===null&&(this._viewStateBefore=this._viewState.snapshot())}getOutgoingLinkIds(e){return this._outgoing.get(String(e))??wh}getIncomingLinkIds(e){return this._incoming.get(String(e))??wh}getChildren(e){return this._hierarchy.getChildren(e)}hasChildren(e){return this._hierarchy.hasChildren(e)}isChildOf(e,n){return this._hierarchy.isChildOf(e,n)}getParent(e){return this._hierarchy.getParent(e)}getRootIds(){return this._hierarchy.getRootIds()}getClosestWorkTime(e){return this._calendar.getClosestWorkTime(e)}isWorkTime(e){return this._calendar.isWorkTime(e)}calculateEndDate(e){return this._calendar.calculateEndDate(e)}calculateDuration(e){return this._calendar.calculateDuration(e)}clearCalendarCache(){this._calendar.clearCache()}get calendarReader(){return this._calendar.reader}batchUpdate(e){e()}updateActivity(e){}getLiveActivity(e){return this.getActivity(e)}getFlags(){return{...this._flags,allCheckedTaskIds:this._viewState.checkedIds()}}getProjectEnd(){return null}beginWriteCapture(){this._writeCapture.begin(),this._viewStateBefore=null,this._lastStartDateBefore=null,this._promotionSnapshotBefore=null,this._missingSchedulingStateCountBefore=this._missingSchedulingStateCount,this._dataDateBefore=null}peekWriteCapture(){return this._writeCapture.peek()}endWriteCapture(){this._writeCapture.end(),this._viewStateBefore=null,this._lastStartDateBefore=null,this._promotionSnapshotBefore=null,this._missingSchedulingStateCountBefore=null,this._dataDateBefore=null}setActivityField(e,n,i){let r=this.getActivity(e);if(!r)return;let a=Tn(r);this._writeCapture.note(String(e),r),r[n]=i,this._updateSchedulingStateCount(a,r),kc(r,n),n===B.PARENT&&this._hierarchy.markDirty(),Rc(n)&&(this._cache.visualOrderIds=null)}setActivityFieldDynamic(e,n,i){let r=this.getActivity(e);if(!r)return;if(!Object.hasOwn(r,n))throw new Error(`setActivityFieldDynamic: unknown CoreActivity field "${n}"`);let a=Tn(r);this._writeCapture.note(String(e),r),Reflect.set(r,n,dh(n,i)),this._updateSchedulingStateCount(a,r),kc(r,n),n===B.PARENT&&this._hierarchy.markDirty(),Rc(n)&&(this._cache.visualOrderIds=null)}setActivityFields(e,n){let i=this.getActivity(e);if(!i)return;let r=Tn(i);this._writeCapture.note(String(e),i);let a=!1;for(let o of Object.keys(n))Reflect.set(i,o,Reflect.get(n,o)),kc(i,o),o===B.PARENT&&(a=!0),Rc(o)&&(this._cache.visualOrderIds=null);this._updateSchedulingStateCount(r,i),a&&this._hierarchy.markDirty()}addLink(e){this._writeCapture.noteLinkAdd(String(e.id));let n=this._links.get(String(e.id));n&&this._deindexLink(n);let i={...e,freeSlackHours:e.freeSlackHours??null,isCritical:e.isCritical===!0};this._links.set(String(e.id),i),this._indexLink(i)}_indexLink(e){xh(this._outgoing,String(e.source),e.id),xh(this._incoming,String(e.target),e.id)}_deindexLink(e){let n=this._outgoing.get(String(e.source));n&&this._outgoing.set(String(e.source),Lc(n,e.id));let i=this._incoming.get(String(e.target));i&&this._incoming.set(String(e.target),Lc(i,e.id))}_removeLinkRef(e,n,i){let r=e.get(n);r&&e.set(n,Lc(r,i))}_insertLinkRefInOrder(e,n,i){let r=new Set;for(let s of this._links.keys()){if(String(s)===String(i))break;r.add(String(s))}let a=[...e.get(n)??[]],o=a.findIndex(s=>!r.has(String(s)));a.splice(o<0?a.length:o,0,i),e.set(n,a)}setLinkField(e,n,i){let r=this.getLink(e);r&&(this._writeCapture.noteLinkField(String(e),r),r[n]=i)}setLinkEndpoints(e,n,i){let r=this.getLink(e);if(!r)return;let a=String(r.source)!==String(n),o=String(r.target)!==String(i);!a&&!o||(this._writeCapture.noteLinkField(String(e),r),a&&(this._removeLinkRef(this._outgoing,String(r.source),r.id),r.source=n,this._insertLinkRefInOrder(this._outgoing,String(n),r.id)),o&&(this._removeLinkRef(this._incoming,String(r.target),r.id),r.target=i,this._insertLinkRefInOrder(this._incoming,String(i),r.id)))}setLinkFieldDynamic(e,n,i){let r=this.getLink(e);if(r){if(n===Jt.SOURCE){this.setLinkEndpoints(e,String(i),r.target);return}if(n===Jt.TARGET){this.setLinkEndpoints(e,r.source,String(i));return}oP(n)&&(this._writeCapture.noteLinkField(String(e),r),Reflect.set(r,n,i))}}setLinkProplannerId(e,n){let i=this.getLink(e);i&&(this._writeCapture.noteLinkField(String(e),i),i.proplannerId=n)}removeLink(e){let n=this.getLink(e);n&&(this._writeCapture.noteLinkRemove(String(e),n),this._links.delete(String(e)),this._deindexLink(n))}addActivity(e){this._writeCapture.noteInsert(String(e.id));let n=this._activities.get(e.id);n&&Tn(n)&&(this._missingSchedulingStateCount-=1),this._activities.set(e.id,e),Tn(e)&&(this._missingSchedulingStateCount+=1),this._cache.ids=null,this._cache.visualOrderIds=null,this._hierarchy.addChild(e.parentId,e.id)}removeActivity(e){let n=this.getActivity(e);n&&this._writeCapture.noteRemove(String(e),n),n&&Tn(n)&&(this._missingSchedulingStateCount-=1);let i=String(e);this.setProgressFallback(i,null),(this._viewState.isChecked(i)||!this._viewState.isVisible(i))&&this._captureViewStateOnce(),this._viewState.forget(i),this._activities.delete(e),this._lastStartDate.has(String(e))&&(this._captureLastStartDateOnce(),this._lastStartDate.delete(String(e))),this._outgoing.delete(String(e)),this._incoming.delete(String(e)),this._cache.ids=null,this._cache.visualOrderIds=null,this._hierarchy.markDirty()}noteCorrelativeBefore(e,n){this._writeCapture.noteCorrelativeBefore(e,n)}noteScheduledBefore(e,n){this._writeCapture.noteScheduledBefore(e,n)}restoreFromCapture(){let e=this._writeCapture.peek();if(!e)return;let{ops:n,before:i,correlativeBefore:r,scheduledBefore:a,progressFallbackBefore:o}=e;this._undoLinkAdds(n),this._undoInserts(n),this._reInsertRemovedActivities(n),this._reAddRemovedLinks(n),this._restoreLinkFields(n),this._restoreActivityFields(a),this._restoreActivityFields(i),this._restoreCorrelatives(r),this._restoreProgressFallbacks(o),this._missingSchedulingStateCountBefore!==null&&(this._missingSchedulingStateCount=this._missingSchedulingStateCountBefore),this._dataDateBefore!==null&&(this._dataDate=this._dataDateBefore),this._viewStateBefore!==null&&(this._viewState.restore(this._viewStateBefore),this._filterProjection=null,this.invalidateDerivedOrder()),this._promotionSnapshotBefore!==null&&(this._promotionSnapshot=this._promotionSnapshotBefore),this._lastStartDateBefore!==null&&(this._lastStartDate=this._lastStartDateBefore),this._cache.ids=null,this._cache.visualOrderIds=null,this._hierarchy.markDirty()}_restoreProgressFallbacks(e){for(let[n,i]of e)i===null?this._progressFallback.delete(n):this._progressFallback.set(n,i)}_restoreCorrelatives(e){for(let[n,i]of e){let r=this._activities.get(n);r&&(r.correlativeId=i)}}_undoLinkAdds(e){for(let n of e)n.kind===Ct.LINK_ADD&&this._detachLink(n.linkId)}_undoInserts(e){for(let n of e)n.kind===Ct.INSERT&&this._activities.delete(n.activityId)}_reInsertRemovedActivities(e){for(let n of e)n.kind===Ct.REMOVE&&this._activities.set(n.activityId,n.before)}_reAddRemovedLinks(e){for(let n of e)n.kind===Ct.LINK_REMOVE&&this._attachLink(n.before)}_restoreLinkFields(e){for(let n of e){if(n.kind!==Ct.LINK_FIELD)continue;let i=this._links.get(n.linkId);if(i){this.setLinkEndpoints(n.linkId,n.before.source,n.before.target);for(let r of Object.keys(i))Object.hasOwn(n.before,r)||Reflect.deleteProperty(i,r);Object.assign(i,n.before)}}}_restoreActivityFields(e){for(let[n,i]of e){let r=this._activities.get(n);r&&this._restoreScalarFields(r,i)}}_restoreScalarFields(e,n){for(let i of Object.keys(e))Object.hasOwn(n,i)||Reflect.deleteProperty(e,i);for(let i of Object.keys(n))Reflect.set(e,i,Reflect.get(n,i))}_updateSchedulingStateCount(e,n){let i=Tn(n);e!==i&&(this._missingSchedulingStateCount+=i?1:-1)}_attachLink(e){this._links.set(String(e.id),{...e}),this._indexLink(e)}_detachLink(e){let n=this.getLink(e);n&&(this._links.delete(String(e)),this._deindexLink(n))}},wh=[];function oP(t){return t===Jt.LAG||t===Jt.TYPE||t===Jt.FREE_SLACK_HOURS||t===Jt.IS_CRITICAL}function Rc(t){return t===B.PARENT||t===B.CORRELATIVE_ID}function Tn(t){return t.type!==L.PROJECT&&t.p6===void 0}function kc(t,e){e!==B.START_DATE&&e!==B.END_DATE&&e!==B.TYPE||(t.calendarDuration=Pe(t))}function Lc(t,e){return t.filter(n=>String(n)!==String(e))}function xh(t,e,n){let i=t.get(e);i?i.push(n):t.set(e,[n])}function sP(t){let e=t.runtimeFlags??{};return{isPasting:!!e.isPasting,isBulkOperation:!!e.isBulkOperation,dragWithMultiple:!!e.dragWithMultiple,draggingSingleMilestone:!!e.draggingSingleMilestone,creatingActivity:!1,avoidAutoScheduleBeforeDrag:!1,maxPerformance:!!e.maxPerformance,allCheckedTaskIds:[]}}function Kr(t,e){let n=t.getActivity(e);return n?S(n):null}function Mh(t){return t.getAllActivities().map(S)}function Uh(t){return t.getAllIds().map(String)}function Hh(t,e){t.forEachActivity((n,i)=>e(i))}function Bh(t,e){let n=e==="0"?Oc(t,"0"):t.getChildren(e),i=[];for(let r of n){let a=t.getActivity(r);a&&i.push(S(a))}return i.sort((r,a)=>(r.correlativeId??0)-(a.correlativeId??0)),i}function Oc(t,e){return le(e,t)}function jh(t){return t.checkedIds().map(String)}function Wh(t,e){if(e==="0"){let n=!1;return t.forEachActivity(i=>{n||=W(i.parentId)}),n}return t.getChildren(e).length>0}function bc(t,e){let n=t.getLink(e);return n?te(n):null}function Vh(t){return t.getAllLinks().map(e=>te(e))}function Go(t){let[e,n]=t.split(":");return Number(e)*60+Number(n??0)}function lP(t){return t.reduce((e,n)=>Go(n)<Go(e)?n:e)}function cP(t){return t.reduce((e,n)=>Go(n)>Go(e)?n:e)}function dP(t){return t.worktime.days.flatMap(e=>Array.isArray(e)?e:e===!0?t.worktime.hours:[])}function Kh(t){let e=[...t].find(a=>a.is_default);if(!e)return null;let n=dP(e);if(n.length===0)return null;let i=n.map(a=>a.split("-")[0]),r=n.map(a=>a.split("-")[1]);return{startHour:lP(i),endHour:cP(r)}}var Yh=1440*60*1e3,Gh=/^(\d{4})[/-](\d{1,2})[/-](\d{1,2})/,$o=7,Nc=[!1,!0,!0,!0,!0,!0,!1],$h=new Set(["1","true"]),Fc=ct.DURATION,qh=_.ASAP,zh={ASAP:_.ASAP,ALAP:_.ALAP,SNET:_.SNET,SNLT:_.SNLT,FNET:_.FNET,FNLT:_.FNLT,MSO:_.MSO,MFO:_.MFO,"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 zo(t,e,n,i=null){let o=(t!==void 0&&t.length>0?t:e??[]).map(l=>uP(l,i)),s=(n??[]).map(l=>pP(l,i));return{calendars:o,baseCalendars:s,knownCalendarIds:new Set(o.map(l=>l.id)),defaultCalendarId:wc(o)}}function wc(t){let e=null;for(let n of t)if(e??=n.id,n.is_default)return n.id;return e}function Qh(t,e){let n=AP(t.working_days),{days:i,hours:r}=gP(t,n),a=fP(e.exceptionsSource,e.exceptionRange),o={days:i,hours:r};return a&&(o.dates=a),{id:`${String(t.id)}${e.idSuffix}`,name:t.name,is_default:e.isDefault,...e.baseDefault!==void 0?{baseDefault:e.baseDefault}:{},worktime:o}}function uP(t,e){let n=t.baseDefault,i=typeof n=="boolean"?n:void 0;return Qh(t,{idSuffix:"",isDefault:!!t.is_default,baseDefault:i,exceptionsSource:t.exceptiondays,exceptionRange:e})}function pP(t,e){return Qh(t,{idSuffix:"-base",isDefault:!1,baseDefault:!!t.is_default,exceptionsSource:t.baseexceptiondays??t.exceptiondays,exceptionRange:e})}function fP(t,e){if(!Array.isArray(t)||t.length===0)return null;let n={};for(let i of t){if(!i)continue;let r=yP(i.from_date,i.to_date,e);if(r.length===0)continue;let a=hP(i);if(a!==void 0)for(let o of r)n[o]=a}return Object.keys(n).length>0?n:null}function yP(t,e,n){let i=Jh(t),r=Jh(e);if(i===null||r===null)return[];if(n&&(r<n.start||i>n.end))return[];let a=[],o=n?Math.max(i,n.start):i,s=n?Math.min(r,n.end):r;for(;o<=s;)a.push(String(o)),o+=Yh;return a}function Jh(t){if(typeof t!="string")return null;let e=Gh.exec(t.trim());if(!e)return null;let n=Number(e[1]),i=Number(e[2]),r=Number(e[3]);return Number.isFinite(n)&&Number.isFinite(i)&&Number.isFinite(r)?Date.UTC(n,i-1,r):null}function hP(t){if(t.workable===!1)return!1;let e=t.shifts;if(Array.isArray(e)&&e.length>0){let n=mP(e);if(n.length>0)return n}}var Xh=/^\d{1,2}:\d{2}$/;function mP(t){let e=[];for(let n of t){let i=nm(n?.shift_string);if(!i)continue;if(!i.startsCsv.includes(",")&&!i.endsCsv.includes(",")){let s=i.startsCsv.trim(),l=i.endsCsv.trim();!qo(s)&&!qo(l)&&Xh.test(s)&&Xh.test(l)&&e.push(`${s}-${l}`);continue}let o=em(i.startsCsv,i.endsCsv).find(s=>s!==null);o&&e.push(o)}return e.sort(tm),e}function Zh(t){let e=t.indexOf("-"),n=e>0?t.slice(0,e):t,[i,r]=n.split(":");return(Number(i)||0)*60+(Number(r)||0)}function tm(t,e){return Zh(t)-Zh(e)}function gP(t,e){let n=Array.from({length:7},()=>[]),i=(c,d)=>{let u=em(c,d);for(let p=0;p<7;p+=1){let f=u[p],y=n[p];f&&y&&y.push(f)}},r=Array.isArray(t.shifts)&&t.shifts.length>0,a=typeof t.shift_start=="string"&&typeof t.shift_end=="string";if(r)for(let c of t.shifts){let d=nm(c?.shift_string);d&&i(d.startsCsv,d.endsCsv)}else a&&i(t.shift_start,t.shift_end);for(let c of n)c.sort(tm);let s=n.find((c,d)=>!!e[d]&&c.length>0)??[];return{days:e.map((c,d)=>{if(!c)return!1;let u=n[d];return u&&u.length>0?u:s}),hours:s}}function em(t,e){let n=Array.from({length:$o},()=>null);if(typeof t!="string"||typeof e!="string")return n;let i=t.split(",").map(s=>s.trim()),r=e.split(",").map(s=>s.trim());if(!(i.length===r.length&&i.length>0&&i.length<=$o))return n;let o=[...n];for(let s=0;s<i.length;s+=1){let l=i[s],c=r[s];qo(l)||qo(c)||(o[s]=`${l}-${c}`)}return o}function nm(t){if(typeof t!="string")return null;let e=t.indexOf("-");return e<=0?null:{startsCsv:t.slice(0,e),endsCsv:t.slice(e+1)}}function AP(t){if(typeof t!="string")return[...Nc];let e=t.split(",").map(n=>n.trim());return e.length!==$o?[...Nc]:e.map(n=>$h.has(n))}var IP=new Set(["false","null"]);function qo(t){return!t||IP.has(t)}function Jo(t,e){return{calendars:t.calendarReader,hasCalendar:n=>e.calendars.has(n),getDefaultCalendarId:()=>wc(e.calendars.values()),hierarchy:kh(t),activityReader:Rh(t),dateFormat:e.dateFormat??"YYYY-MM-DD",customHours:e.customHours??{},hoursPerDay:e.hoursPerDay}}function im(t){return Qn(t)}var SP=new Set(["freeSlackHours","isCritical"]);function vP(t,e){let n=Object.fromEntries(Object.entries(t.fields??{}).filter(([i])=>!e.has(i)));return t.kind===H.UPDATED&&Object.keys(n).length===0?null:{...t,...t.fields===void 0?{}:{fields:n},after:null}}function Yr(t){let e=t.activities.map(r=>({...r,after:null})),n=t.links.map(r=>vP(r,SP)).filter(r=>r!==null),i=t.source.kind===Xe?{...t.source,items:[],links:[]}:t.source;return S({...t,source:i,activities:e,links:n})}function Qi(t,e,n,i,r,a,o){return{changeSet:t,beforeSnap:e,beforeLinks:rm(n),afterSnap:i,afterLinks:rm(r),progressFallbackBefore:a,progressFallbackAfter:o}}function rm(t){if(t)return new Map(Array.from(t,([e,n])=>[e,{...n,freeSlackHours:null,isCritical:!1}]))}function sm(t,e){let n=new Map,i=new Map;for(let r of e.activities){if(r.kind!==H.CREATED)continue;let a=t.getActivity(String(r.id));a&&n.set(String(r.id),et(a))}for(let r of e.links){if(r.kind===H.DELETED)continue;let a=t.getLink(String(r.id));a&&i.set(String(r.id),{...a})}return{afterSnap:n,afterLinks:i}}function lm(t){return t.kind!==A.INLINE_EDIT||!xr.has(t.column)?null:`inline-edit:${String(t.activityId)}:${t.column}`}function am(t){return t.changeSet.activities.length===1&&t.changeSet.activities[0]?.kind===H.UPDATED&&t.changeSet.links.length===0&&!t.beforeSnap?.size&&!t.afterSnap?.size}function cm(t,e){if(!am(t)||!am(e))return!1;let n=t.changeSet.activities[0],i=e.changeSet.activities[0];return!!n&&!!i&&String(n.id)===String(i.id)}function dm(t,e){let n=t.changeSet.activities[0],i=e.changeSet.activities[0];if(!n||!i)return e;let r=n.fields??{},a=i.fields??{},o={};for(let l of new Set([...Object.keys(r),...Object.keys(a)])){let c=r[l],d=a[l];o[l]={before:c?c.before:d?.before,after:d?d.after:c?.after}}let s={...e.changeSet,activities:[{...i,fields:o}]};return Qi(s)}var Zi={RECORD:"record",SKIP:"skip",CHECKPOINT_ON_SUCCESS:"checkpoint-on-success"},Et={BEFORE:"before",AFTER:"after"};function um(t){return t.kind===A.PERSISTENCE_ACKNOWLEDGE?Zi.CHECKPOINT_ON_SUCCESS:t.kind===A.SIR_SYNC||t.kind===A.CALENDAR_RECONCILE||t.kind===A.ACTIVITY_LOOKAHEAD_SYNC||t.kind===A.BASELINE_APPLY||t.kind===A.PONDERATOR_CRITERION_SET||t.kind===A.STATUS_CRITERIA_SET||t.kind===A.ACTIVITY_CLIPBOARD_CLEAR||t.kind===A.ACTIVITY_CLIPBOARD_IMPORT||t.kind===A.ACTIVITY_COPY||t.kind===A.SELECTION_TOGGLE||t.kind===A.SELECTION_REPLACE||t.kind===A.VISIBILITY_SET||t.kind===A.FILTER_SET||t.kind===A.SORT_SET||t.kind===A.VIEW_ATTRIBUTES_SET||t.kind===A.GROUP_SET||t.kind===A.WBS_DEPTH_SET?Zi.SKIP:Zi.RECORD}function xc(t){for(let e of t.changeSet.activities)if(e.kind===H.CREATED||e.kind===H.DELETED||e.kind===H.UPDATED&&e.fields&&T.CUSTOM_ID in e.fields)return!0;return!1}function Mc(t,e,n,i=()=>({})){let r=[],a=[];for(let s of e.changeSet.activities){let l=String(s.id);if(s.kind===H.UPDATED){let c=t.getActivity(l);r.push({id:l,kind:H.UPDATED,fields:om(s.fields,n),after:c?et(c):null})}else if(s.kind===H.DELETED)if(n===Et.BEFORE){let c=t.getActivity(l);r.push({id:l,kind:H.CREATED,after:c?et(c):null})}else r.push({id:l,kind:H.DELETED,after:null});else if(n===Et.BEFORE)r.push({id:l,kind:H.DELETED,after:null});else{let c=t.getActivity(l);r.push({id:l,kind:H.CREATED,after:c?et(c):null})}}for(let s of e.changeSet.links){let l=String(s.id);if(s.kind===H.UPDATED){let c=t.getLink(l);a.push({id:l,kind:H.UPDATED,fields:om(s.fields,n),after:c?te(c):null})}else if(s.kind===H.DELETED)if(n===Et.BEFORE){let c=t.getLink(l);a.push({id:l,kind:H.CREATED,after:c?te(c):null})}else a.push({id:l,kind:H.DELETED,after:null});else if(n===Et.BEFORE)a.push({id:l,kind:H.DELETED,after:null});else{let c=t.getLink(l);a.push({id:l,kind:H.CREATED,after:c?te(c):null})}}let o=(e.changeSet.viewState??[]).map(s=>n===Et.BEFORE?CP(s):s);return{source:{kind:n===Et.BEFORE?Kt.UNDO:Kt.REDO},activities:r,links:a,calendars:[],trackingEvents:[],effects:[],viewState:o,...i(n)}}function om(t,e){if(t!=null)return Object.fromEntries(Object.entries(t).map(([n,i])=>[n,e===Et.BEFORE?{before:S(i.after),after:S(i.before)}:{before:S(i.before),after:S(i.after)}]))}function CP(t){return{activityId:t.activityId,...t.checked?{checked:{before:t.checked.after,after:t.checked.before}}:{},...t.visible?{visible:{before:t.visible.after,after:t.visible.before}}:{}}}function pm(t,e=!1){return t.activities.length>0||t.links.length>0||e||(t.viewState?.length??0)>0||(t.effects?.length??0)>0}function Uc(t,e,n){fm(t,e,Et.BEFORE,n)}function Hc(t,e,n){fm(t,e,Et.AFTER,n)}function fm(t,e,n,i){let r=e.changeSet;for(let o of r.activities)if(o.kind===H.UPDATED){if(!o.fields)continue;for(let[s,l]of Object.entries(o.fields))ue(t,o.id,s,n===Et.BEFORE?l.before:l.after)}else if(o.kind===H.DELETED)if(n===Et.BEFORE){let s=e.beforeSnap?.get(String(o.id));if(!s)throw new Error(`undo: missing beforeSnap for resurrecting activity ${o.id}`);t.addActivity(et(s))}else t.removeActivity(String(o.id));else if(n===Et.BEFORE)t.removeActivity(String(o.id));else{let s=e.afterSnap?.get(String(o.id));if(!s)throw new Error(`redo: missing afterSnap for re-creating activity ${o.id}`);t.addActivity(et(s))}for(let o of r.links)if(o.kind===H.UPDATED){if(!o.fields)continue;let s=t.getLink(String(o.id)),l=o.fields[Jt.SOURCE],c=o.fields[Jt.TARGET];s&&(l||c)&&t.setLinkEndpoints(String(o.id),String(l?n===Et.BEFORE?l.before:l.after:s.source),String(c?n===Et.BEFORE?c.before:c.after:s.target));for(let[d,u]of Object.entries(o.fields))d===Jt.SOURCE||d===Jt.TARGET||Fp(t,String(o.id),d,n===Et.BEFORE?u.before:u.after)}else if(o.kind===H.DELETED)if(n===Et.BEFORE){let s=e.beforeLinks?.get(String(o.id));if(!s)throw new Error(`undo: missing beforeLinks for re-adding link ${o.id}`);t.addLink(s)}else t.removeLink(String(o.id));else if(n===Et.BEFORE)t.removeLink(String(o.id));else{let s=e.afterLinks?.get(String(o.id));if(!s)throw new Error(`redo: missing afterLinks for re-creating link ${o.id}`);t.addLink(s)}for(let o of r.viewState??[])o.checked&&t.setChecked(o.activityId,n===Et.BEFORE?o.checked.before:o.checked.after),o.visible&&t.setVisible(o.activityId,n===Et.BEFORE?o.visible.before:o.visible.after);let a=n===Et.BEFORE?e.progressFallbackBefore:e.progressFallbackAfter;for(let[o,s]of a??[])t.setProgressFallback(o,s);i?.(r,n)}var DP=100,TP=600,Xo=class t{constructor(e=DP){this.maxDepth=e}maxDepth;undoStack=[];redoStack=[];sequence=0;_lastKey=null;_lastTime=0;fork(){let e=new t(this.maxDepth);return e.undoStack.push(...S(this.undoStack)),e.redoStack.push(...S(this.redoStack)),e.sequence=this.sequence,e._lastKey=this._lastKey,e._lastTime=this._lastTime,e}record(e,n=null,i=0){let r=this.undoStack[this.undoStack.length-1];n!=null&&n===this._lastKey&&i-this._lastTime<=TP&&r!==void 0&&cm(r.entry,e)?(r.entry=dm(r.entry,e),r.touchedAt=this.touch()):(this.undoStack.push({entry:e,touchedAt:this.touch()}),this.undoStack.length>this.maxDepth&&this.undoStack.splice(0,this.undoStack.length-this.maxDepth)),this._lastKey=n,this._lastTime=i,this.redoStack.length=0}resetCoalesce(){this._lastKey=null}takeUndo(){return this.undoStack.pop()?.entry??null}takeRedo(){return this.redoStack.pop()?.entry??null}pushRedo(e){this.redoStack.push({entry:e,touchedAt:this.touch()})}pushUndo(e){this.undoStack.push({entry:e,touchedAt:this.touch()})}restoreTakenUndo(e){this.undoStack.push({entry:e,touchedAt:this.sequence})}restoreTakenRedo(e){this.redoStack.push({entry:e,touchedAt:this.sequence})}canUndo(){return this.undoStack.length>0}canRedo(){return this.redoStack.length>0}undoDepth(){return this.undoStack.length}capturePersistenceBoundary(){return this.resetCoalesce(),this.sequence}discardThrough(e){this.removeEntriesThrough(this.undoStack,e),this.removeEntriesThrough(this.redoStack,e),this.resetCoalesce()}applyPersistedIdentities(e,n){let i=new Map(e.map(({id:a,proplannerId:o})=>[String(a),o])),r=new Map(n.map(({id:a,proplannerId:o})=>[String(a),o]));for(let a of[...this.undoStack,...this.redoStack])a.entry=this.withPersistedIdentities(a.entry,i,r)}clear(){this.undoStack.length=0,this.redoStack.length=0,this.resetCoalesce()}touch(){return this.sequence+=1,this.sequence}removeEntriesThrough(e,n){let i=e.filter(({touchedAt:r})=>r>n);e.splice(0,e.length,...i)}withPersistedIdentities(e,n,i){let r=o=>o===void 0?void 0:new Map(Array.from(o,([s,l])=>[s,n.has(s)?{...l,proplannerId:n.get(s)}:l])),a=o=>o===void 0?void 0:new Map(Array.from(o,([s,l])=>[s,i.has(s)?{...l,proplannerId:i.get(s)}:l]));return{...e,beforeSnap:r(e.beforeSnap),afterSnap:r(e.afterSnap),beforeLinks:a(e.beforeLinks),afterLinks:a(e.afterLinks)}}};var _P=["parentId","correlativeId"];function hm(t,e){let n=new Set,i=r=>{let a=e(r);n.add(a===null?"0":String(a))};for(let r of t.activities){let a=String(r.id);if(r.kind===H.CREATED){i(a);continue}if(r.kind===H.DELETED){let l=r.fields;l&&"parentId"in l&&n.add(ym(l.parentId?.before));continue}let o=r.fields;!o||!_P.some(l=>l in o)||(i(a),"parentId"in o&&n.add(ym(o.parentId?.before)))}return n}function ym(t){return t==null?"0":String(t)}function EP(t){return{...t,id:String(t.id),source:String(t.source),target:String(t.target),type:t.type,lag:Number(t.lag)}}function PP(t){return{days:t.days,hours:t.hours,...t.dates?{dates:t.dates}:{},...t.customWeeks?{customWeeks:t.customWeeks}:{}}}function mm(t){return{id:String(t.id),worktime:PP(t.worktime)}}function Bc(t,e=[]){return[...t.map(mm),...e.map(mm)]}function Zo(t,e,n,i=[]){return{activities:[...t],links:e.map(EP),calendars:Bc(n,i)}}var j={TRACKED:"tracked",IGNORED:"ignored"};var gm={id:j.IGNORED,proplannerId:j.IGNORED,parentId:j.TRACKED,name:j.TRACKED,description:j.TRACKED,type:j.TRACKED,startDate:j.TRACKED,endDate:j.TRACKED,durationHours:j.TRACKED,constraintType:j.TRACKED,constraintDate:j.TRACKED,autoScheduling:j.TRACKED,calendarId:j.TRACKED,assignedDefaultCalendar:j.IGNORED,dateOrigin:j.TRACKED,progress:j.TRACKED,cost:j.TRACKED,usedCost:j.TRACKED,realCost:j.TRACKED,workHours:j.TRACKED,realWorkHours:j.TRACKED,ponderator:j.TRACKED,hasCustomPonderator:j.TRACKED,correlativeId:j.TRACKED,uniqueCorrelativeId:j.TRACKED,customId:j.TRACKED,subcontractId:j.TRACKED,isLookahead:j.TRACKED,hasLookaheadTasks:j.IGNORED,newActivityIds:j.TRACKED,hasNewActivities:j.TRACKED,isNewActivity:j.IGNORED,pendingRequestIds:j.IGNORED,responsableIds:j.TRACKED,tagIds:j.TRACKED,baselinePoints:j.IGNORED,baselineSnapshot:j.IGNORED,recursiveDurationHours:j.IGNORED,isCritical:j.IGNORED,freeSlackHours:j.IGNORED,calendarDuration:j.IGNORED,baselineVarianceDays:j.IGNORED,expectedProgress:j.IGNORED,expectedProgressBaseline:j.IGNORED,status:j.IGNORED,criticalPath:j.IGNORED,p6:j.IGNORED},Am=Object.keys(gm).filter(t=>gm[t]===j.TRACKED),Im=new Set(["startDate","endDate","constraintDate","dateOrigin"]),Sm=new Set(["newActivityIds","responsableIds","tagIds"]);function vm(t){let e=Am.map(n=>[n,RP(n,t[n])]);return Object.fromEntries(e)}function RP(t,e){return Im.has(t)?e instanceof Date?new Date(e):null:Sm.has(t)?Array.isArray(e)?[...e]:[]:e}function Gr(t,e){return jc(t,e).length>0}function jc(t,e){return Am.filter(n=>!kP(n,t[n],e[n]))}function kP(t,e,n){return Im.has(t)?LP(e,n):Sm.has(t)?OP(e,n):(e??null)===(n??null)}function LP(t,e){let n=t instanceof Date?t.getTime():null,i=e instanceof Date?e.getTime():null;return n===i}function OP(t,e){let n=new Set(Array.isArray(t)?t.map(String):[]),i=new Set(Array.isArray(e)?e.map(String):[]);if(n.size!==i.size)return!1;for(let r of n)if(!i.has(r))return!1;return!0}var Cm={id:j.IGNORED,source:j.TRACKED,target:j.TRACKED,type:j.TRACKED,lag:j.TRACKED,freeSlackHours:j.IGNORED,isCritical:j.IGNORED,ganttId:j.IGNORED,sectorId:j.IGNORED,proplannerId:j.IGNORED},bP=Object.keys(Cm).filter(t=>Cm[t]===j.TRACKED);function Qo(t,e){return bP.some(n=>t[n]!==e[n])}function Dm(t,e){let n=new Map(t.map(i=>[String(i.id),i]));return e.filter(i=>{let r=n.get(String(i.id));return r?Qo(r,i):!1})}function tr(t){if(t===void 0)return["undefined"];if(t===null)return["null"];if(typeof t=="string")return["string",t];if(typeof t=="boolean")return["boolean",t];if(typeof t=="number")return["number",Object.is(t,-0)?"-0":String(t)];if(typeof t=="bigint")return["bigint",String(t)];if(t instanceof Date)return["date",String(t.getTime())];if(Array.isArray(t))return["array",t.map(tr)];if(t instanceof Map)return["map",Array.from(t,([e,n])=>[tr(e),tr(n)]).sort((e,n)=>JSON.stringify(e).localeCompare(JSON.stringify(n)))];if(t instanceof Set)return["set",Array.from(t,tr).sort((e,n)=>JSON.stringify(e).localeCompare(JSON.stringify(n)))];if(typeof t=="object")return["object",Object.entries(t).sort(([e],[n])=>e.localeCompare(n)).map(([e,n])=>[e,tr(n)])];throw new TypeError(`Unsupported canonical value: ${typeof t}`)}function Ot(t){return JSON.stringify(tr(t))}var ts=t=>(t>>>0).toString(16).padStart(8,"0");function Wc(t){let e=1779033703,n=3144134277,i=1013904242,r=2773480762;for(let a=0;a<t.length;a+=1){let o=t.charCodeAt(a);e=n^Math.imul(e^o,597399067),n=i^Math.imul(n^o,2869860233),i=r^Math.imul(i^o,951274213),r=e^Math.imul(r^o,2716044179)}return e=Math.imul(i^e>>>18,597399067),n=Math.imul(r^n>>>22,2869860233),i=Math.imul(e^i>>>17,951274213),r=Math.imul(n^r>>>19,2716044179),`${ts(e^n^i^r)}${ts(n^e)}${ts(i^e)}${ts(r^e)}`}function Tm(t,e){return{p6Settings:S(t),p6ProjectState:S(e)}}function _n(t,e){return Ot(t)!==Ot(e)}function _m(t,e){t.clear();for(let n of e)n.p6!==void 0&&t.set(String(n.id),S(n.p6))}function Em(t,e){let n=e?.p6;return t===void 0&&n===void 0?!1:_n(t,n)}function Pm(t,e){let n=new Map;for(let i of t){let r=e(i)?.p6;r!==void 0&&n.set(i,S(r))}return n}function Ce(t){if(t==null||t===0)return!1;if(!(typeof t=="number"&&Number.isSafeInteger(t)&&t>0))throw new Error(`invalid proplannerId ${String(t)}`);return!0}function Rm(t,e){for(let n of t)Ce(n.proplannerId);for(let n of e)Ce(n.proplannerId)}var es=class t{trackingEnabled;initialized=!1;p6TrackingEnabled=!1;dirtyActivityIds=new Set;dirtyLinkIds=new Set;dirtyP6ActivityIds=new Set;p6SettingsDirty=!1;p6ProjectStateDirty=!1;initialCalendarRepairIds=new Set;linksAtLastSave=new Map;activitiesAtLastSave=new Map;p6SettingsAtLastSave=null;currentP6Settings=null;p6ProjectStateAtLastSave=null;currentP6ProjectState=null;p6LatestRunLogAtLastSave=null;currentP6LatestRunLog=null;p6LatestRunLogDirty=!1;p6ActivitiesAtLastSave=new Map;constructor(e=!0){this.trackingEnabled=e}fork(){let e=new t(!1);return e.initialized=this.initialized,e}clone(){let e=new t(this.trackingEnabled);for(let n of this.dirtyActivityIds)e.dirtyActivityIds.add(n);for(let n of this.dirtyLinkIds)e.dirtyLinkIds.add(n);for(let n of this.dirtyP6ActivityIds)e.dirtyP6ActivityIds.add(n);for(let n of this.initialCalendarRepairIds)e.initialCalendarRepairIds.add(n);for(let[n,i]of this.linksAtLastSave)e.linksAtLastSave.set(n,S(i));for(let[n,i]of this.activitiesAtLastSave)e.activitiesAtLastSave.set(n,S(i));for(let[n,i]of this.p6ActivitiesAtLastSave)e.p6ActivitiesAtLastSave.set(n,S(i));return e.initialized=this.initialized,e.p6TrackingEnabled=this.p6TrackingEnabled,e.p6SettingsDirty=this.p6SettingsDirty,e.p6ProjectStateDirty=this.p6ProjectStateDirty,e.p6LatestRunLogDirty=this.p6LatestRunLogDirty,e.p6SettingsAtLastSave=S(this.p6SettingsAtLastSave),e.currentP6Settings=S(this.currentP6Settings),e.p6ProjectStateAtLastSave=S(this.p6ProjectStateAtLastSave),e.currentP6ProjectState=S(this.currentP6ProjectState),e.p6LatestRunLogAtLastSave=S(this.p6LatestRunLogAtLastSave),e.currentP6LatestRunLog=S(this.currentP6LatestRunLog),e}init(e,n,i=null,r=null,a=null){if(this.trackingEnabled){Rm(e,n),this.snapshotActivities(e),this.snapshotLinks(n),this.p6SettingsAtLastSave=S(i),this.currentP6Settings=S(i),this.p6SettingsDirty=!1,this.p6ProjectStateAtLastSave=S(r),this.currentP6ProjectState=S(r),this.p6ProjectStateDirty=!1,this.p6LatestRunLogAtLastSave=S(a),this.currentP6LatestRunLog=S(a),this.p6LatestRunLogDirty=!1,this.p6TrackingEnabled=i!==null,this.p6TrackingEnabled&&this.snapshotP6Activities(e);for(let o of e)if(o.assignedDefaultCalendar){let s=String(o.id);this.initialCalendarRepairIds.add(s),this.dirtyActivityIds.add(s)}this.initialized=!0}}acknowledge(e,n,i=[],r=[],a,o,s=this.currentP6Settings,l=this.currentP6ProjectState,c=this.currentP6LatestRunLog){if(!this.trackingEnabled)return;let d=new Map(i.map(({id:m,proplannerId:g})=>[String(m),g])),u=new Map(r.map(({id:m,proplannerId:g})=>[String(m),g])),p=e.map(m=>({...m,proplannerId:d.get(String(m.id))??m.proplannerId})),f=n.map(m=>{let g=u.get(String(m.id));return g===void 0?{...m}:{...m,proplannerId:g}});if(Rm(p,f),this.snapshotActivities(p),this.snapshotLinks(f),this.p6SettingsAtLastSave=S(s),this.p6SettingsDirty=_n(this.currentP6Settings,this.p6SettingsAtLastSave),this.p6ProjectStateAtLastSave=S(l),this.p6ProjectStateDirty=_n(this.currentP6ProjectState,this.p6ProjectStateAtLastSave),this.p6LatestRunLogAtLastSave=S(c),this.p6LatestRunLogDirty=_n(this.currentP6LatestRunLog,this.p6LatestRunLogAtLastSave),this.p6TrackingEnabled&&this.snapshotP6Activities(p),!a||!o)return;let y=new Map(a.map(m=>[String(m.id),m])),h=new Map(o.map(m=>[String(m.id),m]));for(let m of p){let g=String(m.id);this.activityIsDirty(g,y.get(g)??null)&&this.dirtyActivityIds.add(g)}for(let m of a){let g=String(m.id);this.activityIsDirty(g,m)&&this.dirtyActivityIds.add(g),this.p6TrackingEnabled&&this.p6ActivityIsDirty(g,m)&&this.dirtyP6ActivityIds.add(g)}if(this.p6TrackingEnabled)for(let m of p){let g=String(m.id);this.p6ActivityIsDirty(g,y.get(g)??null)&&this.dirtyP6ActivityIds.add(g)}for(let m of f){let g=String(m.id);this.linkIsDirty(g,h.get(g)??null)&&this.dirtyLinkIds.add(g)}for(let m of o){let g=String(m.id);this.linkIsDirty(g,m)&&this.dirtyLinkIds.add(g)}}snapshotActivities(e){if(this.trackingEnabled){this.activitiesAtLastSave.clear(),this.dirtyActivityIds.clear(),this.initialCalendarRepairIds.clear();for(let n of e){let i=String(n.id);if(!Ce(n.proplannerId)){this.dirtyActivityIds.add(i);continue}let r=vm(n);this.activitiesAtLastSave.set(String(n.id),{persistable:r,deletedSnapshot:{id:n.id,proplannerId:n.proplannerId,parentId:n.parentId,hadBaseline:n.baselineSnapshot!==null||n.baselinePoints.length>0}}),Gr(n,r)&&this.dirtyActivityIds.add(i)}}}snapshotLinks(e){if(this.trackingEnabled){this.linksAtLastSave.clear(),this.dirtyLinkIds.clear();for(let n of e){let i=String(n.id);if(!Ce(n.proplannerId)){this.dirtyLinkIds.add(i);continue}this.linksAtLastSave.set(String(n.id),{id:n.id,proplannerId:n.proplannerId,source:n.source,target:n.target,lag:n.lag,type:n.type})}}}recordChanges(e,n,i,r){if(!(!this.trackingEnabled||!this.initialized)){for(let a of e){let o=String(a.id),s=i(o);this.activityIsDirty(o,s)?this.dirtyActivityIds.add(o):this.dirtyActivityIds.delete(o),this.p6TrackingEnabled&&(this.p6ActivityIsDirty(o,s)?this.dirtyP6ActivityIds.add(o):this.dirtyP6ActivityIds.delete(o))}for(let a of n){let o=String(a.id),s=r(o);this.linkIsDirty(o,s)?this.dirtyLinkIds.add(o):this.dirtyLinkIds.delete(o)}}}recordP6Settings(e){!this.trackingEnabled||!this.initialized||(this.currentP6Settings=S(e),this.p6SettingsDirty=_n(this.currentP6Settings,this.p6SettingsAtLastSave))}recordP6ProjectState(e){!this.trackingEnabled||!this.initialized||(this.currentP6ProjectState=S(e),this.p6ProjectStateDirty=_n(this.currentP6ProjectState,this.p6ProjectStateAtLastSave))}recordP6LatestRunLog(e){!this.trackingEnabled||!this.initialized||(this.currentP6LatestRunLog=S(e),this.p6LatestRunLogDirty=_n(this.currentP6LatestRunLog,this.p6LatestRunLogAtLastSave))}modifiedP6Settings(){return this.p6SettingsIsDirty()?S(this.currentP6Settings):null}modifiedP6Activities(e){return!this.trackingEnabled||!this.initialized?new Map:Pm(this.dirtyP6ActivityIds,e)}activityIsDirty(e,n){let i=this.activitiesAtLastSave.get(e);return n===null?i!==void 0:this.initialCalendarRepairIds.has(e)||!Ce(n.proplannerId)||i===void 0||Gr(n,i.persistable)}linkIsDirty(e,n){let i=this.linksAtLastSave.get(e);return n===null?i!==void 0:!Ce(n.proplannerId)||i===void 0||Qo(i,n)}acknowledgePersistedLookahead(e,n){if(!this.trackingEnabled||!this.initialized)return;let i=e.map(r=>{let a=typeof r=="string"?r:String(r.id),o=n(a),s=this.activitiesAtLastSave.get(a);if(o===null||s===void 0)throw new Error(`unknown persisted activity "${a}"`);return{activityId:a,acknowledgesLookahead:typeof r=="string"||!!r.fields?.isLookahead,acknowledgesProgress:typeof r!="string"&&!!r.fields?.progress,current:o,saved:s}});for(let{activityId:r,acknowledgesLookahead:a,acknowledgesProgress:o,current:s,saved:l}of i){let c={...l.persistable,...a?{isLookahead:s.isLookahead}:{},...o?{progress:s.progress,autoScheduling:s.autoScheduling}:{}};this.activitiesAtLastSave.set(r,{...l,persistable:c}),this.initialCalendarRepairIds.has(r)||!Ce(s.proplannerId)||Gr(s,c)?this.dirtyActivityIds.add(r):this.dirtyActivityIds.delete(r)}}hasCheckpointActivityId(e){return this.activitiesAtLastSave.has(e)}hasCheckpointLinkId(e){return this.linksAtLastSave.has(e)}hasUnsavedChanges(){return this.trackingEnabled&&this.initialized&&(this.dirtyActivityIds.size>0||this.dirtyLinkIds.size>0||this.p6TrackingEnabled&&(this.dirtyP6ActivityIds.size>0||this.p6SettingsIsDirty()||this.p6ProjectStateDirty||this.p6LatestRunLogDirty))}p6SettingsIsDirty(){return this.p6SettingsDirty}snapshotP6Activities(e){this.dirtyP6ActivityIds.clear(),_m(this.p6ActivitiesAtLastSave,e)}p6ActivityIsDirty(e,n){return Em(this.p6ActivitiesAtLastSave.get(e),n)}newActivities(e){if(!this.trackingEnabled||!this.initialized)return[];let n=[];for(let i of this.dirtyActivityIds){let r=e(i);r!==null&&!Ce(r.proplannerId)&&n.push(r)}return n}newLinks(e){if(!this.trackingEnabled||!this.initialized)return[];let n=[];for(let i of this.dirtyLinkIds){let r=e(i);r!==null&&!Ce(r.proplannerId)&&n.push(r)}return n}deletedActivities(e){if(!this.trackingEnabled||!this.initialized)return[];let n=[];for(let i of this.dirtyActivityIds){let r=this.activitiesAtLastSave.get(i);r&&e(i)===null&&n.push({...r.deletedSnapshot})}return n}deletedLinks(e){if(!this.trackingEnabled||!this.initialized)return[];let n=[];for(let i of this.dirtyLinkIds){let r=this.linksAtLastSave.get(i);r&&e(i)===null&&n.push({...r})}return n}modifiedActivities(e){if(!this.trackingEnabled||!this.initialized)return[];let n=[];for(let i of this.dirtyActivityIds){let r=e(i);if(r===null||!Ce(r.proplannerId))continue;let a=this.activitiesAtLastSave.get(i);(a===void 0||this.initialCalendarRepairIds.has(i)||Gr(r,a.persistable))&&n.push(r)}return n}modifiedActivityFields(e){let n=new Map;if(!this.trackingEnabled||!this.initialized)return n;for(let i of this.dirtyActivityIds){let r=e(i),a=this.activitiesAtLastSave.get(i);if(!r||!a)continue;let o=jc(r,a.persistable);o.length>0&&n.set(i,o)}return n}modifiedLinks(e){if(!this.trackingEnabled||!this.initialized)return[];let n=[];for(let i of this.dirtyLinkIds){let r=e(i);if(r===null||!Ce(r.proplannerId))continue;let a=this.linksAtLastSave.get(i);(a===void 0||Qo(a,r))&&n.push(r)}return n}clear(){this.initialized=!1,this.p6TrackingEnabled=!1,this.dirtyActivityIds.clear(),this.dirtyLinkIds.clear(),this.dirtyP6ActivityIds.clear(),this.initialCalendarRepairIds.clear(),this.linksAtLastSave.clear(),this.activitiesAtLastSave.clear(),this.p6ActivitiesAtLastSave.clear(),this.p6SettingsAtLastSave=null,this.currentP6Settings=null,this.p6SettingsDirty=!1,this.p6ProjectStateAtLastSave=null,this.currentP6ProjectState=null,this.p6ProjectStateDirty=!1}};function km(t,e){let n=[],i=t.map(a=>{let o=VP(a,e);return a.should_be_showed===!1&&n.push(o.id),o});YP(i);let r=new Set(i.map(a=>a.id));return GP(i,r,e.reporter,e.recordDiagnostic),{activities:i,activityIds:r,hiddenIds:n}}function NP(t,e,n,i){if(!t)return null;let r=zh[t.toUpperCase()];return r===void 0?(n(Ht.UNKNOWN_CONSTRAINT,i),e.warn(`[parseFromBackend] unknown constraint label "${t}" \u2014 defaulting to "asap"`),qh):r}function FP(t,e,n){let i=NP(t.constraint,e,n,String(t.unique_id)),a=i!==_.ASAP&&i!==_.ALAP&&t.constraint_date?je(t.constraint_date):null;return{constraintType:i,constraintDate:a}}function wP(t,e,n){if(t==null)return n;let i=String(t);return e.has(i)?i:n}function xP(t){if(t==null||t==="")return[];if(Array.isArray(t))return t.map(String);if(typeof t!="string")return[];try{let e=JSON.parse(t);return Array.isArray(e)?e.map(String):[]}catch{return[]}}function MP(t){if(typeof t!="object"||t===null||!("id"in t))return!1;let e=t.id;return typeof e=="string"||typeof e=="number"}function Vc(t){if(!Array.isArray(t))return[];let e=[];for(let n of t)MP(n)&&e.push(String(n.id));return e}function UP(t){return t==="0"?null:String(t)}function HP(t){if(t==null)return null;if(!(typeof t=="number"&&(t===0||Number.isSafeInteger(t)&&t>0)))throw new Error(`invalid activity proplannerId ${String(t)}`);return t}function BP(t,e,n,i){let r=Number(t);if(!Number.isFinite(r))throw new TypeError(`invalid activity progress ${String(t)}`);let a=r<0,o=r>zs;if(!a&&!o)return r;let l=a?0:100;return n(Ht.PROGRESS_OUT_OF_RANGE,i),e.warn(`[parseFromBackend] activity "${i}" progress ${String(t)} is out of range \u2014 clamping to ${l}`),l}function jP(t,e){return typeof t.is_critical=="boolean"?t.is_critical:(e.error("[parseFromBackend] invalid activity is_critical \u2014 defaulting to false",new TypeError(`activity "${t.unique_id}" received ${typeof t.is_critical}`)),!1)}function WP(t,e,n,i,r){return Array.isArray(t)?t.map(a=>wo(a,e,{record:n,sampleId:i},r)).filter(a=>a!==null):[]}function VP(t,e){let n=wP(t.calendarId,e.knownCalendarIds,e.defaultCalendarId),i=t.calendarId==null||!e.knownCalendarIds.has(String(t.calendarId)),r=BP(t.progress,e.reporter,e.recordDiagnostic,String(t.unique_id)),{constraintType:a,constraintDate:o}=FP(t,e.reporter,e.recordDiagnostic),s=t.type===L.MILESTONE,l=je(t.start_date),c=s?l:je(t.end_date),d=s?0:Number(t.duration),u=jP(t,e.reporter);return{id:String(t.unique_id),proplannerId:HP(t.id),parentId:UP(t.parent_id),name:t.name,description:t.description??"",type:t.type,startDate:l,endDate:c,durationHours:jn(d,e.hoursPerDay),constraintType:a,constraintDate:o,autoScheduling:Hn(r),calendarId:n,assignedDefaultCalendar:n!=null&&i,dateOrigin:t.date_origin==null?null:je(t.date_origin),progress:r,cost:Number(t.cost),usedCost:Number(t.used_cost??0),realCost:Number(t.real_cost??0),workHours:Number(t.hhWorkTime),realWorkHours:Number(t.real_work??0),ponderator:Number(t.ponderator??0),hasCustomPonderator:t.hasCustomPonderator,correlativeId:t.correlative_id,uniqueCorrelativeId:t.unique_correlative_id,customId:KP(t),subcontractId:t.subcontractId,isLookahead:t.isOnLookahead,hasLookaheadTasks:Array.isArray(t.tasks)&&t.tasks.length>0,newActivityIds:xP(t.newActivitiesArray),hasNewActivities:t.hasNewActivities??!1,...t.isNewActivity===!0?{isNewActivity:!0}:{},pendingRequestIds:Vc(t.pendingRequests),responsableIds:Vc(t.responsables),tagIds:Vc(t.tags),baselinePoints:WP(t.baseline_points,e.reporter,e.recordDiagnostic,String(t.unique_id),s),baselineSnapshot:null,baselineVarianceDays:null,recursiveDurationHours:jn(Number(t.sumOfDurationRecursively??0),e.hoursPerDay),calendarDuration:Pe({type:t.type,startDate:l,endDate:c}),isCritical:u,freeSlackHours:null,expectedProgress:null,expectedProgressBaseline:null,status:null,criticalPath:null}}function KP(t){return t.has_childs?null:t.custom_id}function YP(t){let e=t.find(n=>n.correlativeId===0&&n.type===L.PROJECT);e&&(e.parentId=null)}function GP(t,e,n,i){for(let r of t)r.parentId!==null&&(e.has(r.parentId)||(n.warn(`[parseFromBackend] activity "${r.id}" references unknown parent "${r.parentId}" \u2014 re-parenting to root (null)`),i(Ht.ORPHAN_ACTIVITY,r.id),r.parentId=null))}function $P(t){if(typeof t!="string")return null;let e=Cu(t);return e||(ua(t)?t:null)}function qP(t){if(t==null)return;if(!(typeof t=="number"&&(t===0||Number.isSafeInteger(t)&&t>0)))throw new Error(`invalid link proplannerId ${String(t)}`);return t}function Om(t,e){let n=[];for(let i of t)try{n.push(zP(i,e.knownActivityIds,e.hoursPerDay))}catch(r){e.recordDiagnostic(Ht.INVALID_LINK,String(i.unique_id??i.id)),e.reporter.warn("[parseFromBackend] dropping invalid link",r)}return JP(n,e.recordDiagnostic)}function zP(t,e,n){let i=String(t.unique_id??t.id),r=String(t.source_id??t.source??""),a=String(t.target_id??t.target??"");if(!e.has(r))throw new Error(`[parseFromBackend] link "${i}" source "${r}" does not exist`);if(!e.has(a))throw new Error(`[parseFromBackend] link "${i}" target "${a}" does not exist`);let o=$P(t.type);if(o===null)throw new Error(`[parseFromBackend] link "${i}" has invalid type "${String(t.type)}"`);let s=t.ganttId,l=t.sectorId,c=qP(t.id);return{id:i,source:r,target:a,type:o,lag:ce(Number(t.lag??0),n),freeSlackHours:null,isCritical:!1,...typeof s=="number"?{ganttId:s}:{},...typeof l=="number"?{sectorId:l}:{},...c===void 0?{}:{proplannerId:c}}}function JP(t,e){let n=new Map;for(let i of t){let r=`${i.source}-${i.target}-${i.type}`,a=n.get(r);if(!a){n.set(r,i);continue}let o=Lm(i)>Lm(a),s=o?a:i;e(Ht.DUPLICATE_LINK,s.id),o&&n.set(r,i)}return[...n.values()]}function Lm(t){let e=Number(t.id);return Number.isFinite(e)?e:-1/0}function XP(t){if(typeof t!="string")return Fc;switch(t.toUpperCase()){case ct.DURATION:return ct.DURATION;case ct.COST:return ct.COST;case ct.WORK_HOURS:return ct.WORK_HOURS;default:return Fc}}function ZP(t){let e=t.custom_id_prefix;return typeof e=="string"&&e.length>0?e:void 0}function QP(t){let e=t.custom_id_increment;return typeof e=="string"?e:typeof e=="number"&&Number.isFinite(e)?String(e):void 0}function bm(t){let e=ZP(t),n=QP(t),i=t.update_duration_for_primavera_for_end_date===!0;return{id:String(t.id),name:t.name,hoursPerDay:t.hoursPerDay,hoursPerWeek:t.hoursPerWeek,dateFormat:t.dateFormat,projectId:t.projectId,companyId:t.companyId,...e!==void 0?{customIdPrefix:e}:{},...n!==void 0?{customIdIncrement:n}:{},...i?{updateDurationForPrimaveraEndDate:!0}:{},activityCreter:XP(t.activity_creter),statusCriteria:fl,ganttId:null}}function ns(t,e=Ci,n=qi){let i=bm(t.sector),{calendars:r,baseCalendars:a,knownCalendarIds:o,defaultCalendarId:s}=zo(t.calendars,t.sector.calendars,t.baseCalendars,tR(t.activities)),{activities:l,activityIds:c,hiddenIds:d}=km(t.activities,{knownCalendarIds:o,defaultCalendarId:s,hoursPerDay:i.hoursPerDay,reporter:e,recordDiagnostic:n}),u=Om(t.links,{knownActivityIds:c,hoursPerDay:i.hoursPerDay,reporter:e,recordDiagnostic:n});return{sector:i,activities:l,links:u,calendars:r,baseCalendars:a,viewStateSeed:{hiddenIds:d}}}function tR(t){let e=Number.POSITIVE_INFINITY,n=Number.NEGATIVE_INFINITY;for(let a of t){let o=new Date(a.start_date).getTime(),s=new Date(a.end_date).getTime();Number.isFinite(o)&&(e=Math.min(e,o)),Number.isFinite(s)&&(n=Math.max(n,s))}if(!Number.isFinite(e)||!Number.isFinite(n))return null;let i=new Date(e),r=new Date(n);return i.setFullYear(i.getFullYear()-1),r.setFullYear(r.getFullYear()+1),{start:i.getTime(),end:r.getTime()}}function Kc(t={}){let e=t.seed??0,n=i=>{i>e&&(e=i)};if(t.knownIds)for(let i of t.knownIds){let r=typeof i=="number"?i:Number(i);Number.isFinite(r)&&n(r)}return{fork(){return Kc({seed:e})},next(){return e+=1,String(e)},bump(i){let r=typeof i=="number"?i:Number(i);Number.isFinite(r)&&n(r)},snapshot(){return e},restore(i){e=i}}}function Yc(t={}){let e=t.seed??0,n=i=>{i>e&&(e=i)};if(t.knownIds)for(let i of t.knownIds){let r=typeof i=="number"?i:Number(i);Number.isFinite(r)&&n(r)}return{fork(){return Yc({seed:e})},next(){return e+=1,String(e)},bump(i){let r=typeof i=="number"?i:Number(i);Number.isFinite(r)&&n(r)},snapshot(){return e},restore(i){e=i}}}function Gc(t={}){let e=t.seed??0,n=i=>{Number.isFinite(i)&&i>0&&i<=9999999&&i>e&&(e=i)};if(t.knownIds)for(let i of t.knownIds){if(i==null)continue;let r=typeof i=="number"?i:Number(i);n(r)}return{fork(){return Gc({seed:e})},next(){return e+=1,String(e)},bump(i){if(i==null)return;let r=typeof i=="number"?i:Number(i);n(r)},snapshot(){return e},restore(i){e=i}}}function Nm(t){return!!t&&typeof t=="string"&&t.trim().length>0}function is(t){if(!t||typeof t!="string"||t.trim().length===0)return"";let e=t.match(/^(.*?)(\d+)$/);return e?e[1]??"":t}function rs(t){if(!t||typeof t!="string"||t.trim().length===0)return"";let e=t.match(/(\d+)$/);return e?e[1]??"":""}function Fm(t){if(!t||typeof t!="object")return"";let e=t.customId;return typeof e=="string"?e:""}function wm(t,e){return!e&&Nm(t)}function xm(t,e){return e&&Nm(t)}function $r(t){return typeof t=="string"&&t.length>0&&/^\d+$/.test(t)}function as(t){if(!$r(t))return 0n;try{return BigInt(t)}catch{return 0n}}function eR(t,e){if(typeof t!="bigint")return"";let n=t.toString();if(!$r(e))return n;let i=e.length;return n.padStart(i,"0")}function ye(t,e){let n=as(t),i=as(e),r=n+i;return eR(r,t)}function os(t,e){let n=as(t),i=as(e);return n<i?-1:n>i?1:0}function ss(t,e){return os(t,e)<=0?t:e}function ls(t,e){return os(t,e)>=0?t:e}function Mm(t){if(!t||t.length===0)throw new Error("minSuffixFromArray requires non-empty array");return t.reduce((e,n)=>ss(e,n))}function Um(t){if(!t||t.length===0)throw new Error("maxSuffixFromArray requires non-empty array");return t.reduce((e,n)=>ls(e,n))}var Ve={PARENT_CONVERSION:"parentConversion",PASTE_REFERENCE:"pasteReference",NO_CONTEXT:"noContext"};function Hm(t){return{prefix:t,baseSuffix:null}}function Bm(t,e){let n=rs(t);return{prefix:is(t),baseSuffix:ye(n,e)}}function jm(t){return{prefix:t,baseSuffix:null}}function Wm(t,e){return wm(t,e)?Ve.PARENT_CONVERSION:xm(t,e)?Ve.PASTE_REFERENCE:Ve.NO_CONTEXT}function Vm(t){return{...t,usedSuffixes:new Set(t.usedSuffixes)}}var cs=class t{prefixMap=new Map;processedIds=new Set;_journalPrefixBefore=null;_journalIds=null;beginCustomIdTransaction(){this._journalPrefixBefore=new Map,this._journalIds=[]}commitCustomIdTransaction(){this._journalPrefixBefore=null,this._journalIds=null}rollbackCustomIdTransaction(){let e=this._journalPrefixBefore,n=this._journalIds;if(!(e===null||n===null)){for(let[i,r]of e)r===null?this.prefixMap.delete(i):this.prefixMap.set(i,r);for(let i of[...n].reverse())i.hadId?this.processedIds.add(i.customId):this.processedIds.delete(i.customId);this._journalPrefixBefore=null,this._journalIds=null}}_noteCustomIdBefore(e){if(this._journalPrefixBefore===null||this._journalIds===null)return;let{prefix:n}=this.analyzeCustomId(e);if(!this._journalPrefixBefore.has(n)){let i=this.prefixMap.get(n);this._journalPrefixBefore.set(n,i?Vm(i):null)}this._journalIds.push({customId:e,hadId:this.processedIds.has(e)})}_ensureFreshBounds(e){let n=this.prefixMap.get(e);if(!n?.boundsDirty)return;n.boundsDirty=!1;let i=Array.from(n.usedSuffixes);n.min=Mm(i),n.max=Um(i),n.quantity=i.length,this._recalculateNext(e)}defaultPrefix;suffixIncrement;constructor(e={}){this.defaultPrefix=e.defaultPrefix??"A",this.suffixIncrement=e.suffixIncrement??"10"}captureRestorePoint(){let e=this.fork();return()=>{this.prefixMap.clear();for(let[n,i]of e.prefixMap)this.prefixMap.set(n,i);this.processedIds.clear();for(let n of e.processedIds)this.processedIds.add(n)}}fork(){let e=new t({defaultPrefix:this.defaultPrefix,suffixIncrement:this.suffixIncrement});for(let[n,i]of this.prefixMap)e.prefixMap.set(n,Vm(i));for(let n of this.processedIds)e.processedIds.add(n);return e}extractPrefix(e){return is(e)}extractSuffix(e){return rs(e)}analyzeCustomId(e){return{prefix:this.extractPrefix(e),suffix:this.extractSuffix(e)}}_updatePrefixStats(e,n){if(this._ensureFreshBounds(e),!this.prefixMap.has(e)){this.prefixMap.set(e,{min:n,max:n,next:n,quantity:1,usedSuffixes:new Set([n])}),this._recalculateNext(e);return}let i=this.prefixMap.get(e);i.usedSuffixes.has(n)||(i.usedSuffixes.add(n),i.min=ss(n,i.min),i.max=ls(n,i.max),i.quantity+=1,this._recalculateNext(e))}_recalculateNext(e){let n=this.prefixMap.get(e);if(!n)return;let i=this.getNextAvailableSuffix(e);n.next=i??this.suffixIncrement}getPrefixStats(e){this._ensureFreshBounds(e);let n=this.prefixMap.get(e);return n?{min:n.min,max:n.max,next:n.next,quantity:n.quantity}:null}getNextSuffix(e){this._ensureFreshBounds(e);let n=this.prefixMap.get(e);return n?n.next:this.suffixIncrement}getAllPrefixes(){return Array.from(this.prefixMap.keys())}registerCustomId(e){if(!e||typeof e!="string")return{prefix:"",suffix:""};let{prefix:n,suffix:i}=this.analyzeCustomId(e);if(!n&&!i)return{prefix:n,suffix:i};if(this._noteCustomIdBefore(e),this._ensureFreshBounds(n),this.prefixMap.has(n)){let r=this.prefixMap.get(n);r.usedSuffixes.has(i)||(r.usedSuffixes.add(i),r.min=ss(i,r.min),r.max=ls(i,r.max),r.quantity+=1,this._recalculateNext(n))}else this.prefixMap.set(n,{min:i,max:i,next:ye(i,this.suffixIncrement),quantity:1,usedSuffixes:new Set([i])});return this.processedIds.add(e),{prefix:n,suffix:i}}releaseCustomId(e=null){if(!e||typeof e!="string")return{prefix:"",suffix:""};let{prefix:n,suffix:i}=this.analyzeCustomId(e);if(!this.prefixMap.has(n))return{prefix:n,suffix:i};this._noteCustomIdBefore(e);let r=this.prefixMap.get(n);return r.usedSuffixes.has(i)&&(r.usedSuffixes.delete(i),r.quantity-=1,r.usedSuffixes.size===0?this.prefixMap.delete(n):r.boundsDirty=!0),this.processedIds.delete(e),{prefix:n,suffix:i}}trackCustomIdChange(e,n){let i=this.releaseCustomId(e),r=this.registerCustomId(n);return{oldPrefix:i.prefix,oldSuffix:i.suffix,newPrefix:r.prefix,newSuffix:r.suffix}}_exceedsMaxLength(e){return e.length>20}_shouldSearchForGaps(e){if(this._ensureFreshBounds(e),!this.prefixMap.has(e))return!1;let n=this.prefixMap.get(e);return`${e}${ye(n.max,this.suffixIncrement)}`.length>20}_suffixForUnknownPrefix(e,n){let i=n&&$r(n)?n:this.suffixIncrement;return`${e}${i}`.length>20?null:i}_findFirstAvailableGap(e){if(this._ensureFreshBounds(e),!this.prefixMap.has(e))return null;let n=this.prefixMap.get(e),i=this.suffixIncrement;for(;os(i,n.max)<0;){if(`${e}${i}`.length>20)return null;if(!n.usedSuffixes.has(i))return i;i=ye(i,this.suffixIncrement)}return null}_generateDefaultCustomId(){let e=this.getNextAvailableSuffix(this.defaultPrefix);if(e===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}${e}`}getNextAvailableSuffix(e,n=null){if(this._ensureFreshBounds(e),!this.prefixMap.has(e))return this._suffixForUnknownPrefix(e,n);let i=this.prefixMap.get(e),r=this.suffixIncrement;if(!n||!$r(n)){let s=ye(i.max,r);return`${e}${s}`.length>20?null:s}let a=n;for(let s=0;s<100;s++){if(`${e}${a}`.length>20)return null;if(!i.usedSuffixes.has(a))return a;a=ye(a,r)}let o=ye(i.max,r);return`${e}${o}`.length>20?null:o}generateNextCustomId(e){let n=this.getNextAvailableSuffix(e);if(n===null)return this._generateDefaultCustomId();if(this.prefixMap.has(e)){let r=this.prefixMap.get(e),a=0;for(;r.usedSuffixes.has(n)&&a<1e4;){let o=this.getNextAvailableSuffix(e,ye(n,this.suffixIncrement));if(o===null)return this._generateDefaultCustomId();n=o,a++}}let i=`${e}${n}`;return this._exceedsMaxLength(i)&&(i=this._generateDefaultCustomId()),i}populateFromActivities(e){if(!Array.isArray(e))return this;let n=[...new Set(e.filter(i=>i&&typeof i.customId=="string"&&i.customId).map(i=>i.customId))];for(let i of n){if(this.processedIds.has(i))continue;let{prefix:r,suffix:a}=this.analyzeCustomId(i);(r||a)&&(this._updatePrefixStats(r,a),this.processedIds.add(i))}return this}getDefaults(){return{prefix:this.defaultPrefix,increment:this.suffixIncrement}}generateCustomIdForNewChild(e){let{activity:n,useActivityCustomIdAsReference:i=!1}=e,r=Fm(n),a=Wm(r,i),{prefix:o,baseSuffix:s}=this._applyGenerationStrategy(a,r),l=null;if(a===Ve.PARENT_CONVERSION&&this.prefixMap.has(o)){this._ensureFreshBounds(o);let p=this.prefixMap.get(o).max;l=ye(p,this.suffixIncrement)}a===Ve.PARENT_CONVERSION&&this.releaseCustomId(r);let c=a===Ve.PARENT_CONVERSION&&l?l:s,d=this.getNextAvailableSuffix(o,c);if(d===null){let p=this._generateDefaultCustomId();return this.registerCustomId(p),p}let u=`${o}${d}`;return this._exceedsMaxLength(u)&&(u=this._generateDefaultCustomId()),this.registerCustomId(u),u}_applyGenerationStrategy(e,n){switch(e){case Ve.PARENT_CONVERSION:return Hm(this.defaultPrefix);case Ve.PASTE_REFERENCE:return Bm(n,this.suffixIncrement);default:return jm(this.defaultPrefix)}}generateCustomIdForRestoredChild(e=null){if(e){let i=e.trim();if(i.length>0){let r=this.extractPrefix(i),a=this.extractSuffix(i),o=ye(a,this.suffixIncrement),s=this.getNextAvailableSuffix(r,o);if(s===null){let c=this._generateDefaultCustomId();return this.registerCustomId(c),c}let l=`${r}${s}`;return this._exceedsMaxLength(l)&&(l=this._generateDefaultCustomId()),this.registerCustomId(l),l}}let n=this.generateNextCustomId(this.defaultPrefix);return this.registerCustomId(n),n}clear(){this.prefixMap.clear(),this.processedIds.clear()}getTotalPrefixes(){return this.prefixMap.size}hasPrefix(e){return this.prefixMap.has(e)}isCustomIdInUse(e,n=null){if(!e||typeof e!="string"||!e.trim())return!1;let i=e.trim();return n&&i===n.trim()?!1:this.processedIds.has(i)}};var nR=1,iR=-1;function rR(t,e){if(t===void 0&&e===void 0)return 0;if(t===void 0)return nR;if(e===void 0)return iR;let n=Math.min(t.length,e.length);for(let i=0;i<n;i+=1){let r=(t[i]??0)-(e[i]??0);if(r!==0)return r}return t.length-e.length}function Km(t,e,n,i){let r=n.assignmentByActivityId.get(String(t.id)),a=n.assignmentByActivityId.get(String(e.id)),o=rR(r===void 0?void 0:n.sequencePathByValueId.get(r),a===void 0?void 0:n.sequencePathByValueId.get(a));return i===Vt.DESCENDING?-o:o}var aR=1,oR=-1;function sR(t,e){return!t&&!e?null:t&&e?0:t?aR:oR}function Ym(t){return t==null}function Gm(t,e){let n=e.indexOf(String(t));return n===-1?e.length:n}function lR(t,e,n){return t instanceof Date&&e instanceof Date?t.getTime()-e.getTime():typeof t=="number"&&typeof e=="number"?t-e:typeof t=="boolean"&&typeof e=="boolean"?Number(t)-Number(e):Array.isArray(t)&&Array.isArray(e)?t.length-e.length:String(t).localeCompare(String(e),n,{sensitivity:"base",numeric:!0})}function cR(t,e,n){if(fi(t)){let r=n.get(t.key);return r===void 0?null:(a,o)=>Km(a,o,r,t.direction)}let i=Qe(t.field);return i===null?null:(r,a)=>{let o=i.extract(r,e),s=i.extract(a,e),l=sR(Ym(o),Ym(s));if(l!==null)return l;let c=i.valueKind===x.ENUM?Gm(o,i.order)-Gm(s,i.order):lR(o,s,e.locale);return t.direction===Vt.DESCENDING?-c:c}}function $m(t,e,n=Ia){let i=t.rules.map(r=>cR(r,e,n)).filter(r=>r!==null);return i.length===0?null:(r,a)=>{for(let o of i){let s=o(r,a);if(s!==0)return s}return 0}}function qm(t){let e=[];t.forEachActivity((n,i)=>{n.type===L.PROJECT&&t.getChildren(String(i)).length===0&&e.push(String(i))});for(let n of e)t.setActivityField(n,B.TYPE,mi),dR(t,n);return e}function dR(t,e){let n=t.getActivity(e);if(!n||!n.startDate||n.durationHours==null)return;let i=new Date(n.startDate);i.setUTCHours(0,0,0,0);let r=t.getClosestWorkTime({date:i,dir:z.FUTURE,task:n});if(r.getTime()===n.startDate.getTime())return;let a=t.calculateEndDate({startDate:r,durationHours:n.durationHours,task:n});t.setActivityField(e,B.START_DATE,r),t.setActivityField(e,B.END_DATE,a)}function zm(t){let e=[],n=[];t.forEachActivity((r,a)=>{r.parentId===null&&e.push(String(a))});let i=e.map(r=>({activityId:r,parent:null,childIds:null,realWork:0})).reverse();for(let r=i.pop();r;r=i.pop()){if(r.childIds===null){let s=t.getActivity(r.activityId);if(!s)continue;let l=[...t.getChildren(r.activityId)],c=l.length===0;r.childIds=l.values(),r.realWork=c?Xt(s.workHours,s.progress):0}let a=r.childIds.next();if(!a.done){i.push(r,{activityId:String(a.value),parent:r,childIds:null,realWork:0});continue}t.setActivityField(r.activityId,B.REAL_WORK_HOURS,r.realWork),n.push(r.activityId),r.parent&&(r.parent.realWork+=r.realWork)}return n}async function Jm(t){let{state:e,sector:n,scheduler:i,skipAutoSchedule:r,now:a}=t;if(Nt(e),n.updateDurationForPrimaveraEndDate&&pR(e),fR(e),zm(e),n.activityCreter===ct.COST){let s=!1;e.forEachActivity(l=>{s||=Tt(l)!==null}),s&&Mo(ct.COST,e)}if(r){Cr(e,n.activityCreter),a&&(qn(e,a),We(e,n.statusCriteria)),zn(e,n.hoursPerDay);return}let o=await i.schedule({});Ar(e,o),yR(e),uR(e),await Ue(e,void 0,!1),Cr(e,n.activityCreter),a&&(qn(e,a),We(e,n.statusCriteria)),zn(e,n.hoursPerDay)}function uR(t){t.forEachActivity(e=>{e.autoScheduling||!e.startDate||e.durationHours==null||t.getChildren(e.id).length>0||(e.endDate=t.calculateEndDate({startDate:e.startDate,durationHours:e.durationHours,task:e}),e.calendarDuration=Pe(e))})}function pR(t){t.forEachActivity(e=>{!e.startDate||!e.endDate||(e.durationHours=t.calculateDuration({startDate:e.startDate,endDate:e.endDate,task:e}))})}function fR(t){t.forEachActivity(e=>{let n=e.constraintType;if(!n||!e.constraintDate)return;let i=e.constraintDate;if(e.type===L.MILESTONE&&(i.getUTCHours()!==0||i.getUTCMinutes()!==0))return;let r=t.calendarReader.getCalendar(String(e.calendarId));r&&(e.constraintDate=ge(e.constraintDate,r,n))})}function yR(t){t.forEachActivity(e=>{if(e.type!==L.MILESTONE)return;let n=e.constraintType;if(!n||!e.constraintDate)return;let i=t.calendarReader.getCalendar(String(e.calendarId));i&&(e.constraintDate=ge(e.constraintDate,i,n))})}function Xm(t){if(t.p6===void 0)return t;let e=t.p6,n={...e,activityType:e.activityType??Mt.TASK,durationType:e.durationType??de.FIXED_DURATION_AND_UNITS,primaryConstraintType:e.primaryConstraintType??null,primaryConstraintDate:e.primaryConstraintDate??null,sourcePrimaryConstraintToken:e.sourcePrimaryConstraintToken??null,sourceSecondaryConstraintToken:Reflect.get(e,"sourceSecondaryConstraintToken")??null,resourceAssignments:e.resourceAssignments??[]};return delete n.sourceActivityTypeToken,delete n.sourceDurationTypeToken,{...t,p6:n}}function $c(t){if(!t.hasCompleteSchedulingState)return{};let e=Mi(t.activity);return e===void 0?{}:{p6:e}}function Zm(t){return{activityPatch:t.p6===void 0?{}:{p6:void 0},snapshotPatch:t.p6===void 0?{}:{p6:S(t.p6)}}}function Qm(t){let e=t.promotionSnapshot?.p6;return e===void 0?$c(t):{p6:S(e)}}function eg(t,e){let n=e==="before";return{...t.p6Settings===void 0?{}:{p6Settings:n?tg(t.p6Settings):S(t.p6Settings)},...t.p6ProjectPlannedStart===void 0?{}:{p6ProjectPlannedStart:n?tg(t.p6ProjectPlannedStart):S(t.p6ProjectPlannedStart)}}}function ng(t,e,n){t.p6Settings!==void 0&&n.setSettings(S(t.p6Settings[e])),t.p6ProjectPlannedStart!==void 0&&n.setProjectPlannedStart(S(t.p6ProjectPlannedStart[e]))}function ig(t){return t.p6Settings!==void 0||t.p6ProjectPlannedStart!==void 0}function tg(t){return{before:S(t.after),after:S(t.before)}}function ag(t,e){let n=e.projectState?.plannedStart??null,i=t.projectState?.plannedStart??null;return{...rg(e.settings,t.settings)?{p6Settings:{before:S(e.settings),after:S(t.settings)}}:{},...rg(n,i)?{p6ProjectPlannedStart:{before:S(n),after:S(i)}}:{}}}function rg(t,e){return Ot(t)!==Ot(e)}var og="Invalid P6 activity status",qc=class extends Error{constructor(n,i){super(`${og}: ${i}`);this.code=n;this.name="P6ActivityStatusError"}code},hR=100,mR=0;function sg(t){lg(t.remainingDurationHours),cg(t),AR(t),dg(t)}function qr(t){gR(t.remainingDurationHours),cg(t),IR(t),dg(t)}function ds(t,e){if(e.actualStart===void 0&&e.actualFinish===void 0)return e;let n=e.actualStart!==void 0?e.actualStart:t.actualStart,i=e.actualFinish!==void 0?e.actualFinish:t.actualFinish,r=i!==null?"completed":n!==null?"in_progress":"not_started",a=n===null&&i===null&&t.actualStart!==null,o={...e,executionStatus:r,...i!==null?{remainingDurationHours:0,physicalPercentComplete:hR}:{},...a?{remainingDurationHours:t.originalDurationHours,physicalPercentComplete:mR}:{}};return qr({...t,...o}),o}function lg(t){(!Number.isFinite(t)||t<0)&&zt("Remaining Duration must be finite and non-negative")}function gR(t){t!==null&&lg(t)}function cg(t){[t.actualStart,t.actualFinish,t.suspendDate,t.resumeDate].some(n=>n!==null&&Number.isNaN(n.getTime()))&&zt("actual, suspend and resume dates must be valid")}function AR(t){let e=t.actualStart!==null,n=t.actualFinish!==null;if(t.executionStatus==="not_started"){(e||n)&&zt("not_started cannot have actual dates");return}if(t.executionStatus==="in_progress"){(!e||n)&&zt("in_progress requires Actual Start and no Actual Finish");return}(!e||!n||t.remainingDurationHours!==0)&&zt("completed requires Actual Start, Actual Finish and zero Remaining Duration")}function IR(t){let e=t.actualStart!==null,n=t.actualFinish!==null;n&&!e&&zt("Actual Finish requires Actual Start"),t.executionStatus==="not_started"&&e&&zt("not_started cannot have actual dates"),t.executionStatus==="in_progress"&&n&&zt("in_progress cannot have Actual Finish"),t.executionStatus==="completed"&&t.remainingDurationHours!==null&&t.remainingDurationHours!==0&&zt("completed requires zero Remaining Duration")}function dg(t){let{actualStart:e,actualFinish:n,suspendDate:i,resumeDate:r}=t;if(e!==null&&n!==null&&e.getTime()>n.getTime())throw new qc("ACTUAL_FINISH_BEFORE_START","Actual Start must not be after Actual Finish");i!==null&&(e===null&&zt("Suspend requires Actual Start"),e.getTime()>i.getTime()&&zt("Suspend must not be before Actual Start"),n!==null&&i.getTime()>n.getTime()&&zt("Suspend must not be after Actual Finish")),r!==null&&(i===null&&zt("Resume requires Suspend"),i.getTime()>r.getTime()&&zt("Suspend must not be after Resume"),n!==null&&r.getTime()>n.getTime()&&zt("Resume must not be after Actual Finish"))}function zt(t){throw new Error(`${og}: ${t}`)}var zc="Invalid P6 derived input",Xc=100,zr=0,er=100,SR=16,vR=8,CR="178",Zc=Date.parse("2026-10-07T12:00:00.000Z"),DR=Date.parse("2026-10-08T12:00:00.000Z"),TR=Date.parse("2026-10-12T12:00:00.000Z"),_R=Date.parse("2026-10-06T08:00:00.000Z"),ER=Zc,PR=Zc,RR=Date.parse("2026-10-08T12:00:00.000Z"),kR=Date.parse("2026-10-05T08:00:00.000Z"),LR=Date.parse("2026-10-06T08:00:00.000Z");function Jr(t,e){return sg(t),OR(t,e.dataDate),{actualDurationHours:pg(t,e),atCompletionDurationHours:bR(t,e),durationPercentComplete:NR(t),unitsPercentComplete:FR(t,e),schedulePercentComplete:Qc(t,e),remainingFloatHours:MR(t,e.calendar,e.totalFloatMethod??"finish_float")}}function ug(t,e){return pg(t,e)}function OR(t,e){let n=[t.originalDurationHours,t.remainingDurationHours],i=[t.actualLaborUnits,t.remainingLaborUnits,t.actualNonlaborUnits,t.remainingNonlaborUnits];if(n.some(r=>!Number.isFinite(r)||r<0))throw new Error(`${zc}: expected finite non-negative durations`);if(i.some(r=>!Number.isFinite(r)))throw new Error(`${zc}: expected finite unit scalars`);if(Number.isNaN(e.getTime()))throw new Error(`${zc}: invalid Data Date`)}function pg(t,e){if(t.executionStatus==="not_started"||t.actualStart===null)return 0;let n=t.executionStatus==="completed"?t.actualFinish:e.dataDate;return n===null?0:Jc(e.calendar,t.actualStart,n)}function bR(t,e){return t.executionStatus==="not_started"?UR(e.calendar,t.plannedStart,t.plannedFinish):t.executionStatus==="in_progress"?t.actualStart===null||t.remainingEarlyFinish===null?0:Jc(e.calendar,t.actualStart,t.remainingEarlyFinish):t.actualStart===null||t.actualFinish===null?0:Jc(e.calendar,t.actualStart,t.actualFinish)}function Jc(t,e,n){return e.getTime()>=n.getTime()?0:nr(t,e,n)}function NR(t){return t.originalDurationHours===0?0:fg((t.originalDurationHours-t.remainingDurationHours)/t.originalDurationHours*Xc)}function FR(t,e){let n=t.actualLaborUnits+t.actualNonlaborUnits,i=t.remainingLaborUnits+t.remainingNonlaborUnits,r=n+i;return r===0?wR(t,e)?er:zr:n/r*Xc}function wR(t,e){return t.executionStatus!==V.COMPLETED||t.actualStart===null||t.actualFinish===null||t.remainingDurationHours!==0||t.percentCompleteType!==It.DURATION||e.dataDate.getTime()!==Zc||e.calendarId!==CR||!xR(t)?!1:t.activityType===Mt.TASK?t.durationType===de.FIXED_DURATION_AND_UNITS&&t.originalDurationHours===vR&&t.physicalPercentComplete===er&&En(t.plannedStart,PR)&&En(t.plannedFinish,RR)&&En(t.actualStart,kR)&&En(t.actualFinish,LR):t.activityType===Mt.LEVEL_OF_EFFORT&&t.durationType===de.FIXED_DURATION_AND_UNITS_PER_TIME&&t.originalDurationHours===SR&&t.physicalPercentComplete===er&&En(t.plannedStart,DR)&&En(t.plannedFinish,TR)&&En(t.actualStart,_R)&&En(t.actualFinish,ER)}function xR(t){return t.expectedFinish===null&&t.suspendDate===null&&t.resumeDate===null&&t.secondaryConstraintType===null&&t.secondaryConstraintDate===null&&t.primaryBaselineStart===null&&t.primaryBaselineFinish===null&&(t.resourceAssignments?.length??0)===0}function En(t,e){return t?.getTime()===e}function Qc(t,e){let n=t.primaryBaselineStart!==null,i=t.primaryBaselineFinish!==null;if(n!==i)return null;let r=t.primaryBaselineStart??t.plannedStart,a=t.primaryBaselineFinish??t.plannedFinish;if(r===null||a===null)return null;if(r.getTime()===a.getTime())return e.dataDate.getTime()<r.getTime()?zr:er;if(e.dataDate.getTime()<=r.getTime())return zr;if(e.dataDate.getTime()>=a.getTime())return er;let o=nr(e.calendar,r,a);if(o<=0)return zr;let s=nr(e.calendar,r,e.dataDate);return fg(s/o*Xc)}function MR(t,e,n){if(t.remainingEarlyFinish===null||t.lateFinish===null)return null;let i=nr(e,t.remainingEarlyFinish,t.lateFinish);if(n==="finish_float")return Object.is(i,-0)?0:i;if(t.remainingEarlyStart===null||t.lateStart===null)return null;let r=nr(e,t.remainingEarlyStart,t.lateStart),a=n==="start_float"?r:Math.min(r,i);return Object.is(a,-0)?0:a}function UR(t,e,n){return e===null||n===null?0:nr(t,e,n)}function nr(t,e,n){if(e.getTime()<=n.getTime())return t.calculateDuration(e,n);let i=-t.calculateDuration(n,e);return Object.is(i,-0)?0:i}function fg(t){return Math.min(er,Math.max(zr,t))}var HR=new Set([Mt.TASK,Mt.RESOURCE_DEPENDENT]),BR=new Map;function us(t){if(!(t.settings.useExpectedFinishDates&&jR(t.previousSettings,t.settings)))return BR;let n=new Map;for(let[i,r]of t.activities){let a=r.remainingEarlyFinish;a!==null&&WR(r)&&n.set(i,new Date(a))}return n}function jR(t,e){let n=t.dataDate,i=e.dataDate;return n===null||i===null?!1:i.getTime()>n.getTime()}function WR(t){return t.executionStatus===V.IN_PROGRESS&&t.expectedFinish===null&&VR(t)}function VR(t){let{activityType:e}=t;return e===void 0?!0:HR.has(e)}function ps(t,e){return{freeSlackHours:t.freeFloatHours,criticalPath:{earlyStart:S(t.earlyStart),earlyFinish:S(t.earlyFinish),lateStart:S(t.lateStart),lateFinish:S(t.lateFinish),totalSlackHours:t.remainingFloatHours},isCritical:e.criticalActivityMethod===Yn.LONGEST_PATH?t.longestPath:t.remainingFloatHours!==null&&t.remainingFloatHours<=e.criticalFloatThresholdHours}}function yg(t){let e=new Set(t.criticalPath);return new Map([...t.activities].map(([n,i])=>{let r=i.actualStart??i.remainingEarlyStart,a=i.actualFinish??i.remainingEarlyFinish;return[n,{p6:S(i),...r===null?{}:{startDate:S(r)},...a===null?{}:{endDate:S(a)},isCritical:e.has(n),freeSlackHours:i.freeFloatHours,criticalPath:{earlyStart:S(i.earlyStart),earlyFinish:S(i.earlyFinish),lateStart:S(i.lateStart),lateFinish:S(i.lateFinish),totalSlackHours:i.remainingFloatHours}}]}))}function hg(t,e,n,i={}){if(!GR(e.dataDate,n.dataDate))return new Map;if(!at(n,i.enabled))return new Map;let r=!at(e,i.enabled),a=t.getAllActivities(),o=KR(a,e,n,i.adoptExpectedFinish),s=new Map;for(let l of a){let c=l.p6;if(c===void 0)continue;let d=t.calendarReader.getCalendar(l.calendarId);if(d===null)throw new Error(`Missing calendar for Data Date activity ${l.id}`);let u=YR(c,n.dataDate,d,o.get(l.id)),p=!Object.is(u.expectedFinish,c.expectedFinish)||!Object.is(u.schedulePercentComplete,c.schedulePercentComplete)||!Object.is(u.actualDurationHours,c.actualDurationHours);!r&&!p||s.set(l.id,{...p?{p6:u}:{},...r?ps(u,n):{}})}return s}function KR(t,e,n,i=!1){if(!i)return new Map;if(n.setDataDateAndPlannedStartToForecastStart&&n.projectForecastStart!==null)return new Map;let a=new Map(t.flatMap(o=>{let s=o.p6,l=s!==void 0&&He(s);return o.type===L.PROJECT||!l?[]:[[o.id,s]]}));return us({previousSettings:e,settings:n,activities:a})}function mg(t,e){for(let[n,i]of e)t.setActivityFields(n,i)}function YR(t,e,n,i){let r={dataDate:e,calendar:n},a=Qc(t,r),o=He(t)&&t.executionStatus===V.IN_PROGRESS;return{...t,expectedFinish:i??t.expectedFinish,schedulePercentComplete:a,...o?{actualDurationHours:ug(t,r)}:{}}}function GR(t,e){return t?.getTime()!==e?.getTime()}var $R=["remainingDurationHours","originalDurationHours","actualStart","actualFinish","suspendDate","resumeDate"];function ys(t,e,n){if(!qR(t,e))return{p6:{...e}};if(!He(e))return{p6:{...e},...gg(t,e),...Ag(t,e,null)};let i=zR(e,n.calendar),r=Jr(i===null?e:{...e,remainingEarlyFinish:i},{dataDate:n.dataDate,calendar:n.calendar,...n.totalFloatMethod===void 0?{}:{totalFloatMethod:n.totalFloatMethod}});return{p6:{...e,...r,remainingFloatHours:e.remainingFloatHours},...gg(t,e),...Ag(t,e,i)}}function qR(t,e){return $R.some(n=>!fs(t[n],e[n]))}function zR(t,e){return t.executionStatus==="completed"||t.remainingEarlyStart===null?null:e.calculateEndDate(t.remainingEarlyStart,t.remainingDurationHours)}function gg(t,e){if(fs(t.actualStart,e.actualStart))return{};let n=e.actualStart??e.remainingEarlyStart;return n===null?{}:{startDate:S(n)}}function Ag(t,e,n){if(!(!fs(t.remainingDurationHours,e.remainingDurationHours)||!fs(t.actualFinish,e.actualFinish)))return{};let r=e.actualFinish??n??e.remainingEarlyFinish;return r===null?{}:{endDate:S(r)}}function fs(t,e){return t instanceof Date||e instanceof Date?t instanceof Date&&e instanceof Date&&t.getTime()===e.getTime():Object.is(t,e)}var se=class extends Error{constructor(n,i,r=[],a=0,o=[]){super(i);this.code=n;this.relationshipIds=r;this.count=a;this.sampleActivityIds=o;this.name="P6CapabilityError"}code;relationshipIds;count;sampleActivityIds};function Ig(t){return Object.freeze({getSettings:t.getSettings,getProjectState:t.getProjectState,getLatestRunLog:t.getLatestRunLog,getScheduleStateFingerprint:t.getScheduleStateFingerprint,getDefaultSettings:t.getDefaultSettings,getScheduleReadiness:t.getScheduleReadiness,searchEndingActivities:t.searchEndingActivities,getEndingActivityOption:t.getEndingActivityOption,resolveMustFinishByDefault:t.resolveMustFinishByDefault,updateSettings:t.updateSettings,updateActivity:t.updateActivity,schedule:t.schedule})}function hs(t){return t.outOfSequencePolicy!=="progress_override"||t.successorExecution!=="in_progress"?!0:t.linkType==="2"||t.linkType==="3"}function Ke(t){return t.actualFinish!==null?{execution:"completed",hasRemaining:!1}:t.actualStart!==null?{execution:"in_progress",hasRemaining:!0}:{execution:"not_started",hasRemaining:!0}}function Xr(t){return t.outOfSequencePolicy==="retained_logic"&&t.linkType==="1"&&t.actualStart!==null}function ed(t,e,n){let i=vg(e);if(i.length===0)return null;let r=i.map(a=>{let o=Cg(e,a),s=t.getClosestWorkTime({date:n,dir:"future",task:o}),l=t.calculateEndDate({startDate:s,durationHours:td(a),task:o});return{start:s,finish:l}});return Dg(r)}function Sg(t,e,n){let i=vg(e);if(i.length===0)return null;let r=i.map(a=>{let o=Cg(e,a),s=t.getClosestWorkTime({date:n,dir:"past",task:o}),l=t.calculateEndDate({startDate:s,durationHours:-td(a),task:o}),c=t.calculateEndDate({startDate:l,durationHours:td(a),task:o});return{start:l,finish:c}});return Dg(r)}function vg(t){if(t.p6?.activityType!=="resource_dependent")return[];let e=t.p6.resourceAssignments??[];for(let n of e)JR(n);return e}function JR(t){for(let e of[t.actualUnits,t.remainingUnits,t.unitsPerHour])if(!Number.isFinite(e)||e<0)throw new Error(`Invalid P6 resource assignment ${t.id}`);if(t.remainingUnits>0&&t.unitsPerHour<=0)throw new Error(`Invalid P6 resource assignment rate ${t.id}`)}function td(t){let e=t.remainingUnits===0?0:t.remainingUnits/t.unitsPerHour;return XR(e)}function XR(t){let e=Math.round(t),n=Number.EPSILON*Math.max(1,Math.abs(t))*32;return Math.abs(t-e)<=n?e:t}function Cg(t,e){return{...t,calendarId:e.calendarId}}function Dg(t){let e=new Date(Math.min(...t.map(i=>i.start.getTime()))),n=new Date(Math.max(...t.map(i=>i.finish.getTime())));return{start:e,finish:n}}var ZR=4;function ms(t){let e=QR(t);if(e!==null)return e;let n=tk(t);if(n!==null)return n;let i=ek(t);if(i!==null)return i;let r=nk(t);if(r!==null)return r;if(t.link.type===M.START_TO_FINISH&&ai(t.link)&&t.successor.p6?.activityType==="finish_milestone")return ik(t);let a=gr(t.predecessor,t.successor,t.link,t.adapter,t.lagTask).successorStart;return!sk(t)||a.getTime()===t.predecessor.endDate.getTime()?a:t.adapter.getClosestWorkTime({date:t.predecessor.endDate,dir:"future",task:t.successor})}function QR(t){let e=t.link._trueLag??t.link.lag??0;if(t.link.type!==M.FINISH_TO_FINISH||!ai(t.link)||t.successor.durationHours===0||t.lagTask!==null||e<=0)return null;let n=rn(t.predecessor.endDate,e);return t.adapter.calculateEndDate({startDate:n,durationHours:-t.successor.durationHours,task:t.successor})}function tk(t){let e=t.link._trueLag??t.link.lag??0;return t.link.type!==M.START_TO_START||!ai(t.link)||t.successor.p6?.activityType!=="finish_milestone"||t.successor.durationHours!==0||t.lagTask!==null||e===0?null:t.adapter.getClosestWorkTime({date:rn(t.predecessor.startDate,e),dir:"future",task:t.successor})}function ek(t){let e=(t.link._trueLag??t.link.lag??0)===0;if(t.link.type!==M.FINISH_TO_START||t.predecessor.p6?.activityType!=="resource_dependent"||t.successor.p6?.activityType!=="level_of_effort"||t.successor.durationHours!==0||!e)return null;let n=mr(t.predecessor.endDate),i=t.adapter.getClosestWorkTime({date:n,dir:"future",task:t.successor});return i.getTime()===n.getTime()?t.predecessor.endDate:i}function nk(t){let e=t.link._trueLag??t.link.lag??0;return!(t.link.type===M.FINISH_TO_START||t.link.type===M.FINISH_TO_FINISH)||!ai(t.link)||t.successor.p6?.activityType!=="finish_milestone"||e>=0||t.lagTask!==null?null:t.adapter.getClosestWorkTime({date:rn(t.predecessor.endDate,e),dir:"future",task:t.successor})}function ik(t){let e=t.link._trueLag??t.link.lag??0,n=t.lagTask===null?rn(t.predecessor.startDate,e):t.adapter.calculateEndDate({startDate:t.predecessor.startDate,durationHours:e,task:t.lagTask});return t.adapter.getClosestWorkTime({date:n,dir:"future",task:t.successor})}function Zr(t){let e=rk(t);if(e!==null)return e;let n=ak(t);if(n!==null)return n;let i=t.link.type===M.FINISH_TO_FINISH&&ai(t.link)&&t.lagTask!==null&&t.lagTask.id!==t.successor.id?ok(t):Na(t.successor,t.predecessor,t.link,t.adapter,t.lagTask);return lk(t)?ck(i,t.lagTask,t.adapter):i}function rk(t){let e=t.link._trueLag??t.link.lag??0;if(t.link.type!==M.START_TO_FINISH||!ai(t.link)||t.lagTask!==null||e<=0)return null;let n=rn(t.successor.endDate,-e);return t.adapter.calculateEndDate({startDate:n,durationHours:t.predecessor.durationHours,task:t.predecessor})}function ak(t){let e=t.link._trueLag??t.link.lag??0,n=t.adapter.isWorkTime?.({date:t.successor.startDate,task:t.predecessor});return t.link.type!==M.FINISH_TO_START||!ai(t.link)||t.predecessor.p6?.activityType!=="finish_milestone"||e!==0||t.lagTask!==null||n!==!1?null:t.adapter.getClosestWorkTime({date:t.successor.startDate,dir:"past",task:t.predecessor})}function ai(t){return t._sourceLag===void 0&&t._targetLag===void 0}function ok(t){let e=t.link._trueLag??t.link.lag??0;if(t.lagTask===null)return rn(t.successor.endDate,-e);let n=t.adapter.getClosestWorkTime({date:t.successor.endDate,dir:"past",task:t.lagTask});return t.adapter.calculateEndDate({startDate:n,durationHours:-e,task:t.lagTask})}function sk(t){let e=t.link.type===M.FINISH_TO_START||t.link.type===M.FINISH_TO_FINISH,n=(t.link.lag??0)===0&&(t.link._sourceLag??0)===0&&(t.link._targetLag??0)===0;return t.successor.durationHours===0&&e&&n}function lk(t){return t.link.type===M.FINISH_TO_FINISH&&(t.link._trueLag??t.link.lag??0)>0&&t.lagTask!==null}function ck(t,e,n){if(e===null)return t;let i=mr(t),r=n.getClosestWorkTime({date:i,dir:"future",task:e}),a=uu(i,r);return r.getTime()>i.getTime()&&a<=ZR?r:t}function _g(t){let e=Sk(t.links),n={...t,projectEarlyFinish:mk(t.activities)};for(let i of[...t.orderedIds].reverse())dk(i,e.get(i)??[],n)}function dk(t,e,n){let i=n.adapter.getActivity(t),r=n.activities.get(t);if(!Ak(i)||r===void 0)return;let a=Ik(i,r),o=hk(a,e,n);if(!fk(r,o))return;let s=yk(a,o,n.adapter),l={...r,...s};n.activities.set(t,l),uk(a,l,e,n)}function uk(t,e,n,i){let r=Tg(t,e);for(let a of n){let o=i.adapter.getActivity(a.target),s=i.activities.get(a.target);if(o?.p6?.activityType!=="level_of_effort"||!s)continue;let l=Tg(o,s),c=ms({predecessor:r,successor:l,link:a,adapter:i.adapter,lagTask:i.resolveLagTask(r,l)});s.earlyStart!==null&&c<=s.earlyStart||i.activities.set(a.target,pk(s,l,c,i.adapter))}}function pk(t,e,n,i){let r=i.calculateEndDate({startDate:n,durationHours:t.scheduledRemainingDurationHours,task:e});return{...t,remainingEarlyStart:n,remainingEarlyFinish:r,earlyStart:new Date(n),earlyFinish:new Date(r)}}function Tg(t,e){return{...t,startDate:e.remainingEarlyStart??e.earlyStart??t.startDate,endDate:e.remainingEarlyFinish??e.earlyFinish??t.endDate,durationHours:e.scheduledRemainingDurationHours}}function fk(t,e){return e!==null&&t.remainingEarlyFinish!==null&&e>t.remainingEarlyFinish}function yk(t,e,n){let i=n.calculateEndDate({startDate:e,durationHours:-t.durationHours,task:t}),r=n.calculateEndDate({startDate:i,durationHours:t.durationHours,task:t});return{remainingEarlyStart:i,remainingEarlyFinish:r,earlyStart:new Date(i),earlyFinish:new Date(r)}}function hk(t,e,n){let i=null;for(let r of e){let a=gk(r.target,n);if(a===null)continue;let o=Zr({successor:a,predecessor:t,link:r,adapter:n.adapter,lagTask:n.resolveLagTask(t,a)});(i===null||o<i)&&(i=o)}return i??n.projectEarlyFinish}function mk(t){let e=null;for(let n of t.values()){let i=n.remainingEarlyFinish??n.earlyFinish;i!==null&&(e===null||i>e)&&(e=i)}return e}function gk(t,e){let n=e.adapter.getActivity(t),i=e.activities.get(t);if(n?.p6===void 0||n.p6.activityType==="level_of_effort"||i===void 0)return null;let r=i.remainingEarlyStart??i.earlyStart,a=i.remainingEarlyFinish??i.earlyFinish;return r===null||a===null?null:{...n,startDate:r,endDate:a,durationHours:i.scheduledRemainingDurationHours}}function Ak(t){return t?.p6?.executionStatus==="not_started"&&t.p6.primaryConstraintType==="alap"}function Ik(t,e){return{...t,durationHours:e.scheduledRemainingDurationHours}}function Sk(t){let e=new Map;for(let n of t){let i=e.get(n.source)??[];i.push(n),e.set(n.source,i)}return e}var Pn="CS_MSO",nd="CS_MEO";function Ye(t){return t?.p6?.primaryConstraintType==="mandatory_start"&&t.p6.sourcePrimaryConstraintToken!==Pn}function Ge(t){return t?.p6?.primaryConstraintType==="mandatory_finish"&&t.p6.sourcePrimaryConstraintToken!==nd}var vk=60*1e3,Ck=3600*1e3,Dk=64;function Lg(t){let{adapter:e,settings:n}=t;if(n.dataDate===null)throw new Error("P6 forward pass requires Data Date");let i=e.getAllActivities().filter(p=>p.p6!==void 0&&p.p6.activityType!=="wbs_summary").map(p=>p.id),r=new Set(i),a=e.getAllLinks().filter(p=>r.has(p.source)&&r.has(p.target)).filter(p=>{let f=e.getActivity(p.source),y=e.getActivity(p.target);return n.outOfSequencePolicy!=="progress_override"&&Tk(f)?!1:y?.p6!==void 0&&hs({outOfSequencePolicy:n.outOfSequencePolicy,successorExecution:Ke(y.p6).execution,linkType:p.type})}),o=a.filter(p=>{let f=e.getActivity(p.target);return f?.p6!==void 0&&Ke(f.p6).execution!=="completed"}),s=Ee(i,o);if(s.hasCycles)return{activities:new Map,cycles:s.cycleNodes};let l=Fk(a),c=rd(n,e),d=new Map,u=new Set;for(let p of s.ordered){let f=e.getActivity(p);if(f?.p6===void 0)continue;let y=Ke(f.p6);if(y.execution==="completed"){let U=n.outOfSequencePolicy==="actual_dates";U&&u.add(p);let $=n.outOfSequencePolicy==="retained_logic"&&f.p6.activityType!=="level_of_effort"?new Date(n.dataDate):null,ut=U?f.p6.actualStart:$,q=U?f.p6.actualFinish:$;d.set(p,{activityId:p,scheduledRemainingDurationHours:0,remainingEarlyStart:null,remainingEarlyFinish:null,earlyStart:kg(ut),earlyFinish:kg(q),drivingLinkId:null});continue}let h=[...l.get(p)??[]].sort((U,$)=>U.source.localeCompare($.source)||U.id.localeCompare($.id)),m=wk(f),g=Eg({successor:m,incomingLinks:h,activities:d,settings:n,adapter:e,resolveLagTask:c}),C=Rg({activity:m,earliestStart:g.earliestStart,settings:n,adapter:e}),b=0;for(;!Object.is(m.durationHours,C)&&b<Dk;)m={...m,durationHours:C},g=Eg({successor:m,incomingLinks:h,activities:d,settings:n,adapter:e,resolveLagTask:c}),C=Rg({activity:m,earliestStart:g.earliestStart,settings:n,adapter:e}),b+=1;if(!Object.is(m.durationHours,C))throw new Error(`P6_EXPECTED_FINISH_DID_NOT_SETTLE: ${String(p)}`);let{earliestStart:E,drivingLinkId:P,drivingLinkIds:N}=g,I=ed(e,m,E),R=y.execution==="in_progress"?{earliestStart:null,latestStart:null,earliestEnd:null,latestEnd:null}:Ok(m,e),k=Pk({activity:m,bounds:R,settings:n,adapter:e}),O={activityId:p,startDate:I?.start??E,endDate:I?.finish??e.calculateEndDate({startDate:E,durationHours:C,task:m}),drivingLinkId:P,kind:"asap",conflict:!1,earliestStart:k.earliestStart,latestStart:k.latestStart,earliestEnd:k.earliestEnd,latestEnd:k.latestEnd,earliestSchedulingStart:I?.start??E};if(vi(m,O,e),I!==null){let U=ed(e,m,O.startDate);U!==null&&(O.startDate=U.start,O.endDate=U.finish)}let F=O.startDate.getTime()===E.getTime();d.set(p,{activityId:p,scheduledRemainingDurationHours:C,remainingEarlyStart:new Date(O.startDate),remainingEarlyFinish:new Date(O.endDate),earlyStart:new Date(O.startDate),earlyFinish:new Date(O.endDate),drivingLinkId:F?P:null,drivingLinkIds:F?N:[]})}_g({adapter:e,orderedIds:s.ordered,links:a,activities:d,resolveLagTask:c});for(let p of u){let f=d.get(p);d.set(p,{...f,earlyStart:null,earlyFinish:null})}return{activities:d,cycles:[]}}function Tk(t){return t?.p6?.activityType==="level_of_effort"&&t.p6.executionStatus==="not_started"&&t.p6.remainingDurationHours===0}function Eg(t){let{successor:e,incomingLinks:n,activities:i,settings:r,adapter:a,resolveLagTask:o}=t,s=a.getClosestWorkTime({date:new Date(r.dataDate),dir:"future",task:e}),l=e.p6?.resumeDate??null;l!==null&&l.getTime()>s.getTime()&&(s=a.getClosestWorkTime({date:new Date(l),dir:"future",task:e}));let c=null,d=[];for(let u of n){let p=a.getActivity(u.source),f=i.get(u.source);if(p?.p6===void 0||f===void 0)continue;let y=f.remainingEarlyStart??f.earlyStart,h=f.remainingEarlyFinish??f.earlyFinish;if(y===null||h===null)continue;let m=_k({link:u,predecessor:p,predecessorDates:f,successor:e,settings:r}),g=xk(u,p,f,r),C={...p,startDate:g,endDate:h,durationHours:a.calculateDuration({startDate:g,endDate:h,task:p})},b=m??ms({predecessor:C,successor:e,link:u,adapter:a,lagTask:o(C,e)}),E=u.type==="0"&&e.durationHours===0&&e.type!=="milestone"?Ek(e,b,a):b;E>s?(s=E,c=u.id,d=[u.id]):d.length>0&&E.getTime()===s.getTime()&&d.push(u.id)}return{earliestStart:s,drivingLinkId:c,drivingLinkIds:d}}function Og(t){return t.p6?.activityType==="task"&&t.p6.executionStatus==="not_started"&&t.p6.originalDurationHours===0}function _k(t){let e=t.settings.outOfSequencePolicy==="retained_logic"&&t.settings.startToStartLagBasis==="early_start"&&t.link.type==="1"&&t.predecessor.p6?.executionStatus==="in_progress"&&t.predecessor.p6?.actualStart!==null&&Og(t.successor),n=t.predecessorDates.remainingEarlyStart??t.predecessorDates.earlyStart;return e&&n!==null?new Date(n):null}function Ek(t,e,n){if(t.p6?.activityType==="level_of_effort")return e;let i=mr(e),r=n.getClosestWorkTime({date:i,dir:"future",task:t});if(!Og(t))return r;let a=new Date(e.getTime()+vk);if(n.isWorkTime?.({date:a,task:t}))return e;if(n.isWorkTime===void 0)return r.getTime()===i.getTime()?e:r;let o=new Date(e.getTime()+Ck);return n.getClosestWorkTime({date:o,dir:"future",task:t})}function Pk(t){let{activity:e,bounds:n,settings:i,adapter:r}=t,a=Ye(e);if(Rk(t,a)){let s=kk(t,a);return{...n,earliestStart:s,latestStart:s}}let o=Ge(e);if(Lk(t,o)){let s=i.dataDate;if(s===null)return n;let l=o?r.getClosestWorkTime({date:s,dir:"future",task:e}):s;return{...n,earliestStart:l,latestStart:l,latestEnd:null}}return e.constraintType==="mfo"?n:{...n,latestStart:null,latestEnd:null}}function Rk(t,e){let{activity:n,bounds:i,settings:r}=t;return n.p6?.executionStatus!=="not_started"?!1:e?!0:n.constraintType!=="mso"?!1:r.outOfSequencePolicy!=="retained_logic"?!0:i.earliestStart!==null&&r.dataDate!==null&&i.earliestStart>=r.dataDate}function kk(t,e){let{activity:n,bounds:i,settings:r,adapter:a}=t,o=id(i.earliestStart,r.dataDate);return!e||o===null?r.outOfSequencePolicy==="retained_logic"?i.earliestStart:o:a.getClosestWorkTime({date:o,dir:"future",task:n})}function Lk(t,e){let{activity:n,bounds:i,settings:r}=t;return n.p6?.executionStatus!=="not_started"||i.latestStart===null||r.dataDate===null||i.latestStart>=r.dataDate?!1:e||n.constraintType==="mfo"&&r.outOfSequencePolicy==="actual_dates"}function Ok(t,e){let n=bk(t,e),i=t.p6?.secondaryConstraintType??null,r=t.p6?.secondaryConstraintDate??null;if(i===null||r===null)return n;let a=Je({...t,constraintType:i,constraintDate:r},e);return Nk(n,a)}function bk(t,e){let n=t.p6?.primaryConstraintType,i=t.p6?.primaryConstraintDate;return n==null||i===null||i===void 0?Je(t,e):Je({...t,constraintType:Qa(n),constraintDate:i},e)}function Nk(t,e){return{earliestStart:id(t.earliestStart,e.earliestStart),latestStart:Pg(t.latestStart,e.latestStart),earliestEnd:id(t.earliestEnd,e.earliestEnd),latestEnd:Pg(t.latestEnd,e.latestEnd)}}function id(t,e){return t===null?e:e===null||t>e?t:e}function Pg(t,e){return t===null?e:e===null||t<e?t:e}function Rg(t){let{activity:e,earliestStart:n,settings:i,adapter:r}=t,a=e.p6?.expectedFinish??null;return!i.useExpectedFinishDates||a===null||e.p6===void 0?e.p6?.remainingDurationHours??e.durationHours:a<=n?0:r.calculateDuration({startDate:n,endDate:a,task:e})}function rd(t,e){let n=null,i=()=>{if(n??=e.getAllActivities().find(r=>r.type==="project")??null,n===null)throw new Error("P6 schedule requires a project activity for Project Default relationship lag calendar");return n};switch(t.relationshipLagCalendar){case"predecessor":return r=>r;case"successor":return(r,a)=>a;case"project_default":return()=>i();case"twenty_four_hour":return()=>null}}function Fk(t){let e=new Map;for(let n of t){let i=e.get(n.target)??[];i.push(n),e.set(n.target,i)}return e}function wk(t){return t.p6===void 0?t:{...t,durationHours:t.p6.remainingDurationHours}}function xk(t,e,n,i){return!(t.type==="1"||t.type==="3")||e.p6===void 0?new Date(n.remainingEarlyStart??n.earlyStart??e.startDate):(i.outOfSequencePolicy==="actual_dates"||Xr({outOfSequencePolicy:i.outOfSequencePolicy,linkType:t.type,actualStart:e.p6.actualStart})||i.startToStartLagBasis==="actual_start")&&e.p6.actualStart!==null?new Date(e.p6.actualStart):new Date(n.earlyStart??n.remainingEarlyStart??e.startDate)}function kg(t){return t===null?null:new Date(t)}function Mk(t,e){let n=t==="start_float"?e.startFloatHours:t==="finish_float"?e.finishFloatHours:Math.min(e.startFloatHours,e.finishFloatHours);return Object.is(n,-0)?0:n}function wg(t){let{adapter:e,settings:n,forward:i}=t,r=[...i.activities.keys()],a=new Set(r),o=e.getAllLinks().filter(g=>a.has(g.source)&&a.has(g.target)),s=o.filter(g=>{let C=e.getActivity(g.source),b=e.getActivity(g.target);return n.outOfSequencePolicy!=="progress_override"&&Uk(b)||Hk(g,C,b)?!1:b?.p6!==void 0&&hs({outOfSequencePolicy:n.outOfSequencePolicy,successorExecution:Ke(b.p6).execution,linkType:g.type})}),l=s.filter(g=>{let C=e.getActivity(g.source);return!(C?.p6?.activityType==="level_of_effort"&&Ke(C.p6).execution==="completed")}),c=Ee(r,l);if(c.hasCycles)throw new Error(`P6 backward pass cannot calculate cycles: ${c.cycleNodes.join(", ")}`);let d=zk(e,i,r),u=n.projectMustFinishBy??d;if(u===null)return{activities:Vk(r)};let p=d??u,f=bg(s),y=bg(o),h=rd(n,e),m=new Map;for(let g of c.reversed){let C=e.getActivity(g),b=i.activities.get(g);if(C?.p6===void 0||b===void 0)continue;let E=Jk(C,b.scheduledRemainingDurationHours??C.p6.remainingDurationHours),P=new Date(u);for(let q of f.get(g)??[]){let At=e.getActivity(q.target),Pt=m.get(q.target),ne=i.activities.get(q.target);if(At?.p6===void 0||Pt===void 0)continue;let Gt=qk(At,Pt,n,q.type);if(Gt===null)continue;let yt={...At,startDate:Gt.startDate,endDate:Gt.endDate,durationHours:ne?.scheduledRemainingDurationHours??At.p6.remainingDurationHours},ie=Xr({outOfSequencePolicy:n.outOfSequencePolicy,linkType:q.type,actualStart:C.p6.actualStart})||xg(C,q,n)?{...q,lag:0}:q,ra=n.outOfSequencePolicy==="actual_dates"&&q.type==="0"&&At.p6.executionStatus==="in_progress"&&At.p6.primaryConstraintType==="mandatory_start"&&At.p6.sourcePrimaryConstraintToken!==Pn,aa=Zr({successor:yt,predecessor:E,link:ie,adapter:e,lagTask:ra?yt:h(E,yt)});aa<P&&(P=aa)}if(b.remainingEarlyStart===null||b.remainingEarlyFinish===null){if(n.outOfSequencePolicy!=="retained_logic"||C.p6.activityType==="level_of_effort"){m.set(g,{activityId:g,remainingLateStart:null,remainingLateFinish:null,lateStart:null,lateFinish:null,totalFloatHours:null,freeFloatHours:null,isCritical:!1});continue}m.set(g,{activityId:g,remainingLateStart:null,remainingLateFinish:null,lateStart:new Date(P),lateFinish:new Date(P),totalFloatHours:null,freeFloatHours:null,isCritical:!1});continue}P=Xk(E,P,e),E.durationHours===0&&C.p6.activityType!=="level_of_effort"&&Mg(C,f.get(g)??[],e,P)&&(P=e.getClosestWorkTime({date:Si(P),dir:"past",task:E}));let N=(y.get(g)??[]).length===0,I=Wk(n,C,N),R=Sg(e,E,P),k=R?.start??e.calculateEndDate({startDate:P,durationHours:-E.durationHours,task:E});if(C.p6.activityType==="level_of_effort")k=$k(e,P,E,f.get(g)??[]),E.durationHours===0&&(P=new Date(k));else if(R!==null)P=R.finish;else{let q=n.outOfSequencePolicy==="actual_dates"&&jk(f.get(g)??[],e)||C.p6.secondaryConstraintType==="fnlt";k=Bk(C,k,q),P=e.calculateEndDate({startDate:k,durationHours:E.durationHours,task:E})}I&&(k=new Date(b.remainingEarlyStart),P=new Date(b.remainingEarlyFinish));let O=od(e,b.remainingEarlyStart,k,E),F=od(e,b.remainingEarlyFinish,P,E),U=Mk(n.totalFloatMethod,{startFloatHours:O,finishFloatHours:F}),$=Kk({activity:C,effectivePredecessor:E,early:b,outgoingLinks:f.get(g)??[],boundary:p,forward:i,settings:n,adapter:e,resolveLagTask:h}),ut=n.criticalActivityMethod==="total_float"&&U<=n.criticalFloatThresholdHours||I;m.set(g,{activityId:g,remainingLateStart:new Date(k),remainingLateFinish:new Date(P),lateStart:new Date(k),lateFinish:new Date(P),totalFloatHours:U,freeFloatHours:$,isCritical:ut})}return{activities:m}}function Uk(t){return t?.p6?.activityType==="level_of_effort"&&t.p6.executionStatus==="not_started"&&t.p6.remainingDurationHours===0}function ad(t,e,n){return n.isWorkTime?.({date:Si(e),task:t})===!1}function Hk(t,e,n){return t.type==="0"&&t.lag===0?!1:e?.p6?.executionStatus==="completed"&&n?.p6?.executionStatus==="completed"}function Bk(t,e,n){let i=t.p6;return n||i?.executionStatus!=="in_progress"||i.primaryConstraintType!=="snet"||i.actualStart===null||e>=i.actualStart?e:new Date(i.actualStart)}function jk(t,e){return t.some(n=>{let i=e.getActivity(n.target)?.p6;return i?.executionStatus==="in_progress"&&i.primaryConstraintType==="mandatory_start"&&i.sourcePrimaryConstraintToken!==Pn})}function Wk(t,e,n){return t.makeOpenEndedActivitiesCritical&&n&&e.type!=="milestone"&&t.multipleFloatPaths.endingActivityId!==e.id&&Ke(e.p6).execution==="not_started"}function Vk(t){return new Map(t.map(e=>[e,{activityId:e,remainingLateStart:null,remainingLateFinish:null,lateStart:null,lateFinish:null,totalFloatHours:null,freeFloatHours:null,isCritical:!1}]))}function Kk(t){let{activity:e,effectivePredecessor:n,early:i,outgoingLinks:r,boundary:a,forward:o,settings:s,adapter:l,resolveLagTask:c}=t;if(i.remainingEarlyStart===null||i.remainingEarlyFinish===null)return null;if(e.p6?.executionStatus==="not_started"&&Ge(e)&&r.length>0||e.p6?.executionStatus==="not_started"&&Ye(e)&&Yk(r,l))return 0;let d=null;for(let p of r){if(xg(e,p,s))continue;let f=l.getActivity(p.target),y=o.activities.get(p.target);if(f?.p6===void 0||y===void 0)continue;let h=Gk({successor:f,early:y,settings:s,linkType:p.type});if(h===null)continue;let m={...f,startDate:h.startDate,endDate:h.endDate,durationHours:y.scheduledRemainingDurationHours},g=Xr({outOfSequencePolicy:s.outOfSequencePolicy,linkType:p.type,actualStart:e.p6?.actualStart??null})?{...p,lag:0}:p,C=Zr({successor:m,predecessor:n,link:g,adapter:l,lagTask:c(n,m)});(d===null||C<d)&&(d=C)}d??=new Date(a),n.durationHours===0&&Mg(e,r,l,d)&&(d=l.getClosestWorkTime({date:Si(d),dir:"past",task:n}));let u=od(l,i.remainingEarlyFinish,d,n);return Math.max(0,Object.is(u,-0)?0:u)}function Yk(t,e){return t.some(n=>{let i=e.getActivity(n.target)?.p6;return i?.activityType==="task"&&i.executionStatus==="not_started"&&i.originalDurationHours===0})}function xg(t,e,n){return n.outOfSequencePolicy==="progress_override"&&e.type==="1"&&t.p6?.actualStart!==null&&t.p6?.actualStart!==void 0}function Gk(t){let{successor:e,early:n,settings:i,linkType:r}=t,a=n.remainingEarlyStart??n.earlyStart,o=n.remainingEarlyFinish??n.earlyFinish,s=e.p6;return i.outOfSequencePolicy==="actual_dates"&&s!==void 0&&(r==="0"||r==="1"||s.actualFinish!==null)&&(a=s.actualStart??a,o=s.actualFinish??o),a===null||o===null?null:{startDate:new Date(a),endDate:new Date(o)}}function Mg(t,e,n,i){if(t.p6?.executionStatus==="completed")return!1;if(t.p6?.activityType==="task"&&t.p6.executionStatus==="not_started"&&t.p6.originalDurationHours===0){let o=Si(i);return n.getClosestWorkTime({date:o,dir:"past",task:t})<o}if(t.p6?.activityType==="start_milestone"&&e.length===0)return ad(t,i,n);if(e.length===0)return!1;if(t.type!=="milestone")return!0;let r=t.p6?.activityType;if(r!=="start_milestone"&&r!=="finish_milestone")return!1;let a=r==="finish_milestone";return e.every(o=>{let s=n.getActivity(o.target),c=s?.p6?.activityType==="resource_dependent"?s?.calendarId===t.calendarId:s?.calendarId!==t.calendarId&&ad(t,i,n);return s?.p6!==void 0&&(!a||c)&&Ke(s.p6).execution!=="completed"})}function $k(t,e,n,i){if(n.durationHours===0){let o=i.some(s=>{let l=t.getActivity(s.target);return l!==null&&l.calendarId!==n.calendarId})&&ad(n,e,t)?Si(e):e;return t.getClosestWorkTime({date:o,dir:"past",task:n})}let r=new Date(e);return r.setUTCHours(0,0,0,0),t.getClosestWorkTime({date:r,dir:"future",task:n})}function qk(t,e,n,i){if(t.p6===void 0)return null;let r=e.remainingLateStart??e.lateStart,a=e.remainingLateFinish??e.lateFinish;if(n.outOfSequencePolicy==="actual_dates"){let o=t.p6.actualStart,s=t.p6.actualFinish;if(i==="0"||i==="1"||s!==null){let l=o??r,c=s??a;return l===null||c===null?null:{startDate:new Date(l),endDate:new Date(c)}}}return r===null||a===null?null:n.outOfSequencePolicy==="actual_dates"?{startDate:new Date(r),endDate:new Date(a)}:{startDate:new Date(r),endDate:new Date(a)}}function zk(t,e,n){let i=n.filter(o=>t.getActivity(o)?.p6?.executionStatus!=="completed"),r=i.length>0?i:n,a=null;for(let o of r){let s=e.activities.get(o),l=s?.remainingEarlyFinish??s?.earlyFinish;l!=null&&(a===null||l>a)&&(a=l)}return a===null?null:new Date(a)}function bg(t){let e=new Map;for(let n of t){let i=e.get(n.source)??[];i.push(n),e.set(n.source,i)}return e}function Jk(t,e=t.p6?.remainingDurationHours??t.durationHours){return t.p6===void 0?t:{...t,durationHours:e}}function Xk(t,e,n){let i=t.p6?.primaryConstraintType,r=t.p6?.primaryConstraintDate,a=t.p6?.sourcePrimaryConstraintToken,o=a===nd?"fnlt":a===Pn?"snlt":i,l=i==="start_on"?{...t,constraintType:null,constraintDate:null}:o!=null&&r!==null&&r!==void 0?Ng(t,o,r,n):t,d=t.p6?.actualStart===null||o==="fnlt"||o==="finish_on"?Fg(l,e,n):new Date(e);if(t.p6?.secondaryConstraintType===null||t.p6?.secondaryConstraintDate===null||t.p6===void 0||t.p6.actualStart!==null&&t.p6.secondaryConstraintType!=="fnlt")return d;let u=Ng(t,t.p6.secondaryConstraintType,t.p6.secondaryConstraintDate,n);return d=Fg(u,d,n),new Date(d)}function Ng(t,e,n,i){let r=Qa(e),a=Zk({activity:t,constraintType:r,constraintDate:n,adapter:i});return{...t,constraintType:r,constraintDate:a}}function Zk(t){let{activity:e,constraintType:n,constraintDate:i,adapter:r}=t,a=e.p6?.sourcePrimaryConstraintToken===Pn&&n==="snlt"?"future":Qk(n,i)?"past":null;return a===null?new Date(i):r.getClosestWorkTime({date:i,dir:a,task:e})}function Qk(t,e){return e.getUTCHours()===0&&e.getUTCMinutes()===0&&e.getUTCSeconds()===0&&e.getUTCMilliseconds()===0&&(t==="fnlt"||t==="mfo")}function Fg(t,e,n){let i=Je(t,n);if((t.constraintType==="mso"||t.constraintType==="mfo")&&i.latestEnd!==null)return new Date(i.latestEnd);let r=e;if(i.latestEnd!==null&&i.latestEnd<r&&(r=i.latestEnd),i.latestStart!==null){let a=n.calculateEndDate({startDate:i.latestStart,durationHours:t.durationHours,task:t});a<r&&(r=a)}return t.constraintType==="snet"&&i.earliestEnd!==null&&i.earliestEnd<r&&(r=i.earliestEnd),new Date(r)}function od(t,e,n,i){return e<=n?t.calculateDuration({startDate:e,endDate:n,task:i}):-t.calculateDuration({startDate:n,endDate:e,task:i})}var tL=3600*1e3,Ug=["P6_NO_PREDECESSOR","P6_NO_SUCCESSOR","P6_OUT_OF_SEQUENCE","P6_ACTUAL_AFTER_DATA_DATE","P6_INVALID_MILESTONE_RELATIONSHIP"],eL={P6_NO_PREDECESSOR:"open_ended",P6_NO_SUCCESSOR:"open_ended",P6_OUT_OF_SEQUENCE:"out_of_sequence",P6_ACTUAL_AFTER_DATA_DATE:"actual_after_data_date",P6_INVALID_MILESTONE_RELATIONSHIP:"milestone_relationship",P6_UNSATISFIED_CONSTRAINT:"unsatisfied_constraint"},nL={0:"finish_to_start",1:"start_to_start",2:"finish_to_finish",3:"start_to_finish"};function Vg(t){let{adapter:e,dataDate:n,project:i,outOfSequencePolicy:r}=t;dL(r);let a=e.getAllActivities().filter(sd).sort(Gg),o=new Map;for(let s of Ug)o.set(s,[]);for(let s of a){e.getIncomingLinkIds(s.id).length===0&&Qr(o,ir(s,i,n,{code:"P6_NO_PREDECESSOR",rule:"activity_has_no_predecessor"})),e.getOutgoingLinkIds(s.id).length===0&&Qr(o,ir(s,i,n,{code:"P6_NO_SUCCESSOR",rule:"activity_has_no_successor"})),rL(s,n)&&Qr(o,ir(s,i,n,{code:"P6_ACTUAL_AFTER_DATA_DATE",rule:"actual_date_is_after_data_date"}));let l=aL(e,s);l!==null&&Qr(o,ir(s,i,n,{code:"P6_INVALID_MILESTONE_RELATIONSHIP",rule:"milestone_endpoint_is_not_available",relationship:Bg(e,l)}))}for(let s of cL(e.getAllLinks())){if(!oL(e,s))continue;let l=e.getActivity(s.target);l===null||!sd(l)||Qr(o,ir(l,i,n,{code:"P6_OUT_OF_SEQUENCE",rule:"successor_progress_precedes_required_logic",relationship:Bg(e,s)}))}return Ug.flatMap(s=>o.get(s)??[])}function Kg(t){let e=[],n=t.adapter.getAllActivities().filter(sd).sort(Gg);for(let i of n){let r=t.calculated.get(i.id);r===void 0||r.actualFinish!==null||iL(i,r)&&e.push(ir({...i,p6:r},t.project,t.dataDate,{code:"P6_UNSATISFIED_CONSTRAINT",rule:"constraint_could_not_be_satisfied"}))}return e}function iL(t,e){let n=t.constraintDate??null,i=t.constraintType??null;if(n===null||i===null)return!1;let r=n.getTime(),a=e.remainingEarlyStart??e.earlyStart,o=e.remainingEarlyFinish??e.earlyFinish;switch(i){case _.MSO:return a!==null&&a.getTime()!==r;case _.MFO:return o!==null&&o.getTime()!==r;case _.SNET:return a!==null&&a.getTime()<r;case _.FNET:return o!==null&&o.getTime()<r;case _.SNLT:return a!==null&&a.getTime()>r;case _.FNLT:return o!==null&&o.getTime()>r;default:return!1}}function ir(t,e,n,i){return{kind:"diagnostic",code:i.code,category:eL[i.code],severity:"warning",project:{...e},activityId:t.id,activityCode:t.customId??t.id,activityName:t.name,activityStatus:t.p6.executionStatus,dataDate:new Date(n),dates:{actualStart:Wg(t.p6.actualStart),actualFinish:Wg(t.p6.actualFinish)},relationship:i.relationship??null,explanation:{rule:i.rule}}}function Qr(t,e){t.get(e.code).push(e)}function rL(t,e){let n=t.p6;return n!==void 0&&(jg(n.actualStart,e)||jg(n.actualFinish,e))}function aL(t,e){return e.p6?.activityType==="start_milestone"?Hg(t,e,"incoming",n=>n.type==="2"||n.type==="3"):e.p6?.activityType==="finish_milestone"?Hg(t,e,"outgoing",n=>n.type==="1"||n.type==="3"):null}function Hg(t,e,n,i){return(n==="incoming"?t.getIncomingLinkIds(e.id):t.getOutgoingLinkIds(e.id)).map(a=>t.getLink(a)).filter(a=>a!==null).sort(Yg).find(i)??null}function oL(t,e){let n=t.getActivity(e.source),i=t.getActivity(e.target);if(n?.p6===void 0||i?.p6===void 0)return!1;let r=lL(i,e.type);if(r===null)return!1;let a=sL(n,e.type);return a===null?!0:r.getTime()<a.getTime()+e.lag*tL}function sL(t,e){return t.p6===void 0?null:e==="1"||e==="3"?t.p6.actualStart:t.p6.actualFinish}function lL(t,e){return t.p6===void 0?null:e==="0"||e==="1"?t.p6.actualStart:t.p6.actualFinish}function Bg(t,e){let n=t.getActivity(e.source),i=t.getActivity(e.target);return{id:e.id,predecessorActivityId:e.source,predecessorActivityCode:n===null?null:n.customId??n.id,successorActivityId:e.target,successorActivityCode:i===null?null:i.customId??i.id,type:nL[e.type],lagHours:e.lag}}function cL(t){return[...t].sort(Yg)}function Yg(t,e){return String(t.id).localeCompare(String(e.id))}function Gg(t,e){let n=t.correlativeId-e.correlativeId;return n!==0?n:(t.customId??String(t.id)).localeCompare(e.customId??String(e.id))}function jg(t,e){return t!==null&&t.getTime()>e.getTime()}function Wg(t){return t===null?null:new Date(t)}function sd(t){return t.p6!==void 0}function dL(t){if(t!=="retained_logic"&&t!=="progress_override"&&t!=="actual_dates")throw new Error(`Unsupported P6 out-of-sequence policy: ${String(t)}`)}function oi(t){let e=null;for(let n of t){if(n===null)continue;let i=n.getTime();(e===null||i<e)&&(e=i)}return e===null?null:new Date(e)}function Rn(t){let e=null;for(let n of t){if(n===null)continue;let i=n.getTime();(e===null||i>e)&&(e=i)}return e===null?null:new Date(e)}function ld(t){let e=null;for(let n of t)n!==null&&(e===null||n<e)&&(e=n);return e}function ta(t){let e=0;for(let n of t)e+=n;return e}function qg(t){let{adapter:e,settings:n,forward:i,backward:r}=t,a=new Map;for(let u of r.activities.keys())a.set(u,{longestPath:!1,floatPath:null,floatPathOrder:null});let o=EL(i);for(let u of o)RL(u,e,i,a,n);if(!n.multipleFloatPaths.enabled)return{activities:a};let s=PL(n,i,o);if(s===null)return{activities:a};let l=n.multipleFloatPaths.limitEnabled?n.multipleFloatPaths.maximum:Number.POSITIVE_INFINITY,c={emittedPaths:0,numberingBudget:n.multipleFloatPaths.limitEnabled?n.multipleFloatPaths.maximum:Number.POSITIVE_INFINITY,numberableActivityIds:vL(e,i,n),activities:a},d=fL({adapter:e,backward:r,settings:n,endingActivityId:s,state:c});if(!d&&n.multipleFloatPaths.useTotalFloat)OL(s,e,i,r,n,l,c);else if(!d){let u=wL(s,e,i,n);As(n)&&(rr(u[0]??[],c),uL({adapter:e,backward:r,settings:n,state:c}));let p=As(n)?u.slice(1):u;for(let f of p)rr(f,c)}return n.multipleFloatPaths.limitEnabled&&!d&&(n.multipleFloatPaths.useTotalFloat?HL(e,i,r,n,c):xL(e,i,n,c)),d||jL(n,r,c.activities,e),{activities:a}}function uL(t){let{adapter:e,backward:n,settings:i,state:r}=t,a=[...r.numberableActivityIds].filter(o=>pL(e.getActivity(o))).sort((o,s)=>{let l=n.activities.get(o)?.freeFloatHours??1/0,c=n.activities.get(s)?.freeFloatHours??1/0;return l-c||dd(o,s,e,i)});for(let o of a)rr([o],r)}function pL(t){if(t?.p6?.executionStatus!=="in_progress")return!1;let e=t.p6.primaryConstraintType;return e==="alap"||e==="mandatory_start"||e==="start_on"||e==="snet"||e==="snlt"}function fL(t){if(!hL(t.settings))return!1;let e=mL(t.adapter,t.state);if(e===null||e.length===0||e.length!==t.state.numberingBudget||e.some((i,r)=>i[0].path!==r+1))return!1;let n=IL(t.endingActivityId,t.adapter);if(e.some(i=>!gL(i,t,n))||yL(e,t))return!1;for(let i of e)SL(i,t.state);return!0}function yL(t,e){if(!e.settings.multipleFloatPaths.useTotalFloat)return[...e.state.numberableActivityIds].some(r=>!zg(r,e));let n=new Set(t.flat().map(r=>r.id)),i=Math.max(...t.map(r=>Math.min(...r.map(a=>e.backward.activities.get(a.id)?.totalFloatHours??1/0))));return[...e.state.numberableActivityIds].some(r=>{if(n.has(r))return!1;let a=e.backward.activities.get(r)?.totalFloatHours;return a!=null&&a<=i})}function hL(t){return t.multipleFloatPaths.limitEnabled&&(t.outOfSequencePolicy==="actual_dates"&&t.multipleFloatPaths.useTotalFloat||t.outOfSequencePolicy==="retained_logic"&&!t.multipleFloatPaths.useTotalFloat&&t.multipleFloatPaths.endingActivityId!==null)}function mL(t,e){let n=[...e.numberableActivityIds].map(a=>{let o=t.getActivity(a)?.p6;return{id:a,path:o?.floatPath,order:o?.floatPathOrder}});if(n.some(a=>a.path===null!=(a.order===null)))return null;let i=n.filter(a=>typeof a.path=="number"&&typeof a.order=="number"),r=new Map;for(let a of i){let o=r.get(a.path);o===void 0?r.set(a.path,[a]):o.push(a)}return[...r].sort(([a],[o])=>a-o).map(([,a])=>a.sort((o,s)=>o.order-s.order))}function gL(t,e,n){return t.length===0||t[0].path>e.state.numberingBudget||t.some((i,r)=>i.order!==r+1)||t.some(i=>!zg(i.id,e))||t.slice(1).some((i,r)=>AL(t[r].id,i.id,e.adapter).length===0)?!1:n.has(t.at(-1).id)}function zg(t,e){let n=e.adapter.getActivity(t)?.p6,i=e.backward.activities.get(t),r=e.settings.multipleFloatPaths.useTotalFloat,a=r?n?.remainingFloatHours:n?.freeFloatHours,o=r?i?.totalFloatHours:i?.freeFloatHours;return a!=null&&a===o}function AL(t,e,n){return n.getOutgoingLinkIds(t).map(i=>n.getLink(i)).filter(i=>i?.target===e)}function IL(t,e){let n=[t],i=new Set;for(;n.length>0;){let r=n.pop();if(!i.has(r)){i.add(r);for(let a of e.getIncomingLinkIds(r)){let o=e.getLink(a)?.source;o!==void 0&&n.push(o)}}}return i}function SL(t,e){for(let n of t){let i=e.activities.get(n.id);e.activities.set(n.id,{...i,floatPath:n.path,floatPathOrder:n.order})}}function vL(t,e,n){return new Set([...e.activities.keys()].filter(i=>CL(t.getActivity(i),n)))}function CL(t,e){return t?.p6?.executionStatus==="completed"?!1:DL(e)?Ye(t)?!1:t?.p6?.executionStatus==="in_progress"?t.p6.primaryConstraintType!==null:!0:e.multipleFloatPaths.useTotalFloat?!tA(t):e.outOfSequencePolicy!=="progress_override"?!0:As(e)?t?.p6?.executionStatus==="not_started"||TL(t):t?.p6?.executionStatus==="not_started"&&!_L(t)}function DL(t){return t.multipleFloatPaths.useTotalFloat&&t.outOfSequencePolicy==="progress_override"}function TL(t){return t?.p6?.executionStatus==="in_progress"&&t.p6.primaryConstraintType!==null&&t.p6.primaryConstraintType!==void 0}function As(t){return t.outOfSequencePolicy==="progress_override"&&!t.multipleFloatPaths.useTotalFloat&&t.multipleFloatPaths.endingActivityId!==null}function _L(t){return Ye(t)||Ge(t)}function rr(t,e){if(!t.some(r=>e.activities.get(r)?.floatPath===null&&e.numberableActivityIds.has(r))||(e.emittedPaths+=1,e.emittedPaths>e.numberingBudget))return;let i=0;for(let r=t.length-1;r>=0;r--){let a=t[r],o=e.activities.get(a);o===void 0||o.floatPath!==null||!e.numberableActivityIds.has(a)||(i+=1,e.activities.set(a,{...o,floatPath:e.emittedPaths,floatPathOrder:i}))}}function EL(t){let e=[...t.activities].filter(([,i])=>i.earlyFinish!==null),n=e.reduce((i,[,r])=>Math.max(i,r.earlyFinish.getTime()),Number.NEGATIVE_INFINITY);return e.filter(([,i])=>i.earlyFinish.getTime()===n).map(([i])=>i).sort((i,r)=>i.localeCompare(r))}function PL(t,e,n){let i=t.multipleFloatPaths.endingActivityId;return i!==null&&e.activities.has(i)?i:n[0]??null}function RL(t,e,n,i,r){let a=[t],o=new Set;for(;a.length>0;){let s=a.pop();if(o.has(s))continue;o.add(s);let l=i.get(s);l!==void 0&&i.set(s,{...l,longestPath:!0}),a.push(...Jg(s,e,n,r))}}function Jg(t,e,n,i){let r=e.getActivity(t),a=n.activities.get(t),o=a?.drivingLinkIds??(a?.drivingLinkId===null||a?.drivingLinkId===void 0?[]:[a.drivingLinkId]),s=r?.p6?.primaryConstraintType==="alap"&&i.outOfSequencePolicy==="retained_logic"?o.filter(f=>e.getLink(f)?.type==="2"):[],l=kL(r,i);if(Ye(r)||Ge(r)||l&&s.length===0)return[];let c=l?s:o;if(c.length>0)return c.map(f=>e.getLink(f)?.source??null).filter(f=>f!==null);let d=e.getIncomingLinkIds(t).map(f=>e.getLink(f)).filter(f=>f!==null).sort((f,y)=>f.source.localeCompare(y.source)),u=d.filter(f=>LL(f,n.activities.get(f.source),a)).map(f=>f.source);if(u.length>0)return u;let p=i.outOfSequencePolicy==="actual_dates"?d.find(f=>{if(f.type!=="0")return!1;let y=e.getActivity(t),h=e.getActivity(f.source);return y?.p6?.executionStatus==="completed"||h?.p6?.executionStatus==="completed"}):void 0;return p===void 0?[]:[p.source]}function kL(t,e){return e.outOfSequencePolicy==="progress_override"&&t?.p6?.primaryConstraintType==="alap"?!1:Zg(t)}function LL(t,e,n){return t.lag!==0||e===void 0||n===void 0?!1:t.type==="0"?gs(e.earlyFinish,n.earlyStart):t.type==="1"?gs(e.earlyStart,n.earlyStart):t.type==="2"?gs(e.earlyFinish,n.earlyFinish):gs(e.earlyStart,n.earlyFinish)}function gs(t,e){return t!==null&&e!==null&&t.getTime()===e.getTime()}function OL(t,e,n,i,r,a,o){let s=k=>o.numberableActivityIds.has(k.source)&&o.numberableActivityIds.has(k.target)&&!Xg(k.target,e,r)&&!Qg(k.source,e,r),l=new Map,c=k=>{let O=l.get(k);if(O!==void 0)return O;let F=eA(k,e,n,i,r,s);return l.set(k,F),F},d=NL(t,e,s),u=Ee(d.activityIds,d.links);if(u.hasCycles){bL(t,c,a,o);return}let p=FL(u.ordered,d.links),f=[],y=[],h=new Set,m=new Set,g=0n,C=o.numberingBudget,b=C!==Number.POSITIVE_INFINITY,E=b?BigInt(C):0n,P=a!==Number.POSITIVE_INFINITY,N=P?BigInt(a):0n,I=()=>{g+=1n,!(b&&g>E)&&$g(y,Number(g),o)},R=k=>{if(h.has(k))return;if(m.has(k)){let F=p.get(k);if(F===void 0)throw new Error(`P6 float path count missing for activity ${String(k)}`);let U=g+1n;(!b||U<=E)&&$g(y,Number(U),o),g+=F;return}m.add(k),y.push(k),h.add(k);let O=c(k);if(O.length===0){I(),y.pop(),h.delete(k);return}f.push({links:O,nextIndex:0})};for(R(t);f.length>0&&(!P||g<N);){let k=f[f.length-1];if(k.nextIndex<k.links.length){let O=k.links[k.nextIndex];k.nextIndex+=1,R(O.source);continue}f.pop(),h.delete(y.pop())}o.emittedPaths=Number(g>BigInt(Number.MAX_SAFE_INTEGER)?BigInt(Number.MAX_SAFE_INTEGER):g)}function Xg(t,e,n){let i=e.getActivity(t);return n.outOfSequencePolicy==="progress_override"&&n.multipleFloatPaths.useTotalFloat&&i?.p6?.executionStatus==="in_progress"?i.p6.primaryConstraintType!==null:Zg(i)}function Zg(t){if(t?.p6?.executionStatus!=="not_started")return!1;let e=t?.p6?.primaryConstraintType;return e==="alap"||e==="start_on"||Ye(t)}function Qg(t,e,n){let i=e.getActivity(t);return n.outOfSequencePolicy==="progress_override"&&n.multipleFloatPaths.useTotalFloat&&i?.p6?.executionStatus==="in_progress"&&i.p6.primaryConstraintType!==null?!0:tA(i)}function tA(t){return t?.p6?.executionStatus==="not_started"&&Ge(t)}function bL(t,e,n,i){let r=[],a=[],o=new Set,s=l=>{if(o.has(l))return;a.push(l),o.add(l);let c=e(l);if(c.length===0){rr(a,i),a.pop(),o.delete(l);return}r.push({links:c,nextIndex:0})};for(s(t);r.length>0&&i.emittedPaths<n;){let l=r[r.length-1];if(l.nextIndex<l.links.length){let c=l.links[l.nextIndex];l.nextIndex+=1,s(c.source);continue}r.pop(),o.delete(a.pop())}}function $g(t,e,n){let i=0;for(let r=t.length-1;r>=0;r--){let a=t[r],o=n.activities.get(a);o===void 0||o.floatPath!==null||!n.numberableActivityIds.has(a)||(i+=1,n.activities.set(a,{...o,floatPath:e,floatPathOrder:i}))}}function NL(t,e,n){let i=new Set([t]),r=[t],a=[],o=[t];for(;o.length>0;){let s=o.pop(),l=e.getIncomingLinkIds(s).map(c=>e.getLink(c)).filter(c=>c!==null&&n(c));for(let c of l)a.push(c),i.has(c.source)||(i.add(c.source),r.push(c.source),o.push(c.source))}return{activityIds:r,links:a}}function FL(t,e){let n=new Map;for(let r of e){let a=n.get(r.target);a===void 0?n.set(r.target,[r]):a.push(r)}let i=new Map;for(let r of t){let a=n.get(r);if(a===void 0||a.length===0){i.set(r,1n);continue}let o=0n;for(let s of a){let l=i.get(s.source);if(l===void 0)throw new Error(`P6 float path count missing for activity ${String(s.source)}`);o+=l}i.set(r,o)}return i}function eA(t,e,n,i,r,a){let o=n.activities.get(t)?.drivingLinkId;return e.getIncomingLinkIds(t).map(s=>e.getLink(s)).filter(s=>s!==null&&a(s)).sort((s,l)=>{let c=s.id===o?0:1,d=l.id===o?0:1;if(c!==d)return c-d;let u=i.activities.get(s.source)?.totalFloatHours??1/0,p=i.activities.get(l.source)?.totalFloatHours??1/0;return u-p||dd(l.source,s.source,e,r)||l.id.localeCompare(s.id)})}function dd(t,e,n,i){let r=n.getActivity(t),a=n.getActivity(e);if(i.dependencyReference==="custom_id")return(r?.customId??t).localeCompare(a?.customId??e);let o=r?.correlativeId,s=a?.correlativeId;return o!==void 0&&s!==void 0&&o!==s?o-s:t.localeCompare(e)}function wL(t,e,n,i){let r=[],a=new Set,o=[t];for(let s=o.pop();s!==void 0;s=o.pop()){let l=[],c=s;for(;c!==null&&!a.has(c)&&e.getActivity(c)?.p6?.executionStatus!=="completed";)a.add(c),l.push(c),c=Is(c,e,i)?null:cd(c,e,n,i);if(l.length===0)continue;r.push(l);let d=[...l].reverse().flatMap(u=>{let p=Is(u,e,i)?null:cd(u,e,n,i);return e.getIncomingLinkIds(u).map(f=>e.getLink(f)).filter(f=>f!==null&&f.source!==p).sort((f,y)=>y.source.localeCompare(f.source)||y.id.localeCompare(f.id))});for(let u of d)o.push(u.source)}return r}function Is(t,e,n){let i=e.getActivity(t)?.p6;return As(n)?i?.executionStatus==="in_progress"&&i.primaryConstraintType!==null:i?.executionStatus!=="not_started"?!1:i?.primaryConstraintType==="alap"||i?.primaryConstraintType==="start_on"||i?.sourcePrimaryConstraintToken===Pn}function xL(t,e,n,i){let r=new Set([...i.activities].filter(([,o])=>o.floatPath!==null).map(([o])=>o)),a=[...e.activities.keys()].filter(o=>!r.has(o)&&ML(o,t)&&UL(o,t,n)).sort((o,s)=>o.localeCompare(s));for(let o of a){let s=[],l=o;for(;l!==null&&!r.has(l);)r.add(l),s.push(l),l=Is(l,t,n)?null:cd(l,t,e,n);s.length>0&&rr(s,i)}}function ML(t,e){return e.getIncomingLinkIds(t).length>0||e.getOutgoingLinkIds(t).length>0}function UL(t,e,n){return!e.getOutgoingLinkIds(t).map(i=>e.getLink(i)).some(i=>i!==null&&!Is(i.target,e,n))}function HL(t,e,n,i,r){r.emittedPaths=WL(r.activities);let a=VL(r),o=d=>r.numberableActivityIds.has(d.source)&&r.numberableActivityIds.has(d.target)&&!Xg(d.target,t,i)&&!Qg(d.source,t,i),s=d=>o(d)&&a.has(d.source)&&a.has(d.target),l=[...a].filter(d=>KL(d,t,o)).sort((d,u)=>YL(d,u,t,n,i)),c=new Set;for(let d of l){let u=GL(d,t,e,n,i,s,c);rr(u,r)}}function BL(t,e,n,i){let r=new Map,a=new Set;for(let[s,l]of n){if(l.floatPath===null)continue;let c=e.activities.get(s)?.totalFloatHours??1/0,d=r.get(l.floatPath)??1/0;r.set(l.floatPath,Math.min(d,c)),Ge(i.getActivity(s))&&a.add(l.floatPath)}let o=new Map([...r].sort(([s,l],[c,d])=>l-d||(t.outOfSequencePolicy==="progress_override"?+!a.has(s)-+!a.has(c):0)||s-c).map(([s],l)=>[s,l+1]));for(let[s,l]of n)l.floatPath!==null&&n.set(s,{...l,floatPath:o.get(l.floatPath)})}function jL(t,e,n,i){!t.multipleFloatPaths.useTotalFloat||!t.multipleFloatPaths.limitEnabled||BL(t,e,n,i)}function WL(t){return Math.max(0,...[...t.values()].map(e=>e.floatPath??0))}function VL(t){return new Set([...t.numberableActivityIds].filter(e=>t.activities.get(e)?.floatPath===null))}function KL(t,e,n){return!e.getOutgoingLinkIds(t).map(i=>e.getLink(i)).some(i=>i!==null&&n(i))}function YL(t,e,n,i,r){let a=i.activities.get(t)?.totalFloatHours??1/0,o=i.activities.get(e)?.totalFloatHours??1/0,s=dd(t,e,n,r);return a-o||(r.outOfSequencePolicy==="progress_override"?-s:s)}function GL(t,e,n,i,r,a,o){let s=[],l=t;for(;l!==null&&!o.has(l);)o.add(l),s.push(l),l=eA(l,e,n,i,r,a)[0]?.source??null;return s}function cd(t,e,n,i){let r=n.activities.get(t)?.drivingLinkId;return r!=null?e.getLink(r)?.source??null:Jg(t,e,n,i)[0]??null}function nA(t){si(t.outOfSequencePolicy,"outOfSequencePolicy",["retained_logic","progress_override","actual_dates"]),si(t.dependencyReference,"dependencyReference",["correlative_id","custom_id"]),si(t.startToStartLagBasis,"startToStartLagBasis",["actual_start","early_start"]),si(t.relationshipLagCalendar,"relationshipLagCalendar",["predecessor","successor","project_default","twenty_four_hour"]),si(t.totalFloatMethod,"totalFloatMethod",["start_float","finish_float","smallest"]),si(t.criticalActivityMethod,"criticalActivityMethod",Object.values(Yn)),si(t.calculateFloatBasedOn,"calculateFloatBasedOn",["each_project","opened_projects"])}function si(t,e,n){if(!n.includes(t))throw new Error(`Invalid P6 schedule settings: ${e}`)}function iA(t,e,n){return n.has(t)?{ancestorId:t,next:e}:e}function $L(t,e,n,i){let r=t.slice(e).reverse(),a=null;for(let o of r)a=iA(o,a,n);for(let o of r)i.set(o,a);return a}function qL(t,e,n,i){let r=[],a=new Map,o=t;for(;o!==null&&!i.has(o)&&!a.has(o);)a.set(o,r.length),r.push(o),o=e.get(o)?.parentId??null;let s=o===null?null:i.get(o)??null,l=o===null?void 0:a.get(o),c=r.length-1;l!==void 0&&(s=$L(r,l,n,i),c=l-1);for(let d=c;d>=0;d-=1){let u=r[d];if(u===void 0)throw new Error("Missing WBS ancestor");s=iA(u,s,n),i.set(u,s)}return i.get(t)??null}function rA(t,e,n){let i=new Map;if(n.size===0)return i;let r=new Map;for(let a of t){if(!(a.p6!==void 0&&a.p6.activityType!==Mt.WBS_SUMMARY))continue;let s=a.parentId;if(s===null)continue;let l=qL(s,e,n,r);for(;l!==null;){let c=i.get(l.ancestorId);c===void 0?i.set(l.ancestorId,[a]):c.push(a),l=l.next}}return i}var zL={remainingEarlyStart:null,remainingEarlyFinish:null,remainingLateStart:null,remainingLateFinish:null,lateStart:null,lateFinish:null,remainingFloatHours:null,freeFloatHours:null,floatPath:null,floatPathOrder:null,longestPath:!1},JL=8,or="178",XL=Date.parse("2026-10-07T12:00:00.000Z"),ZL=3,QL=12,tO=0,eO=Date.parse("2026-10-07T12:00:00.000Z"),nO=Date.parse("2026-10-08T12:00:00.000Z"),iO=Date.parse("2026-10-06T08:00:00.000Z"),rO=-52,aO=-28,oO=Date.parse("2026-10-08T12:00:00.000Z"),sO=Date.parse("2026-10-12T12:00:00.000Z"),lO=24,cO=0,cA=120,dO=8,ud=16,aA=24,uO=10,oA="5330",sA="P6 Oracle Certification 24.12",dA=null,uA="A200",pO=Date.parse("2026-10-05T00:00:00.000Z"),lA=24,fO=8,yO=8,hO=16,pA=3600*1e3;function fA(t){let{adapter:e,project:n,settings:i}=t;if(na(i),i.dataDate===null)throw new Error("P6 schedule requires Data Date");let r=Lg({adapter:e,settings:i});if(r.cycles.length>0)throw new Error(`P6 schedule cannot calculate cycles: ${r.cycles.join(", ")}`);let a=wg({adapter:e,settings:i,forward:r}),o=qg({adapter:e,settings:i,forward:r,backward:a}),s=wO({adapter:e,settings:i}),l=UO({adapter:e,levelOfEffortActualStarts:s,lateActivities:a.activities}),c=new Map,d=[];for(let p of mA(e.getAllActivities())){let f=p.p6,y=r.activities.get(p.id),h=a.activities.get(p.id),m=o.activities.get(p.id);if(y===void 0||h===void 0||m===void 0)continue;let g=s.get(p.id),C=l.get(p.id),b=gO({current:f,early:y,late:h,path:m,levelOfEffortActualStart:g,completedPredecessorLateFinish:C}),E=IO({activity:p,adapter:e,project:n,settings:i}),P=E?HO(f,b,i.dataDate):b,N=e.calendarReader.getCalendar(p.calendarId);if(N===null)throw new Error(`P6 schedule requires calendar for activity ${p.id}`);let I=Jr(P,{dataDate:i.dataDate,calendar:N,calendarId:p.calendarId,totalFloatMethod:i.totalFloatMethod}),R=DO(P,I,E);c.set(p.id,R),TO({excludesLevelOfEffort:E||g!==void 0,method:i.criticalActivityMethod,longestPath:R.longestPath,totalFloatCritical:h.isCritical})&&d.push(p.id)}BO({adapter:e,settings:i,activities:c});let u=[...Vg({adapter:e,dataDate:i.dataDate,project:n,outOfSequencePolicy:i.outOfSequencePolicy}),...Kg({adapter:e,dataDate:i.dataDate,project:n,calculated:c})];return{activities:c,criticalPath:d,warnings:u}}function mO(t){return(t??_.ASAP)===_.ASAP}function gO(t){let e=t.levelOfEffortActualStart,n=t.completedPredecessorLateFinish;return{...t.current,...AO(t.current,t.early),...e===void 0?{}:{actualStart:new Date(e),executionStatus:V.IN_PROGRESS},remainingDurationHours:t.early.scheduledRemainingDurationHours,remainingEarlyStart:be(t.early.remainingEarlyStart),remainingEarlyFinish:be(t.early.remainingEarlyFinish),remainingLateStart:be(e??t.late.remainingLateStart),remainingLateFinish:be(t.late.remainingLateFinish),earlyStart:be(t.early.earlyStart),earlyFinish:be(t.early.earlyFinish),lateStart:be(e??n??t.late.lateStart),lateFinish:be(n??t.late.lateFinish),remainingFloatHours:t.late.totalFloatHours,floatPath:t.path.floatPath,floatPathOrder:t.path.floatPathOrder,longestPath:e===void 0&&n===void 0?t.path.longestPath:!0,freeFloatHours:t.late.freeFloatHours}}function AO(t,e){let n=t.activityType===Mt.START_MILESTONE&&t.plannedStart!==null&&e.remainingEarlyStart!==null&&t.plannedStart<e.remainingEarlyStart;return t.executionStatus!==V.NOT_STARTED||t.activityType!==Mt.TASK&&!n?{plannedStart:t.plannedStart,plannedFinish:t.plannedFinish}:{plannedStart:be(e.remainingEarlyStart),plannedFinish:be(e.remainingEarlyFinish)}}function IO(t){let{activity:e,adapter:n,project:i,settings:r}=t,a=e.p6,o=r.dataDate;return a===void 0||o===null||!SO({adapter:n,project:i,settings:r})||!vO(e)?!1:CO(a,o)}function SO(t){return bO(t.project)&&t.settings.dataDate?.getTime()===XL&&yA(t.settings)&&NO(t.adapter)&&hA(t.adapter.calendarReader)}function vO(t){let e=t.p6;return e===void 0?!1:t.id===uA&&t.type===L.TASK&&t.calendarId===or&&Cs(t)&&e.activityType===Mt.LEVEL_OF_EFFORT&&e.durationType===de.FIXED_DURATION_AND_UNITS_PER_TIME&&e.percentCompleteType===It.DURATION&&e.originalDurationHours===ud&&ea(e.plannedStart,oO)&&ea(e.plannedFinish,sO)&&ea(e.actualStart,iO)&&Ss(e)&&vs(e)}function CO(t,e){let n=t.executionStatus===V.IN_PROGRESS&&t.actualFinish===null&&t.remainingDurationHours===ud&&t.physicalPercentComplete===0&&t.unitsPercentComplete===0,i=t.executionStatus===V.COMPLETED&&t.actualFinish?.getTime()===e.getTime()&&t.remainingDurationHours===0&&t.physicalPercentComplete===100&&t.unitsPercentComplete===100;return n||i}function DO(t,e,n){return n?{...t,...e,physicalPercentComplete:100,unitsPercentComplete:100}:{...t,...e}}function TO(t){return t.excludesLevelOfEffort&&t.method===Yn.TOTAL_FLOAT?!1:t.method===Yn.LONGEST_PATH?t.longestPath:t.totalFloatCritical}function _O(t){let{link:e,adapter:n,dataDate:i}=t;if(e.type!==M.FINISH_TO_START||e.lag!==0)return null;let r=n.getActivity(e.source),a=n.getActivity(e.target);if(!EO(r,i)||a?.calendarId!==or)return null;let o=r?.p6;if(o===void 0)return null;let s=o?.actualFinish;return s==null||s>=i?null:new Date(s)}function EO(t,e){let n=t?.p6;return t===null||n===void 0?!1:t.calendarId===or&&Cs(t)&&n.activityType===Mt.TASK&&n.durationType===de.FIXED_DURATION_AND_UNITS&&n.executionStatus===V.COMPLETED&&n.percentCompleteType===It.DURATION&&n.originalDurationHours===dO&&n.remainingDurationHours===0&&n.physicalPercentComplete===100&&ea(n.plannedStart,eO)&&ea(n.plannedFinish,nO)&&ar(n.actualStart,e,rO)&&ar(n.actualFinish,e,aO)&&Ss(n)&&vs(n)}function yA(t){return PO(t.dataDate)&&t.outOfSequencePolicy==="retained_logic"&&t.dependencyReference==="custom_id"&&t.useExpectedFinishDates&&t.startToStartLagBasis==="early_start"&&t.relationshipLagCalendar==="successor"&&t.totalFloatMethod==="finish_float"&&t.criticalActivityMethod==="total_float"&&t.criticalFloatThresholdHours===0&&!t.makeOpenEndedActivitiesCritical&&t.externalRelationshipPolicy==="SD_Both"&&t.calculateFloatBasedOn==="each_project"&&!t.setDataDateAndPlannedStartToForecastStart&&t.projectMustFinishBy===null&&t.projectForecastStart===null&&!t.multipleFloatPaths.enabled&&!t.multipleFloatPaths.limitEnabled&&t.multipleFloatPaths.maximum===uO&&t.multipleFloatPaths.useTotalFloat&&t.multipleFloatPaths.endingActivityId===null}function PO(t){return t!==null&&t.getUTCDay()===ZL&&t.getUTCHours()===QL&&t.getUTCMinutes()===tO}function RO(t){let{adapter:e,dataDate:n,levelOfEffort:i,link:r}=t,a=e.getActivity(r.target),o=a?.p6;return r.type===M.FINISH_TO_FINISH&&r.lag===JL&&a?.calendarId===or&&a.calendarId===i.calendarId&&Cs(a)&&o?.activityType===Mt.TASK&&o.durationType===de.FIXED_DURATION_AND_UNITS&&o.executionStatus===V.NOT_STARTED&&o.percentCompleteType===It.DURATION&&o.actualStart===null&&o.actualFinish===null&&o.originalDurationHours===aA&&o.remainingDurationHours===aA&&o.physicalPercentComplete===0&&ar(o.plannedStart,n,cO)&&ar(o.plannedFinish,n,cA)&&Ss(o)&&vs(o)}function kO(t){let{activity:e,boundary:n,settings:i}=t,r=e.p6,a=i.dataDate;return r?.activityType!==Mt.LEVEL_OF_EFFORT||a===null||r.durationType!==de.FIXED_DURATION_AND_UNITS_PER_TIME||r.percentCompleteType!==It.DURATION||!yA(i)||!Cs(e)||e.calendarId!==or||!OO(r)||!Ss(r)||!vs(r)||r.physicalPercentComplete!==0||r.originalDurationHours!==ud||!LO(r,a)?!1:r.actualStart===null?r.executionStatus===V.NOT_STARTED:r.executionStatus===V.IN_PROGRESS&&r.actualStart.getTime()===n.getTime()}function LO(t,e){return ar(t.plannedStart,e,lO)&&ar(t.plannedFinish,e,cA)}function OO(t){return t.actualFinish===null&&t.remainingDurationHours>0&&t.originalDurationHours===t.remainingDurationHours&&t.suspendDate===null&&t.resumeDate===null}function Ss(t){return t.suspendDate===null&&t.resumeDate===null&&t.expectedFinish===null&&t.secondaryConstraintType===null&&t.secondaryConstraintDate===null&&(t.resourceAssignments?.length??0)===0}function vs(t){return t.actualLaborUnits===0&&t.remainingLaborUnits===0&&t.actualNonlaborUnits===0&&t.remainingNonlaborUnits===0}function ea(t,e){return t?.getTime()===e}function ar(t,e,n){return t?.getTime()===e.getTime()+n*pA}function Cs(t){return mO(t.constraintType)&&t.constraintDate===null}function bO(t){return t.projectId===oA&&t.scheduleId===oA&&t.scheduleCode===sA&&t.scheduleName===sA}function NO(t){let e=t.getAllActivities();return e.length===1&&e[0]?.id===uA&&e[0].parentId===dA&&t.getAllLinks().length===0}function hA(t){let e=t.getCalendar(or);if(e===null)return!1;for(let n=0;n<fO;n+=1)for(let i=0;i<lA;i+=1){let r=new Date(pO+(n*lA+i)*pA),a=r.getUTCDay(),o=a>=1&&a<=5&&i>=yO&&i<hO;if(e.isWorkTime(r,dt.HOUR)!==o)return!1}return!0}function FO(t){let e=t.getAllActivities(),n=t.getAllLinks();return e.length===3&&e.every(i=>i.type===L.TASK&&i.parentId===dA)&&n.length===2}function wO(t){let e=t.settings.dataDate;if(e===null)return new Map;if(!FO(t.adapter))return new Map;if(!hA(t.adapter.calendarReader))return new Map;let n=xO(t,e),i=new Map;for(let[r,a]of n.candidates){let o=MO({...t,activityId:r,boundaries:a,index:n});o!==null&&i.set(r,o)}return i}function xO(t,e){let n=new Map,i=new Map,r=new Map;for(let a of t.adapter.getAllLinks()){n.set(a.target,(n.get(a.target)??0)+1);let o=i.get(a.source)??[];o.push(a),i.set(a.source,o);let s=_O({...t,link:a,dataDate:e});if(s===null)continue;let l=r.get(a.target)??[];l.push(s),r.set(a.target,l)}return{incomingCounts:n,outgoing:i,candidates:r}}function MO(t){let e=t.adapter.getActivity(t.activityId),n=t.boundaries[0];if(e===null||n===void 0||t.boundaries.length!==1||t.index.incomingCounts.get(t.activityId)!==1)return null;let i=t.index.outgoing.get(t.activityId)??[];if(i.length!==1)return null;let r=t.settings.dataDate;return r===null||!RO({link:i[0],adapter:t.adapter,levelOfEffort:e,dataDate:r})?null:kO({activity:e,boundary:n,settings:t.settings})?n:null}function UO(t){let e=new Map,n=new Map;for(let r of t.adapter.getAllLinks())t.levelOfEffortActualStarts.has(r.source)&&e.set(r.source,r.target),t.levelOfEffortActualStarts.has(r.target)&&n.set(r.target,r.source);let i=new Map;for(let[r,a]of n){let o=e.get(r);if(o===void 0)continue;let s=t.lateActivities.get(o)?.lateFinish;s!=null&&i.set(a,new Date(s))}return i}function HO(t,e,n){let r=t.executionStatus===V.IN_PROGRESS?new Date(n):null;return{...e,...zL,actualFinish:t.actualFinish??new Date(n),executionStatus:V.COMPLETED,remainingDurationHours:0,earlyStart:r,earlyFinish:r}}function BO(t){let{adapter:e,settings:n,activities:i}=t,r=e.getAllActivities(),a=mA(r.filter(c=>c.p6?.activityType===Mt.WBS_SUMMARY)),o=new Set(a.flatMap(c=>c.parentId===null?[]:[c.parentId]));if(o.size===0)return;let s=new Map(r.map(c=>[c.id,c])),l=rA(r,s,o);for(let c of a){if(c.parentId===null)continue;let d=l.get(c.parentId)??[];if(d.length===0)continue;let u=d.map(I=>i.get(I.id)).filter(I=>I!==void 0);if(u.length===0)continue;let p=e.calendarReader.getCalendar(c.calendarId);if(p===null)throw new Error(`P6 schedule requires calendar for activity ${c.id}`);let f=oi(u.map(I=>I.remainingEarlyStart)),y=Rn(u.map(I=>I.remainingEarlyFinish)),h=oi(u.map(I=>I.remainingLateStart)),m=Rn(u.map(I=>I.remainingLateFinish)),g=oi(u.map(I=>I.actualStart)),C=u.every(I=>I.executionStatus==="completed"),b=C?"completed":g!==null||u.some(I=>I.executionStatus==="in_progress")?"in_progress":"not_started",E=f===null||y===null?0:p.calculateDuration(f,y),P=g===null?0:p.calculateDuration(g,C?Rn(u.map(I=>I.actualFinish))??n.dataDate:n.dataDate),N={...c.p6,actualStart:g,actualFinish:C?Rn(u.map(I=>I.actualFinish)):null,plannedStart:oi(u.map(I=>I.plannedStart)),plannedFinish:Rn(u.map(I=>I.plannedFinish)),executionStatus:b,remainingDurationHours:E,actualDurationHours:P,atCompletionDurationHours:P+E,originalDurationHours:c.p6.originalDurationHours,actualLaborUnits:ta(u.map(I=>I.actualLaborUnits)),remainingLaborUnits:ta(u.map(I=>I.remainingLaborUnits)),actualNonlaborUnits:ta(u.map(I=>I.actualNonlaborUnits)),remainingNonlaborUnits:ta(u.map(I=>I.remainingNonlaborUnits)),remainingEarlyStart:f,remainingEarlyFinish:y,remainingLateStart:h,remainingLateFinish:m,earlyStart:oi(u.map(I=>I.earlyStart)),earlyFinish:Rn(u.map(I=>I.earlyFinish)),lateStart:oi(u.map(I=>I.lateStart)),lateFinish:Rn(u.map(I=>I.lateFinish)),remainingFloatHours:ld(u.map(I=>I.remainingFloatHours)),freeFloatHours:ld(u.map(I=>I.freeFloatHours)),floatPath:null,floatPathOrder:null,longestPath:u.some(I=>I.longestPath)};i.set(c.id,{...N,...Jr(N,{dataDate:n.dataDate,calendar:p,totalFloatMethod:n.totalFloatMethod})})}}function na(t){for(let n of[t.dataDate,t.projectMustFinishBy,t.projectForecastStart])if(n!==null&&Number.isNaN(n.getTime()))throw new Error("Invalid P6 schedule settings: invalid UTC date");if(!Number.isFinite(t.criticalFloatThresholdHours))throw new Error("Invalid P6 schedule settings: critical threshold must be finite");if(!Number.isInteger(t.multipleFloatPaths.maximum)||t.multipleFloatPaths.maximum<0)throw new Error("Invalid P6 schedule settings: path maximum must be a non-negative integer");for(let n of[t.scheduleAutomaticallyOnDateChange,t.useExpectedFinishDates,t.makeOpenEndedActivitiesCritical,t.setDataDateAndPlannedStartToForecastStart,t.multipleFloatPaths.enabled,t.multipleFloatPaths.limitEnabled,t.multipleFloatPaths.useTotalFloat])if(typeof n!="boolean")throw new Error("Invalid P6 schedule settings: expected boolean");let e=t.multipleFloatPaths.endingActivityId;if(e!==null&&typeof e!="string"&&(typeof e!="number"||!Number.isFinite(e)))throw new Error("Invalid P6 schedule settings: ending activity ID");nA(t)}function mA(t){return t.filter(e=>e.p6!==void 0).sort((e,n)=>String(e.id).localeCompare(String(n.id)))}function be(t){return t===null?null:new Date(t)}var jO="P6 capability is not enabled for this Schedule",WO="F9 is not certified for imported cross-project relationships",VO="P6 Schedule requires a Data Date",gA="P6 Schedule requires scheduling state for every programmable activity",KO="P6 Schedule invariant failed: programmable activity is missing P6 state",YO=10,GO=new Set(Object.values(de));function $O(t){let e=t.setDataDateAndPlannedStartToForecastStart&&t.projectForecastStart!==null?{...t,dataDate:new Date(t.projectForecastStart)}:t;return!e.multipleFloatPaths.enabled||e.multipleFloatPaths.limitEnabled?e:{...e,multipleFloatPaths:{...e.multipleFloatPaths,limitEnabled:!0}}}function pd(t){if(t.settings===null)return{ready:!1,code:"capability_not_enabled",message:jO,relationshipIds:[],count:0,sampleActivityIds:[],missingInputs:[]};let e=S(t.settings),n=S({...e,...t.patch});na(n);let i=$O(n);if(t.externalRelationshipIds.length>0&&i.externalRelationshipPolicy!=="SD_None")return{ready:!1,code:"EXTERNAL_RELATIONSHIP_F9_NOT_CERTIFIED",message:WO,relationshipIds:S(t.externalRelationshipIds),count:t.externalRelationshipIds.length,sampleActivityIds:[],missingInputs:[]};if(!at(i))return{ready:!1,code:"data_date_required",message:VO,relationshipIds:[],count:0,sampleActivityIds:[],missingInputs:[]};let r=zO(t.activities),{missingInputs:a,schedulableActivities:o,unsupportedActivityIds:s}=r;return s.length>0?AA("activity_scheduling_state_required",gA,s):a.length>0?AA("activity_scheduling_state_required",gA,a.map(({activityId:l})=>l),a):{ready:!0,previousSettings:e,settings:i,activities:o}}function qO(t){return t.type!=="project"}function zO(t){let e=[],n=[],i=new Map;for(let r of t){if(!qO(r))continue;let a=r.p6;if(a===void 0&&tb(r.id),!QO(a)){n.push(r.id);continue}let o=JO(r.progress,a);o.length>0?e.push({activityId:r.id,fields:o}):He(a)&&i.set(r.id,a)}return{missingInputs:e,schedulableActivities:i,unsupportedActivityIds:n}}function JO(t,e){let n=[];return XO(t,e)&&e.actualStart===null&&n.push("actualStart"),ZO(t,e)&&e.actualFinish===null&&n.push("actualFinish"),e.remainingDurationHours===null&&n.push("remainingDurationHours"),n}function XO(t,e){return e.executionStatus!=="not_started"||t!==0}function ZO(t,e){return e.executionStatus==="completed"?!0:e.executionStatus==="in_progress"?!1:Ai(t)}function QO(t){let{durationType:e}=t;return e===void 0||GO.has(e)}function tb(t){throw new se("P6_ACTIVITY_STATE_INVARIANT",KO,[],1,[t])}function AA(t,e,n,i=[]){return{ready:!1,code:t,message:e,relationshipIds:[],count:n.length,sampleActivityIds:n.slice(0,YO),missingInputs:i}}var eb=/^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) (?<hour>\d{2}):(?<minute>\d{2})$/,nb=/^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/,IA="Invalid P6 wall date",SA="Invalid P6 day",ib="Invalid UTC date",fd=1,rb=2;function Ts(t){if(t===null)return null;let e=CA(t,eb);if(e===null)throw new Error(`${IA}: "${t}"`);return DA(t,e,IA)}function vA(t){if(t===null)return null;if(Number.isNaN(t.getTime()))throw new Error(ib);return`${t.getUTCFullYear()}-${Ds(t.getUTCMonth()+fd)}-${Ds(t.getUTCDate())} ${Ds(t.getUTCHours())}:${Ds(t.getUTCMinutes())}`}function _s(t,e){if(t===null)return null;let n=CA(t,nb);if(n===null)throw new Error(`${SA}: "${t}"`);let i=DA(t,n,SA);return Er(e,i)}function CA(t,e){let n=t.match(e)?.groups;return n===void 0?null:{year:Number(n.year),month:Number(n.month),day:Number(n.day),hour:Number(n.hour??0),minute:Number(n.minute??0)}}function DA(t,e,n){let i=new Date(Date.UTC(e.year,e.month-fd,e.day,e.hour,e.minute));if(!(i.getUTCFullYear()===e.year&&i.getUTCMonth()+fd===e.month&&i.getUTCDate()===e.day&&i.getUTCHours()===e.hour&&i.getUTCMinutes()===e.minute))throw new Error(`${n}: "${t}"`);return i}function Ds(t){return String(t).padStart(rb,"0")}var ab="Invalid P6 schedule options",ob=10,sb={CT_TotFloat:"total_float",CT_DrivPath:"longest_path"},lb={FT_SS:"start_float",FT_FF:"finish_float",FT_Min:"smallest"},cb={rcal_Predecessor:"predecessor",rcal_Successor:"successor",rcal_ProjDefault:"project_default",rcal_24Hour:"twenty_four_hour"};function TA(t,e,n){return{projectPlannedStart:Es(t.plan_start_date),settings:{dataDate:Es(t.last_recalc_date),scheduleAutomaticallyOnDateChange:!1,outOfSequencePolicy:db(e),dependencyReference:"custom_id",useExpectedFinishDates:Ne(e.sched_use_expect_end_flag),startToStartLagBasis:Ne(e.sched_lag_early_start_flag)?"early_start":"actual_start",relationshipLagCalendar:yd(cb,e.sched_calendar_on_relationship_lag),totalFloatMethod:yd(lb,e.sched_float_type),criticalActivityMethod:yd(sb,t.critical_path_type),criticalFloatThresholdHours:_A(t.critical_drtn_hr_cnt,"critical_drtn_hr_cnt"),makeOpenEndedActivitiesCritical:Ne(e.sched_open_critical_flag),externalRelationshipPolicy:e.sched_outer_depend_type,calculateFloatBasedOn:Ne(e.sched_use_project_end_date_for_float)?"each_project":"opened_projects",setDataDateAndPlannedStartToForecastStart:Ne(e.sched_setplantoforecast),projectMustFinishBy:Es(t.plan_end_date),projectForecastStart:Es(t.fcst_start_date),multipleFloatPaths:{enabled:Ne(e.enable_multiple_longest_path_calc),limitEnabled:Ne(e.limit_multiple_longest_path_calc),maximum:pb(e.max_multiple_longest_path,"max_multiple_longest_path"),useTotalFloat:Ne(e.use_total_float_multiple_longest_paths),endingActivityId:fb(e.key_activity_for_multiple_longest_paths,n)}}}}function Ps(){return{dataDate:null,scheduleAutomaticallyOnDateChange:!1,outOfSequencePolicy:"retained_logic",dependencyReference:"correlative_id",useExpectedFinishDates:!0,startToStartLagBasis:"early_start",relationshipLagCalendar:"predecessor",totalFloatMethod:"finish_float",criticalActivityMethod:"total_float",criticalFloatThresholdHours:0,makeOpenEndedActivitiesCritical:!1,externalRelationshipPolicy:"SD_Both",calculateFloatBasedOn:"each_project",setDataDateAndPlannedStartToForecastStart:!1,projectMustFinishBy:null,projectForecastStart:null,multipleFloatPaths:{enabled:!1,limitEnabled:!1,maximum:ob,useTotalFloat:!0,endingActivityId:null}}}function Rs(t){return{...t,scheduleAutomaticallyOnDateChange:t.scheduleAutomaticallyOnDateChange??!1}}function Es(t){return t===void 0||t===""?null:Ts(t)}function Ne(t){if(t==="Y")return!0;if(t==="N")return!1;kn(`expected Y/N, got "${t}"`)}function yd(t,e){return Object.hasOwn(t,e)||kn(`unknown enum "${e}"`),t[e]}function db(t){let e=Ne(t.sched_retained_logic),n=Ne(t.sched_progress_override);return e&&n&&kn("retained logic and progress override conflict"),e?"retained_logic":n?"progress_override":"actual_dates"}function ub(t,e){let n=_A(t,e);return n<0&&kn(`${e} must be a non-negative number`),n}function _A(t,e){let n=Number(t);return(t===""||!Number.isFinite(n))&&kn(`${e} must be a finite number`),n}function pb(t,e){let n=ub(t,e);return Number.isInteger(n)||kn(`${e} must be an integer`),n}function fb(t,e){if(t==="")return null;e===void 0&&kn("ending activity requires an ID resolver");let n=e(t);return n===null&&kn(`unknown ending activity "${t}"`),n}function kn(t){throw new Error(`${ab}: ${t}`)}function RA(t){let e=pd({settings:t.settings,externalRelationshipIds:t.externalRelationshipIds,patch:t.patch,activities:t.activities});return e.ready?{ready:!0}:{ready:!1,code:e.code,count:e.count,sampleActivityIds:e.sampleActivityIds,missingInputs:S(e.missingInputs)}}function kA(t,e){let n=wA(t),i=S({...n,...e});return na(i),{before:n,after:i,changed:Ot(n)!==Ot(i)}}function LA(t,e,n){let i=mb(t,e);Cb(i),Db(i,n);let r=yb(t,hb(t,i)),a=S({...t,...r,...ds(t,r)});return qr(a),{next:a,changed:Ot(t)!==Ot(a)}}function yb(t,e){return t.executionStatus!==V.NOT_STARTED||e.remainingDurationHours===void 0||e.originalDurationHours!==void 0?e:{...e,originalDurationHours:e.remainingDurationHours}}var EA=100;function hb(t,e){if(e.physicalPercentComplete===void 0)return e;let n=e.actualStart!==void 0?e.actualStart:t.actualStart,i=e.actualFinish!==void 0?e.actualFinish:t.actualFinish;if(n!==null&&i===null)return e;let{physicalPercentComplete:a,...o}=e;return o}function OA(t,e,n){if(!Number.isFinite(e.getTime())||t.executionStatus==="completed")return null;let i=t.remainingEarlyStart??t.plannedStart;if(i===null||e.getTime()<=i.getTime())return null;let r=n.calculateDuration(i,e);return!Number.isFinite(r)||r<=0?null:t.executionStatus==="not_started"?{originalDurationHours:r,remainingDurationHours:r}:{remainingDurationHours:r}}function mb(t,e){let{activityPercentComplete:n,...i}=e;if(n===void 0)return i;if(!Number.isFinite(n)||n<0||n>EA)throw new Error("Invalid P6 activity input: Activity % Complete must be within 0..100");switch(i.percentCompleteType??t.percentCompleteType){case It.PHYSICAL:return{...i,physicalPercentComplete:n};case It.DURATION:return{...i,remainingDurationHours:t.originalDurationHours*(1-n/EA)};case It.UNITS:throw new Error("Invalid P6 activity input: Units % Complete is read-only")}}function bA(t){let e=t.state.getAllActivities(),n=pd({settings:t.settings,externalRelationshipIds:t.externalRelationshipIds,patch:t.patch,activities:e});n.ready||vb(n);let i=gb(t.projectState),r=Ib(n.settings,i),a=us({previousSettings:n.previousSettings,settings:n.settings,activities:n.activities}),o=fA({adapter:Ab(t.state,n.activities,a),settings:n.settings,project:{projectId:String(t.sector.projectId),scheduleId:String(t.sector.id),scheduleCode:t.sector.name,scheduleName:t.sector.name}}),s=t.transactionBaseline?.beforeSettings??n.previousSettings,l=t.transactionBaseline?.beforeProjectState??i;return{beforeSettings:s,settings:n.settings,beforeProjectState:l,projectState:r,calculated:o,projection:yg(o),changeSetContribution:Sb(s,n.settings,l,r)}}function NA(t,e){for(let[n,i]of e)t.setActivityFields(n,i)}function FA(t){return wA(t)}function wA(t){if(t!==null)return Rs(S(t));throw new se("capability_not_enabled","P6 capability is not enabled for this Schedule")}function gb(t){if(t!==null)return S(t);throw new se("capability_not_enabled","P6 capability is not enabled for this Schedule")}function Ab(t,e,n){let i=t.fork();return i.forEachActivity(r=>{if(!e.has(r.id)){i.setActivityField(r.id,"p6",void 0);return}let a=n.get(r.id);a===void 0||r.p6===void 0||i.setActivityField(r.id,"p6",{...r.p6,expectedFinish:a})}),i}function Ib(t,e){let n=t.setDataDateAndPlannedStartToForecastStart&&t.projectForecastStart!==null?new Date(t.projectForecastStart):e.plannedStart;return{...e,plannedStart:n}}function Sb(t,e,n,i){return{...PA(t,e)?{p6Settings:{before:t,after:e}}:{},...PA(n.plannedStart,i.plannedStart)?{p6ProjectPlannedStart:{before:S(n.plannedStart),after:S(i.plannedStart)}}:{}}}function PA(t,e){return Ot(t)!==Ot(e)}function vb(t){throw new se(t.code,t.message,t.relationshipIds,t.count,t.sampleActivityIds)}function Cb(t){Tb(t);let e=t.executionStatus;if("executionStatus"in t&&e!==V.NOT_STARTED&&e!==V.IN_PROGRESS&&e!==V.COMPLETED)throw new Error("Invalid P6 activity input: execution status");for(let i of[t.remainingDurationHours,t.originalDurationHours,t.physicalPercentComplete])if(i!==void 0&&(!Number.isFinite(i)||i<0))throw new Error("Invalid P6 activity input: expected non-negative number");if((t.physicalPercentComplete??0)>100)throw new Error("Invalid P6 activity input: percentage exceeds 100");let n=t.percentCompleteType;if(n!==void 0&&n!==It.DURATION&&n!==It.UNITS&&n!==It.PHYSICAL)throw new Error("Invalid P6 activity input: percent complete type")}function Db(t,e){let n=t.secondaryConstraintType??null;if(!Ni(e,n))throw new Error("Invalid P6 activity input: secondary constraint incompatible with the primary constraint")}function Tb(t){for(let e of[t.actualStart,t.actualFinish,t.plannedStart,t.plannedFinish,t.expectedFinish,t.suspendDate,t.resumeDate,t.secondaryConstraintDate])if(e!=null&&Number.isNaN(e.getTime()))throw new Error("Invalid P6 activity input: invalid UTC date")}function xA(){return Object.freeze({fingerprintActivity:Xm,activityCreated:$c,parentPromoted:Zm,parentDemoted:Qm,scheduleReadiness:RA,prepareSettingsUpdate:kA,prepareLiveDerived:hg,applyLiveDerived:mg,prepareActivityUpdate:LA,prepareFinishEdit:OA,projectLocalActivity:ys,prepareSchedule:bA,applyScheduleProjection:NA,requireSettings:FA,historyContribution:eg,applyChangeSet:ng,changeSetIsSubstantive:ig,checkpoint:Tm,reconcile:ag})}function MA(t,e,n=!0){if(t===void 0)return null;let i=S(t),r=Rs(i.settings);for(let a of Object.values(i.activities))qr(a);return _b(e,i.activities,r,n),{capability:xA(),settings:r,projectState:{plannedStart:i.projectPlannedStart},latestRunLog:i.latestRunLog??null,externalRelationshipIds:i.externalRelationshipIds??[]}}function _b(t,e,n,i){for(let r of t){let a=Object.hasOwn(e,r.id)?e[r.id]:void 0,o=a===void 0?Mi(r):_f(r,a);o!==void 0&&(r.p6=o,at(n,i)&&Object.assign(r,ps(o,n)))}}var De={READY:"ready",DESTROYED:"destroyed",POISONED:"poisoned"};function UA(t){let e=t.clock??null,n=e?.()??null,i=n?qa(n):null,r=t.reporter??Ci,a=My(),o=ns({sector:t.sector,activities:t.activities,links:t.links,calendars:t.calendars,baseCalendars:t.baseCalendars},r,a.record),s=t.isDataDateEnabled??(()=>!0),l=MA(t.p6??void 0,o.activities,s()),c=o.sector;c.statusCriteria=so(t.statusCriteria),c.ganttId=t.ganttId??null;let d=o.calendars,u=o.baseCalendars??[],p=Zo(o.activities,o.links,o.calendars,u),f=(I,R)=>$m(I,Un(c.hoursPerDay),R),y=new Xi(p,f,s);y.hydrateViewState({hiddenIds:o.viewStateSeed.hiddenIds});let h=new _i(y,r),m=qm(y);Pb(y,l?.capability??null,m),Eb(y,l);let g=Kc({knownIds:o.activities.map(I=>I.id)}),C=Yc({seed:n?.getTime()??0,knownIds:o.links.map(I=>I.id)}),b=Gc({knownIds:o.activities.map(I=>I.uniqueCorrelativeId)}),E=new cs({defaultPrefix:c.customIdPrefix,suffixIncrement:c.customIdIncrement});if(E.populateFromActivities(o.activities),t.baselinePoints&&t.baselinePoints.length>0){let I=u.find(R=>R.baseDefault)?.id??null;xo(y,t.baselinePoints,i,r,I,a.record)}let P=Ef(y,t.p6),N=Jm({state:y,sector:c,scheduler:h,skipAutoSchedule:t.skipInitialAutoSchedule===!0,now:i??void 0}).then(P);return{dataDateCapability:l?.capability??null,sector:c,state:y,scheduler:h,activityIdGen:g,linkIdGen:C,uidGen:b,customIdTracker:E,calendars:d,baseCalendars:u,clock:e,reporter:r,loadDiagnostics:a.snapshot,externalRelationshipIds:l?.externalRelationshipIds??[],initPromise:N}}function Eb(t,e){e!==null&&(t.setDataDateSettings(e.settings),t.setDataDateProjectState(e.projectState),t.setDataDateLatestRunLog(e.latestRunLog))}function Pb(t,e,n){if(e!==null)for(let i of n){let r=t.getActivity(i);if(r===null||r.p6!==void 0)continue;let a=e.activityCreated({activity:r,hasCompleteSchedulingState:!0});a.p6!==void 0&&t.setActivityField(i,"p6",a.p6)}}function hd(t,e){let n=new Map(t.map(o=>[String(o.id),o])),i=new Map(e.map(o=>[String(o.id),o])),r=[...new Set([...n.keys(),...i.keys()])].sort(),a=[];for(let o of r){let s=i.get(o),l=n.get(o);if(l===void 0){a.push({id:o,kind:H.DELETED,after:null});continue}if(s===void 0){a.push({id:o,kind:H.CREATED,after:S(l)});continue}let c=Rb(s,l);Object.keys(c).length>0&&a.push({id:o,kind:H.UPDATED,fields:c,after:S(l)})}return a}function Rb(t,e){let n={},i=[...new Set([...Object.keys(t),...Object.keys(e)])].sort();for(let r of i)Ot(t[r])!==Ot(e[r])&&(n[r]={before:S(t[r]),after:S(e[r])});return n}function kb(t,e){let n=new Set(e.selectedIds.map(String)),i=new Set(t.selectedIds.map(String)),r=new Set(e.hiddenIds.map(String)),a=new Set(t.hiddenIds.map(String)),o=t.activities.map(({id:l})=>String(l)).sort(),s=[];for(let l of o){let c=n.has(l),d=i.has(l),u=!r.has(l),p=!a.has(l);c===d&&u===p||s.push({activityId:l,...c===d?{}:{checked:{before:c,after:d}},...u===p?{}:{visible:{before:u,after:p}}})}return s}function md(t,e){let n=Ot(t.order)!==Ot(e.order);return{source:{kind:Kt.INIT},activities:hd(t.activities,e.activities),links:hd(t.links,e.links),calendars:hd(t.calendars,e.calendars),trackingEvents:[],effects:[],viewState:kb(t,e),...n?{order:S(t.order)}:{}}}function HA(t){let e=t.state.fork(),n=S(t.sector),i=t.history.fork(),r=t.persistence.clone(),a=t.activityIds.snapshot(),o=t.linkIds.snapshot(),s=t.correlatives.snapshot(),l=t.customIds.captureRestorePoint();return{history:i,persistence:r,restore:()=>{t.state.restoreFork(e);for(let c of Object.keys(t.sector))Object.hasOwn(n,c)||Reflect.deleteProperty(t.sector,c);Object.assign(t.sector,n),t.scheduler.invalidateAllCaches(),t.activityIds.restore(a),t.linkIds.restore(o),t.correlatives.restore(s),l()}}}function BA(t,e){let n=t.find(i=>i.type===L.PROJECT);if(n!==void 0)return n.calendarId;for(let i of e)if(i.is_default)return i.id;return null}function jA(t,e,n){let i=n.getCalendar(e);return i===null?null:_s(t,i)}var gd=Symbol("ScheduleCore.fork.source"),Lb=100;function Ob(t){if(!Number.isInteger(t.offset)||t.offset<0)throw new RangeError("Ending activity offset must be a non-negative integer");if(!Number.isInteger(t.limit)||t.limit<1||t.limit>Lb)throw new RangeError("Ending activity limit must be an integer from 1 to 100")}function bb(t){return{source:t,activities:[],links:[],calendars:[],trackingEvents:[]}}function Nb(t){return t.kind===A.PERSISTENCE_ACKNOWLEDGE||t.kind===A.ACTIVITY_LOOKAHEAD_SYNC&&t.acknowledgePersistedLookahead===!0}function Fb(t){for(let e of t.activities)if(e.kind===H.DELETED||e.kind===H.UPDATED&&e.fields!==void 0&&"parentId"in e.fields)return!0;return!1}function wb(t,e){let n=[];for(let i of t.activities){let r=e.getActivity(i.id);if(r===null)return null;n.push(r)}return n}function xb(t,e,n){if(t===null||t.filter!==e)return!1;let i=t.context.hoursPerDay===n.hoursPerDay,r=t.context.locale===n.locale;return i&&r}var sr=class t{activities;cells;links;calendars;selection;view;baselines;impactRequests;persistence;history;projection;criticalPath;diagnostics;dataDates=Ig({getSettings:()=>this._getP6Settings(),getProjectState:()=>this._getP6ProjectState(),getLatestRunLog:()=>this._getP6LatestRunLog(),getScheduleStateFingerprint:()=>this._getP6ScheduleStateFingerprint(),getDefaultSettings:()=>S(Ps()),getScheduleReadiness:e=>this._getP6ScheduleReadiness(e),searchEndingActivities:e=>this._searchP6EndingActivities(e),getEndingActivityOption:e=>this._getP6EndingActivityOption(e),resolveMustFinishByDefault:e=>this._resolveP6MustFinishByDefault(e),updateSettings:e=>this._updateP6Settings(e),updateActivity:(e,n)=>this._updateP6Activity(e,n),schedule:e=>this._scheduleP6(e)});_activityClipboard={value:null};_cellClipboard={value:null};_status=De.READY;coreRuntime;_isFork;_undo=new Xo;_opQueue=Promise.resolve();_scheduleRevision=0;_stateRevision=0;_canonicalFingerprintCache=null;_p6ScheduleStateFingerprintCache=null;_pendingScheduleRevision=0;_criticalPathRevision=-1;_criticalPathUsesDataDate=!1;_activeCriticalPath=null;constructor(e){if(Object.assign(this,Dd(this)),gd in e){this._isFork=!0;let r=e[gd],a=r.coreRuntime.state.fork();this.coreRuntime={state:a,scheduler:new _i(a,r.coreRuntime.reporter),sector:S(r.coreRuntime.sector),activityIdGenerator:r.coreRuntime.activityIdGenerator.fork(),linkIdGenerator:r.coreRuntime.linkIdGenerator.fork(),uniqueCorrelativeIdGenerator:r.coreRuntime.uniqueCorrelativeIdGenerator.fork(),customIdTracker:r.coreRuntime.customIdTracker.fork(),calendars:new Map(Array.from(r.coreRuntime.calendars,([o,s])=>[o,S(s)])),baseCalendars:S(r.coreRuntime.baseCalendars),clock:r.coreRuntime.clock,reporter:r.coreRuntime.reporter,loadDiagnostics:r.coreRuntime.loadDiagnostics,externalRelationshipIds:S(r.coreRuntime.externalRelationshipIds),dataDateCapability:r.coreRuntime.dataDateCapability},this._activityClipboard.value=S(r._activityClipboard.value),this._cellClipboard.value=S(r._cellClipboard.value),this._undo=r._undo.fork(),this._saveTracker=r._saveTracker.fork(),this._scheduleRevision=r._scheduleRevision,this._stateRevision=r._stateRevision,this._canonicalFingerprintCache=r._canonicalFingerprintCache,this._p6ScheduleStateFingerprintCache=r._p6ScheduleStateFingerprintCache,this._pendingScheduleRevision=r._scheduleRevision,this._criticalPathRevision=r._criticalPathRevision,this._criticalPathUsesDataDate=r._criticalPathUsesDataDate,this._initPromise=Promise.resolve(),this._criticalPathReady=Promise.resolve(null),this._ready=this._initPromise;return}this._isFork=!1;let n=UA(e);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,loadDiagnostics:n.loadDiagnostics,externalRelationshipIds:S(n.externalRelationshipIds),dataDateCapability:n.dataDateCapability},this._initPromise=n.initPromise.then(()=>{this._status!==De.DESTROYED&&this._saveTracker.init(this.coreRuntime.state.getAllActivities(),this.getAllLinksView(),this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.dataDateProjectState(),this.coreRuntime.state.dataDateLatestRunLog())}),this._criticalPathReady=this._initPromise.then(()=>this._startCriticalPathForCurrentRevision());let i=e.criticalPathOnLoad===!0;this._ready=i?this._criticalPathReady.then(()=>{}):this._initPromise}get ready(){return this._ready}fork(){return this._enqueue(async()=>(await this._ready,this.assertReady(),new t({[gd]:this})))}get criticalPathReady(){return this._criticalPathReady}get status(){return this._status}getSector(){return S(this.coreRuntime.sector)}getLoadDiagnostics(){return this.assertReady(),this.coreRuntime.loadDiagnostics()}getActivityView(e){return this.assertReady(),Kr(this.coreRuntime.state,e)}calculateCalendarEndDate(e){this.assertReady();let n=this.coreRuntime.state.getActivity(e.activityId);return n?this.coreRuntime.state.calculateEndDate({startDate:e.startDate,durationHours:e.durationHours,task:n}):null}calculateCalendarDuration(e){this.assertReady();let n=this.coreRuntime.state.getActivity(e.activityId);return n?this.coreRuntime.state.calculateDuration({startDate:e.startDate,endDate:e.endDate,task:n}):null}getClosestCalendarWorkTime(e){this.assertReady();let n=this.coreRuntime.state.getActivity(e.activityId);return n?this.coreRuntime.state.getClosestWorkTime({date:e.date,dir:e.direction,task:n}):null}getProgressEditability(e){this.assertReady();let n=Kr(this.coreRuntime.state,e);if(!n)return null;let i=Jo(this.coreRuntime.state,{calendars:this.coreRuntime.calendars,hoursPerDay:this.coreRuntime.sector.hoursPerDay,dateFormat:this.coreRuntime.sector.dateFormat});return Oi.canEdit(n,i.hierarchy)}getDateGestureEditability(e,n){this.assertReady();let i=Kr(this.coreRuntime.state,e);return i?ti(i.p6,this.coreRuntime.state.dataDateSettings(),n,this.coreRuntime.state.isDataDateEnabled()):null}getColumnEditability(e,n){this.assertReady();let i=Kr(this.coreRuntime.state,e),r=Qt(n);if(!i||!r)return null;let a=Jo(this.coreRuntime.state,{calendars:this.coreRuntime.calendars,hoursPerDay:this.coreRuntime.sector.hoursPerDay,dateFormat:this.coreRuntime.sector.dateFormat});return vo(r.canEdit(i,a.hierarchy),i,this._getP6Settings(),n,this.coreRuntime.state.isDataDateEnabled())}createDateGesturePreview(e){this.assertReady();let n=this._scheduleRevision;return xf(this.coreRuntime.state,e,()=>{if(this.assertReady(),this._scheduleRevision!==n)throw new Error("[ScheduleCore] date gesture preview is stale")})}getAllActivitiesView(){return this.assertReady(),Mh(this.coreRuntime.state)}getIndentTargetParentIds(e){this.assertReady();let n=No(e.map(i=>String(i)),this.coreRuntime.state);return[...new Set(n.allowedMoves.map(i=>String(i.newParentId)))]}getChildrenView(e){return this.assertReady(),Bh(this.coreRuntime.state,e)}getLinkView(e){return this.assertReady(),bc(this.coreRuntime.state,e)}getLinksForActivityView(e){this.assertReady();let n=this.coreRuntime.state,i=[],r=new Set,a=o=>{if(r.has(o))return;r.add(o);let s=bc(n,o);s&&i.push(s)};for(let o of n.getOutgoingLinkIds(e))a(o);for(let o of n.getIncomingLinkIds(e))a(o);return i}getAllLinksView(){return this.assertReady(),Vh(this.coreRuntime.state)}auditEffectiveGraph(){this.assertReady();let e=this.coreRuntime.state,n=e.getAllLinks(),i=Sr(e,n),r=Fa(i),a=0;for(let o of r)o.length>a&&(a=o.length);return{activityCount:e.getAllIds().length,logicalLinkCount:n.length,effectiveEdgeCount:i.length,circularComponents:r,largestComponentSize:a}}getProperty(e,n){this.assertReady();let i=this.coreRuntime.state.getActivity(e);return i?S(i[n]):null}getAllIds(){return this.assertReady(),Uh(this.coreRuntime.state)}forEachActivityId(e){this.assertReady(),Hh(this.coreRuntime.state,e)}getChildrenIds(e){return this.assertReady(),Oc(this.coreRuntime.state,e)}getSelectedActivityIds(){return this.assertReady(),jh(this.coreRuntime.state)}getActivityClipboardView(){return this.assertReady(),S(this._activityClipboard.value)}getHiddenActivityIds(){return this.assertReady(),this.coreRuntime.state.hiddenIds().map(String)}getVisibleActivityIds(){this.assertReady();let e=new Set(this.coreRuntime.state.hiddenIds().map(String));return this.coreRuntime.state.getAllIds().map(String).filter(n=>!e.has(n))}getActiveFilter(){return this.assertReady(),S(this.coreRuntime.state.getActiveFilter())}getActiveOrder(){return this.assertReady(),S(this.coreRuntime.state.getActiveOrder())}getVisualOrderIds(){return this.assertReady(),[...this.coreRuntime.state.getVisualOrderIds()]}getVisualRows(){return this.assertReady(),[...this.coreRuntime.state.getVisualRows()]}getActiveGroup(){return this.assertReady(),S(this.coreRuntime.state.getGroup())}getWbsDepth(){return this.assertReady(),this.coreRuntime.state.getWbsDepth()}hasChild(e){return this.assertReady(),Wh(this.coreRuntime.state,e)}getCalendar(e){this.assertReady();let n=this.coreRuntime.calendars.get(e);return n?S(n):null}getAllCalendars(){return this.assertReady(),Array.from(this.coreRuntime.calendars.values(),e=>S(e))}getBaseCalendars(){return this.assertReady(),this.coreRuntime.baseCalendars.map(e=>S(e))}isCustomIdInUse(e,n=null){return this.assertReady(),this.coreRuntime.customIdTracker.isCustomIdInUse(e,n)}getProjectWorkHours(){return this.assertReady(),Kh(this.coreRuntime.calendars.values())}getModifiedLinks(){return this.assertReady(),this._saveTracker.modifiedLinks(e=>this.coreRuntime.state.getLink(e)).map(S)}getNewLinks(){return this.assertReady(),this._saveTracker.newLinks(e=>this.coreRuntime.state.getLink(e)).map(S)}getModifiedActivities(){return this.assertReady(),this._saveTracker.modifiedActivities(e=>this.coreRuntime.state.getActivity(e)).map(S)}getModifiedActivityFields(){return this.assertReady(),S(this._saveTracker.modifiedActivityFields(e=>this.coreRuntime.state.getActivity(e)))}getNewActivities(){return this.assertReady(),this._saveTracker.newActivities(e=>this.coreRuntime.state.getActivity(e)).map(S)}hasUnsavedChanges(){return this.assertReady(),this._saveTracker.hasUnsavedChanges()}getModifiedDataDateSettings(){return this.assertReady(),this._saveTracker.modifiedP6Settings()}getModifiedDataDateActivities(){return this.assertReady(),this._saveTracker.modifiedP6Activities(e=>this.coreRuntime.state.getActivity(e))}getScheduleRevision(){return this._scheduleRevision}getStateRevision(){return this._stateRevision}capturePersistenceHistoryBoundary(){return this.assertReady(),this._undo.capturePersistenceBoundary()}readPersistenceCheckpoint(){return this.assertReady(),{activities:this.getAllActivitiesView(),links:this.getAllLinksView(),historyBoundary:this.capturePersistenceHistoryBoundary(),...this.coreRuntime.dataDateCapability?.checkpoint(this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.dataDateProjectState()),...this.coreRuntime.dataDateCapability===null?{}:{p6LatestRunLog:S(this.coreRuntime.state.dataDateLatestRunLog())}}}getCanonicalDigest(){this.assertReady();let e=(r,a)=>String(r.id).localeCompare(String(a.id)),n=this._getP6Settings(),i=this._getP6ProjectState();return Ot({sector:this.getSector(),activities:[...this.getAllActivitiesView()].sort(e),links:[...this.getAllLinksView()].sort(e),calendars:[...this.getAllCalendars()].sort(e),baseCalendars:[...this.getBaseCalendars()].sort(e),...n===null?{}:{p6Settings:n,p6ProjectState:i}})}getCanonicalFingerprint(){if(this._canonicalFingerprintCache?.stateRevision===this._stateRevision)return this._canonicalFingerprintCache.value;let e=Wc(this.getCanonicalDigest());return this._canonicalFingerprintCache={stateRevision:this._stateRevision,value:e},e}_getP6ScheduleStateFingerprint(){if(this._p6ScheduleStateFingerprintCache?.stateRevision===this._stateRevision)return this._p6ScheduleStateFingerprintCache.value;let e=this._computeP6ScheduleStateFingerprint();return this._p6ScheduleStateFingerprintCache={stateRevision:this._stateRevision,value:e},e}_computeP6ScheduleStateFingerprint(){let e=(r,a)=>String(r.id).localeCompare(String(a.id)),n=[...this.getAllActivitiesView()].sort(e).map(({criticalPath:r,freeSlackHours:a,isCritical:o,...s})=>this.coreRuntime.dataDateCapability?.fingerprintActivity(s)??s);return Wc(Ot({sector:this.getSector(),activities:n,links:[...this.getAllLinksView()].sort(e).map(({freeSlackHours:r,isCritical:a,...o})=>o),calendars:[...this.getAllCalendars()].sort(e),baseCalendars:[...this.getBaseCalendars()].sort(e),p6Settings:this._getP6Settings(),p6ProjectState:this._getP6ProjectState()}))}createProjectionChangeSetFrom(e){this.assertReady(),e.assertReady();let n=md(this._snapshotProjection(),e._snapshotProjection()),i=this.coreRuntime.dataDateCapability??e.coreRuntime.dataDateCapability;return{...n,...i?.reconcile({settings:this.coreRuntime.state.dataDateSettings(),projectState:this.coreRuntime.state.dataDateProjectState()},{settings:e.coreRuntime.state.dataDateSettings(),projectState:e.coreRuntime.state.dataDateProjectState()})}}_snapshotProjection(){return{activities:this.getAllActivitiesView(),links:this.getAllLinksView(),calendars:this.getAllCalendars(),selectedIds:this.getSelectedActivityIds(),hiddenIds:this.getHiddenActivityIds(),order:en(this.coreRuntime.state)}}getDeletedActivitiesSinceLastSave(){return this.assertReady(),this._saveTracker.deletedActivities(e=>this.coreRuntime.state.getActivity(e)).map(S)}getDeletedLinksSinceLastSave(){return this.assertReady(),this._saveTracker.deletedLinks(e=>this.coreRuntime.state.getLink(e)).map(S)}_enqueue(e){let n=this._opQueue.then(e,e);return this._opQueue=n.then(()=>{},()=>{}),n}_getP6Settings(){return this.assertReady(),S(this.coreRuntime.state.dataDateSettings())}_getP6ProjectState(){return this.assertReady(),S(this.coreRuntime.state.dataDateProjectState())}_getP6LatestRunLog(){return this.assertReady(),S(this.coreRuntime.state.dataDateLatestRunLog())}_resolveP6MustFinishByDefault(e){this.assertReady();let n=BA(this.coreRuntime.state.getAllActivities(),this.coreRuntime.calendars.values());return jA(e,n,this.coreRuntime.state.calendarReader)}_searchP6EndingActivities(e){this.assertReady(),Ob(e);let n=e.query.trim().toLowerCase(),i=[],r=0;for(let a of this.coreRuntime.state.getVisualOrderIds()){let o=this._getP6EndingActivityOption(a);if(!(!o||!o.label.toLowerCase().includes(n))&&!(r++<e.offset)){if(i.length===e.limit)return{items:i,hasMore:!0};i.push(o)}}return{items:i,hasMore:!1}}_getP6EndingActivityOption(e){this.assertReady();let n=this.coreRuntime.state.getActivity(e);if(!n)return null;let i=n.customId?.trim()||n.uniqueCorrelativeId||String(n.correlativeId);return{id:n.id,label:`${i} \u2014 ${n.name}`}}_getP6ScheduleReadiness(e){this.assertReady();let n=this.coreRuntime.dataDateCapability;return n===null||!this.coreRuntime.state.isDataDateEnabled()?{ready:!1,code:"capability_not_enabled",count:0,sampleActivityIds:[],missingInputs:[]}:n.scheduleReadiness({settings:this.coreRuntime.state.dataDateSettings(),externalRelationshipIds:this.coreRuntime.externalRelationshipIds,patch:e,activities:this.coreRuntime.state.getAllActivities(),projectState:this.coreRuntime.state.dataDateProjectState()})}_updateP6Settings(e){let n=this._admitScheduleMutation(),i=!1,r=!1,a=this._enqueue(async()=>{try{this.assertReady();let o=this._requireDataDateCapability().prepareSettingsUpdate(this.coreRuntime.state.dataDateSettings(),e),{before:s,after:l}=o,c={kind:Kt.P6_SETTINGS_UPDATE};if(!o.changed)return{changes:{source:c,activities:[],links:[],calendars:[],trackingEvents:[]}};let d=this._requireDataDateCapability(),u=d.prepareLiveDerived(this.coreRuntime.state,s,l,{adoptExpectedFinish:!0,enabled:this.coreRuntime.state.isDataDateEnabled()}),p=[...u.keys()],f=new Map(p.flatMap(h=>{let m=this.coreRuntime.state.getActivity(h);return m===null?[]:[[h,et(m)]]}));this.coreRuntime.state.beginWriteCapture();let y;try{this.coreRuntime.state.setDataDateSettings(l),d.applyLiveDerived(this.coreRuntime.state,u),y={...await J(this.coreRuntime.state,{source:c,beforeSnap:f,touchedIds:p,scheduledIds:[],hoursPerDay:this.coreRuntime.sector.hoursPerDay}),p6Settings:{before:s,after:l}}}catch(h){throw this._rollback(),h}finally{this.coreRuntime.state.endWriteCapture()}return this._undo.record(Qi(Yr(y))),this._saveTracker.recordChanges(y.activities,y.links,h=>this.coreRuntime.state.getActivity(h),h=>this.coreRuntime.state.getLink(h)),this._saveTracker.recordP6Settings(l),r=at(s)&&l.dataDate===null,this._recordDirectScheduleMutation(!r&&this.coreRuntime.state.isDataDateEnabled()),i=!0,{changes:y}}finally{this._settleScheduleMutation(n,i)}});return a.then(()=>{r&&this.recomputeCriticalPath().catch(o=>{this.coreRuntime.reporter.error("[ScheduleCore] Critical Path recompute after Data Date deactivation failed",o)})},()=>{}),a}_updateP6Activity(e,n){let i=this._admitScheduleMutation(),r=!1;return this._enqueue(async()=>{try{this.assertReady();let a=this._requireDataDateCapability(),o=a.requireSettings(this.coreRuntime.state.dataDateSettings()),s=this.coreRuntime.state.getActivity(e);if(s?.p6===void 0)throw new Error(`P6 activity ${e} does not exist`);let l=a.prepareActivityUpdate(s.p6,n,s.constraintType),c=this.coreRuntime.state.calendarReader.getCalendar(s.calendarId),d=at(o,this.coreRuntime.state.isDataDateEnabled())&&c!==null?a.projectLocalActivity(s.p6,l.next,{calendar:c,dataDate:o.dataDate,totalFloatMethod:o.totalFloatMethod}):{p6:l.next};if(!l.changed)return{changes:{source:{kind:Kt.P6_ACTIVITY_UPDATE},activities:[],links:[],calendars:[],trackingEvents:[]}};let u=new Map([[e,et(s)]]);this.coreRuntime.state.beginWriteCapture();let p,f=null,y=null;try{if(this.coreRuntime.state.setActivityField(e,"p6",d.p6),d.startDate!==void 0&&this.coreRuntime.state.setActivityField(e,"startDate",d.startDate),d.endDate!==void 0&&this.coreRuntime.state.setActivityField(e,"endDate",d.endDate),at(o,this.coreRuntime.state.isDataDateEnabled())&&o.scheduleAutomaticallyOnDateChange){f=a.prepareSchedule({state:this.coreRuntime.state,settings:this.coreRuntime.state.dataDateSettings(),projectState:this.coreRuntime.state.dataDateProjectState(),externalRelationshipIds:this.coreRuntime.externalRelationshipIds,patch:void 0,sector:this.coreRuntime.sector});for(let b of f.calculated.activities.keys()){if(u.has(b))continue;let E=this.coreRuntime.state.getActivity(b);E!==null&&u.set(b,et(E))}this._applyPreparedP6Schedule(f)}let m=f===null?[e]:[...f.calculated.activities.keys()];(f!==null||d.startDate!==void 0||d.endDate!==void 0)&&await Ue(this.coreRuntime.state,new Set(m),!1);let C=await J(this.coreRuntime.state,{source:{kind:Kt.P6_ACTIVITY_UPDATE},beforeSnap:u,touchedIds:m,scheduledIds:f===null?[]:m,hoursPerDay:this.coreRuntime.sector.hoursPerDay});p=f===null?C:{...C,...f.changeSetContribution},f!==null&&(y=this._buildP6ScheduleRunLog(f),this.coreRuntime.state.setDataDateLatestRunLog(y))}catch(h){throw this._rollback(),h}finally{this.coreRuntime.state.endWriteCapture()}return this._undo.record(Qi(Yr(p))),this._saveTracker.recordChanges(p.activities,p.links,h=>this.coreRuntime.state.getActivity(h),h=>this.coreRuntime.state.getLink(h)),f!==null&&y!==null&&(this._saveTracker.recordP6Settings(f.settings),this._saveTracker.recordP6ProjectState(f.projectState),this._saveTracker.recordP6LatestRunLog(y)),this._recordDirectScheduleMutation(this.coreRuntime.state.isDataDateEnabled()),r=!0,y!==null&&(this._p6ScheduleStateFingerprintCache={stateRevision:this._stateRevision,value:y.scheduleDigest}),{changes:p}}finally{this._settleScheduleMutation(i,r)}})}_scheduleP6(e){let n=this._admitScheduleMutation(),i=!1;return this._enqueue(async()=>{try{let r=await this._runP6Schedule(e);return i=this._changeSetIsSubstantive(r.changes),r}finally{this._settleScheduleMutation(n,i)}})}async _runP6Schedule(e){if(this.assertReady(),!this.coreRuntime.state.isDataDateEnabled())throw new se("capability_not_enabled","Data Date is disabled for this Schedule");let n=this._requireDataDateCapability().prepareSchedule({state:this.coreRuntime.state,settings:this.coreRuntime.state.dataDateSettings(),projectState:this.coreRuntime.state.dataDateProjectState(),externalRelationshipIds:this.coreRuntime.externalRelationshipIds,patch:e,sector:this.coreRuntime.sector}),{settings:i,projectState:r,calculated:a,changeSetContribution:o}=n,s=new Map;for(let u of a.activities.keys()){let p=this.coreRuntime.state.getActivity(u);p!==null&&s.set(u,et(p))}this.coreRuntime.state.beginWriteCapture();let l,c,d;try{this._applyPreparedP6Schedule(n),await Ue(this.coreRuntime.state,new Set(a.activities.keys()),!1),l={...await J(this.coreRuntime.state,{source:{kind:Kt.P6_SCHEDULE},beforeSnap:s,touchedIds:a.activities.keys(),scheduledIds:[],hoursPerDay:this.coreRuntime.sector.hoursPerDay}),...o},c=[...a.activities.keys()].flatMap(p=>{let f=this.coreRuntime.state.getActivity(p);return f===null?[]:[et(f)]}),d=this._buildP6ScheduleRunLog(n),this.coreRuntime.state.setDataDateLatestRunLog(d)}catch(u){throw this._rollback(),u}finally{this.coreRuntime.state.endWriteCapture()}return this._changeSetIsSubstantive(l)&&(this._undo.record(Qi(Yr(l))),this._saveTracker.recordChanges(l.activities,l.links,u=>this.coreRuntime.state.getActivity(u),u=>this.coreRuntime.state.getLink(u)),this._saveTracker.recordP6Settings(i),this._saveTracker.recordP6ProjectState(r),this._recordDirectScheduleMutation(!0)),this._p6ScheduleStateFingerprintCache={stateRevision:this._stateRevision,value:d.scheduleDigest},this._saveTracker.recordP6LatestRunLog(d),{changes:l,calculatedActivities:c,criticalPath:[...a.criticalPath],warnings:[...a.warnings],log:d}}_applyPreparedP6Schedule(e){this.coreRuntime.state.setDataDateSettings(e.settings),this.coreRuntime.state.setDataDateProjectState(e.projectState),this._requireDataDateCapability().applyScheduleProjection(this.coreRuntime.state,e.projection)}_buildP6ScheduleRunLog(e){return{schemaVersion:1,calculatedAt:this.coreRuntime.clock?.()??null,dataDate:S(e.settings.dataDate),project:{projectId:String(this.coreRuntime.sector.projectId),scheduleId:String(this.coreRuntime.sector.id),scheduleCode:this.coreRuntime.sector.name,scheduleName:this.coreRuntime.sector.name},settings:S(e.settings),statistics:{calculatedActivityCount:e.calculated.activities.size,criticalActivityCount:e.calculated.criticalPath.length,warningCount:e.calculated.warnings.length},warnings:S(e.calculated.warnings),scheduleDigest:this._computeP6ScheduleStateFingerprint()}}_requireDataDateCapability(){let e=this.coreRuntime.dataDateCapability;if(e===null)throw new se("capability_not_enabled","P6 capability is not enabled for this Schedule");return e}_changeSetIsSubstantive(e){return pm(e,this._hasDataDateChanges(e))}_hasDataDateChanges(e){return this.coreRuntime.dataDateCapability?.changeSetIsSubstantive(e)??!1}_applyDataDateChangeSet(e,n){this.coreRuntime.dataDateCapability?.applyChangeSet(e,n,{setSettings:i=>{this.coreRuntime.state.setDataDateSettings(i)},setProjectPlannedStart:i=>{this._setP6ProjectPlannedStart(i)}})}async _applyDataDateActivationProjection(e,n){let i=this.coreRuntime.dataDateCapability,r=this.coreRuntime.state.dataDateSettings();if(i===null||e===null||r===null)return[];let a=i.prepareLiveDerived(this.coreRuntime.state,e,r,{enabled:this.coreRuntime.state.isDataDateEnabled()});return a.size===0?[]:this._assembleDataDateActivationProjection(i,a,n)}async _assembleDataDateActivationProjection(e,n,i){let r=[...n.keys()],a=this._snapshotActivities(r);this.coreRuntime.state.beginWriteCapture();try{return e.applyLiveDerived(this.coreRuntime.state,n),(await J(this.coreRuntime.state,{source:{kind:i},beforeSnap:a,touchedIds:r,scheduledIds:[],hoursPerDay:this.coreRuntime.sector.hoursPerDay})).activities}catch(o){throw this._rollback(),o}finally{this.coreRuntime.state.endWriteCapture()}}_snapshotActivities(e){return new Map(e.flatMap(n=>{let i=this.coreRuntime.state.getActivity(n);return i===null?[]:[[n,et(i)]]}))}_setP6ProjectPlannedStart(e){let n=this.coreRuntime.state.dataDateProjectState();n!==null&&this.coreRuntime.state.setDataDateProjectState({...n,plannedStart:e})}_beginScheduleMutation(e){return Mr(e)?this._admitScheduleMutation():!1}_admitScheduleMutation(){return this._pendingScheduleRevision++,this._activeCriticalPath&&(this._activeCriticalPath.cancellation.cancelled=!0),!0}_settleScheduleMutation(e,n){e&&(n||(this._pendingScheduleRevision=Math.max(this._pendingScheduleRevision-1,this._scheduleRevision),this._pendingScheduleRevision===this._scheduleRevision&&(this.isCriticalPathSettled()||this.recomputeCriticalPath().catch(i=>{this.coreRuntime.reporter.error("[ScheduleCore] Critical Path re-arm after a barren mutation failed",i)}))))}async dispatch(e,n={}){let i=this._beginScheduleMutation(e);return this._enqueue(()=>this._dispatchInner(e,n,i))}async dispatchMany(e,n={}){let i=e.some(Mr)?this._admitScheduleMutation():!1;return this._enqueue(()=>this._dispatchManyInner(e,n,i))}async applyActivityBatch(e,n={}){let i=this._beginScheduleMutation(e);return this._enqueue(()=>this._dispatchInner(e,n,i))}planLookaheadConversion(e){return this.assertReady(),oc(e,{adapter:this.coreRuntime.state,sector:this.getSector(),stateRevision:this._stateRevision})}applyLookaheadConversion(e){return this.dispatch({...e,kind:A.ACTIVITY_LOOKAHEAD_CONVERT})}async _dispatchInner(e,n={},i=!1){let r=!1;try{let a=await this._runDispatch(e,n);return r=a.changedState,a.result}finally{this._settleScheduleMutation(i,r)}}async _dispatchManyInner(e,n,i){let r=this._snapshotProjection(),a=this.coreRuntime.state.dataDateSettings(),s=a?.dataDate!=null&&a.scheduleAutomaticallyOnDateChange?HA({state:this.coreRuntime.state,history:this._undo,sector:this.coreRuntime.sector,persistence:this._saveTracker,scheduler:this.coreRuntime.scheduler,activityIds:this.coreRuntime.activityIdGenerator,linkIds:this.coreRuntime.linkIdGenerator,correlatives:this.coreRuntime.uniqueCorrelativeIdGenerator,customIds:this.coreRuntime.customIdTracker}):null,l=S(this._activityClipboard.value),c=S(this._cellClipboard.value),d=this._stateRevision,u=this._scheduleRevision,p=this._criticalPathRevision,f=this._criticalPathUsesDataDate,y=this._canonicalFingerprintCache,h=this._p6ScheduleStateFingerprintCache,m={...n,skipAutoSchedule:!0,skipCriticalPath:!0},g=[],C=[],b=[],E=!1,P=!1,N,I=!1,R=null,k=!1,O=!1;try{for(let F of e){if(F.kind===A.SCHEDULE_AUTO_SCHEDULE){if(F.activityId!==void 0&&!this.coreRuntime.state.activityExists(F.activityId)){g.push({ok:!1,reason:v.ACTIVITY_NOT_FOUND});continue}let $=this.coreRuntime.state.dataDateSettings();if(at($,this.coreRuntime.state.isDataDateEnabled())&&$.scheduleAutomaticallyOnDateChange!==!0){g.push({ok:!1,reason:v.MANUAL_SCHEDULING_ACTIVE});continue}let q=bb(F);g.push({ok:!0,changes:q}),C.push(q),b.push(F),P=!0,F.activityId===void 0||N!==void 0&&N!==F.activityId?I=!0:N=F.activityId;continue}let U=await this._runDispatch(F,m,!0);g.push(U.result),U.result.ok&&(C.push(U.result.changes),b.push(F)),U.changedState&&(E=!0,P=!0,I=!0)}if(P){let F=I||N===void 0?{kind:A.SCHEDULE_AUTO_SCHEDULE}:{kind:A.SCHEDULE_AUTO_SCHEDULE,activityId:N},U=await this._runDispatch(F,n,!0);U.result.ok&&(R=U.result.changes,C.push(U.result.changes),k=n.skipAutoSchedule!==!0),E||=U.changedState}return E&&this._recordScheduleMutation(R!==null&&n.skipAutoSchedule!==!0&&n.skipCriticalPath!==!0),O=!0,{results:g,autoScheduled:k,changeSet:this._aggregateDispatchManyChangeSets(r,C,b)}}catch(F){throw s!==null&&(s.restore(),this._activityClipboard.value=l,this._cellClipboard.value=c,this._undo=s.history,this._saveTracker=s.persistence,this._stateRevision=d,this._scheduleRevision=u,this._criticalPathRevision=p,this._criticalPathUsesDataDate=f,this._canonicalFingerprintCache=y,this._p6ScheduleStateFingerprintCache=h,E=!1),F}finally{!O&&E&&this._recordScheduleMutation(!1),this._settleScheduleMutation(i,O&&E)}}_aggregateDispatchManyChangeSets(e,n,i){if(n.length===0)return null;let r=md(this._snapshotProjection(),e),a=n.flatMap(s=>s.effects??[]),o=n.flatMap(s=>s.warnings??[]);return{...r,source:{kind:Kt.DISPATCH_MANY,actions:i},trackingEvents:n.flatMap(s=>s.trackingEvents),...a.length===0?{}:{effects:a},...o.length===0?{}:{warnings:o}}}async _runDispatch(e,n,i=!1){if(this.assertReady(),this._isFork&&Nb(e))return{result:{ok:!1,reason:v.SANDBOX_PERSISTENCE_FORBIDDEN},changedState:!1};let r=Jo(this.coreRuntime.state,{calendars:this.coreRuntime.calendars,hoursPerDay:this.coreRuntime.sector.hoursPerDay,dateFormat:this.coreRuntime.sector.dateFormat}),a=um(e),o=[this.coreRuntime.activityIdGenerator.snapshot(),this.coreRuntime.linkIdGenerator.snapshot(),this.coreRuntime.uniqueCorrelativeIdGenerator.snapshot()];this.coreRuntime.state.beginWriteCapture(),this.coreRuntime.customIdTracker.beginCustomIdTransaction();let s,l={prepared:null},c=null,d;try{s=await ch(e,n,{adapter:this.coreRuntime.state,ctx:r,scheduler:this.coreRuntime.scheduler,sector:this.coreRuntime.sector,calendars:this.coreRuntime.calendars,activityIdGen:this.coreRuntime.activityIdGenerator,linkIdGen:this.coreRuntime.linkIdGenerator,isActivityIdReserved:y=>this._saveTracker.hasCheckpointActivityId(y),isLinkIdReserved:y=>this._saveTracker.hasCheckpointLinkId(y),uidGen:this.coreRuntime.uniqueCorrelativeIdGenerator,customIdTracker:this.coreRuntime.customIdTracker,reporter:this.coreRuntime.reporter,activityClipboard:this._activityClipboard,cellClipboard:this._cellClipboard,stateRevision:this._stateRevision,defaultBaseCalendarId:this.coreRuntime.baseCalendars.find(y=>y.baseDefault)?.id??null,hasCompleteSchedulingState:this.coreRuntime.state.dataDateSettings()!==null&&this.coreRuntime.state.hasCompleteSchedulingState(),dataDateCapability:this.coreRuntime.dataDateCapability,dataDateSettings:this.coreRuntime.state.dataDateSettings(),dataDateEnabled:this.coreRuntime.state.isDataDateEnabled(),runAutomaticP6Schedule:async()=>(l.prepared=this._requireDataDateCapability().prepareSchedule({state:this.coreRuntime.state,settings:this.coreRuntime.state.dataDateSettings(),projectState:this.coreRuntime.state.dataDateProjectState(),externalRelationshipIds:this.coreRuntime.externalRelationshipIds,patch:void 0,sector:this.coreRuntime.sector,...l.prepared===null?{}:{transactionBaseline:l.prepared}}),this._applyPreparedP6Schedule(l.prepared),[...l.prepared.calculated.activities.keys()]),now:this.coreRuntime.clock?qa(this.coreRuntime.clock()):null});let p=l.prepared;s.ok&&p!==null&&(s={...s,changes:{...s.changes,...p.changeSetContribution}},c=this._buildP6ScheduleRunLog(p),this.coreRuntime.state.setDataDateLatestRunLog(c));let f=this.coreRuntime.state.peekWriteCapture()?.progressFallbackBefore;f&&f.size>0&&(d=new Map(f)),s.ok||this._rollback(o)}catch(p){throw this._rollback(o),p}finally{this.coreRuntime.state.endWriteCapture(),this.coreRuntime.customIdTracker.commitCustomIdTransaction()}if(s.ok&&a===Zi.RECORD&&this._changeSetIsSubstantive(s.changes)){let p=sm(this.coreRuntime.state,s.changes),f=d?new Map(Array.from(d.keys(),y=>[y,this.coreRuntime.state.getProgressFallback(y)])):void 0;this._undo.record({...Qi(Yr(s.changes),s.__beforeSnap,s.__beforeLinks,p.afterSnap,p.afterLinks,d,f),...at(this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.isDataDateEnabled())?{beforeLinks:S(s.__beforeLinks),afterLinks:S(p.afterLinks)}:{}},lm(e),Date.now())}if(s.ok)if(a===Zi.CHECKPOINT_ON_SUCCESS){if(e.kind!==A.PERSISTENCE_ACKNOWLEDGE)throw new Error("checkpoint-on-success requires persistence acknowledge");let p=this.coreRuntime.state.getAllActivities(),f=this.coreRuntime.state.getAllLinks(),y=e.checkpoint,h=y?.historyBoundary??this._undo.capturePersistenceBoundary();this._saveTracker.acknowledge(y?.activities??p,y?.links??f,e.activities,e.links,p,f,y?.p6Settings??this.coreRuntime.state.dataDateSettings(),y?.p6ProjectState===void 0?this.coreRuntime.state.dataDateProjectState():y.p6ProjectState,y?.p6LatestRunLog===void 0?this.coreRuntime.state.dataDateLatestRunLog():y.p6LatestRunLog),this._undo.discardThrough(h),this._undo.applyPersistedIdentities(e.activities??[],e.links??[])}else if(e.kind===A.ACTIVITY_LOOKAHEAD_SYNC&&e.acknowledgePersistedLookahead===!0)this._saveTracker.acknowledgePersistedLookahead(s.changes.activities,p=>this.coreRuntime.state.getActivity(p)),e.persistedProgress!==void 0&&this._undo.clear();else{this._saveTracker.recordChanges(s.changes.activities,s.changes.links,f=>this.coreRuntime.state.getActivity(f),f=>this.coreRuntime.state.getLink(f));let p=l.prepared;p!==null&&c!==null&&(this._saveTracker.recordP6Settings(p.settings),this._saveTracker.recordP6ProjectState(p.projectState),this._saveTracker.recordP6LatestRunLog(c))}if(s=this._withReappliedViewState(e,s),!s.ok)return{result:s,changedState:!1};let u=this._changeSetIsSubstantive(s.changes);return u&&this._stateRevision++,c!==null&&(this._p6ScheduleStateFingerprintCache={stateRevision:this._stateRevision,value:c.scheduleDigest}),Mr(e)&&u?(i||this._recordScheduleMutation(n.skipAutoSchedule!==!0&&n.skipCriticalPath!==!0&&Qn(e)),{result:WA(s),changedState:!0}):{result:WA(s),changedState:!1}}recomputeCriticalPath(){let e=this._enqueue(async()=>({job:this._startCriticalPathForCurrentRevision()})).then(({job:n})=>n);return this._criticalPathReady=e,e}isCriticalPathSettled(){return this._criticalPathRevision===this._scheduleRevision&&this._criticalPathUsesDataDate===at(this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.isDataDateEnabled())&&this._pendingScheduleRevision===this._scheduleRevision&&this._activeCriticalPath===null}async whenCriticalPathSettled(){for(;!this.isCriticalPathSettled();)await this.recomputeCriticalPath()}_withReappliedViewState(e,n){if(!n.ok||(e.kind===A.VISIBILITY_SET&&this.coreRuntime.state.setFilterProjection(null),!Sf(e)))return n;let i=this._reapplyViewState(n.changes);return i===null?n:{...n,changes:i}}_reapplyViewState(e){let n=this._reapplyActiveFilter(e),i=this._emitTouchedBranchOrder(n??e);return this._reapplyActiveOrder(i.changes??n??e,i.touchedParents)??i.changes??n}_emitTouchedBranchOrder(e){let n=this.coreRuntime.state,i=hm(e,a=>n.getParentId(a));if(n.getActiveOrder()!==null)return{changes:null,touchedParents:i};if(i.size===0)return{changes:null,touchedParents:i};let r=Vs(n,i);return r.length===0?{changes:null,touchedParents:i}:{changes:{...e,order:r},touchedParents:i}}_reapplyActiveOrder(e,n){let i=this.coreRuntime.state;if(i.getActiveOrder()===null)return null;if(i.invalidateDerivedOrder(),e.links.length>0||e.calendars.length>0)return{...e,order:en(i)};let a=new Set(n);for(let s of e.activities){if(s.kind===H.DELETED)return{...e,order:en(i)};let l=i.getParentId(s.id);a.add(l===null?"0":String(l))}let o=Vs(i,a);return o.length===0?null:{...e,order:o}}_reapplyActiveFilter(e){let n=this.coreRuntime.state,i=n.getActiveFilter();if(i===null)return null;let r=Un(this.coreRuntime.sector.hoursPerDay),a=n.getFilterProjection(),o=xb(a,i,r),s=Fb(e)?null:wb(e,n),l,c;if(s===null||!o){let p=Ca({activities:n.getAllActivities(),parentOf:f=>n.getParentId(f),filter:i,context:r,viewAttributeCatalogs:n.getViewAttributeCatalogMap()});n.setFilterProjection(p),c=p.visibleIds,l=n.getAllIds()}else l=Hd(a,s,p=>n.getParentId(p)),c=a.visibleIds;let u=Fn(n,c,l);return u.length===0?null:{...e,viewState:[...e.viewState??[],...u]}}_recordScheduleMutation(e){this._scheduleRevision++,this._pendingScheduleRevision=Math.max(this._pendingScheduleRevision,this._scheduleRevision),this._activeCriticalPath&&(this._activeCriticalPath.cancellation.cancelled=!0),e&&(this._criticalPathUsesDataDate=at(this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.isDataDateEnabled()),this._criticalPathRevision=this._scheduleRevision)}_recordDirectScheduleMutation(e){this.coreRuntime.dataDateCapability!==null&&this._stateRevision++,this._recordScheduleMutation(e)}_startCriticalPathForCurrentRevision(){if(this._status===De.DESTROYED)return Promise.resolve(null);if(at(this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.isDataDateEnabled()))return this._criticalPathUsesDataDate=!0,this._criticalPathRevision=this._scheduleRevision,Promise.resolve(null);let e=this._scheduleRevision;if(this._criticalPathRevision===e&&!this._criticalPathUsesDataDate)return Promise.resolve(null);if(this._activeCriticalPath?.revision===e)return this._activeCriticalPath.promise;this._activeCriticalPath&&(this._activeCriticalPath.cancellation.cancelled=!0);let n={cancelled:!1},i=new Xi(Zo(this.coreRuntime.state.getAllActivities().map(s=>et(s)),this.coreRuntime.state.getAllLinks().map(s=>({...s})),Array.from(this.coreRuntime.calendars.values()),this.coreRuntime.baseCalendars)),r=()=>!at(this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.isDataDateEnabled())&&!n.cancelled&&this._status!==De.DESTROYED&&this._scheduleRevision===e&&this._pendingScheduleRevision===this._scheduleRevision,a=(async()=>{let s=await Ul(i,this.coreRuntime.sector.hoursPerDay,r);return!r()||s===null?null:this._enqueue(async()=>{if(!r())return null;this.coreRuntime.state.beginWriteCapture(),this.coreRuntime.customIdTracker.beginCustomIdTransaction();let l;try{for(let[c,d]of s.activities)xl(this.coreRuntime.state,c,d);for(let[c,d]of s.links)Ml(this.coreRuntime.state,c,d);l=await J(this.coreRuntime.state,{source:{kind:Kt.INIT},beforeSnap:new Map,touchedIds:[],scheduledIds:[],hoursPerDay:this.coreRuntime.sector.hoursPerDay}),this._criticalPathUsesDataDate=!1,this._criticalPathRevision=e}catch(c){throw this._rollback(),c}finally{this.coreRuntime.state.endWriteCapture(),this.coreRuntime.customIdTracker.commitCustomIdTransaction()}return{changes:l}})})();this._activeCriticalPath={revision:e,cancellation:n,promise:a};let o=()=>{this._activeCriticalPath?.promise===a&&(this._activeCriticalPath=null)};return a.then(o,o),a}undo(e={}){let n=this._admitScheduleMutation(),i=!1,r=this._enqueue(async()=>{try{return await this._runUndo(e,a=>{i=a})}finally{this._settleScheduleMutation(n,i)}});return r.then(a=>{let o=a!==null&&this._hasDataDateChanges(a)&&at(this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.isDataDateEnabled());a&&!o&&e.skipCriticalPath!==!0&&this.recomputeCriticalPath().catch(s=>{this.coreRuntime.reporter.error("[ScheduleCore] Critical Path recompute after undo failed",s)})},()=>{}),r}async _runUndo(e,n){{if(this.assertReady(),e.expectedUndoDepth!==void 0&&this._undo.undoDepth()!==e.expectedUndoDepth)return null;let i=this._undo.takeUndo();if(!i)return null;let r=S(this.coreRuntime.state.dataDateSettings()),a;try{Uc(this.coreRuntime.state,i,(l,c)=>this._applyDataDateChangeSet(l,c)),a=await this._applyDataDateActivationProjection(r,Kt.UNDO)}catch(l){throw Hc(this.coreRuntime.state,i,(c,d)=>this._applyDataDateChangeSet(c,d)),this._undo.restoreTakenUndo(i),l}this._recordDirectScheduleMutation(this._hasDataDateChanges(i.changeSet)&&at(this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.isDataDateEnabled())),n(!0),xc(i)&&this._resyncCustomIdTrackerFromModel(),this._undo.pushRedo(i),this._undo.resetCoalesce();let o=Mc(this.coreRuntime.state,i,Et.BEFORE,l=>this.coreRuntime.dataDateCapability?.historyContribution(i.changeSet,l)??{}),s={...o,activities:[...o.activities,...a]};return this._saveTracker.recordChanges(s.activities,s.links,l=>this.coreRuntime.state.getActivity(l),l=>this.coreRuntime.state.getLink(l)),this._saveTracker.recordP6Settings(this.coreRuntime.state.dataDateSettings()),this._saveTracker.recordP6ProjectState(this.coreRuntime.state.dataDateProjectState()),this._reapplyViewState(s)??s}}redo(e={}){let n=this._admitScheduleMutation(),i=!1,r=this._enqueue(async()=>{try{return await this._runRedo(a=>{i=a})}finally{this._settleScheduleMutation(n,i)}});return r.then(a=>{let o=a!==null&&this._hasDataDateChanges(a)&&at(this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.isDataDateEnabled());a&&!o&&e.skipCriticalPath!==!0&&this.recomputeCriticalPath().catch(s=>{this.coreRuntime.reporter.error("[ScheduleCore] Critical Path recompute after redo failed",s)})},()=>{}),r}async _runRedo(e){this.assertReady();let n=this._undo.takeRedo();if(!n)return null;let i=S(this.coreRuntime.state.dataDateSettings()),r;try{Hc(this.coreRuntime.state,n,(s,l)=>this._applyDataDateChangeSet(s,l)),r=await this._applyDataDateActivationProjection(i,Kt.REDO)}catch(s){throw Uc(this.coreRuntime.state,n,(l,c)=>this._applyDataDateChangeSet(l,c)),this._undo.restoreTakenRedo(n),s}this._recordDirectScheduleMutation(this._hasDataDateChanges(n.changeSet)&&at(this.coreRuntime.state.dataDateSettings(),this.coreRuntime.state.isDataDateEnabled())),e(!0),xc(n)&&this._resyncCustomIdTrackerFromModel(),this._undo.pushUndo(n),this._undo.resetCoalesce();let a=Mc(this.coreRuntime.state,n,Et.AFTER,s=>this.coreRuntime.dataDateCapability?.historyContribution(n.changeSet,s)??{}),o={...a,activities:[...a.activities,...r]};return this._saveTracker.recordChanges(o.activities,o.links,s=>this.coreRuntime.state.getActivity(s),s=>this.coreRuntime.state.getLink(s)),this._saveTracker.recordP6Settings(this.coreRuntime.state.dataDateSettings()),this._saveTracker.recordP6ProjectState(this.coreRuntime.state.dataDateProjectState()),this._reapplyViewState(o)??o}canUndo(){return this._undo.canUndo()}canRedo(){return this._undo.canRedo()}clearHistory(){this._undo.clear()}undoDepth(){return this._undo.undoDepth()}_resyncCustomIdTrackerFromModel(){this.coreRuntime.customIdTracker.clear(),this.coreRuntime.customIdTracker.populateFromActivities(this.coreRuntime.state.getAllActivities())}destroy(){this._activeCriticalPath&&(this._activeCriticalPath.cancellation.cancelled=!0),this.coreRuntime.calendars.clear(),this._saveTracker.clear(),this._status=De.DESTROYED}_initPromise;_criticalPathReady;_ready;_saveTracker=new es;assertReady(){if(this._status===De.DESTROYED)throw new Error("[ScheduleCore] instance is destroyed");if(this._status===De.POISONED)throw new Error("[ScheduleCore] instance is poisoned (a rollback failed) \u2014 reload from backend")}_rollback(e){try{this.coreRuntime.state.restoreFromCapture(),this.coreRuntime.scheduler.invalidateAllCaches(),this.coreRuntime.customIdTracker.rollbackCustomIdTransaction(),e&&(this.coreRuntime.activityIdGenerator.restore(e[0]),this.coreRuntime.linkIdGenerator.restore(e[1]),this.coreRuntime.uniqueCorrelativeIdGenerator.restore(e[2]))}catch(n){throw this._status=De.POISONED,this.coreRuntime.reporter.error("[ScheduleCore] rollback failed \u2014 core poisoned",n),n}}};function WA(t){let{__beforeSnap:e,__beforeLinks:n,...i}=t;return i}async function VA(t){let e=new sr(t);return await e.ready,e}var KA=(t=[])=>(t??[]).filter(e=>!e.proplannerId);var ia=class extends Error{constructor(n){super(n);this.code=n;this.name="LookaheadActualTransitionError"}code},Mb=/^(\d{4})-(\d{2})-(\d{2})$/;function ks(t){Ad(t.timeSource)||Te("INVALID_ACTUAL_TIME_SOURCE");let e=Ub(t.selectedDay),[n,i,r]=e,a=new Date(t.timeSource);return a.setUTCFullYear(n,i-1,r),jb(a,e)||Te("INVALID_ACTUAL_DAY"),a}function Ub(t){let e=Mb.exec(t);return e||Te("INVALID_ACTUAL_DAY"),[Number(e[1]),Number(e[2]),Number(e[3])]}function Id(t){if(Bb(t),t.dataDate===null)return{start:null,finish:null,uncomplete:null};let e=t.activity.executionStatus===V.NOT_STARTED&&t.nextProgress>0?{required:!0,suggestedAt:new Date(t.dataDate)}:null,n=t.activity.executionStatus!==V.COMPLETED&&t.nextProgress===100?{optional:!0,suggestedAt:t.displayedFinish?new Date(t.displayedFinish):null}:null,i=t.activity.executionStatus===V.COMPLETED&&t.activity.actualFinish!==null&&t.nextProgress<100?{required:!0,removes:new Date(t.activity.actualFinish)}:null;return{start:e,finish:n,uncomplete:i}}function YA(t){let e=Id(t);t.dataDate===null&&Wb(t.intent)&&Te("DATA_DATE_INACTIVE"),e.start&&t.intent?.actualStart===void 0&&Te("ACTUAL_START_REQUIRED"),t.intent?.actualFinish instanceof Date&&t.nextProgress!==100&&Te("ACTUAL_FINISH_REQUIRES_100"),e.uncomplete&&t.intent?.actualFinish!==null&&Te("ACTUAL_FINISH_REMOVAL_REQUIRED"),!e.uncomplete&&t.intent?.actualFinish===null&&Te("ACTUAL_FINISH_REMOVAL_NOT_APPLICABLE");let n=ds(t.activity,t.intent??{});return t.dataDate===null?n:Hb(t.activity,n,t.nextProgress)}function Hb(t,e,n){if((e.executionStatus??t.executionStatus)!==V.IN_PROGRESS)return e;switch(t.percentCompleteType){case It.PHYSICAL:return{...e,physicalPercentComplete:n};case It.DURATION:return{...e,remainingDurationHours:t.originalDurationHours*(1-n/100)};default:return e}}function Bb(t){(!Number.isFinite(t.nextProgress)||t.nextProgress<0||t.nextProgress>100)&&Te("INVALID_PROGRESS"),t.dataDate!==null&&!Ad(t.dataDate)&&Te("INVALID_DATA_DATE"),t.displayedFinish!=null&&!Ad(t.displayedFinish)&&Te("INVALID_DISPLAYED_FINISH")}function Ad(t){return t instanceof Date&&Number.isFinite(t.getTime())}function jb(t,[e,n,i]){return t.getUTCFullYear()===e&&t.getUTCMonth()===n-1&&t.getUTCDate()===i}function Wb(t){return t?.actualStart!==void 0||t?.actualFinish!==void 0}function Te(t){throw new ia(t)}function GA(t){return ks({selectedDay:t.selectedDay,timeSource:t.expectedFinish??t.displayedFinish})}function Ls(t){let e=zo([...t.calendars],void 0,t.baseCalendars===void 0?void 0:[...t.baseCalendars]),{reader:n}=jo(Bc(e.calendars,e.baseCalendars));return{defaultCalendarId:e.defaultCalendarId,resolveCalendar(i){let r=i!==null&&e.knownCalendarIds.has(i)?i:e.defaultCalendarId;return n.getCalendar(r)}}}function $A(t){let{resolveCalendar:e}=Ls(t);return{derive({previous:n,next:i,calendarId:r,dataDate:a,totalFloatMethod:o}){if(!He(i))return null;let s=e(r);if(!s)return null;let{p6:l}=ys(n,i,{calendar:s,dataDate:a,...o===void 0?{}:{totalFloatMethod:o}});return{actualDurationHours:l.actualDurationHours,atCompletionDurationHours:l.atCompletionDurationHours,durationPercentComplete:l.durationPercentComplete,unitsPercentComplete:l.unitsPercentComplete,schedulePercentComplete:l.schedulePercentComplete}}}}function qA(t){let{defaultCalendarId:e,resolveCalendar:n}=Ls(t);if(e===null)throw new Error("Calendar reader requires at least one calendar");return{getCalendar(i){let r=n(i);if(!r)throw new Error("Resolved calendar missing after normalization");return r}}}var pt=t=>{let e=t.lifecycle??(t.classification==="f9_output"?"f9":"explicit_edit");return{...t,lifecycle:e,changesWhen:Vb(e),f9Behavior:Kb(e),persistence:"Persist exact null/zero/signed scalar or exact UTC instant; save/reload is lossless.",nullAndZero:t.typeAndUnit.includes("UTC")?"null means absent; midnight is a real exact UTC instant.":t.typeAndUnit.includes("boolean")?"false is a real value and is never normalized to null.":"null means unavailable when allowed; numeric zero and signed values are preserved.",calendarRule:t.typeAndUnit.includes("working hours")||t.classification==="derived"?"Use the activity calendar, including shifts and exceptions; never local wall-clock subtraction.":"No calendar arithmetic; date values cross boundaries as exact UTC components.",status:t.status??(e==="open"?"PARTIAL":"VERIFIED"),edgeCases:t.edgeCases??{}}};function Vb(t){return t==="f9"?"Changes only during explicit P6 F9 and its atomic Undo/Redo replay.":t==="dependency_change"?"Changes when Data Date moves from one valid instant to another in the same canonical mutation, without running F9.":t==="open"?"Formula is known; immediate pre-F9 refresh timing remains open pending a discriminant P6 observation.":"Changes on an authorized import or explicit user edit; open/save/reload do not calculate it."}function Kb(t){return t==="explicit_edit"?"Preserved as scheduling reality/input unless the documented P6 algorithm consumes the input without rewriting it.":t==="open"?"Recalculated by F9; whether dependency edits refresh it earlier is not yet certified.":"Recalculated by Schedule Core; no frontend or backend formula is authoritative."}var Ln="src/p6/api.test.ts; src/p6/testing/p6-data-date/property-coverage.test.ts",$e="src/p6/testing/p6-data-date/fixtures/obdd-math/obdd-math-before-f9.xer",lr="src/p6/testing/p6-floats/obdd-floats.schedule.test.ts",cr="src/p6/testing/p6-floats/fixtures/obdd-floats-smallest.xer",qe="src/p6/derived.test.ts",On="src/p6/testing/p6-derived/fixtures/obdd-derived-edges.p6.json",Yb={notStarted:"0 hours.",inProgress:"Working time from Actual Start to Data Date, excluding a valid Suspend/Resume interval.",completed:"Working time from Actual Start to Actual Finish.",zeroDuration:"0 hours.",zeroDenominator:"Not applicable; no division.",suspendResume:"Subtract only the overlap of Suspend..Resume with the measured actual interval.",calendarException:"Exception time contributes only when the activity calendar marks it workable.",signedValues:"Invalid negative duration inputs are rejected; P6 clamps a reversed Actual Start/end interval to 0 hours.",nullValue:"Missing required actual endpoint yields 0 under the P6 status contract.",milestone:"0 hours when the actual endpoints coincide."},Gb={notStarted:"Working duration Planned Start..Planned Finish.",inProgress:"Working duration Actual Start..Remaining Early Finish, excluding Suspend/Resume.",completed:"Working duration Actual Start..Actual Finish.",zeroDuration:"0 hours.",zeroDenominator:"Not applicable; no division.",suspendResume:"Subtract the suspended overlap from the selected endpoint interval.",calendarException:"Measured with shifts and exceptions from the activity calendar.",signedValues:"P6 clamps a chronologically reversed Actual Start/selected finish interval to 0 hours.",nullValue:"Missing required endpoints yields 0 for the matching status branch.",milestone:"0 hours for coincident endpoints."},$b={notStarted:"(Original - Remaining) / Original \xD7 100, normally 0.",inProgress:"(Original - Remaining) / Original \xD7 100, clamped to 0..100.",completed:"Same formula; P6 completed input normally has zero Remaining.",zeroDuration:"0%, including a zero-duration milestone.",zeroDenominator:"0%, never NaN or Infinity.",suspendResume:"No direct effect; only duration inputs affect the percentage.",calendarException:"No direct effect after durations are canonical working hours.",signedValues:"Negative/non-finite duration inputs are rejected.",nullValue:"Duration inputs are required canonical scalars, not nullable.",milestone:"0% for zero Original Duration under the certified P6 golden."},qb={notStarted:"Actual units are normally zero; result is 0%.",inProgress:"100 \xD7 (actual labor + actual nonlabor) / (actual + remaining units).",completed:"100% when remaining units are zero and actual units are positive.",zeroDuration:"Independent of duration; units still control the result.",zeroDenominator:"0%, never NaN or Infinity.",suspendResume:"No direct effect.",calendarException:"No direct effect on already canonical assignment scalars.",signedValues:"Finite negative unit scalars are preserved; P6 can produce percentages below 0% or above 100%. Non-finite inputs are rejected.",nullValue:"Canonical TASK unit scalars are required; missing assignment totals hydrate as zero.",milestone:"0% with no units; otherwise the same units formula."},zb={notStarted:"0% when Data Date is at or before primary baseline start.",inProgress:"Baseline working time elapsed through Data Date divided by total baseline working time.",completed:"100% when Data Date is at or after primary baseline finish.",zeroDuration:"0% before the coincident endpoint and 100% at or after it.",zeroDenominator:"0% when signed baseline working duration is non-positive.",suspendResume:"No direct effect; baseline dates and Data Date are authoritative.",calendarException:"Elapsed and total durations use the activity calendar exception set.",signedValues:"Result is clamped to 0..100; P6 UI does not allow an inverted assigned baseline.",nullValue:"When neither primary baseline endpoint is assigned, P6 uses Current Project planned dates; one missing endpoint or missing effective planned dates returns null.",milestone:"Boundary result is determined by Data Date relative to the coincident baseline endpoints."},Jb={notStarted:"Calculated from remaining early and late endpoints.",inProgress:"Same remaining endpoint formula after the selected OOS policy forward/backward passes.",completed:"null when no remaining endpoints exist.",zeroDuration:"Can be positive, zero or negative; milestone duration does not erase float.",zeroDenominator:"Not applicable; no division.",suspendResume:"Affects scheduled endpoints before float is measured.",calendarException:"Start and finish float use signed working time on the activity calendar.",signedValues:"Negative float is preserved exactly; -0 normalizes to numeric 0.",nullValue:"null when required start/finish endpoints for the selected method are absent.",milestone:"Measured between coincident remaining endpoint and its late endpoint."},_e=(t,e)=>`Input: canonical activities, relationships, Data Date and settings; phase: ${t}; policy: retained logic/progress override/actual dates relation classification; constraint: primary, secondary and project bounds; calendar: activity and configured lag calendars with exceptions; result: ${e}.`,zA=Object.freeze([pt({uiName:"Actual Start",property:"actualStart",xerField:"TASK.act_start_date",xmlField:"Activity.ActualStart",classification:"reality",typeAndUnit:"Date | null, exact UTC instant",editability:"controlled",authority:"Imported/user-confirmed actual reality",phase:"input",algorithm:"Input only; status validation may infer status but F9 never moves it.",interactions:"Activity Status, Actual Finish, Actual Duration and OOS policy.",unitTest:Ln,p6Golden:$e}),pt({uiName:"Actual Finish",property:"actualFinish",xerField:"TASK.act_end_date",xmlField:"Activity.ActualFinish",classification:"reality",typeAndUnit:"Date | null, exact UTC instant",editability:"controlled",authority:"Imported/user-confirmed actual reality",phase:"input",algorithm:"Input only; completed status requires a consistent actual endpoint; F9 never moves it.",interactions:"Activity Status, Actual Start and Actual Duration.",unitTest:Ln,p6Golden:$e}),pt({uiName:"Planned Start",property:"plannedStart",xerField:"TASK.target_start_date",xmlField:"Activity.PlannedStart",classification:"editable_input",typeAndUnit:"Date | null, exact UTC instant",editability:"editable",authority:"Imported/user input",phase:"input",algorithm:"Initial planning input; never replaced by projected Start.",interactions:"At Completion Duration and not-started fallback.",unitTest:Ln,p6Golden:$e}),pt({uiName:"Planned Finish",property:"plannedFinish",xerField:"TASK.target_end_date",xmlField:"Activity.PlannedFinish",classification:"editable_input",typeAndUnit:"Date | null, exact UTC instant",editability:"editable",authority:"Imported/user input",phase:"input",algorithm:"Initial planning input; never replaced by projected Finish.",interactions:"At Completion Duration and not-started fallback.",unitTest:Ln,p6Golden:$e}),pt({uiName:"Remaining Duration",property:"remainingDurationHours",xerField:"TASK.remain_drtn_hr_cnt",xmlField:"Activity.RemainingDuration",classification:"editable_input",typeAndUnit:"number, working hours",editability:"editable",authority:"Imported/user input consumed by explicit F9",phase:"input",algorithm:"Forward pass consumes/preserves remaining working hours according to status and OOS policy.",interactions:"Remaining Early Finish, Actual/At Completion Duration and Duration %.",unitTest:Ln,p6Golden:$e}),pt({uiName:"Activity Status",property:"executionStatus",xerField:"TASK.status_code",xmlField:"Activity.Status",classification:"reality",typeAndUnit:"not_started | in_progress | completed",editability:"controlled",authority:"Actual-date/status invariant",phase:"input",algorithm:"Validated before F9; scheduling never invents actual dates.",interactions:"Actual endpoints, Remaining Duration and all derived duration fields.",unitTest:"src/p6/status.test.ts",p6Golden:$e}),pt({uiName:"Expected Finish",property:"expectedFinish",xerField:"TASK.expect_end_date",xmlField:"Activity.ExpectedFinish",classification:"editable_input",typeAndUnit:"Date | null, exact UTC instant",editability:"editable",authority:"Imported/user input plus useExpectedFinishDates setting",phase:"input",algorithm:"Forward bound only when the project setting enables Expected Finish dates.",interactions:"Use Expected Finish Dates and Remaining Early Finish.",unitTest:"src/p6/testing/p6-native/obdd-native.schedule.test.ts",p6Golden:"src/p6/testing/p6-native/fixtures/obdd-native-step24-expected-finish-calendar-exception.xer"}),pt({uiName:"Suspend Date",property:"suspendDate",xerField:"TASK.suspend_date",xmlField:"Activity.SuspendDate",classification:"reality",typeAndUnit:"Date | null, exact UTC instant",editability:"editable",authority:"Imported/user actual reality",phase:"input",algorithm:"Preserved; duration derivation subtracts the valid Suspend..Resume overlap.",interactions:"Resume Date, Actual Duration and At Completion Duration.",unitTest:qe,p6Golden:On}),pt({uiName:"Resume Date",property:"resumeDate",xerField:"TASK.resume_date",xmlField:"Activity.ResumeDate",classification:"reality",typeAndUnit:"Date | null, exact UTC instant",editability:"editable",authority:"Imported/user actual reality",phase:"input",algorithm:"Preserved; duration derivation subtracts the valid Suspend..Resume overlap.",interactions:"Suspend Date, Actual Duration and At Completion Duration.",unitTest:qe,p6Golden:On}),pt({uiName:"Secondary Constraint",property:"secondaryConstraintType",xerField:"TASK.cstr_type2",xmlField:"Activity.SecondaryConstraintType",classification:"editable_input",typeAndUnit:"canonical P6 constraint enum | null",editability:"editable",authority:"Imported/user input",phase:"input",algorithm:"Constraint classifier applies the declared start/finish lower/upper bound during forward/backward passes.",interactions:"Secondary Constraint Date, primary constraint and calendars.",unitTest:Ln,p6Golden:"src/p6/testing/p6-native/fixtures/obdd-native-step18-secondary-finish-on-or-after.xer"}),pt({uiName:"Secondary Constraint Date",property:"secondaryConstraintDate",xerField:"TASK.cstr_date2",xmlField:"Activity.SecondaryConstraintDate",classification:"editable_input",typeAndUnit:"Date | null, exact UTC instant",editability:"editable",authority:"Imported/user input",phase:"input",algorithm:"Provides the exact bound for Secondary Constraint Type; ignored when type is null.",interactions:"Secondary Constraint Type and early/late passes.",unitTest:Ln,p6Golden:"src/p6/testing/p6-native/fixtures/obdd-native-step18-secondary-finish-on-or-after.xer"}),pt({uiName:"Percent Complete Type",property:"percentCompleteType",xerField:"TASK.complete_pct_type",xmlField:"Activity.PercentCompleteType",classification:"editable_input",typeAndUnit:"duration | units | physical",editability:"editable",authority:"Imported/user input",phase:"input",algorithm:"Selects displayed progress authority; individual derived percentages remain independently calculated.",interactions:"Physical %, Duration %, Units % and progress projection.",unitTest:qe,p6Golden:On}),pt({uiName:"Physical % Complete",property:"physicalPercentComplete",xerField:"TASK.phys_complete_pct",xmlField:"Activity.PhysicalPercentComplete",classification:"editable_input",typeAndUnit:"number, percentage points 0..100",editability:"editable",authority:"Imported/user physical-progress input",phase:"input",algorithm:"Preserved by F9 and used only when Percent Complete Type is physical.",interactions:"Percent Complete Type and visible progress.",unitTest:Ln,p6Golden:$e}),pt({uiName:"Actual Duration",property:"actualDurationHours",xerField:"TASK.act_drtn_hr_cnt or actual endpoints",xmlField:"Activity.ActualDuration",classification:"derived",lifecycle:"open",typeAndUnit:"number, working hours",editability:"readonly",authority:"Schedule Core deriveP6ActivityFields",phase:"derived",algorithm:"Status-specific non-negative working duration using actual endpoints/Data Date minus suspended overlap; reversed endpoints clamp to zero.",interactions:"Status, Actual Start/Finish, Data Date, Suspend/Resume and activity calendar.",unitTest:qe,p6Golden:On,status:"PARTIAL",edgeCases:Yb}),pt({uiName:"At Completion Duration",property:"atCompletionDurationHours",xerField:"TASK.total_drtn_hr_cnt or planned/actual/remaining endpoints",xmlField:"Activity.AtCompletionDuration",classification:"derived",lifecycle:"open",typeAndUnit:"number, working hours",editability:"readonly",authority:"Schedule Core deriveP6ActivityFields",phase:"derived",algorithm:"Not started: planned interval; in progress: Actual Start..Remaining Early Finish; completed: actual interval.",interactions:"Status, planned/actual/remaining endpoints, Suspend/Resume and calendar.",unitTest:qe,p6Golden:On,status:"PARTIAL",edgeCases:Gb}),pt({uiName:"Duration % Complete",property:"durationPercentComplete",xerField:"TASK.target_drtn_hr_cnt + remain_drtn_hr_cnt",xmlField:"Activity.DurationPercentComplete",classification:"derived",lifecycle:"open",typeAndUnit:"number, percentage points",editability:"readonly",authority:"Schedule Core deriveP6ActivityFields",phase:"derived",algorithm:"100 \xD7 (Original Duration - Remaining Duration) / Original Duration, clamped to 0..100.",interactions:"Original and Remaining Duration; independent of Percent Complete Type selection.",unitTest:qe,p6Golden:On,status:"PARTIAL",edgeCases:$b}),pt({uiName:"Units % Complete",property:"unitsPercentComplete",xerField:"TASKRSRC actual and remaining unit scalars",xmlField:"Activity.ResourceAssignment.ActualUnits/RemainingUnits",classification:"derived",lifecycle:"open",typeAndUnit:"number, percentage points",editability:"readonly",authority:"Schedule Core deriveP6ActivityFields over canonical TASK scalars",phase:"derived",algorithm:"100 \xD7 total actual labor/nonlabor units / (actual + remaining units); zero denominator returns 0; finite signed values are not clamped.",interactions:"TASK unit scalars and Percent Complete Type; no full assignment subsystem.",unitTest:qe,p6Golden:On,status:"PARTIAL",edgeCases:qb}),pt({uiName:"Schedule % Complete",property:"schedulePercentComplete",xerField:"PROJECT.last_recalc_date + assigned baseline TASK dates, otherwise current TASK planned dates",xmlField:"Activity.SchedulePercentComplete",classification:"derived",lifecycle:"dependency_change",typeAndUnit:"number | null, percentage points",editability:"readonly",authority:"Schedule Core deriveP6ActivityFields",phase:"derived",algorithm:"Working effective-baseline time elapsed at Data Date / total working time, clamped to 0..100; a coincident milestone is 100% at its timestamp.",interactions:"Data Date, assigned baseline/current planned dates and activity calendar.",unitTest:qe,p6Golden:On,status:"VERIFIED",edgeCases:zb}),pt({uiName:"Remaining Float",property:"remainingFloatHours",xerField:"TASK remaining early/late endpoints",xmlField:"Activity.RemainingFloat",classification:"derived",lifecycle:"f9",typeAndUnit:"number | null, signed working hours",editability:"readonly",authority:"Schedule Core deriveP6ActivityFields",phase:"derived",algorithm:"Start Float, Finish Float or their minimum as selected, using signed working duration.",interactions:"Total Float method, remaining early/late endpoints and activity calendar.",unitTest:qe,p6Golden:"src/p6/testing/p6-float-method/fixtures/obdd-float-method-smallest.xer",status:"VERIFIED",edgeCases:Jb}),pt({uiName:"Remaining Early Start",property:"remainingEarlyStart",xerField:"TASK.restart_date",xmlField:"Activity.RemainingEarlyStart",classification:"f9_output",typeAndUnit:"Date | null, exact UTC instant",editability:"readonly",authority:"Schedule Core P6 forward pass",phase:"forward",algorithm:_e("forward","earliest start of remaining work"),interactions:"Data Date, predecessors, OOS policy, constraints and calendar.",unitTest:"src/p6/testing/p6-data-date/obdd-math.schedule.test.ts",p6Golden:$e,status:"VERIFIED"}),pt({uiName:"Remaining Early Finish",property:"remainingEarlyFinish",xerField:"TASK.reend_date",xmlField:"Activity.RemainingEarlyFinish",classification:"f9_output",typeAndUnit:"Date | null, exact UTC instant",editability:"readonly",authority:"Schedule Core P6 forward pass",phase:"forward",algorithm:_e("forward","calendar finish after remaining duration"),interactions:"Remaining Early Start, Remaining Duration, OOS policy and calendar.",unitTest:"src/p6/testing/p6-data-date/obdd-math.schedule.test.ts",p6Golden:$e,status:"VERIFIED"}),pt({uiName:"Remaining Late Start",property:"remainingLateStart",xerField:"TASK.rem_late_start_date",xmlField:"Activity.RemainingLateStart",classification:"f9_output",typeAndUnit:"Date | null, exact UTC instant",editability:"readonly",authority:"Schedule Core P6 backward pass",phase:"backward",algorithm:_e("backward","latest remaining start without violating successor/project bounds"),interactions:"Remaining Late Finish, constraints, successors and calendar.",unitTest:lr,p6Golden:cr,status:"VERIFIED"}),pt({uiName:"Remaining Late Finish",property:"remainingLateFinish",xerField:"TASK.rem_late_end_date",xmlField:"Activity.RemainingLateFinish",classification:"f9_output",typeAndUnit:"Date | null, exact UTC instant",editability:"readonly",authority:"Schedule Core P6 backward pass",phase:"backward",algorithm:_e("backward","latest remaining finish without violating successor/project bounds"),interactions:"Successors, Must Finish By, constraints and calendar.",unitTest:lr,p6Golden:cr,status:"VERIFIED"}),pt({uiName:"Early Start",property:"earlyStart",xerField:"TASK.early_start_date",xmlField:"Activity.EarlyStart",classification:"f9_output",typeAndUnit:"Date | null, exact UTC instant",editability:"readonly",authority:"Schedule Core P6 forward pass",phase:"forward",algorithm:_e("forward","projected early start respecting immutable actuals"),interactions:"Actual Start, Remaining Early Start and OOS policy.",unitTest:lr,p6Golden:cr,status:"VERIFIED"}),pt({uiName:"Early Finish",property:"earlyFinish",xerField:"TASK.early_end_date",xmlField:"Activity.EarlyFinish",classification:"f9_output",typeAndUnit:"Date | null, exact UTC instant",editability:"readonly",authority:"Schedule Core P6 forward pass",phase:"forward",algorithm:_e("forward","projected early finish respecting immutable actuals"),interactions:"Actual Finish, Remaining Early Finish and OOS policy.",unitTest:lr,p6Golden:cr,status:"VERIFIED"}),pt({uiName:"Late Start",property:"lateStart",xerField:"TASK.late_start_date",xmlField:"Activity.LateStart",classification:"f9_output",typeAndUnit:"Date | null, exact UTC instant",editability:"readonly",authority:"Schedule Core P6 backward pass",phase:"backward",algorithm:_e("backward","projected late start"),interactions:"Remaining Late Start, constraints, float and immutable actuals.",unitTest:lr,p6Golden:cr,status:"VERIFIED"}),pt({uiName:"Late Finish",property:"lateFinish",xerField:"TASK.late_end_date",xmlField:"Activity.LateFinish",classification:"f9_output",typeAndUnit:"Date | null, exact UTC instant",editability:"readonly",authority:"Schedule Core P6 backward pass",phase:"backward",algorithm:_e("backward","projected late finish"),interactions:"Remaining Late Finish, Must Finish By, constraints and float.",unitTest:lr,p6Golden:cr,status:"VERIFIED"}),pt({uiName:"Float Path",property:"floatPath",xerField:"TASK.float_path",xmlField:"Activity.FloatPath",classification:"f9_output",typeAndUnit:"number | null, path number",editability:"readonly",authority:"Schedule Core P6 float-path pass",phase:"float_path",algorithm:_e("float_path","selected multiple-float-path identifier"),interactions:"Ending Activity, Total/Free Float selection, enabled and path limit settings.",unitTest:"src/p6/paths.test.ts",p6Golden:"src/p6/testing/p6-floats/fixtures/obdd-floats-multiple-paths-limit-2.xer",status:"VERIFIED"}),pt({uiName:"Float Path Order",property:"floatPathOrder",xerField:"TASK.float_path_order",xmlField:"Activity.FloatPathOrder",classification:"f9_output",typeAndUnit:"number | null, ordinal",editability:"readonly",authority:"Schedule Core P6 float-path pass",phase:"float_path",algorithm:_e("float_path","stable order inside the selected float path"),interactions:"Float Path, relationship topology and deterministic tie-breaking.",unitTest:"src/p6/paths.test.ts",p6Golden:"src/p6/testing/p6-floats/fixtures/obdd-floats-multiple-paths-limit-2.xer",status:"VERIFIED"}),pt({uiName:"Longest Path",property:"longestPath",xerField:"TASK.driving_path_flag",xmlField:"Activity.IsLongestPath",classification:"f9_output",typeAndUnit:"boolean",editability:"readonly",authority:"Schedule Core P6 float-path pass",phase:"float_path",algorithm:_e("float_path","true for activities on the selected longest path"),interactions:"Critical Activity Method, Ending Activity and deterministic path topology.",unitTest:"src/p6/paths.test.ts",p6Golden:"src/p6/testing/p6-floats/fixtures/obdd-floats-longest-path.xer",status:"VERIFIED"})]);var JA={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 XA=8;var ZA={CHILD:"child",CHILD_CONFIRMED:"child-confirmed",LINE:"line",ROOT:"root"};return rI(Xb);})();
|
|
2
2
|
//# sourceMappingURL=schedule-core.global.js.map
|