scorm-again 3.0.0 → 3.0.2

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.
Files changed (50) hide show
  1. package/dist/aicc.js.map +1 -0
  2. package/dist/aicc.min.js.map +1 -0
  3. package/dist/cross-frame-api.js +26 -11
  4. package/dist/cross-frame-api.js.map +1 -0
  5. package/dist/cross-frame-api.min.js +1 -1
  6. package/dist/cross-frame-api.min.js.map +1 -0
  7. package/dist/cross-frame-lms.js +16 -4
  8. package/dist/cross-frame-lms.js.map +1 -0
  9. package/dist/cross-frame-lms.min.js +1 -1
  10. package/dist/cross-frame-lms.min.js.map +1 -0
  11. package/dist/esm/aicc.js.map +1 -0
  12. package/dist/esm/aicc.min.js.map +1 -0
  13. package/dist/esm/cross-frame-api.js +115 -108
  14. package/dist/esm/cross-frame-api.js.map +1 -0
  15. package/dist/esm/cross-frame-api.min.js +1 -1
  16. package/dist/esm/cross-frame-api.min.js.map +1 -0
  17. package/dist/esm/cross-frame-lms.js +32 -30
  18. package/dist/esm/cross-frame-lms.js.map +1 -0
  19. package/dist/esm/cross-frame-lms.min.js +1 -1
  20. package/dist/esm/cross-frame-lms.min.js.map +1 -0
  21. package/dist/esm/scorm-again.js +804 -506
  22. package/dist/esm/scorm-again.js.map +1 -0
  23. package/dist/esm/scorm-again.min.js +1 -1
  24. package/dist/esm/scorm-again.min.js.map +1 -0
  25. package/dist/esm/scorm12.js +152 -373
  26. package/dist/esm/scorm12.js.map +1 -0
  27. package/dist/esm/scorm12.min.js +1 -1
  28. package/dist/esm/scorm12.min.js.map +1 -0
  29. package/dist/esm/scorm2004.js +582 -312
  30. package/dist/esm/scorm2004.js.map +1 -0
  31. package/dist/esm/scorm2004.min.js +1 -1
  32. package/dist/esm/scorm2004.min.js.map +1 -0
  33. package/dist/scorm-again.js +1205 -334
  34. package/dist/scorm-again.js.map +1 -0
  35. package/dist/scorm-again.min.js +1 -1
  36. package/dist/scorm-again.min.js.map +1 -0
  37. package/dist/scorm12.js +832 -71
  38. package/dist/scorm12.js.map +1 -0
  39. package/dist/scorm12.min.js +1 -1
  40. package/dist/scorm12.min.js.map +1 -0
  41. package/dist/scorm2004.js +1078 -292
  42. package/dist/scorm2004.js.map +1 -0
  43. package/dist/scorm2004.min.js +1 -1
  44. package/dist/scorm2004.min.js.map +1 -0
  45. package/dist/types/BaseAPI.d.ts +3 -3
  46. package/dist/types/Scorm2004API.d.ts +1 -0
  47. package/dist/types/cmi/scorm2004/sequencing/handlers/termination_handler.d.ts +2 -2
  48. package/dist/types/interfaces/services.d.ts +3 -2
  49. package/dist/types/services/EventService.d.ts +3 -3
  50. package/package.json +41 -44
@@ -1,2 +1,2 @@
1
- !function(){"use strict";const e={D:86400,H:3600,M:60,S:1},t=l(e=>{if(!e||0>=e)return"00:00:00";const t=Math.floor(e/3600),i=new Date(1e3*e),s=i.getUTCMinutes(),r=i.getSeconds(),n=e%1;let o="";return a(n)>0&&(o=a(n)>2?n.toFixed(2):n+"",o="."+o.split(".")[1]),(t+":"+s+":"+r).replace(/\b\d\b/g,"0$&")+o}),i=l(t=>{if(!t||0>=t)return"PT0S";let i="P",s=t;return Object.entries(e).forEach(e=>{let[t,r]=e,n=Math.floor(s/r);s%=r,a(s)>2&&(s=+(+s).toFixed(2)),"S"===t&&s>0&&(n+=s),n&&((i.indexOf("D")>0||["H","M","S"].includes(t))&&-1===i.indexOf("T")&&(i+="T"),i+=`${n}${t}`)}),i}),s=l((e,t)=>{if("number"!=typeof e&&"boolean"!=typeof e||(e+=""),"string"==typeof t&&(t=RegExp(t)),!e)return 0;if(!e.match(t))return/^\d+(?:\.\d+)?$/.test(e)?+e:0;const i=e.split(":");return 3600*+i[0]+60*+i[1]+ +i[2]},(e,t)=>`${"string"==typeof e?e:(e??"")+""}:${"string"==typeof t?t:t?.toString()??""}`),r=l((e,t)=>{if("string"==typeof t&&(t=RegExp(t)),!e||!e?.match?.(t))return 0;const[,i,s,r,n,o,a,c]=RegExp(t).exec?.(e)??[];let result=0;return result+=+c||0,result+=60*+a||0,result+=3600*+o||0,result+=86400*+n||0,result+=604800*+r||0,result+=2592e3*+s||0,result+=31536e3*+i||0,result},(e,t)=>`${e??""}:${"string"==typeof t?t:t?.toString()??""}`),n=l((e,t)=>("string"==typeof t&&(t=RegExp(t)),!(!e||!e?.match?.(t))));function o(e){const result={};return function e(t,i){if(Object(t)!==t)result[i]=t;else if(Array.isArray(t))t.forEach((t,s)=>{e(t,`${i}[${s}]`)}),0===t.length&&(result[i]=[]);else{const s=Object.keys(t).filter(e=>({}.hasOwnProperty.call(t,e))),r=0===s.length;s.forEach(s=>{e(t[s],i?`${i}.${s}`:s)}),r&&i&&(result[i]={})}}(e,""),result}function a(e){if(Math.floor(e)===e||0>(e+"")?.indexOf?.("."))return 0;const t=(""+e).split(".")?.[1];return t?.length??0}function c(e,t){return"string"==typeof e&&RegExp(t).test(e)}function l(e,t){const i=new Map;return function(){for(var s=arguments.length,r=Array(s),n=0;s>n;n++)r[n]=arguments[n];const o=t?t(...r):JSON.stringify(r);return i.has(o)?i.get(o):(()=>{const result=e(...r);return i.set(o,result),result})()}}class u{constructor(e){this.jsonString=!1,this._initialized=!1,this._cmi_element=e}get initialized(){return this._initialized}initialize(){this._initialized=!0}}class h extends u{get start_time(){return this._start_time}setStartTime(){if(void 0!==this._start_time)throw Error("Start time has already been set.");this._start_time=(new Date).getTime()}}class d extends Error{constructor(e,t){super(`${e} : ${""+t}`),this._errorCode=t,Object.setPrototypeOf(this,d.prototype)}get errorCode(){return this._errorCode}}class m extends d{constructor(e,t,i,s){super(e,t),this._detailedMessage="",this.message=`${e} : ${i}`,this._errorMessage=i,s&&(this._detailedMessage=s),Object.setPrototypeOf(this,m.prototype)}get errorMessage(){return this._errorMessage}get detailedMessage(){return this._detailedMessage}}const p="true",_="false",g="raw,min,max",v="id,score,status",S={0:{basicMessage:"No Error",detailMessage:"No error occurred, the previous API call was successful."},101:{basicMessage:"General Exception",detailMessage:"No specific error code exists to describe the error."},201:{basicMessage:"Invalid argument error",detailMessage:"Indicates that an argument represents an invalid data model element or is otherwise incorrect."},202:{basicMessage:"Element cannot have children",detailMessage:'Indicates that LMSGetValue was called with a data model element name that ends in "_children" for a data model element that does not support the "_children" suffix.'},203:{basicMessage:"Element not an array - cannot have count",detailMessage:'Indicates that LMSGetValue was called with a data model element name that ends in "_count" for a data model element that does not support the "_count" suffix.'},301:{basicMessage:"Not initialized",detailMessage:"Indicates that an API call was made before the call to lmsInitialize."},401:{basicMessage:"Not implemented error",detailMessage:"The data model element indicated in a call to LMSGetValue or LMSSetValue is valid, but was not implemented by this LMS. SCORM 1.2 defines a set of data model elements as being optional for an LMS to implement."},402:{basicMessage:"Invalid set value, element is a keyword",detailMessage:'Indicates that LMSSetValue was called on a data model element that represents a keyword (elements that end in "_children" and "_count").'},403:{basicMessage:"Element is read only",detailMessage:"LMSSetValue was called with a data model element that can only be read."},404:{basicMessage:"Element is write only",detailMessage:"LMSGetValue was called on a data model element that can only be written to."},405:{basicMessage:"Incorrect Data Type",detailMessage:"LMSSetValue was called with a value that is not consistent with the data format of the supplied data model element."},407:{basicMessage:"Element Value Out Of Range",detailMessage:"The numeric value supplied to a LMSSetValue call is outside of the numeric range allowed for the supplied data model element."},408:{basicMessage:"Data Model Dependency Not Established",detailMessage:"Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element."}},f={cmi_children:"_version,comments_from_learner,comments_from_lms,completion_status,completion_threshold,credit,entry,exit,interactions,launch_data,learner_id,learner_name,learner_preference,location,max_time_allowed,mode,objectives,progress_measure,scaled_passing_score,score,session_time,success_status,suspend_data,time_limit_action,total_time",comments_children:"comment,timestamp,location",score_children:"max,raw,scaled,min",objectives_children:"progress_measure,completion_status,success_status,description,score,id",correct_responses_children:"pattern",student_preference_children:"audio_level,audio_captioning,delivery_speed,language",interactions_children:"id,type,objectives,timestamp,correct_responses,weighting,learner_response,result,latency,description",adl_data_children:"id,store",error_descriptions:{0:{basicMessage:"No Error",detailMessage:"No error occurred, the previous API call was successful."},101:{basicMessage:"General Exception",detailMessage:"No specific error code exists to describe the error."},102:{basicMessage:"General Initialization Failure",detailMessage:"Call to Initialize failed for an unknown reason."},103:{basicMessage:"Already Initialized",detailMessage:"Call to Initialize failed because Initialize was already called."},104:{basicMessage:"Content Instance Terminated",detailMessage:"Call to Initialize failed because Terminate was already called."},111:{basicMessage:"General Termination Failure",detailMessage:"Call to Terminate failed for an unknown reason."},112:{basicMessage:"Termination Before Initialization",detailMessage:"Call to Terminate failed because it was made before the call to Initialize."},113:{basicMessage:"Termination After Termination",detailMessage:"Call to Terminate failed because Terminate was already called."},122:{basicMessage:"Retrieve Data Before Initialization",detailMessage:"Call to GetValue failed because it was made before the call to Initialize."},123:{basicMessage:"Retrieve Data After Termination",detailMessage:"Call to GetValue failed because it was made after the call to Terminate."},132:{basicMessage:"Store Data Before Initialization",detailMessage:"Call to SetValue failed because it was made before the call to Initialize."},133:{basicMessage:"Store Data After Termination",detailMessage:"Call to SetValue failed because it was made after the call to Terminate."},142:{basicMessage:"Commit Before Initialization",detailMessage:"Call to Commit failed because it was made before the call to Initialize."},143:{basicMessage:"Commit After Termination",detailMessage:"Call to Commit failed because it was made after the call to Terminate."},201:{basicMessage:"General Argument Error",detailMessage:"An invalid argument was passed to an API method (usually indicates that Initialize, Commit or Terminate did not receive the expected empty string argument."},301:{basicMessage:"General Get Failure",detailMessage:"Indicates a failed GetValue call where no other specific error code is applicable. Use GetDiagnostic for more information."},351:{basicMessage:"General Set Failure",detailMessage:"Indicates a failed SetValue call where no other specific error code is applicable. Use GetDiagnostic for more information."},391:{basicMessage:"General Commit Failure",detailMessage:"Indicates a failed Commit call where no other specific error code is applicable. Use GetDiagnostic for more information."},401:{basicMessage:"Undefined Data Model Element",detailMessage:"The data model element name passed to GetValue or SetValue is not a valid SCORM data model element."},402:{basicMessage:"Unimplemented Data Model Element",detailMessage:"The data model element indicated in a call to GetValue or SetValue is valid, but was not implemented by this LMS. In SCORM 2004, this error would indicate an LMS that is not fully SCORM conformant."},403:{basicMessage:"Data Model Element Value Not Initialized",detailMessage:"Attempt to read a data model element that has not been initialized by the LMS or through a SetValue call. This error condition is often reached during normal execution of a SCO."},404:{basicMessage:"Data Model Element Is Read Only",detailMessage:"SetValue was called with a data model element that can only be read."},405:{basicMessage:"Data Model Element Is Write Only",detailMessage:"GetValue was called on a data model element that can only be written to."},406:{basicMessage:"Data Model Element Type Mismatch",detailMessage:"SetValue was called with a value that is not consistent with the data format of the supplied data model element."},407:{basicMessage:"Data Model Element Value Out Of Range",detailMessage:"The numeric value supplied to a SetValue call is outside of the numeric range allowed for the supplied data model element."},408:{basicMessage:"Data Model Dependency Not Established",detailMessage:"Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element."}}},y=S;class b extends m{constructor(e,t){!{}.hasOwnProperty.call(y,t+"")?super(e,101,y[101]?.basicMessage,y[101]?.detailMessage):super(e,t,y[t+""]?.basicMessage||"Unknown error",y[t+""]?.detailMessage),Object.setPrototypeOf(this,b.prototype)}}const C=f.error_descriptions;class A extends m{constructor(e,t){!{}.hasOwnProperty.call(C,t+"")?super(e,101,C[101]?.basicMessage,C[101]?.detailMessage):super(e,t,C[t+""]?.basicMessage||"Unknown error",C[t+""]?.detailMessage),Object.setPrototypeOf(this,A.prototype)}}const E={GENERAL:101,INITIALIZATION_FAILED:101,INITIALIZED:101,TERMINATED:101,TERMINATION_FAILURE:101,TERMINATION_BEFORE_INIT:101,MULTIPLE_TERMINATION:101,RETRIEVE_BEFORE_INIT:101,RETRIEVE_AFTER_TERM:101,STORE_BEFORE_INIT:101,STORE_AFTER_TERM:101,COMMIT_BEFORE_INIT:101,COMMIT_AFTER_TERM:101,ARGUMENT_ERROR:101,CHILDREN_ERROR:101,COUNT_ERROR:101,GENERAL_GET_FAILURE:101,GENERAL_SET_FAILURE:101,GENERAL_COMMIT_FAILURE:101,UNDEFINED_DATA_MODEL:101,UNIMPLEMENTED_ELEMENT:101,VALUE_NOT_INITIALIZED:101,INVALID_SET_VALUE:101,READ_ONLY_ELEMENT:101,WRITE_ONLY_ELEMENT:101,TYPE_MISMATCH:101,VALUE_OUT_OF_RANGE:101,DEPENDENCY_NOT_ESTABLISHED:101},M={...E,RETRIEVE_BEFORE_INIT:301,STORE_BEFORE_INIT:301,COMMIT_BEFORE_INIT:301,ARGUMENT_ERROR:201,CHILDREN_ERROR:202,COUNT_ERROR:203,UNDEFINED_DATA_MODEL:401,UNIMPLEMENTED_ELEMENT:401,VALUE_NOT_INITIALIZED:301,INVALID_SET_VALUE:402,READ_ONLY_ELEMENT:403,WRITE_ONLY_ELEMENT:404,TYPE_MISMATCH:405,VALUE_OUT_OF_RANGE:407,DEPENDENCY_NOT_ESTABLISHED:408},w={...E,INITIALIZATION_FAILED:102,INITIALIZED:103,TERMINATED:104,TERMINATION_FAILURE:111,TERMINATION_BEFORE_INIT:112,MULTIPLE_TERMINATION:113,MULTIPLE_TERMINATIONS:113,RETRIEVE_BEFORE_INIT:122,RETRIEVE_AFTER_TERM:123,STORE_BEFORE_INIT:132,STORE_AFTER_TERM:133,COMMIT_BEFORE_INIT:142,COMMIT_AFTER_TERM:143,ARGUMENT_ERROR:201,GENERAL_GET_FAILURE:301,GENERAL_SET_FAILURE:351,GENERAL_COMMIT_FAILURE:391,UNDEFINED_DATA_MODEL:401,UNIMPLEMENTED_ELEMENT:402,VALUE_NOT_INITIALIZED:403,READ_ONLY_ELEMENT:404,WRITE_ONLY_ELEMENT:405,TYPE_MISMATCH:406,VALUE_OUT_OF_RANGE:407,DEPENDENCY_NOT_ESTABLISHED:408};class R extends u{constructor(e){super(e.CMIElement),this.__children=e.children,this._errorCode=e.errorCode??M.GENERAL,this._errorClass=e.errorClass||d,this.childArray=[]}reset(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this._initialized=!1,e)this.childArray=[];else for(let e=0;this.childArray.length>e;e++)this.childArray[e]?.reset()}get _children(){return this.__children}set _children(_children){throw new this._errorClass(this._cmi_element+"._children",this._errorCode)}get _count(){return this.childArray.length}set _count(_count){throw new this._errorClass(this._cmi_element+"._count",this._errorCode)}toJSON(){this.jsonString=!0;const result={};for(let e=0;this.childArray.length>e;e++)result[e+""]=this.childArray[e];return this.jsonString=!1,result}}const O="unknown",T="true",I="false",N="passed",j="failed",x="unknown",D="completed",L="incomplete",q="unknown",P={_:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,NONE:5},z={autocommit:!1,autocommitSeconds:10,throttleCommits:!1,useAsynchronousCommits:!1,sendFullCommit:!0,lmsCommitUrl:!1,dataCommitFormat:"json",commitRequestDataType:"application/json;charset=UTF-8",autoProgress:!1,logLevel:P.ERROR,selfReportSessionTime:!1,alwaysSendTotalTime:!1,renderCommonCommitFields:!1,autoCompleteLessonStatus:!1,strict_errors:!0,xhrHeaders:{},xhrWithCredentials:!1,fetchMode:"cors",asyncModeBeaconBehavior:"never",responseHandler:async function(e){if(void 0!==e){let t=null;try{if("function"==typeof e.json)t=await e.json();else if("function"==typeof e.text){const i=await e.text();i&&(t=JSON.parse(i))}}catch(e){}return null!==t&&{}.hasOwnProperty.call(t,"result")?{result:t.result,errorCode:"number"==typeof t.errorCode?t.errorCode:!0===t.result||t.result===p?0:101}:200===e.status?{result:p,errorCode:0}:{result:_,errorCode:101}}return{result:_,errorCode:101}},xhrResponseHandler:function(e){if(void 0!==e){let t=null;if(200>e.status||e.status>299)return{result:_,errorCode:101};try{t=JSON.parse(e.responseText)}catch(e){}return null!==t&&{}.hasOwnProperty.call(t,"result")?{result:t.result,errorCode:"number"==typeof t.errorCode?t.errorCode:!0===t.result||t.result===p?0:101}:{result:p,errorCode:0}}return{result:_,errorCode:101}},requestHandler:function(e){return e},onLogMessage:F,mastery_override:!1,score_overrides_status:!1,completion_status_on_failed:"completed",scoItemIds:[],scoItemIdValidator:!1,globalObjectiveIds:[],enableOfflineSupport:!1,courseId:"",syncOnInitialize:!0,syncOnTerminate:!0,maxSyncAttempts:5,scoId:"",autoPopulateCommitMetadata:!1,httpService:null,globalStudentPreferences:!1};function F(e,t){switch(e){case"4":case 4:case"ERROR":case P.ERROR:console.error(t);break;case"3":case 3:case"WARN":case P.WARN:console.warn(t);break;case"2":case 2:case"INFO":case P.INFO:console.info(t);break;case"1":case 1:case"DEBUG":case P.DEBUG:console.debug?console.debug(t):console.log(t)}}const k="^[\\s\\S]{0,255}$",V="^([0-9]+):([0-9]{2}):([0-9]{2})(\\.\\d{1,2})?$",H="^-?([0-9]+)$",B="^-?([0-9]{0,10})(\\.[0-9]*)?$",U="^[\\u0021-\\u007E\\s]{0,255}$",$="^.*$",G="^(passed|completed|failed|incomplete|browsed|not attempted)$",Y="0#100",W="^[\\u0000-\\uFFFF]{0,4000}$",J="^[\\u0000-\\uFFFF]{0,64000}$",K="^({lang=([a-zA-Z]{1,8}|i|x)(-[a-zA-Z0-9-]{2,8})?})?((?!{.*$).{0,250}$)?$",X="^({lang=([a-zA-Z]{1,8}|i|x)(-[a-zA-Z0-9-]{2,8})?})?((?!{.*$).{0,4000}$)?$",Q="^(19[7-9][0-9]|[2-9][0-9]{3})((-(0[1-9]|1[0-2]))((-(0[1-9]|[1-2][0-9]|3[0-1]))(T([0-1][0-9]|2[0-3])((:[0-5][0-9])((:[0-5][0-9])((\\.[0-9]{1,6})((Z|([+|-]([0-1][0-9]|2[0-3])))(:[0-5][0-9])?)?)?)?)?)?)?)?$",Z="^P(?:([.,\\d]+)Y)?(?:([.,\\d]+)M)?(?:([.,\\d]+)W)?(?:([.,\\d]+)D)?(?:T?(?:([.,\\d]+)H)?(?:([.,\\d]+)M)?(?:(\\d+(?:\\.\\d{1,2})?)S)?)?$",ee="^-?([0-9]{1,10})(\\.[0-9]{1,18})?$",te="^(?=.*\\w)[\\w\\-\\(\\)\\+\\.\\:\\=\\@\\;\\$\\_\\!\\*\\'\\%\\/\\#]{1,250}$",ie="^(?:(?!urn:)\\S{1,4000}|urn:[A-Za-z0-9-]{1,31}:\\S{1,4000}|.{1,4000})$",se="^(completed|incomplete|not attempted|unknown)$",re="^(passed|failed|unknown)$",ne="^(_?(start|resumeAll|previous|continue|exit|exitAll|abandon|abandonAll|suspendAll|retry|retryAll)|_none_|(\\{target=(?<choice_target>\\S{0,}[a-zA-Z0-9-_]+)})?choice|(\\{target=(?<jump_target>\\S{0,}[a-zA-Z0-9-_]+)})?jump)$",oe="^(unknown|true|false)$",ae="^{target=\\S{0,}[a-zA-Z0-9-_]+}$",ce={"true-false":{format:"^true$|^false$",max:1,delimiter:"",unique:!1},choice:{format:ie,max:36,delimiter:"[,]",unique:!0},"fill-in":{format:K,max:10,delimiter:"[,]",unique:!1},"long-fill-in":{format:X,max:1,delimiter:"",unique:!1},matching:{format:te,format2:te,max:36,delimiter:"[,]",delimiter2:"[.]",unique:!1},performance:{format:"^$|"+te,format2:ee+"|^$|"+te,max:250,delimiter:"[,]",delimiter2:"[.]",unique:!1},sequencing:{format:te,max:36,delimiter:"[,]",unique:!1},likert:{format:te,max:1,delimiter:"",unique:!1},numeric:{format:ee,max:1,delimiter:"",unique:!1},other:{format:W,max:1,delimiter:"",unique:!1}},le={"true-false":{max:1,delimiter:"",unique:!1,duplicate:!1,format:"^true$|^false$",limit:1},choice:{max:36,delimiter:"[,]",unique:!0,duplicate:!1,format:ie},"fill-in":{max:10,delimiter:"[,]",unique:!1,duplicate:!1,format:"^(({lang=([a-zA-Z]{1,8}|i|x)?(-[a-zA-Z0-9-]{2,8})?})?(.{0,250})?)?$"},"long-fill-in":{max:1,delimiter:"",unique:!1,duplicate:!0,format:X},matching:{max:36,delimiter:"[,]",delimiter2:"[.]",unique:!1,duplicate:!1,format:te,format2:te},performance:{max:250,delimiter:"[,]",delimiter2:"[.]",unique:!1,duplicate:!1,format:te,format2:`^(${te})$|^(?:\\d+(?:\\.\\d+)?(?::\\d+(?:\\.\\d+)?)?)$`},sequencing:{max:36,delimiter:"[,]",unique:!1,duplicate:!1,format:te},likert:{max:1,delimiter:"",unique:!1,duplicate:!1,format:te,limit:1},numeric:{max:2,delimiter:"[:]",unique:!1,duplicate:!1,format:ee,limit:1},other:{max:1,delimiter:"",unique:!1,duplicate:!1,format:W,limit:1}},ue=["aa","ab","ae","af","ak","am","an","ar","as","av","ay","az","ba","be","bg","bh","bi","bm","bn","bo","br","bs","ca","ce","ch","co","cr","cs","cu","cv","cy","da","de","dv","dz","ee","el","en","eo","es","et","eu","fa","ff","fi","fj","fo","fr","fy","ga","gd","gl","gn","gu","gv","ha","he","hi","ho","hr","ht","hu","hy","hz","ia","id","ie","ig","ii","ik","io","is","it","iu","ja","jv","ka","kg","ki","kj","kk","kl","km","kn","ko","kr","ks","ku","kv","kw","ky","la","lb","lg","li","ln","lo","lt","lu","lv","mg","mh","mi","mk","ml","mn","mo","mr","ms","mt","my","na","nb","nd","ne","ng","nl","nn","no","nr","nv","ny","oc","oj","om","or","os","pa","pi","pl","ps","pt","qu","rm","rn","ro","ru","rw","sa","sc","sd","se","sg","sh","si","sk","sl","sm","sn","so","sq","sr","ss","st","su","sv","sw","ta","te","tg","th","ti","tk","tl","tn","to","tr","ts","tt","tw","ty","ug","uk","ur","uz","ve","vi","vo","wa","wo","xh","yi","yo","za","zh","zu","aar","abk","ave","afr","aka","amh","arg","ara","asm","ava","aym","aze","bak","bel","bul","bih","bis","bam","ben","tib","bod","bre","bos","cat","che","cha","cos","cre","cze","ces","chu","chv","wel","cym","dan","ger","deu","div","dzo","ewe","gre","ell","eng","epo","spa","est","baq","eus","per","fas","ful","fin","fij","fao","fre","fra","fry","gle","gla","glg","grn","guj","glv","hau","heb","hin","hmo","hrv","hat","hun","arm","hye","her","ina","ind","ile","ibo","iii","ipk","ido","ice","isl","ita","iku","jpn","jav","geo","kat","kon","kik","kua","kaz","kal","khm","kan","kor","kau","kas","kur","kom","cor","kir","lat","ltz","lug","lim","lin","lao","lit","lub","lav","mlg","mah","mao","mri","mac","mkd","mal","mon","mol","mar","may","msa","mlt","bur","mya","nau","nob","nde","nep","ndo","dut","nld","nno","nor","nbl","nav","nya","oci","oji","orm","ori","oss","pan","pli","pol","pus","por","que","roh","run","rum","ron","rus","kin","san","srd","snd","sme","sag","slo","sin","slk","slv","smo","sna","som","alb","sqi","srp","ssw","sot","sun","swe","swa","tam","tel","tgk","tha","tir","tuk","tgl","tsn","ton","tur","tso","tat","twi","tah","uig","ukr","urd","uzb","ven","vie","vol","wln","wol","xho","yid","yor","zha","chi","zho","zul"];class he{constructor(e,t,i){this._cancelled=!1,this._API=e,this._timeout=setTimeout(this.wrapper.bind(this),t),this._callback=i}cancel(){this._cancelled=!0,this._timeout&&clearTimeout(this._timeout)}wrapper(){this._cancelled||this._API.isInitialized()&&(async()=>{await this._API.commit(this._callback)})()}}const de=["continue","previous","exit","exitAll","abandon","abandonAll","suspendAll"];var me=(e=>(e.NOT="not",e.AND="and",e.OR="or",e))(me||{}),pe=(e=>(e.SKIP="skip",e.DISABLED="disabled",e.HIDE_FROM_CHOICE="hiddenFromChoice",e.STOP_FORWARD_TRAVERSAL="stopForwardTraversal",e.EXIT_PARENT="exitParent",e.EXIT_ALL="exitAll",e.RETRY="retry",e.RETRY_ALL="retryAll",e.CONTINUE="continue",e.PREVIOUS="previous",e.EXIT="exit",e))(pe||{});const _e=class e extends u{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"always",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new Map;super("ruleCondition"),this._condition="always",this._operator=null,this._parameters=new Map,this._referencedObjective=null,this._condition=e,this._operator=t,this._parameters=i}static setNowProvider(t){"function"==typeof t&&(e._now=t)}static setElapsedSecondsHook(t){e._getElapsedSecondsHook=t}reset(){this._initialized=!1,this._condition="always",this._operator=null,this._parameters=new Map}get condition(){return this._condition}set condition(e){this._condition=e}get operator(){return this._operator}set operator(e){this._operator=e}get parameters(){return this._parameters}set parameters(e){this._parameters=e}get referencedObjective(){return this._referencedObjective}set referencedObjective(e){this._referencedObjective=e}resolveReferencedObjective(e){return this._referencedObjective?e.primaryObjective?.id===this._referencedObjective?e.primaryObjective:(e.objectives||[]).find(e=>e.id===this._referencedObjective)||null:null}evaluate(e){let result;const t=this.resolveReferencedObjective(e);switch(this._condition){case"satisfied":case"objectiveSatisfied":result=t?!0===t.satisfiedStatus:e.successStatus===N||!0===e.objectiveSatisfiedStatus;break;case"objectiveStatusKnown":case"objectiveMeasureKnown":result=t?!!t.measureStatus:!!e.objectiveMeasureStatus;break;case"objectiveMeasureGreaterThan":{const i=this._parameters.get("threshold")||0;result=!!(t?t.measureStatus:e.objectiveMeasureStatus)&&(t?t.normalizedMeasure:e.objectiveNormalizedMeasure)>i;break}case"objectiveMeasureLessThan":{const i=this._parameters.get("threshold")||0;result=!!(t?t.measureStatus:e.objectiveMeasureStatus)&&i>(t?t.normalizedMeasure:e.objectiveNormalizedMeasure);break}case"completed":case"activityCompleted":result=t?t.completionStatus===D:e.isCompleted;break;case"progressKnown":case"activityProgressKnown":result=t?t.completionStatus!==q:"unknown"!==e.completionStatus;break;case"attempted":result=e.attemptCount>0;break;case"attemptLimitExceeded":result=e.hasAttemptLimitExceeded();break;case"timeLimitExceeded":result=this.evaluateTimeLimitExceeded(e);break;case"outsideAvailableTimeRange":result=this.evaluateOutsideAvailableTimeRange(e);break;case"always":result=!0;break;default:result=!1}return"not"===this._operator&&(result=!result),result}evaluateTimeLimitExceeded(t){let i=t.timeLimitDuration;if(!i&&t.attemptAbsoluteDurationLimit&&(i=t.attemptAbsoluteDurationLimit),!i)return!1;const s=r(i,Z);if(0>=s)return!1;let n=0;if(e._getElapsedSecondsHook)try{const i=e._getElapsedSecondsHook(t);"number"!=typeof i||Number.isNaN(i)||0>i||(n=i)}catch{n=0}if(0===n&&t.attemptExperiencedDuration){const e=r(t.attemptExperiencedDuration,Z);e>0&&(n=e)}if(0===n&&t.attemptAbsoluteStartTime)try{const i=new Date(t.attemptAbsoluteStartTime).getTime(),s=e._now().getTime();Number.isNaN(i)||Number.isNaN(s)||i>s||(n=(s-i)/1e3)}catch{n=0}return n>s}evaluateOutsideAvailableTimeRange(t){const i=t.beginTimeLimit,s=t.endTimeLimit;if(!i&&!s)return!1;const r=e._now();return!(!i||r>=new Date(i))||!(!s||new Date(s)>=r)}parseISO8601Duration(e){return 1e3*r(e,Z)}toJSON(){this.jsonString=!0;const result={condition:this._condition,operator:this._operator,parameters:Object.fromEntries(this._parameters)};return this.jsonString=!1,result}};_e._now=()=>new Date,_e._getElapsedSecondsHook=void 0;let ge=_e;class ve extends u{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"skip",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"and";super("sequencingRule"),this._conditions=[],this._action="skip",this._conditionCombination="and",this._action=e,this._conditionCombination=t}reset(){this._initialized=!1,this._conditions=[],this._action="skip",this._conditionCombination="and"}get conditions(){return this._conditions}addCondition(e){if(!(e instanceof ge))throw new A(this._cmi_element+".conditions",w.TYPE_MISMATCH);this._conditions.includes(e)||this._conditions.push(e)}removeCondition(e){if(!(e instanceof ge))throw new A(this._cmi_element+".conditions",w.TYPE_MISMATCH);const t=this._conditions.indexOf(e);return-1!==t&&(this._conditions.splice(t,1),!0)}get action(){return this._action}set action(e){this._action=e}get conditionCombination(){return this._conditionCombination}set conditionCombination(e){this._conditionCombination=e}evaluate(e){return 0===this._conditions.length||("all"===this._conditionCombination||"and"===this._conditionCombination?this._conditions.every(t=>t.evaluate(e)):("any"===this._conditionCombination||"or"===this._conditionCombination)&&this._conditions.some(t=>t.evaluate(e)))}toJSON(){this.jsonString=!0;const result={conditions:this._conditions,action:this._action,conditionCombination:this._conditionCombination};return this.jsonString=!1,result}}class Se extends u{constructor(){super("sequencingRules"),this._preConditionRules=[],this._exitConditionRules=[],this._postConditionRules=[]}reset(){this._initialized=!1,this._preConditionRules=[],this._exitConditionRules=[],this._postConditionRules=[]}get preConditionRules(){return this._preConditionRules}addPreConditionRule(e){if(!(e instanceof ve))throw new A(this._cmi_element+".preConditionRules",w.TYPE_MISMATCH);this._preConditionRules.push(e)}get exitConditionRules(){return this._exitConditionRules}addExitConditionRule(e){if(!(e instanceof ve))throw new A(this._cmi_element+".exitConditionRules",w.TYPE_MISMATCH);this._exitConditionRules.push(e)}get postConditionRules(){return this._postConditionRules}addPostConditionRule(e){if(!(e instanceof ve))throw new A(this._cmi_element+".postConditionRules",w.TYPE_MISMATCH);this._postConditionRules.push(e)}evaluatePreConditionRules(e){for(const t of this._preConditionRules)if(t.evaluate(e))return t.action;return null}evaluateExitConditionRules(e){for(const t of this._exitConditionRules)if(t.evaluate(e))return t.action;return null}evaluatePostConditionRules(e){for(const t of this._postConditionRules)if(t.evaluate(e))return t.action;return null}toJSON(){this.jsonString=!0;const result={preConditionRules:this._preConditionRules,exitConditionRules:this._exitConditionRules,postConditionRules:this._postConditionRules};return this.jsonString=!1,result}}class fe{constructor(e){this.activityTree=e}isInTree(e){return this.activityTree.getAllActivities().includes(e)}isAncestorOf(e,t){let i=t;for(;i;){if(i===e)return!0;i=i.parent}return!1}findCommonAncestor(e,t){if(!e||!t)return null;const i=[];let s=e;for(;s;)i.push(s),s=s.parent;for(s=t;s;){if(i.includes(s))return s;s=s.parent}return null}findChildInPath(e,t){let i=t;for(;i&&i.parent;){if(i.parent===e)return i;i=i.parent}return null}isLastInTree(e){if(e.children.length>0)return!1;let t=e;for(;t;){if(this.activityTree.getNextSibling(t))return!1;t=t.parent}return!0}getCurrentInParent(e){if(e.children)for(const t of e.children)if(t.isActive)return t;return null}isMandatory(e){if(e.sequencingRules&&e.sequencingRules.preConditionRules)for(const t of e.sequencingRules.preConditionRules)if("skip"===t.action&&t.conditions&&0===t.conditions.length)return!1;return!0===e.mandatory}isCompleted(e){return"completed"===e.completionStatus||"passed"===e.completionStatus||"passed"===e.successStatus}isAvailableForChoice(e){return e.isVisible&&!e.isHiddenFromChoice&&e.isAvailable&&(!e.sequencingControls||e.sequencingControls.choice)}getAncestors(e){const t=[];let i=e.parent;for(;i;)t.push(i),i=i.parent;return t}getPathToRoot(e){const t=[e];let i=e.parent;for(;i;)t.push(i),i=i.parent;return t}isLeaf(e){return 0===e.children.length}isCluster(e){return e.children.length>0}getDepth(e){let t=0,i=e.parent;for(;i;)t++,i=i.parent;return t}}class ye{constructor(e,t){this.activityTree=e,this.treeQueries=t}validateChoice(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!this.treeQueries.isInTree(t))return{valid:!1,exception:"SB.2.9-2"};if(t===this.activityTree.root)return{valid:!1,exception:"SB.2.9-3"};const s=this.validatePathToRoot(t);if(!s.valid)return s;if(i.checkAvailability&&!t.isAvailable)return{valid:!1,exception:"SB.2.9-7"};if(!e)return{valid:!0,exception:null};const r=this.validateChoiceExit(e,t);if(!r.valid)return r;const n=this.validateAncestorConstraints(e,t);return n.valid?{valid:!0,exception:null}:n}validatePathToRoot(e){let t=e;for(;t;){if(t.isHiddenFromChoice)return{valid:!1,exception:"SB.2.9-4"};if(t.parent&&!t.parent.sequencingControls.choice)return{valid:!1,exception:"SB.2.9-5"};if(t.parent&&t.parent.sequencingControls.preventActivation&&0===e.attemptCount&&!e.isActive)return{valid:!1,exception:"SB.2.9-6"};t=t.parent}return{valid:!0,exception:null}}validateChoiceExit(e,t){let i=e.parent;for(;i;){if(i.isActive&&!i.sequencingControls.choiceExit){if(!this.treeQueries.isAncestorOf(i,t))return{valid:!1,exception:"SB.2.9-8"};break}i=i.parent}return{valid:!0,exception:null}}validateAncestorConstraints(e,t){let i=t.parent;for(;i;){const s=this.validateConstraintsAtLevel(i,e,t);if(!s.valid)return s;i=i.parent}return{valid:!0,exception:null}}validateConstraintsAtLevel(e,t,i){const s=this.treeQueries.findChildInPath(e,i),r=this.treeQueries.findChildInPath(e,t);if(!s||!r)return{valid:!0,exception:null};const n=e.children,o=n.indexOf(s),a=n.indexOf(r);if(-1===o||-1===a)return{valid:!0,exception:null};if(e.sequencingControls.forwardOnly&&a>o)return{valid:!1,exception:"SB.2.9-5"};if(o>a)for(let e=a+1;o>e;e++){const t=n[e];if(t&&this.treeQueries.isMandatory(t)&&!this.treeQueries.isCompleted(t))return{valid:!1,exception:"SB.2.9-6"}}if(e.sequencingControls.constrainChoice){if(o>a+1)return{valid:!1,exception:"SB.2.9-7"};if(a>o&&"completed"!==i.completionStatus&&"passed"!==i.completionStatus)return{valid:!1,exception:"SB.2.9-7"}}return e.sequencingControls.preventActivation&&0===i.attemptCount&&!i.isActive?{valid:!1,exception:"SB.2.9-6"}:{valid:!0,exception:null}}checkForwardOnlyViolation(e){let t=e.parent;for(;t;){if(t.sequencingControls.forwardOnly)return{valid:!1,exception:"SB.2.9-5"};t=t.parent}return{valid:!0,exception:null}}isAvailableForChoice(e){return this.treeQueries.isAvailableForChoice(e)}validateFlowConstraints(e,t){const i=[];for(const s of t)this.meetsFlowConstraints(s,e)&&i.push(s);return{valid:i.length>0,validChildren:i}}meetsFlowConstraints(e,t){return!(!e.isAvailable||e.isHiddenFromChoice)&&(!t.sequencingControls.constrainChoice||this.validateConstrainChoiceForFlow(e,t))}validateConstrainChoiceForFlow(e,t){if(!t.sequencingControls||!t.sequencingControls.constrainChoice)return!0;const i=t.children;if(!i||0===i.length)return!0;const s=i.indexOf(e);if(-1===s)return!1;const r=this.treeQueries.getCurrentInParent(t);if(!r)return this.isAvailableForChoice(e);const n=i.indexOf(r);return-1===n||(t.sequencingControls.flow?t.sequencingControls.forwardOnly&&n>s?"completed"===e.completionStatus||"passed"===e.completionStatus:n>s?n>s&&("completed"===e.completionStatus||"passed"===e.completionStatus)&&this.isAvailableForChoice(e):(s===n||s===n+1)&&this.isAvailableForChoice(e):this.isAvailableForChoice(e)&&("completed"===e.completionStatus||"unknown"===e.completionStatus||"incomplete"===e.completionStatus))}validateTraversalConstraints(e){let t=!0,i=!0;return e.parent?.sequencingControls.constrainChoice&&(t=this.evaluateConstrainChoiceForTraversal(e)),e.sequencingControls&&e.sequencingControls.stopForwardTraversal&&(i=!1),e.parent?.sequencingControls.forwardOnly&&(i=this.evaluateForwardOnlyForChoice(e)),{canTraverse:t,canTraverseInto:i}}evaluateConstrainChoiceForTraversal(e){if(!e.parent)return!0;let t=e.parent;for(;t;){if(t.sequencingControls&&t.sequencingControls.constrainChoice){const i=t.children,s=this.treeQueries.findChildInPath(t,e);if(s){const r=i.indexOf(s),n=this.treeQueries.getCurrentInParent(t);if(n){const s=i.indexOf(n);if(-1!==s&&-1!==r){if(r>s)for(let e=s+1;r>e;e++){const t=i[e];if(t&&this.treeQueries.isMandatory(t)&&!this.treeQueries.isCompleted(t))return!1}if(t.sequencingControls.forwardOnly&&s>r&&!this.treeQueries.isCompleted(e))return!1}}}}t=t.parent}return this.isAvailableForChoice(e)}evaluateForwardOnlyForChoice(e){if(!e.parent)return!0;const t=e.parent;if(!t.sequencingControls||!t.sequencingControls.forwardOnly)return!0;const i=t.children;if(!i||0===i.length)return!0;const s=i.indexOf(e);if(-1===s)return!1;const r=this.treeQueries.getCurrentInParent(t);if(!r)return this.isAvailableForChoice(e);const n=i.indexOf(r);return-1===n||(n>s?!("completed"!==e.completionStatus&&"passed"!==e.completionStatus||!e.sequencingControls||!e.sequencingControls.choice):this.isAvailableForChoice(e))}hasTimeBoundaryViolation(e,t){if(e.beginTimeLimit)try{if(new Date(e.beginTimeLimit)>t)return!0}catch{}if(e.endTimeLimit)try{if(t>new Date(e.endTimeLimit))return!0}catch{}return!1}hasAttemptLimitViolation(e){return!(!e.attemptLimit||e.attemptLimit>e.attemptCount)}}var be=(e=>(e.START="start",e.RESUME_ALL="resumeAll",e.CONTINUE="continue",e.PREVIOUS="previous",e.CHOICE="choice",e.JUMP="jump",e.EXIT="exit",e.EXIT_PARENT="exitParent",e.EXIT_ALL="exitAll",e.ABANDON="abandon",e.ABANDON_ALL="abandonAll",e.SUSPEND_ALL="suspendAll",e.RETRY="retry",e.RETRY_ALL="retryAll",e))(be||{}),Ce=(e=>(e.DELIVER="deliver",e.DO_NOT_DELIVER="doNotDeliver",e))(Ce||{});class Ae{constructor(){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];this.deliveryRequest=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"doNotDeliver",this.targetActivity=e,this.exception=t,this.endSequencingSession=i}}class Ee{constructor(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];this.identifiedActivity=e,this.deliverable=t,this.exception=i,this.endSequencingSession=s}}class Me{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.activity=e,this.exception=t}}var we=(e=>(e.FORWARD="forward",e.BACKWARD="backward",e))(we||{});class Re{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.now=e.now||(()=>new Date),this.getAttemptElapsedSecondsHook=e.getAttemptElapsedSecondsHook||null}checkSequencingRules(e,t){for(const i of t)if(this.checkRuleSubprocess(e,i))return i.action;return null}checkRuleSubprocess(e,t){if(0===t.conditions.length)return!0;const i=t.conditionCombination;return"all"===i||i===me.AND?t.conditions.every(t=>t.evaluate(e)):("any"===i||i===me.OR)&&t.conditions.some(t=>t.evaluate(e))}evaluateExitRules(e){const t=this.checkSequencingRules(e,e.sequencingRules.exitConditionRules);return t===pe.EXIT||t===pe.EXIT_PARENT||t===pe.EXIT_ALL?t:null}evaluatePostConditionAction(e){const t=this.checkSequencingRules(e,e.sequencingRules.postConditionRules);return t&&[pe.EXIT_PARENT,pe.EXIT_ALL,pe.RETRY,pe.RETRY_ALL,pe.CONTINUE,pe.PREVIOUS,pe.STOP_FORWARD_TRAVERSAL].includes(t)?t:null}evaluatePostConditions(e){const t=this.evaluatePostConditionAction(e);if(!t)return{sequencingRequest:null,terminationRequest:null};switch(t){case pe.EXIT_PARENT:return{sequencingRequest:null,terminationRequest:be.EXIT_PARENT};case pe.EXIT_ALL:return{sequencingRequest:null,terminationRequest:be.EXIT_ALL};case pe.RETRY:return{sequencingRequest:be.RETRY,terminationRequest:null};case pe.RETRY_ALL:return{sequencingRequest:be.RETRY,terminationRequest:be.EXIT_ALL};case pe.CONTINUE:return{sequencingRequest:be.CONTINUE,terminationRequest:null};case pe.PREVIOUS:return{sequencingRequest:be.PREVIOUS,terminationRequest:null};case pe.STOP_FORWARD_TRAVERSAL:return e.sequencingControls.stopForwardTraversal=!0,{sequencingRequest:null,terminationRequest:null};default:return{sequencingRequest:null,terminationRequest:null}}}checkLimitConditions(e){if(null!==e.attemptLimit&&e.attemptCount>=e.attemptLimit)return!0;if(null!==e.attemptAbsoluteDurationLimit){const t=this.parseDuration(e.attemptAbsoluteDurationLimit);if(t>0&&this.parseDuration(e.attemptExperiencedDuration)>=t)return!0}if(null!==e.activityAbsoluteDurationLimit){const t=this.parseDuration(e.activityAbsoluteDurationLimit);if(t>0&&this.parseDuration(e.activityExperiencedDuration)>=t)return!0}return!1}parseDuration(e){if(!e||"string"!=typeof e)return 0;const t=e.match(/^P(?:(\d+(?:\.\d+)?)Y)?(?:(\d+(?:\.\d+)?)M)?(?:(\d+(?:\.\d+)?)W)?(?:(\d+(?:\.\d+)?)D)?(?:T(?:(\d+(?:\.\d+)?)H)?(?:(\d+(?:\.\d+)?)M)?(?:(\d+(?:\.\d+)?)S)?)?$/);if(!t||"P"===e||e.endsWith("T"))return 0;let i=0;return i+=315576e5*parseFloat(t[1]||"0"),i+=30.44*24*parseFloat(t[2]||"0")*36e5,i+=6048e5*parseFloat(t[3]||"0"),i+=864e5*parseFloat(t[4]||"0"),i+=36e5*parseFloat(t[5]||"0"),i+=6e4*parseFloat(t[6]||"0"),i+=1e3*parseFloat(t[7]||"0"),i}getElapsedSeconds(e){if(this.getAttemptElapsedSecondsHook)try{return this.getAttemptElapsedSecondsHook(e)||0}catch{return 0}if(e.attemptAbsoluteStartTime){const t=new Date(e.attemptAbsoluteStartTime).getTime(),i=this.now().getTime();if(!Number.isNaN(t)&&i>t)return Math.max(0,(i-t)/1e3)}return 0}isTimeLimitExceeded(e){let t=e.timeLimitDuration;if(!t&&e.attemptAbsoluteDurationLimit&&(t=e.attemptAbsoluteDurationLimit),!t)return!1;const i=r(t,Z);return i>0&&this.getElapsedSeconds(e)>i}isOutsideAvailableTimeRange(e){const t=this.now();if(e.beginTimeLimit)try{const i=new Date(e.beginTimeLimit);if(!Number.isNaN(i.getTime())&&i>t)return!0}catch{}if(e.endTimeLimit)try{const i=new Date(e.endTimeLimit);if(!Number.isNaN(i.getTime())&&t>i)return!0}catch{}return!1}canDeliverActivity(e){if(this.checkLimitConditions(e))return{canDeliver:!1,wasSkipped:!1};const t=this.checkSequencingRules(e,e.sequencingRules.preConditionRules);return{canDeliver:t!==pe.SKIP&&t!==pe.DISABLED,wasSkipped:t===pe.SKIP}}}var Oe=(e=>(e.NEVER="never",e.ONCE="once",e.ON_EACH_NEW_ATTEMPT="onEachNewAttempt",e))(Oe||{}),Te=(e=>(e.NEVER="never",e.ONCE="once",e.ON_EACH_NEW_ATTEMPT="onEachNewAttempt",e))(Te||{});class Ie extends u{constructor(){super("sequencingControls"),this._enabled=!0,this._choice=!0,this._choiceExit=!0,this._flow=!0,this._forwardOnly=!1,this._useCurrentAttemptObjectiveInfo=!0,this._useCurrentAttemptProgressInfo=!0,this._preventActivation=!1,this._constrainChoice=!1,this._stopForwardTraversal=!1,this._rollupObjectiveSatisfied=!0,this._rollupProgressCompletion=!0,this._objectiveMeasureWeight=1,this._selectionTiming="never",this._selectCount=null,this._selectionCountStatus=!1,this._randomizeChildren=!1,this._randomizationTiming="never",this._reorderChildren=!1,this._completionSetByContent=!1,this._objectiveSetByContent=!1,this._tracked=!0}reset(){this._initialized=!1,this._enabled=!0,this._choice=!0,this._choiceExit=!0,this._flow=!0,this._forwardOnly=!1,this._useCurrentAttemptObjectiveInfo=!0,this._useCurrentAttemptProgressInfo=!0,this._preventActivation=!1,this._constrainChoice=!1,this._stopForwardTraversal=!1,this._rollupObjectiveSatisfied=!0,this._rollupProgressCompletion=!0,this._objectiveMeasureWeight=1,this._selectionTiming="never",this._selectCount=null,this._selectionCountStatus=!1,this._randomizeChildren=!1,this._randomizationTiming="never",this._reorderChildren=!1,this._completionSetByContent=!1,this._objectiveSetByContent=!1,this._tracked=!0}get enabled(){return this._enabled}set enabled(e){this._enabled=e}get choice(){return this._choice}set choice(e){this._choice=e}get choiceExit(){return this._choiceExit}set choiceExit(e){this._choiceExit=e}get flow(){return this._flow}set flow(e){this._flow=e}get forwardOnly(){return this._forwardOnly}set forwardOnly(e){this._forwardOnly=e}get useCurrentAttemptObjectiveInfo(){return this._useCurrentAttemptObjectiveInfo}set useCurrentAttemptObjectiveInfo(e){this._useCurrentAttemptObjectiveInfo=e}get useCurrentAttemptProgressInfo(){return this._useCurrentAttemptProgressInfo}set useCurrentAttemptProgressInfo(e){this._useCurrentAttemptProgressInfo=e}get preventActivation(){return this._preventActivation}set preventActivation(e){this._preventActivation=e}get constrainChoice(){return this._constrainChoice}set constrainChoice(e){this._constrainChoice=e}get stopForwardTraversal(){return this._stopForwardTraversal}set stopForwardTraversal(e){this._stopForwardTraversal=e}get rollupObjectiveSatisfied(){return this._rollupObjectiveSatisfied}set rollupObjectiveSatisfied(e){this._rollupObjectiveSatisfied=e}get rollupProgressCompletion(){return this._rollupProgressCompletion}set rollupProgressCompletion(e){this._rollupProgressCompletion=e}get objectiveMeasureWeight(){return this._objectiveMeasureWeight}set objectiveMeasureWeight(e){0>e||(this._objectiveMeasureWeight=e)}isChoiceNavigationAllowed(){return this._enabled&&!this._constrainChoice}isFlowNavigationAllowed(){return this._enabled&&this._flow}isForwardNavigationAllowed(){return this._enabled&&this._flow}isBackwardNavigationAllowed(){return this._enabled&&this._flow&&!this._forwardOnly}get selectionTiming(){return this._selectionTiming}set selectionTiming(e){this._selectionTiming=e}get selectCount(){return this._selectCount}set selectCount(e){(null===e||e>0)&&(this._selectCount=e)}get selectionCountStatus(){return this._selectionCountStatus}set selectionCountStatus(e){this._selectionCountStatus=e}get randomizeChildren(){return this._randomizeChildren}set randomizeChildren(e){this._randomizeChildren=e}get randomizationTiming(){return this._randomizationTiming}set randomizationTiming(e){this._randomizationTiming=e}get reorderChildren(){return this._reorderChildren}set reorderChildren(e){this._reorderChildren=e}get completionSetByContent(){return this._completionSetByContent}set completionSetByContent(e){this._completionSetByContent=e}get objectiveSetByContent(){return this._objectiveSetByContent}set objectiveSetByContent(e){this._objectiveSetByContent=e}get tracked(){return this._tracked}set tracked(e){this._tracked=e}toJSON(){this.jsonString=!0;const result={enabled:this._enabled,choice:this._choice,choiceExit:this._choiceExit,flow:this._flow,forwardOnly:this._forwardOnly,useCurrentAttemptObjectiveInfo:this._useCurrentAttemptObjectiveInfo,useCurrentAttemptProgressInfo:this._useCurrentAttemptProgressInfo,preventActivation:this._preventActivation,constrainChoice:this._constrainChoice,stopForwardTraversal:this._stopForwardTraversal,rollupObjectiveSatisfied:this._rollupObjectiveSatisfied,rollupProgressCompletion:this._rollupProgressCompletion,objectiveMeasureWeight:this._objectiveMeasureWeight,selectionTiming:this._selectionTiming,selectCount:this._selectCount,selectionCountStatus:this._selectionCountStatus,randomizeChildren:this._randomizeChildren,randomizationTiming:this._randomizationTiming,reorderChildren:this._reorderChildren,completionSetByContent:this._completionSetByContent,objectiveSetByContent:this._objectiveSetByContent,tracked:this._tracked};return this.jsonString=!1,result}}class Ne{static selectChildrenProcess(e){const t=e.sequencingControls,i=[...e.children];if(t.selectionTiming===Oe.NEVER)return i;if(t.selectionTiming===Oe.ONCE&&t.selectionCountStatus)return i;if(t.selectionTiming!==Oe.ONCE&&!t.selectionCountStatus)return i;const s=t.selectCount;if(null===s||s>=i.length)return t.selectionTiming===Oe.ONCE&&(t.selectionCountStatus=!0),i;const r=[],n=i.map((e,t)=>t);for(let e=0;s>e&&0!==n.length;e++){const e=Math.floor(Math.random()*n.length),t=n[e];void 0!==t&&i[t]&&r.push(i[t]),n.splice(e,1)}t.selectionTiming===Oe.ONCE&&(t.selectionCountStatus=!0);for(const e of i)r.includes(e)||(e.isHiddenFromChoice=!0,e.isAvailable=!1);return r}static randomizeChildrenProcess(e){const t=e.sequencingControls,i=[...e.children];if(t.randomizationTiming===Te.NEVER)return i;if(t.randomizationTiming===Te.ONCE&&t.reorderChildren)return i;if(!t.randomizeChildren)return i;const s=[...i];for(let e=s.length-1;e>0;e--){const t=Math.floor(Math.random()*(e+1)),i=s[e],r=s[t];i&&r&&(s[e]=r,s[t]=i)}return t.randomizationTiming===Te.ONCE&&(t.reorderChildren=!0),e.children.length=0,e.children.push(...s),s}static applySelectionAndRandomization(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=e.sequencingControls;if(!t&&(e.isActive||e.isSuspended))return e.children;let s=!1,r=!1;i.selectionTiming===Oe.ON_EACH_NEW_ATTEMPT?(s=t,t&&(i.selectionCountStatus=!0)):i.selectionTiming===Oe.ONCE&&(s=!i.selectionCountStatus),i.randomizationTiming===Te.ON_EACH_NEW_ATTEMPT?(r=t,t&&(i.reorderChildren=!1)):i.randomizationTiming===Te.ONCE&&(r=!i.reorderChildren),s&&this.selectChildrenProcess(e),r&&this.randomizeChildrenProcess(e);const n=e.children.filter(e=>e.isAvailable);return e.setProcessedChildren(n),n}static isSelectionNeeded(e){const t=e.sequencingControls;return t.selectionTiming!==Oe.NEVER&&(t.selectionTiming!==Oe.ONCE||!t.selectionCountStatus)&&null!==t.selectCount&&e.children.length>t.selectCount}static isRandomizationNeeded(e){const t=e.sequencingControls;return t.randomizationTiming!==Te.NEVER&&(t.randomizationTiming!==Te.ONCE||!t.reorderChildren)&&t.randomizeChildren}}class je{constructor(e,t){this.activityTree=e,this.ruleEngine=t}flowSubprocess(e,t){let i=e,s=!0,r=!1;for(;i;){const e=this.flowTreeTraversalSubprocess(i,t,s);if(!e.activity){let s=null;return e.exception?s=e.exception:t===we.BACKWARD?s="SB.2.1-3":r&&(s="SB.2.1-2"),new Ee(i,!1,s,e.endSequencingSession)}r=e.activity.children.length>0&&0===e.activity.getAvailableChildren().length;const n=this.flowActivityTraversalSubprocess(e.activity,t===we.FORWARD,!0,t);if(n)return new Ee(n,!0,null,!1);i=e.activity,s=!1}return new Ee(null,!1,null,!1)}flowTreeTraversalSubprocess(e,t){return t===we.FORWARD?this.traverseForward(e,arguments.length>2&&void 0!==arguments[2]&&arguments[2]):this.traverseBackward(e)}traverseForward(e,t){if(t&&this.isActivityLastOverall(e))return this.activityTree.root&&this.terminateDescendentAttempts(this.activityTree.root),{activity:null,endSequencingSession:!0};if(!t){this.ensureSelectionAndRandomization(e);const t=e.getAvailableChildren();if(t.length>0)return{activity:t[0]||null,endSequencingSession:!1}}let i=e;for(;i;){const e=this.activityTree.getNextSibling(i);if(e)return{activity:e,endSequencingSession:!1};i=i.parent}return this.activityTree.root&&this.terminateDescendentAttempts(this.activityTree.root),{activity:null,endSequencingSession:!0}}traverseBackward(e){if(e.parent&&e.parent.sequencingControls.forwardOnly)return{activity:null,endSequencingSession:!1,exception:"SB.2.1-4"};const t=this.activityTree.getPreviousSibling(e);if(t)return{activity:this.getLastDescendant(t),endSequencingSession:!1};let i=e,s=0;for(;i&&i.parent;){if(++s>1e4)throw Error("Infinite loop detected in backward traversal");const e=this.activityTree.getPreviousSibling(i.parent);if(e)return{activity:this.getLastDescendant(e),endSequencingSession:!1};i=i.parent}return{activity:null,endSequencingSession:!1}}getLastDescendant(e){let t=e,i=0;for(;;){if(++i>1e4)throw Error("Infinite loop detected while getting last descendant");this.ensureSelectionAndRandomization(t);const e=t.getAvailableChildren();if(0===e.length)break;const s=e[e.length-1];if(!s)break;t=s}return t}flowActivityTraversalSubprocess(e,t,i,mode){const s=e.parent;if(s&&!s.sequencingControls.flow)return null;if(!e.isAvailable)return null;if(mode===we.FORWARD&&e.sequencingControls.stopForwardTraversal)return null;if(i){this.ensureSelectionAndRandomization(e);const t=e.getAvailableChildren();for(const e of t){const t=this.flowActivityTraversalSubprocess(e,mode===we.FORWARD,!0,mode);if(t)return t}}return 0===e.children.length&&this.checkActivityProcess(e)?e:null}checkActivityProcess(e){if(!e.isAvailable)return!1;if(0===e.children.length&&!e.isVisible)return!1;if(this.ruleEngine.checkLimitConditions(e))return!1;const t=this.ruleEngine.canDeliverActivity(e);return e.wasSkipped=t.wasSkipped,t.canDeliver}ensureSelectionAndRandomization(e){e.getAvailableChildren()===e.children&&(Ne.isSelectionNeeded(e)||Ne.isRandomizationNeeded(e))&&Ne.applySelectionAndRandomization(e,e.isNewAttempt)}isActivityLastOverall(e){if(e.children.length>0)return!1;let t=e;for(;t;){if(this.activityTree.getNextSibling(t))return!1;t=t.parent}return!0}terminateDescendentAttempts(e){e.isActive=!1;for(const t of e.children)this.terminateDescendentAttempts(t)}findFirstDeliverableActivity(e){if(0===e.children.length)return this.checkActivityProcess(e)?e:null;this.ensureSelectionAndRandomization(e);const t=e.getAvailableChildren();for(const e of t){const t=this.flowActivityTraversalSubprocess(e,!0,!0,we.FORWARD);if(t)return t}return null}canDeliver(e){return this.checkActivityProcess(e)}}class xe{constructor(e,t){this.activityTree=e,this.traversalService=t}handleStart(){const result=new Ae;if(!this.activityTree.root)return result.exception="SB.2.5-1",result;if(this.activityTree.currentActivity)return result.exception="SB.2.5-2",result;const e=this.traversalService.findFirstDeliverableActivity(this.activityTree.root);return e?(result.deliveryRequest=Ce.DELIVER,result.targetActivity=e,result):(result.exception="SB.2.5-3",result)}handleResumeAll(){const result=new Ae;return this.activityTree.suspendedActivity?this.activityTree.currentActivity?(result.exception="SB.2.6-2",result):(result.deliveryRequest=Ce.DELIVER,result.targetActivity=this.activityTree.suspendedActivity,result):(result.exception="SB.2.6-1",result)}handleContinue(e){const result=new Ae;if(e.isActive)return result.exception="SB.2.7-1",result;if(e.parent&&!e.parent.sequencingControls.flow)return result.exception="SB.2.7-2",result;const t=this.traversalService.flowSubprocess(e,we.FORWARD);return result.endSequencingSession=t.endSequencingSession,t.deliverable&&t.identifiedActivity?(result.deliveryRequest=Ce.DELIVER,result.targetActivity=t.identifiedActivity,result):(result.exception=t.exception||"SB.2.7-2",result)}handlePrevious(e){const result=new Ae;if(e.isActive)return result.exception="SB.2.8-1",result;if(e.parent&&!e.parent.sequencingControls.flow)return result.exception="SB.2.8-2",result;const t=this.checkForwardOnlyViolation(e);if(t)return result.exception=t,result;const i=this.traversalService.flowSubprocess(e,we.BACKWARD);return i.deliverable&&i.identifiedActivity?(result.deliveryRequest=Ce.DELIVER,result.targetActivity=i.identifiedActivity,result):(result.exception=i.exception||"SB.2.8-3",result)}checkForwardOnlyViolation(e){let t=e.parent;for(;t;){if(t.sequencingControls.forwardOnly)return"SB.2.9-5";t=t.parent}return null}}class De{constructor(e,t,i,s){this.activityTree=e,this.constraintValidator=t,this.traversalService=i,this.treeQueries=s}handleChoice(e,t){const result=new Ae,i=this.activityTree.getActivity(e);if(!i)return result.exception="SB.2.9-1",result;if(t&&t.isActive)return result.exception="SB.2.9-6",result;const s=this.constraintValidator.validateChoice(t,i,{checkAvailability:!0});if(!s.valid)return result.exception=s.exception,result;const r=this.treeQueries.findCommonAncestor(t,i);t&&this.terminateDescendentAttemptsProcess(r||this.activityTree.root);const n=this.buildActivityPath(i,r);for(const e of n)if(!this.traversalService.checkActivityProcess(e))return result;let o=i;if(i.children.length>0){const e=this.choiceFlowSubprocess(i);if(!e)return result.exception="SB.2.9-7",result;o=e}return result.deliveryRequest=Ce.DELIVER,result.targetActivity=o,result}handleJump(e){const result=new Ae,t=this.activityTree.getActivity(e);return t?this.treeQueries.isInTree(t)?t.isAvailable?(result.deliveryRequest=Ce.DELIVER,result.targetActivity=t,result):(result.exception="SB.2.13-3",result):(result.exception="SB.2.13-2",result):(result.exception="SB.2.13-1",result)}getAvailableChoices(){const e=this.activityTree.getAllActivities(),t=this.activityTree.currentActivity,i=[];for(const s of e)s!==this.activityTree.root&&!s.isHiddenFromChoice&&s.isAvailable&&s.isVisible&&(s.parent&&!s.parent.sequencingControls.choice||this.constraintValidator.validateChoice(t,s).valid&&i.push(s));return i}buildActivityPath(e,t){const i=[];let s=e;for(;s&&s!==t;)i.unshift(s),s=s.parent;return i}choiceFlowSubprocess(e){return 0===e.children.length?e:this.choiceFlowTreeTraversal(e)}choiceFlowTreeTraversal(e){this.traversalService.ensureSelectionAndRandomization(e);const t=e.getAvailableChildren(),i=this.constraintValidator.validateFlowConstraints(e,t);if(!i.valid)return null;for(const e of i.validChildren){const t=this.enhancedChoiceTraversal(e);if(t.activity)return t.activity}return null}enhancedChoiceTraversal(e){if(arguments.length>1&&void 0!==arguments[1]&&arguments[1]&&e===this.activityTree.root)return new Me(null,"SB.2.4-3");if(!e.isAvailable)return new Me(null,null);if(e.isHiddenFromChoice)return new Me(null,null);if(e.sequencingControls&&e.sequencingControls.stopForwardTraversal)return new Me(null,"SB.2.4-1");const t=this.constraintValidator.validateTraversalConstraints(e);if(!t.canTraverse)return new Me(null,null);if(0===e.children.length)return this.traversalService.checkActivityProcess(e)?new Me(e,null):new Me(null,null);if(e.parent?.sequencingControls.constrainChoice&&!t.canTraverseInto)return new Me(null,"SB.2.4-2");if(t.canTraverseInto){const t=this.choiceFlowTreeTraversal(e);return new Me(t,null)}return new Me(null,null)}terminateDescendentAttemptsProcess(e){e.isActive=!1;for(const t of e.children)this.terminateDescendentAttemptsProcess(t)}}class Le{constructor(e,t){this.activityTree=e,this.ruleEngine=t}handleExit(e){const result=new Ae;return e.parent?e.parent.sequencingControls.choiceExit?(this.terminateDescendentAttempts(e),result):(result.exception="SB.2.11-2",result):(result.exception="SB.2.11-1",result)}handleExitAll(){const result=new Ae;return this.activityTree.root&&this.terminateDescendentAttempts(this.activityTree.root),result}handleAbandon(e){const result=new Ae;return e.isActive=!1,this.activityTree.currentActivity=e.parent,result}handleAbandonAll(){const result=new Ae;return this.activityTree.currentActivity=null,result}handleSuspendAll(e){const result=new Ae;return e===this.activityTree.root?(result.exception="SB.2.15-1",result):(e.isSuspended=!0,this.activityTree.suspendedActivity=e,this.activityTree.currentActivity=null,result)}terminateDescendentAttempts(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=null;t||(i=this.ruleEngine.evaluateExitRules(e)),e.isActive=!1;for(const i of e.children)this.terminateDescendentAttempts(i,t);i&&!t&&this.processDeferredExitAction(i,e)}processDeferredExitAction(e,t){switch(e){case pe.EXIT:break;case pe.EXIT_PARENT:t.parent&&t.parent.isActive&&this.terminateDescendentAttempts(t.parent,!0);break;case pe.EXIT_ALL:this.activityTree.root&&this.activityTree.root!==t&&this.activityTree.getAllActivities().some(e=>e.isActive)&&this.terminateDescendentAttempts(this.activityTree.root,!0)}}}class qe{constructor(e,t){this.activityTree=e,this.traversalService=t}handleRetry(e){const result=new Ae;if(e.isActive||e.isSuspended)return result.exception="SB.2.10-2",result;if(e.children.length>0){this.traversalService.ensureSelectionAndRandomization(e);const t=e.getAvailableChildren();let i=null;for(const e of t)if(i=this.traversalService.flowActivityTraversalSubprocess(e,!0,!0,we.FORWARD),i)break;return i?(result.deliveryRequest=Ce.DELIVER,result.targetActivity=i,result):(result.exception="SB.2.10-3",result)}return this.terminateDescendentAttempts(e),result.deliveryRequest=Ce.DELIVER,result.targetActivity=e,result}handleRetryAll(){if(this.activityTree.currentActivity=null,!this.activityTree.root){const e=new Ae;return e.exception="SB.2.10-1",e}const e=this.traversalService.findFirstDeliverableActivity(this.activityTree.root),result=new Ae;return e?(result.deliveryRequest=Ce.DELIVER,result.targetActivity=e,result):(result.exception="SB.2.10-3",result)}terminateDescendentAttempts(e){e.isActive=!1;for(const t of e.children)this.terminateDescendentAttempts(t)}}class Pe{get now(){return this._now}set now(e){this._now=e,ge.setNowProvider(e),this.ruleEngine=new Re({now:e,getAttemptElapsedSecondsHook:this._getAttemptElapsedSecondsHook}),this.traversalService=new je(this.activityTree,this.ruleEngine),this.flowHandler=new xe(this.activityTree,this.traversalService),this.choiceHandler=new De(this.activityTree,this.constraintValidator,this.traversalService,this.treeQueries),this.retryHandler=new qe(this.activityTree,this.traversalService)}get getAttemptElapsedSecondsHook(){return this._getAttemptElapsedSecondsHook}set getAttemptElapsedSecondsHook(e){this._getAttemptElapsedSecondsHook=e,ge.setElapsedSecondsHook(e),this.ruleEngine=new Re({now:this._now,getAttemptElapsedSecondsHook:e}),this.traversalService=new je(this.activityTree,this.ruleEngine),this.flowHandler=new xe(this.activityTree,this.traversalService),this.choiceHandler=new De(this.activityTree,this.constraintValidator,this.traversalService,this.treeQueries),this.retryHandler=new qe(this.activityTree,this.traversalService)}constructor(e,t,i){let s=arguments.length>4?arguments[4]:void 0;this.activityTree=e,this._now=s?.now||(()=>new Date),this._getAttemptElapsedSecondsHook=s?.getAttemptElapsedSeconds,this.treeQueries=new fe(e),this.ruleEngine=new Re({now:this._now,getAttemptElapsedSecondsHook:this._getAttemptElapsedSecondsHook}),this.constraintValidator=new ye(e,this.treeQueries),this.traversalService=new je(e,this.ruleEngine),this.flowHandler=new xe(e,this.traversalService),this.choiceHandler=new De(e,this.constraintValidator,this.traversalService,this.treeQueries),this.exitHandler=new Le(e,this.ruleEngine),this.retryHandler=new qe(e,this.traversalService)}sequencingRequestProcess(request){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const t=this.activityTree.currentActivity;switch(request){case be.START:return this.flowHandler.handleStart();case be.RESUME_ALL:return this.flowHandler.handleResumeAll();case be.CONTINUE:return t?this.flowHandler.handleContinue(t):new Ae(Ce.DO_NOT_DELIVER,null,"SB.2.12-1");case be.PREVIOUS:return t?this.flowHandler.handlePrevious(t):new Ae(Ce.DO_NOT_DELIVER,null,"SB.2.12-1");case be.CHOICE:return e?this.choiceHandler.handleChoice(e,t):new Ae(Ce.DO_NOT_DELIVER,null,"SB.2.12-5");case be.JUMP:return e?this.choiceHandler.handleJump(e):new Ae(Ce.DO_NOT_DELIVER,null,"SB.2.12-5");case be.EXIT:return t?this.exitHandler.handleExit(t):new Ae(Ce.DO_NOT_DELIVER,null,"SB.2.12-1");case be.EXIT_ALL:return t?this.exitHandler.handleExitAll():new Ae(Ce.DO_NOT_DELIVER,null,"SB.2.12-1");case be.ABANDON:return t?this.exitHandler.handleAbandon(t):new Ae(Ce.DO_NOT_DELIVER,null,"SB.2.12-1");case be.ABANDON_ALL:return t?this.exitHandler.handleAbandonAll():new Ae(Ce.DO_NOT_DELIVER,null,"SB.2.12-1");case be.SUSPEND_ALL:return t?this.exitHandler.handleSuspendAll(t):new Ae(Ce.DO_NOT_DELIVER,null,"SB.2.12-1");case be.RETRY:return t?this.retryHandler.handleRetry(t):new Ae(Ce.DO_NOT_DELIVER,null,"SB.2.12-1");case be.RETRY_ALL:return this.retryHandler.handleRetryAll();default:return new Ae(Ce.DO_NOT_DELIVER,null,"SB.2.12-6")}}evaluatePostConditionRules(e){return this.ruleEngine.evaluatePostConditions(e)}canActivityBeDelivered(e){return this.traversalService.canDeliver(e)}validateNavigationRequest(request){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(!Object.values(be).includes(request))return{valid:!1,exception:"SB.2.12-6"};switch(request){case be.CONTINUE:case be.PREVIOUS:if(!t)return{valid:!1,exception:"SB.2.12-1"};if(t.isActive)return{valid:!1,exception:request===be.CONTINUE?"SB.2.7-1":"SB.2.8-1"};if(t.parent&&!t.parent.sequencingControls.flow)return{valid:!1,exception:request===be.CONTINUE?"SB.2.7-2":"SB.2.8-2"};if(request===be.PREVIOUS){const e=this.constraintValidator.checkForwardOnlyViolation(t);if(!e.valid)return e}break;case be.CHOICE:{if(!e)return{valid:!1,exception:"SB.2.12-5"};const i=this.activityTree.getActivity(e);if(!i)return{valid:!1,exception:"SB.2.9-1"};const s=this.constraintValidator.validateChoice(t,i,{checkAvailability:!0});if(!s.valid)return s;if(!this.traversalService.canDeliver(i))return{valid:!1,exception:"SB.2.9-6"};if(this.ruleEngine.checkSequencingRules(i,i.sequencingRules.preConditionRules)===pe.HIDE_FROM_CHOICE)return{valid:!1,exception:"SB.2.9-4"};break}case be.JUMP:if(!e)return{valid:!1,exception:"SB.2.12-5"};if(!this.activityTree.getActivity(e))return{valid:!1,exception:"SB.2.13-1"}}return{valid:!0,exception:null}}getAvailableChoices(){return this.choiceHandler.getAvailableChoices()}getTreeQueries(){return this.treeQueries}getConstraintValidator(){return this.constraintValidator}getRuleEngine(){return this.ruleEngine}getTraversalService(){return this.traversalService}}class ze{constructor(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};this.currentDeliveredActivity=null,this.pendingDelivery=null,this.eventService=e,this.loggingService=t,this.callbacks=i}processSequencingResult(result){if(result.exception)return this.loggingService.error("Sequencing error: "+result.exception),void this.callbacks.onSequencingError?.(result.exception);result.deliveryRequest===Ce.DELIVER&&result.targetActivity?this.deliverActivity(result.targetActivity):this.loggingService.info("Sequencing completed with no delivery request"),this.callbacks.onSequencingComplete?.(result)}deliverActivity(e){this.currentDeliveredActivity!==e?(this.currentDeliveredActivity&&this.unloadActivity(this.currentDeliveredActivity),this.pendingDelivery=e,this.loggingService.info(`Delivering activity: ${e.id} - ${e.title}`),this.eventService.processListeners("ActivityDelivery",e.id,e),this.callbacks.onDeliverActivity?.(e),this.currentDeliveredActivity=e,this.pendingDelivery=null,e.isActive=!0):this.loggingService.info("Skipping delivery - activity already delivered: "+e.id)}unloadActivity(e){this.loggingService.info(`Unloading activity: ${e.id} - ${e.title}`),this.eventService.processListeners("ActivityUnload",e.id,e),this.callbacks.onUnloadActivity?.(e),e.isActive=!1}getCurrentDeliveredActivity(){return this.currentDeliveredActivity}getPendingDelivery(){return this.pendingDelivery}updateCallbacks(e){this.callbacks={...this.callbacks,...e}}reset(){this.currentDeliveredActivity&&this.unloadActivity(this.currentDeliveredActivity),this.currentDeliveredActivity=null,this.pendingDelivery=null}}class Fe{constructor(e,t){this.settings=e,this.error_codes=t}processHttpRequest(e,t){return this._performAsyncRequest(e,t,arguments.length>2&&void 0!==arguments[2]&&arguments[2],arguments.length>3?arguments[3]:void 0,arguments.length>4?arguments[4]:void 0),{result:p,errorCode:0}}async _performAsyncRequest(e,t,i,s,r){try{const s=this.settings.requestHandler(t);let n;n=i&&"never"!==this.settings.asyncModeBeaconBehavior?await this.performBeacon(e,s):await this.performFetch(e,s);const result=await this.transformResponse(n,r);this._isSuccessResponse(n,result)?r("CommitSuccess"):r("CommitError",void 0,result.errorCode)}catch(e){s("processHttpRequest","Async request failed: "+(e instanceof Error?e.message:e+""),P.ERROR),r("CommitError")}}_prepareRequestBody(e){return{body:e instanceof Array?e.join("&"):JSON.stringify(e),contentType:e instanceof Array?"application/x-www-form-urlencoded":this.settings.commitRequestDataType}}async performFetch(e,t){if("always"===this.settings.asyncModeBeaconBehavior)return this.performBeacon(e,t);const{body:i,contentType:s}=this._prepareRequestBody(t),r={method:"POST",mode:this.settings.fetchMode,body:i,headers:{...this.settings.xhrHeaders,"Content-Type":s},keepalive:!0};return this.settings.xhrWithCredentials&&(r.credentials="include"),fetch(e,r)}async performBeacon(e,t){const{body:i,contentType:s}=this._prepareRequestBody(t),r=navigator.sendBeacon(e,new Blob([i],{type:s}));return Promise.resolve({status:r?200:0,ok:r,json:async()=>({result:r?"true":"false",errorCode:r?0:this.error_codes.GENERAL_COMMIT_FAILURE||391}),text:async()=>JSON.stringify({result:r?"true":"false",errorCode:r?0:this.error_codes.GENERAL_COMMIT_FAILURE||391})})}async transformResponse(e,t){let result;try{result="function"==typeof this.settings.responseHandler?await this.settings.responseHandler(e):await e.json()}catch(t){const i=await e.text().catch(()=>"Unable to read response text");return{result:_,errorCode:this.error_codes.GENERAL_COMMIT_FAILURE||391,errorMessage:"Failed to parse LMS response: "+(t instanceof Error?t.message:t+""),errorDetails:JSON.stringify({status:e.status,statusText:e.statusText,url:e.url,responseText:i.substring(0,500),parseError:t instanceof Error?t.message:t+""})}}return Object.hasOwnProperty.call(result,"errorCode")||(result.errorCode=this._isSuccessResponse(e,result)?0:this.error_codes.GENERAL_COMMIT_FAILURE||391),this._isSuccessResponse(e,result)||(result.errorDetails={status:e.status,statusText:e.statusText,url:e.url,...result.errorDetails}),result}_isSuccessResponse(e,result){const t=result.result;return!(200>e.status||e.status>299||!0!==t&&"true"!==t&&t!==p)}updateSettings(e){this.settings=e}}const ke="{target=";function Ve(e,t){const i=e[t];return void 0===i?(void 0!==console&&console.warn&&console.warn("CMIValueAccessService: Unknown error code key: "+t),e.GENERAL??0):i}class He{constructor(e){this.context=e}getUndefinedDataModelErrorCode(e){return Ve(this.context.errorCodes,e?"UNDEFINED_DATA_MODEL":"GENERAL")}setCMIValue(e,t,i,s){if(!i||""===i)return t&&this.context.throwSCORMError(i,Ve(this.context.errorCodes,"GENERAL_SET_FAILURE"),"The data model element was not specified"),_;this.context.setLastErrorCode("0");const r=i.split(".");let n=this.context.getDataModel(),o=_,a=!1;const c=`The data model element passed to ${e} (${i}) is not a valid SCORM data model element.`,l=this.getUndefinedDataModelErrorCode(t);for(let e=0;r.length>e;e++){if(e===r.length-1){o=this.setFinalAttribute(n,r[e],s,i,t,l,c);break}{const o=this.traverseToNextLevel(n,r,e,s,i,t,a,l,c);if(o.error)break;n=o.refObject,e=o.idx,a=o.foundFirstIndex}}return o===_&&this.context.apiLog(e,`There was an error setting the value for: ${i}, value of: ${s}`,P.WARN),o}getCMIValue(e,t,i){if(!i||""===i)return t&&this.context.throwSCORMError(i,Ve(this.context.errorCodes,"GENERAL_GET_FAILURE"),"The data model element was not specified"),"";if(t&&i.endsWith("._version")&&"cmi._version"!==i)return this.context.throwSCORMError(i,Ve(this.context.errorCodes,"GENERAL_GET_FAILURE"),"The _version keyword was used incorrectly"),"";const s=i.split(".");let r=this.context.getDataModel(),n=null;const o=`The data model element passed to ${e} (${i}) has not been initialized.`,a=`The data model element passed to ${e} (${i}) is not a valid SCORM data model element.`,c=this.getUndefinedDataModelErrorCode(t);for(let e=0;s.length>e;e++){n=s[e];const l=this.validateGetAttribute(r,n,i,t,c,a,e===s.length-1);if(void 0!==l.returnValue)return l.returnValue;if(l.error)return"";if(null==n){this.context.throwSCORMError(i,c,a);break}if(r=r[n],void 0===r){this.context.throwSCORMError(i,c,a);break}if(r instanceof R){const t=this.handleGetArrayAccess(r,s,e,i,o);if(t.error)return"";r=t.refObject,e=t.idx}}return null==r?(t||("_children"===n?this.context.throwSCORMError(i,Ve(this.context.errorCodes,"CHILDREN_ERROR"),void 0):"_count"===n&&this.context.throwSCORMError(i,Ve(this.context.errorCodes,"COUNT_ERROR"),void 0)),""):r}setFinalAttribute(e,t,i,s,r,n,o){return r&&t?.startsWith(ke)?this.context.isInitialized()?(this.context.throwSCORMError(s,Ve(this.context.errorCodes,"READ_ONLY_ELEMENT")),_):p:void 0!==t&&this.context.checkObjectHasProperty(e,t)?c(s,"\\.correct_responses\\.\\d+$")&&this.context.isInitialized()&&"pattern"!==t&&(this.context.validateCorrectResponse(s,i),"0"!==this.context.getLastErrorCode())?(this.context.throwSCORMError(s,Ve(this.context.errorCodes,"TYPE_MISMATCH")),_):r&&"0"!==this.context.getLastErrorCode()?_:void 0===t||"__proto__"===t||"constructor"===t?(this.context.throwSCORMError(s,n,o),_):r&&"id"===t&&this.context.isInitialized()&&this.context.checkForDuplicateId(s,i)?(this.context.throwSCORMError(s,Ve(this.context.errorCodes,"GENERAL_SET_FAILURE")),_):(e[t]=i,p):(this.context.throwSCORMError(s,n,o),_)}traverseToNextLevel(e,t,i,s,r,n,o,a,c){const l=t[i];if(void 0===l||!this.context.checkObjectHasProperty(e,l))return this.context.throwSCORMError(r,a,c),{refObject:e,idx:i,foundFirstIndex:o,error:!0};if(!(e=e[l]))return this.context.throwSCORMError(r,a,c),{refObject:e,idx:i,foundFirstIndex:o,error:!0};if(e instanceof R){const l=this.handleSetArrayAccess(e,t,i,s,r,n,o,a,c);return l.error?{refObject:e,idx:i,foundFirstIndex:o,error:!0}:l}return{refObject:e,idx:i,foundFirstIndex:o,error:!1}}handleSetArrayAccess(e,t,i,s,r,n,o,a,c){const l=parseInt(t[i+1]||"0",10);if(!isNaN(l)){const t=e.childArray[l];if(t)return{refObject:t,idx:i+1,foundFirstIndex:!0,error:!1};{if(l>e.childArray.length){const t=n?Ve(this.context.errorCodes,"GENERAL_SET_FAILURE"):Ve(this.context.errorCodes,"INVALID_SET_VALUE")||Ve(this.context.errorCodes,"GENERAL_SET_FAILURE");return this.context.throwSCORMError(r,t,`Cannot set array element at index ${l}. Array indices must be sequential. Current array length is ${e.childArray.length}, expected index ${e.childArray.length}.`),{refObject:e,idx:i,foundFirstIndex:o,error:!0}}const t=this.context.getChildElement(r,s,o);return t?(e.initialized&&t.initialize(),e.childArray[l]=t,{refObject:t,idx:i+1,foundFirstIndex:!0,error:!1}):("0"===this.context.getLastErrorCode()&&this.context.throwSCORMError(r,a,c),{refObject:e,idx:i,foundFirstIndex:o,error:!0})}}return{refObject:e,idx:i,foundFirstIndex:o,error:!1}}validateGetAttribute(e,t,i,s,r,n,o){if(s){const s=t+"";if(s.startsWith(ke)&&"function"==typeof e._isTargetValid){const t=s.substring(8,s.length-1);return{error:!1,returnValue:e._isTargetValid(t)}}if(void 0===t||!this.context.checkObjectHasProperty(e,t))return"_children"===t?(this.context.throwSCORMError(i,Ve(this.context.errorCodes,"GENERAL_GET_FAILURE"),"The data model element does not have children"),{error:!0}):"_count"===t?(this.context.throwSCORMError(i,Ve(this.context.errorCodes,"GENERAL_GET_FAILURE"),"The data model element is not a collection and therefore does not have a count"),{error:!0}):(this.context.throwSCORMError(i,r,n),{error:!0})}else if(o&&(void 0===t||!this.context.checkObjectHasProperty(e,t)))return this.context.throwSCORMError(i,r,n),{error:!0};return{error:!1}}handleGetArrayAccess(e,t,i,s,r){const n=parseInt(t[i+1]||"",10);if(!isNaN(n)){const t=e.childArray[n];return t?{refObject:t,idx:i+1,error:!1}:(this.context.throwSCORMError(s,Ve(this.context.errorCodes,"VALUE_NOT_INITIALIZED"),r),{refObject:e,idx:i,error:!0})}return{refObject:e,idx:i,error:!1}}}class Be{constructor(){this._logLevel=P.ERROR,this._logHandler=F}static getInstance(){return Be._instance||(Be._instance=new Be),Be._instance}setLogLevel(e){this._logLevel=e}getLogLevel(){return this._logLevel}setLogHandler(e){this._logHandler=e}log(e,t){this.shouldLog(e)&&this._logHandler(e,t)}error(e){this.log(P.ERROR,e)}warn(e){this.log(P.WARN,e)}info(e){this.log(P.INFO,e)}debug(e){this.log(P.DEBUG,e)}shouldLog(e){return this.getNumericLevel(e)>=this.getNumericLevel(this._logLevel)}getNumericLevel(e){if(void 0===e)return P.NONE;if("number"==typeof e)return e;switch(e){case"1":case"DEBUG":return P.DEBUG;case"2":case"INFO":return P.INFO;case"3":case"WARN":return P.WARN;case"4":case"ERROR":default:return P.ERROR;case"5":case"NONE":return P.NONE}}}function Ue(){return Be.getInstance()}class $e{constructor(e,t,i,s){this._lastErrorCode="0",this._lastDiagnostic="",this._errorCodes=e,this._apiLog=t,this._getLmsErrorMessageDetails=i,this._loggingService=s||Ue()}get lastErrorCode(){return this._lastErrorCode}set lastErrorCode(e){this._lastErrorCode=e}get lastDiagnostic(){return this._lastDiagnostic}throwSCORMError(e,t,i){this._lastDiagnostic=i||"",i||(i=this._getLmsErrorMessageDetails(t,!0));const s=`SCORM Error ${t}: ${i}${e?` [Element: ${e}]`:""}`;this._apiLog("throwSCORMError",t+": "+i,P.ERROR,e),this._loggingService.error(s),this._lastErrorCode=t+""}clearSCORMError(e){void 0!==e&&e!==_&&(this._lastErrorCode="0")}handleValueAccessException(e,t,i){if(t instanceof m){const s=t;this._lastErrorCode=s.errorCode+"",this._lastDiagnostic="",this._loggingService.warn(`Validation Error ${s.errorCode}: ${s.message} [Element: ${e}]`),i=_}else if(t instanceof Error){const s=t.constructor.name;this._loggingService.error(`${s}: ${t.message} [Element: ${e}]\n${t.stack||""}`),this.throwSCORMError(e,this._errorCodes.GENERAL,`${s}: ${t.message}`),i=_}else{this._loggingService.error(`Unknown error occurred while accessing [Element: ${e}]`);try{const e=JSON.stringify(t);this._loggingService.error("Error details: "+e)}catch(e){this._loggingService.error("Could not stringify error object for details")}this.throwSCORMError(e,this._errorCodes.GENERAL,"Unknown error"),i=_}return i}get errorCodes(){return this._errorCodes}}class Ge{constructor(e){this.listenerMap=new Map,this.listenerCount=0,this.apiLog=e}parseListenerName(e){if(!e)return null;const t=e.split("."),i=t[0];let s=null;return t.length>1&&(s=e.replace(i+".","")),{functionName:i??e,CMIElement:s}}on(e,t){if(!t)return;const i=e.split(" ");for(const e of i){const i=this.parseListenerName(e);if(!i)continue;const{functionName:s,CMIElement:r}=i,n=this.listenerMap.get(s)??[];n.push({functionName:s,CMIElement:r,callback:t}),this.listenerMap.set(s,n),this.listenerCount++,this.apiLog("on","Added event listener: "+this.listenerCount,P.INFO,s)}}off(e,t){if(!t)return;const i=e.split(" ");for(const e of i){const i=this.parseListenerName(e);if(!i)continue;const{functionName:s,CMIElement:r}=i,n=this.listenerMap.get(s);if(!n)continue;const o=n.findIndex(e=>e.CMIElement===r&&e.callback===t);-1!==o&&(n.splice(o,1),this.listenerCount--,0===n.length&&this.listenerMap.delete(s),this.apiLog("off","Removed event listener: "+this.listenerCount,P.INFO,s))}}clear(e){const t=e.split(" ");for(const e of t){const t=this.parseListenerName(e);if(!t)continue;const{functionName:i,CMIElement:s}=t;if(this.listenerMap.has(i)){const e=this.listenerMap.get(i),t=null===s?[]:e.filter(e=>e.CMIElement!==s);this.listenerCount-=e.length-t.length,0===t.length?this.listenerMap.delete(i):this.listenerMap.set(i,t)}}}processListeners(e,t,i){this.apiLog(e,i,P.INFO,t);const s=this.listenerMap.get(e);if(s)for(const r of s){const s=!!r.CMIElement;let n=!1;if(t&&r.CMIElement)if(r.CMIElement.endsWith("*")){const e=r.CMIElement.slice(0,-1);n=t.startsWith(e)}else n=r.CMIElement===t;s&&!n||(this.apiLog("processListeners","Processing listener: "+r.functionName,P.DEBUG,t),e.startsWith("Sequence")||"CommitError"===e?r.callback(i):"CommitSuccess"===e?r.callback():r.callback(t,i))}}reset(){this.listenerMap.clear(),this.listenerCount=0}}class Ye{constructor(e,t,i){this.apiLog=i,this.storeName="scorm_again_offline_data",this.syncQueue="scorm_again_sync_queue",this.isOnline=navigator.onLine,this.syncInProgress=!1,this.settings=e,this.error_codes=t,this.boundOnlineStatusChangeHandler=this.handleOnlineStatusChange.bind(this),this.boundCustomNetworkStatusHandler=this.handleCustomNetworkStatus.bind(this),window.addEventListener("online",this.boundOnlineStatusChangeHandler),window.addEventListener("offline",this.boundOnlineStatusChangeHandler),window.addEventListener("scorm-again:network-status",this.boundCustomNetworkStatusHandler)}handleOnlineStatusChange(){const e=this.isOnline;this.isOnline=navigator.onLine,!e&&this.isOnline?(this.apiLog("OfflineStorageService","Device is back online, attempting to sync...",P.INFO),this.syncOfflineData().then(e=>{e?this.apiLog("OfflineStorageService","Sync completed successfully",P.INFO):this.apiLog("OfflineStorageService","Sync failed",P.ERROR)},e=>{this.apiLog("OfflineStorageService","Error during sync: "+e,P.ERROR)})):e&&!this.isOnline&&this.apiLog("OfflineStorageService","Device is offline, data will be stored locally",P.INFO)}handleCustomNetworkStatus(e){if(!(e instanceof CustomEvent))return void this.apiLog("OfflineStorageService","Invalid network status event received",P.WARN);const{online:t}=e.detail;if("boolean"!=typeof t)return void this.apiLog("OfflineStorageService","Invalid online status value in custom event",P.WARN);const i=this.isOnline;this.isOnline=t,this.apiLog("OfflineStorageService","Network status updated via custom event: "+(t?"online":"offline"),P.INFO),!i&&this.isOnline?(this.apiLog("OfflineStorageService","Device is back online, attempting to sync...",P.INFO),this.syncOfflineData().then(e=>{e?this.apiLog("OfflineStorageService","Sync completed successfully",P.INFO):this.apiLog("OfflineStorageService","Sync failed",P.ERROR)},e=>{this.apiLog("OfflineStorageService","Error during sync: "+e,P.ERROR)})):i&&!this.isOnline&&this.apiLog("OfflineStorageService","Device is offline, data will be stored locally",P.INFO)}storeOffline(e,t){try{const i={id:`${e}_${Date.now()}_${Math.random().toString(36).substring(2,9)}`,courseId:e,timestamp:Date.now(),data:t,syncAttempts:0},s=this.getFromStorage(this.syncQueue)||[];return s.push(i),this.saveToStorage(this.syncQueue,s),this.saveToStorage(`${this.storeName}_${e}`,t),this.apiLog("OfflineStorageService","Stored data offline for course "+e,P.INFO),{result:p,errorCode:0}}catch(t){const i=(t instanceof Error?t.message:t+"").includes("storage quota");return this.apiLog("OfflineStorageService",i?"storage quota exceeded - cannot store offline data for course "+e:"Error storing offline data: "+t,P.ERROR),{result:_,errorCode:this.error_codes.GENERAL??0}}}async getOfflineData(e){try{return this.getFromStorage(`${this.storeName}_${e}`)||null}catch(e){return this.apiLog("OfflineStorageService","Error retrieving offline data: "+e,P.ERROR),null}}async syncOfflineData(){if(this.syncInProgress||!this.isOnline)return!1;this.syncInProgress=!0;try{const e=this.getFromStorage(this.syncQueue)||[];if(0===e.length)return this.syncInProgress=!1,!0;this.apiLog("OfflineStorageService",`Found ${e.length} items to sync`,P.INFO);const t=[];for(const i of e){const e=this.settings.maxSyncAttempts??5;if(e>i.syncAttempts)try{const e=await this.sendDataToLMS(i.data);!0===e.result||e.result===p?this.apiLog("OfflineStorageService","Successfully synced item "+i.id,P.INFO):(i.syncAttempts++,t.push(i),this.apiLog("OfflineStorageService",`Failed to sync item ${i.id}, attempt #${i.syncAttempts}`,P.WARN))}catch(e){i.syncAttempts++,t.push(i),this.apiLog("OfflineStorageService",`Error syncing item ${i.id}: ${e}`,P.ERROR)}else this.apiLog("OfflineStorageService",`Removing abandoned item ${i.id} after ${e} failed sync attempts`,P.WARN)}return this.saveToStorage(this.syncQueue,t),this.apiLog("OfflineStorageService",`Sync completed. ${e.length-t.length} items synced, ${t.length} items remaining`,P.INFO),this.syncInProgress=!1,!0}catch(e){return this.apiLog("OfflineStorageService","Error during sync process: "+e,P.ERROR),this.syncInProgress=!1,!1}}async sendDataToLMS(e){if(!this.settings.lmsCommitUrl)return{result:_,errorCode:this.error_codes.GENERAL||101};try{const t=this.settings.requestHandler(e),i={method:"POST",mode:this.settings.fetchMode,body:JSON.stringify(t),headers:{...this.settings.xhrHeaders,"Content-Type":this.settings.commitRequestDataType}};this.settings.xhrWithCredentials&&(i.credentials="include");const s=await fetch(this.settings.lmsCommitUrl,i),result="function"==typeof this.settings.responseHandler?await this.settings.responseHandler(s):await s.json();return 200>s.status||s.status>299||!0!==result.result&&result.result!==p?(Object.hasOwnProperty.call(result,"errorCode")||(result.errorCode=this.error_codes.GENERAL),result):(Object.hasOwnProperty.call(result,"errorCode")||(result.errorCode=0),result)}catch(e){return this.apiLog("OfflineStorageService","Error sending data to LMS: "+e,P.ERROR),{result:_,errorCode:this.error_codes.GENERAL||101}}}isDeviceOnline(){return this.isOnline}getFromStorage(e){const t=localStorage.getItem(e);if(t)try{return JSON.parse(t)}catch(e){return null}return null}saveToStorage(e,t){try{localStorage.setItem(e,JSON.stringify(t))}catch(e){if(e instanceof DOMException&&"QuotaExceededError"===e.name)throw Error("storage quota exceeded - localStorage is full");throw e}}async hasPendingOfflineData(e){return(this.getFromStorage(this.syncQueue)||[]).some(t=>t.courseId===e)}updateSettings(e){this.settings=e}destroy(){window.removeEventListener("online",this.boundOnlineStatusChangeHandler),window.removeEventListener("offline",this.boundOnlineStatusChangeHandler),window.removeEventListener("scorm-again:network-status",this.boundCustomNetworkStatusHandler)}}const We=l((e,t,i,s,r,n)=>{if("string"!=typeof t)return!1;const o=RegExp(i),a=t.match(o);if(n&&""===t)return!0;if(!a||""===a[0])throw new r(e,s);return!0},(e,t,i,s,r,n)=>`${e}:${"string"==typeof t?t:`[${typeof t}]`}:${i}:${s}:${n||!1}`),Je=l((e,t,i,s,r)=>{const n=i.split("#");if(isNaN(t=+t))throw new r(e,s);const o=n[0],a=n[1],c=void 0!==a&&""!==a&&"*"!==a;if(void 0!==o&&""!==o&&+o>t)throw new r(e,s);if(c&&t>+a)throw new r(e,s);return!0},(e,t,i,s,r)=>`${e}:${t}:${i}:${s}`);function Ke(e,t,i,s){return We(e,t,i,w.TYPE_MISMATCH,A,s)}function Xe(e,t,i){return Je(e,t,i,w.VALUE_OUT_OF_RANGE,A)}var Qe=(e=>(e.SATISFIED="satisfied",e.NOT_SATISFIED="notSatisfied",e.COMPLETED="completed",e.INCOMPLETE="incomplete",e))(Qe||{}),Ze=(e=>(e.ALL="all",e.ANY="any",e.NONE="none",e.AT_LEAST_COUNT="atLeastCount",e.AT_LEAST_PERCENT="atLeastPercent",e))(Ze||{});class et extends u{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"always",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Map;super("rollupCondition"),this._condition="always",this._parameters=new Map,this._condition=e,this._parameters=t}reset(){this._initialized=!1}get condition(){return this._condition}set condition(e){this._condition=e}get parameters(){return this._parameters}set parameters(e){this._parameters=e}evaluate(e){switch(this._condition){case"satisfied":return!0===e.objectiveSatisfiedStatus||e.successStatus===N;case"objectiveStatusKnown":return e.objectiveSatisfiedStatusKnown;case"objectiveMeasureKnown":return e.objectiveMeasureStatus;case"objectiveMeasureGreaterThan":{const t=this._parameters.get("threshold")||0;return e.objectiveMeasureStatus&&e.objectiveNormalizedMeasure>t}case"objectiveMeasureLessThan":{const t=this._parameters.get("threshold")||0;return e.objectiveMeasureStatus&&t>e.objectiveNormalizedMeasure}case"completed":return e.isCompleted;case"progressKnown":return e.completionStatus!==q;case"attempted":return e.attemptCount>0;case"notAttempted":return 0===e.attemptCount;case"always":return!0;default:return!1}}toJSON(){this.jsonString=!0;const result={condition:this._condition,parameters:Object.fromEntries(this._parameters)};return this.jsonString=!1,result}}class tt extends u{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"satisfied",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"all",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;super("rollupRule"),this._conditions=[],this._action="satisfied",this._consideration="all",this._minimumCount=0,this._minimumPercent=0,this._action=e,this._consideration=t,this._minimumCount=i,this._minimumPercent=s}reset(){this._initialized=!1,this._conditions=[]}get conditions(){return this._conditions}addCondition(e){if(!(e instanceof et))throw new A(this._cmi_element+".conditions",w.TYPE_MISMATCH);this._conditions.push(e)}removeCondition(e){const t=this._conditions.indexOf(e);return-1!==t&&(this._conditions.splice(t,1),!0)}get action(){return this._action}set action(e){this._action=e}get consideration(){return this._consideration}set consideration(e){this._consideration=e}get minimumCount(){return this._minimumCount}set minimumCount(e){0>e||(this._minimumCount=e)}get minimumPercent(){return this._minimumPercent}set minimumPercent(e){0>e||e>100||(this._minimumPercent=e)}evaluate(e){if(0===e.length)return!1;const t=e.filter(e=>this._conditions.every(t=>t.evaluate(e)));switch(this._consideration){case"all":return t.length===e.length;case"any":return t.length>0;case"none":return 0===t.length;case"atLeastCount":return t.length>=this._minimumCount;case"atLeastPercent":return t.length/e.length*100>=this._minimumPercent;default:return!1}}toJSON(){this.jsonString=!0;const result={conditions:this._conditions,action:this._action,consideration:this._consideration,minimumCount:this._minimumCount,minimumPercent:this._minimumPercent};return this.jsonString=!1,result}}class it extends u{constructor(){super("rollupRules"),this._rules=[]}reset(){this._initialized=!1,this._rules=[]}get rules(){return this._rules}addRule(e){if(!(e instanceof tt))throw new A(this._cmi_element+".rules",w.TYPE_MISMATCH);this._rules.push(e)}removeRule(e){const t=this._rules.indexOf(e);return-1!==t&&(this._rules.splice(t,1),!0)}processRollup(e){if(!e||0===e.children.length)return;const t=e.getAvailableChildren();let i=!1,s=!1;if(e.sequencingControls.rollupObjectiveSatisfied&&null!==this._objectiveRollupUsingMeasure(e,t)&&(s=!0),!s)for(const r of this._rules)if(r.evaluate(t))switch(r.action){case"satisfied":e.successStatus=N,s=!0;break;case"notSatisfied":e.successStatus=j,s=!0;break;case"completed":e.completionStatus=D,e.isCompleted=!0,i=!0;break;case"incomplete":e.completionStatus=L,e.isCompleted=!1,i=!0}i||this._defaultCompletionRollup(e,t),s||this._defaultSuccessRollup(e,t)}_defaultCompletionRollup(e,t){t.every(e=>e.isCompleted)?(e.completionStatus=D,e.isCompleted=!0):t.some(e=>e.completionStatus===L)&&(e.completionStatus=L,e.isCompleted=!1)}_objectiveRollupUsingMeasure(e,t){if(0>=e.sequencingControls.objectiveMeasureWeight)return null;let i=0,s=0,r=!1;for(const e of t)if(e.sequencingControls.rollupObjectiveSatisfied&&e.objectiveMeasureStatus&&!0===e.objectiveMeasureStatus){const t=e.sequencingControls.objectiveMeasureWeight;t>0&&(s+=e.objectiveNormalizedMeasure*t,i+=t,r=!0)}if(!r||0===i)return null;const n=s/i;return e.objectiveNormalizedMeasure=n,e.objectiveMeasureStatus=!0,e.scaledPassingScore>n?(e.successStatus=j,e.objectiveSatisfiedStatus=!1,!1):(e.successStatus=N,e.objectiveSatisfiedStatus=!0,!0)}_defaultSuccessRollup(e,t){t.every(e=>e.successStatus===N)?e.successStatus=N:t.some(e=>e.successStatus===j)&&(e.successStatus=j)}toJSON(){this.jsonString=!0;const result={rules:this._rules};return this.jsonString=!1,result}}class st{constructor(id){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._satisfiedStatus=!1,this._satisfiedStatusKnown=!1,this._measureStatus=!1,this._normalizedMeasure=0,this._progressMeasure=0,this._progressMeasureStatus=!1,this._completionStatus=q,this._progressStatus=!1,this._satisfiedStatusDirty=!1,this._normalizedMeasureDirty=!1,this._completionStatusDirty=!1,this._progressMeasureDirty=!1,this._id=id,this._description=e.description??null,this._satisfiedByMeasure=e.satisfiedByMeasure??!1,this._minNormalizedMeasure=e.minNormalizedMeasure??null,this._mapInfo=e.mapInfo?[...e.mapInfo]:[],this._isPrimary=e.isPrimary??!1}get id(){return this._id}get description(){return this._description}get satisfiedByMeasure(){return this._satisfiedByMeasure}set satisfiedByMeasure(e){this._satisfiedByMeasure=e}get minNormalizedMeasure(){return this._minNormalizedMeasure}set minNormalizedMeasure(e){this._minNormalizedMeasure=e}get mapInfo(){return this._mapInfo}set mapInfo(e){this._mapInfo=[...e]}get isPrimary(){return this._isPrimary}set isPrimary(e){this._isPrimary=e}get satisfiedStatus(){return this._satisfiedStatus}set satisfiedStatus(e){this._satisfiedStatus!==e&&(this._satisfiedStatus=e,this._satisfiedStatusDirty=!0)}get satisfiedStatusKnown(){return this._satisfiedStatusKnown}set satisfiedStatusKnown(e){this._satisfiedStatusKnown=e}get measureStatus(){return this._measureStatus}set measureStatus(e){this._measureStatus=e}get normalizedMeasure(){return this._normalizedMeasure}set normalizedMeasure(e){this._normalizedMeasure!==e&&(this._normalizedMeasure=e,this._normalizedMeasureDirty=!0)}get progressMeasure(){return this._progressMeasure}set progressMeasure(e){this._progressMeasure!==e&&(this._progressMeasure=e,this._progressMeasureDirty=!0)}get progressMeasureStatus(){return this._progressMeasureStatus}set progressMeasureStatus(e){this._progressMeasureStatus=e}get completionStatus(){return this._completionStatus}set completionStatus(e){this._completionStatus!==e&&(this._completionStatus=e,this._completionStatusDirty=!0)}get progressStatus(){return this._progressStatus}set progressStatus(e){this._progressStatus=e}isDirty(e){switch(e){case"satisfiedStatus":return this._satisfiedStatusDirty;case"normalizedMeasure":return this._normalizedMeasureDirty;case"completionStatus":return this._completionStatusDirty;case"progressMeasure":return this._progressMeasureDirty}}clearDirty(e){switch(e){case"satisfiedStatus":this._satisfiedStatusDirty=!1;break;case"normalizedMeasure":this._normalizedMeasureDirty=!1;break;case"completionStatus":this._completionStatusDirty=!1;break;case"progressMeasure":this._progressMeasureDirty=!1}}clearAllDirty(){this._satisfiedStatusDirty=!1,this._normalizedMeasureDirty=!1,this._completionStatusDirty=!1,this._progressMeasureDirty=!1}initializeFromCMI(e,t,i){this._satisfiedStatus=e,this._satisfiedStatusDirty=!0,this._normalizedMeasure=t,this._normalizedMeasureDirty=!0,this._measureStatus=i}resetState(){this._satisfiedStatus=!1,this._satisfiedStatusKnown=!1,this._measureStatus=!1,this._normalizedMeasure=0,this._progressMeasure=0,this._progressMeasureStatus=!1,this._completionStatus=q,this._progressStatus=!1,this.clearAllDirty()}updateFromActivity(e){this._satisfiedStatus!==e.objectiveSatisfiedStatus&&(this._satisfiedStatus=e.objectiveSatisfiedStatus,this._satisfiedStatusDirty=!0),this._satisfiedStatusKnown=e.objectiveSatisfiedStatusKnown,this._measureStatus=e.objectiveMeasureStatus,this._normalizedMeasure!==e.objectiveNormalizedMeasure&&(this._normalizedMeasure=e.objectiveNormalizedMeasure,this._normalizedMeasureDirty=!0),this._progressMeasure!==e.progressMeasure&&(this._progressMeasure=e.progressMeasure,this._progressMeasureDirty=!0),this._progressMeasureStatus=e.progressMeasureStatus,this._completionStatus!==e.completionStatus&&(this._completionStatus=e.completionStatus,this._completionStatusDirty=!0)}applyToActivity(e){this._isPrimary&&e.setPrimaryObjectiveState(this._satisfiedStatus,this._measureStatus,this._normalizedMeasure,this._progressMeasure,this._progressMeasureStatus,this._completionStatus)}}class rt extends u{constructor(){let id=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";super("activity"),this._id="",this._title="",this._children=[],this._parent=null,this._isVisible=!0,this._isActive=!1,this._isSuspended=!1,this._isCompleted=!1,this._completionStatus=q,this._successStatus=x,this._attemptCount=0,this._attemptCompletionAmount=0,this._attemptAbsoluteDuration="PT0H0M0S",this._attemptExperiencedDuration="PT0H0M0S",this._activityAbsoluteDuration="PT0H0M0S",this._activityExperiencedDuration="PT0H0M0S",this._attemptAbsoluteDurationValue="PT0H0M0S",this._attemptExperiencedDurationValue="PT0H0M0S",this._activityAbsoluteDurationValue="PT0H0M0S",this._activityExperiencedDurationValue="PT0H0M0S",this._activityStartTimestampUtc=null,this._attemptStartTimestampUtc=null,this._activityEndedDate=null,this._objectiveSatisfiedStatus=!1,this._objectiveSatisfiedStatusKnown=!1,this._objectiveMeasureStatus=!1,this._objectiveNormalizedMeasure=0,this._scaledPassingScore=.7,this._objectiveSatisfiedStatusDirty=!1,this._objectiveNormalizedMeasureDirty=!1,this._objectiveMeasureStatusDirty=!1,this._progressMeasure=0,this._progressMeasureStatus=!1,this._location="",this._attemptAbsoluteStartTime="",this._learnerPrefs=null,this._activityAttemptActive=!1,this._isHiddenFromChoice=!1,this._isAvailable=!0,this._hideLmsUi=[],this._auxiliaryResources=[],this._attemptLimit=null,this._attemptAbsoluteDurationLimit=null,this._activityAbsoluteDurationLimit=null,this._timeLimitAction=null,this._timeLimitDuration=null,this._beginTimeLimit=null,this._endTimeLimit=null,this._launchData="",this._credit="credit",this._maxTimeAllowed="",this._completionThreshold="",this._processedChildren=null,this._isNewAttempt=!1,this._primaryObjective=null,this._objectives=[],this._rollupConsiderations={requiredForSatisfied:"always",requiredForNotSatisfied:"always",requiredForCompleted:"always",requiredForIncomplete:"always",measureSatisfactionIfActive:!0},this._requiredForSatisfied="always",this._requiredForNotSatisfied="always",this._requiredForCompleted="always",this._requiredForIncomplete="always",this._wasSkipped=!1,this._attemptProgressStatus=!1,this._wasAutoCompleted=!1,this._wasAutoSatisfied=!1,this._completedByMeasure=!1,this._minProgressMeasure=1,this._progressWeight=1,this._attemptCompletionAmountStatus=!1,this._id=id,this._title=e,this._sequencingControls=new Ie,this._sequencingRules=new Se,this._rollupRules=new it,this._primaryObjective=null,this._objectives=[]}initialize(){super.initialize();for(const e of this._children)e.initialize()}reset(){this._initialized=!1,this._isActive=!1,this._isSuspended=!1,this._isCompleted=!1,this._completionStatus=q,this._successStatus=x,this._attemptCount=0,this._attemptCompletionAmount=0,this._attemptAbsoluteDuration="PT0H0M0S",this._attemptExperiencedDuration="PT0H0M0S",this._activityAbsoluteDuration="PT0H0M0S",this._activityExperiencedDuration="PT0H0M0S",this._attemptAbsoluteDurationValue="PT0H0M0S",this._attemptExperiencedDurationValue="PT0H0M0S",this._activityAbsoluteDurationValue="PT0H0M0S",this._activityExperiencedDurationValue="PT0H0M0S",this._activityStartTimestampUtc=null,this._attemptStartTimestampUtc=null,this._activityEndedDate=null,this._objectiveSatisfiedStatus=!1,this._objectiveSatisfiedStatusKnown=!1,this._objectiveMeasureStatus=!1,this._objectiveNormalizedMeasure=0,this._progressMeasure=0,this._progressMeasureStatus=!1,this._location="",this._attemptAbsoluteStartTime="",this._learnerPrefs=null,this._activityAttemptActive=!1,this._primaryObjective&&(this._primaryObjective.resetState(),this._primaryObjective.updateFromActivity(this));for(const e of this._objectives)e.resetState();for(const e of this._children)e.reset();this._wasSkipped=!1,this._attemptProgressStatus=!1,this._wasAutoCompleted=!1,this._wasAutoSatisfied=!1,this._completedByMeasure=!1,this._minProgressMeasure=1,this._progressWeight=1,this._attemptCompletionAmountStatus=!1,this.clearAllObjectiveDirty()}get id(){return this._id}set id(id){Ke(this._cmi_element+".id",id,ie)&&(this._id=id)}get title(){return this._title}set title(e){Ke(this._cmi_element+".title",e,K)&&(this._title=e)}get children(){return this._children}addChild(e){if(!(e instanceof rt))throw new A(this._cmi_element+".children",w.TYPE_MISMATCH);e._parent=this,this._children.push(e)}setChildOrder(e){if(0===e.length)return;const t=new Map(this._children.map(e=>[e.id,e])),i=[];for(const id of e){const e=t.get(id);e&&(i.push(e),t.delete(id))}if(t.size>0)for(const e of this._children)t.has(e.id)&&(i.push(e),t.delete(e.id));i.length===this._children.length&&this._children.splice(0,this._children.length,...i)}removeChild(e){const t=this._children.indexOf(e);return-1!==t&&(this._children.splice(t,1),e._parent=null,!0)}get parent(){return this._parent}get isVisible(){return this._isVisible}set isVisible(e){this._isVisible=e}get isActive(){return this._isActive}set isActive(e){this._isActive=e}get isSuspended(){return this._isSuspended}set isSuspended(e){this._isSuspended=e}get isCompleted(){return this._isCompleted}set isCompleted(e){this._isCompleted=e,this._completionStatus=e?D:L}get completionStatus(){return this._completionStatus}set completionStatus(e){this._completionStatus=e,this._isCompleted=e===D,this.updatePrimaryObjectiveFromActivity()}get successStatus(){return this._successStatus}set successStatus(e){this._successStatus=e}get attemptCount(){return this._attemptCount}set attemptCount(e){this._attemptCount=e}get attemptCompletionAmount(){return this._attemptCompletionAmount}set attemptCompletionAmount(e){this._attemptCompletionAmount=e}incrementAttemptCount(){this._attemptCount++,this._isNewAttempt=!0;const e=this._sequencingControls;"onEachNewAttempt"!==e.selectionTiming&&"onEachNewAttempt"!==e.randomizationTiming||(this._processedChildren=null)}get objectiveSatisfiedStatus(){return this._objectiveSatisfiedStatus}set objectiveSatisfiedStatus(e){this._objectiveSatisfiedStatus!==e&&(this._objectiveSatisfiedStatus=e,this._objectiveSatisfiedStatusDirty=!0),this._objectiveSatisfiedStatusKnown=!0,this._successStatus=e?N:j,this.updatePrimaryObjectiveFromActivity()}get objectiveSatisfiedStatusKnown(){return this._objectiveSatisfiedStatusKnown}set objectiveSatisfiedStatusKnown(e){this._objectiveSatisfiedStatusKnown=e}get objectiveMeasureStatus(){return this._objectiveMeasureStatus}set objectiveMeasureStatus(e){this._objectiveMeasureStatus!==e&&(this._objectiveMeasureStatus=e,this._objectiveMeasureStatusDirty=!0),this.updatePrimaryObjectiveFromActivity()}get objectiveNormalizedMeasure(){return this._objectiveNormalizedMeasure}set objectiveNormalizedMeasure(e){this._objectiveNormalizedMeasure!==e&&(this._objectiveNormalizedMeasure=e,this._objectiveNormalizedMeasureDirty=!0),this.updatePrimaryObjectiveFromActivity()}get scaledPassingScore(){return this._scaledPassingScore}set scaledPassingScore(e){-1>e||e>1||(this._scaledPassingScore=e)}get progressMeasure(){return this._progressMeasure}set progressMeasure(e){this._progressMeasure=e,this.updatePrimaryObjectiveFromActivity()}get progressMeasureStatus(){return this._progressMeasureStatus}set progressMeasureStatus(e){this._progressMeasureStatus=e,this.updatePrimaryObjectiveFromActivity()}get location(){return this._location}set location(location){this._location=location}get attemptAbsoluteStartTime(){return this._attemptAbsoluteStartTime}set attemptAbsoluteStartTime(e){this._attemptAbsoluteStartTime=e}get learnerPrefs(){return this._learnerPrefs}set learnerPrefs(e){this._learnerPrefs=e}get activityAttemptActive(){return this._activityAttemptActive}set activityAttemptActive(e){this._activityAttemptActive=e}get isHiddenFromChoice(){return this._isHiddenFromChoice}set isHiddenFromChoice(e){this._isHiddenFromChoice=e}get isAvailable(){return this._isAvailable}set isAvailable(e){this._isAvailable=e}get attemptLimit(){return this._attemptLimit}set attemptLimit(e){this._attemptLimit=e}hasAttemptLimitExceeded(){return null!==this._attemptLimit&&this._attemptCount>=this._attemptLimit}get timeLimitDuration(){return this._timeLimitDuration}set timeLimitDuration(e){this._timeLimitDuration=e}get timeLimitAction(){return this._timeLimitAction}set timeLimitAction(e){this._timeLimitAction=e}get beginTimeLimit(){return this._beginTimeLimit}set beginTimeLimit(e){this._beginTimeLimit=e}get endTimeLimit(){return this._endTimeLimit}set endTimeLimit(e){this._endTimeLimit=e}get attemptAbsoluteDurationLimit(){return this._attemptAbsoluteDurationLimit}set attemptAbsoluteDurationLimit(e){if(null!==e&&!n(e,Z))throw new A(this._cmi_element+".attemptAbsoluteDurationLimit",w.TYPE_MISMATCH);this._attemptAbsoluteDurationLimit=e}get attemptExperiencedDuration(){return this._attemptExperiencedDuration}set attemptExperiencedDuration(e){if(!n(e,Z))throw new A(this._cmi_element+".attemptExperiencedDuration",w.TYPE_MISMATCH);this._attemptExperiencedDuration=e}get activityAbsoluteDurationLimit(){return this._activityAbsoluteDurationLimit}set activityAbsoluteDurationLimit(e){if(null!==e&&!n(e,Z))throw new A(this._cmi_element+".activityAbsoluteDurationLimit",w.TYPE_MISMATCH);this._activityAbsoluteDurationLimit=e}get activityExperiencedDuration(){return this._activityExperiencedDuration}set activityExperiencedDuration(e){if(!n(e,Z))throw new A(this._cmi_element+".activityExperiencedDuration",w.TYPE_MISMATCH);this._activityExperiencedDuration=e}get attemptAbsoluteDuration(){return this._attemptAbsoluteDurationLimit||"PT0H0M0S"}set attemptAbsoluteDuration(e){this._attemptAbsoluteDurationLimit=e}get activityAbsoluteDuration(){return this._activityAbsoluteDurationLimit||"PT0H0M0S"}set activityAbsoluteDuration(e){this._activityAbsoluteDurationLimit=e}get attemptAbsoluteDurationValue(){return this._attemptAbsoluteDurationValue}set attemptAbsoluteDurationValue(e){if(!n(e,Z))throw new A(this._cmi_element+".attemptAbsoluteDurationValue",w.TYPE_MISMATCH);this._attemptAbsoluteDurationValue=e}get attemptExperiencedDurationValue(){return this._attemptExperiencedDurationValue}set attemptExperiencedDurationValue(e){if(!n(e,Z))throw new A(this._cmi_element+".attemptExperiencedDurationValue",w.TYPE_MISMATCH);this._attemptExperiencedDurationValue=e}get activityAbsoluteDurationValue(){return this._activityAbsoluteDurationValue}set activityAbsoluteDurationValue(e){if(!n(e,Z))throw new A(this._cmi_element+".activityAbsoluteDurationValue",w.TYPE_MISMATCH);this._activityAbsoluteDurationValue=e}get activityExperiencedDurationValue(){return this._activityExperiencedDurationValue}set activityExperiencedDurationValue(e){if(!n(e,Z))throw new A(this._cmi_element+".activityExperiencedDurationValue",w.TYPE_MISMATCH);this._activityExperiencedDurationValue=e}get activityStartTimestampUtc(){return this._activityStartTimestampUtc}set activityStartTimestampUtc(timestamp){this._activityStartTimestampUtc=timestamp}get attemptStartTimestampUtc(){return this._attemptStartTimestampUtc}set attemptStartTimestampUtc(timestamp){this._attemptStartTimestampUtc=timestamp}get activityEndedDate(){return this._activityEndedDate}set activityEndedDate(e){this._activityEndedDate=e}get sequencingControls(){return this._sequencingControls}set sequencingControls(e){this._sequencingControls=e}get sequencingRules(){return this._sequencingRules}set sequencingRules(e){this._sequencingRules=e}get rollupRules(){return this._rollupRules}set rollupRules(e){this._rollupRules=e}get rollupConsiderations(){return{...this._rollupConsiderations}}set rollupConsiderations(e){this._rollupConsiderations={...e}}applyRollupConsiderations(e){this._rollupConsiderations={...this._rollupConsiderations,...e}}get requiredForSatisfied(){return this._requiredForSatisfied}set requiredForSatisfied(e){this._requiredForSatisfied=e}get requiredForNotSatisfied(){return this._requiredForNotSatisfied}set requiredForNotSatisfied(e){this._requiredForNotSatisfied=e}get requiredForCompleted(){return this._requiredForCompleted}set requiredForCompleted(e){this._requiredForCompleted=e}get requiredForIncomplete(){return this._requiredForIncomplete}set requiredForIncomplete(e){this._requiredForIncomplete=e}get wasSkipped(){return this._wasSkipped}set wasSkipped(e){this._wasSkipped=e}get attemptProgressStatus(){return this._attemptProgressStatus}set attemptProgressStatus(e){this._attemptProgressStatus=e}get wasAutoCompleted(){return this._wasAutoCompleted}set wasAutoCompleted(e){this._wasAutoCompleted=e}get wasAutoSatisfied(){return this._wasAutoSatisfied}set wasAutoSatisfied(e){this._wasAutoSatisfied=e}get completedByMeasure(){return this._completedByMeasure}set completedByMeasure(e){this._completedByMeasure=e}get minProgressMeasure(){return this._minProgressMeasure}set minProgressMeasure(e){if(0>e||e>1)throw new A(this._cmi_element+".minProgressMeasure",w.TYPE_MISMATCH);this._minProgressMeasure=e}get progressWeight(){return this._progressWeight}set progressWeight(e){if(0>e)throw new A(this._cmi_element+".progressWeight",w.TYPE_MISMATCH);this._progressWeight=e}get attemptCompletionAmountStatus(){return this._attemptCompletionAmountStatus}set attemptCompletionAmountStatus(e){this._attemptCompletionAmountStatus=e}get primaryObjective(){return this._primaryObjective}set primaryObjective(e){this._primaryObjective=e,this._primaryObjective&&(this._primaryObjective.isPrimary=!0,null!==this._primaryObjective.minNormalizedMeasure&&(this._scaledPassingScore=this._primaryObjective.minNormalizedMeasure??this._scaledPassingScore),this._primaryObjective.updateFromActivity(this)),this.syncPrimaryObjectiveCollection()}get objectives(){return this._objectives.filter(e=>e.id!==this._primaryObjective?.id)}set objectives(objectives){this._objectives=[...objectives],this.syncPrimaryObjectiveCollection()}addObjective(e){this._objectives.find(t=>t.id===e.id)||this._objectives.push(e)}syncPrimaryObjectiveCollection(){if(!this._primaryObjective)return void(this._objectives=this._objectives.filter(e=>!e.isPrimary));const e=this._objectives.findIndex(e=>e.id===this._primaryObjective?.id);0>e?this._objectives=[this._primaryObjective,...this._objectives]:this._objectives[e]=this._primaryObjective}getObjectiveById(e){if(this._primaryObjective?.id===e)return{objective:this._primaryObjective,isPrimary:!0};const t=this._objectives.find(t=>t.id===e);return t?{objective:t,isPrimary:!1}:null}getAllObjectives(){const objectives=[];this._primaryObjective&&objectives.push(this._primaryObjective);const e=this._objectives.filter(e=>e!==this._primaryObjective&&e.id!==this._primaryObjective?.id);return objectives.concat(e)}updatePrimaryObjectiveFromActivity(){this._primaryObjective&&this._primaryObjective.updateFromActivity(this)}isObjectiveDirty(e){switch(e){case"satisfiedStatus":return this._objectiveSatisfiedStatusDirty;case"normalizedMeasure":return this._objectiveNormalizedMeasureDirty;case"measureStatus":return this._objectiveMeasureStatusDirty}}clearObjectiveDirty(e){switch(e){case"satisfiedStatus":this._objectiveSatisfiedStatusDirty=!1;break;case"normalizedMeasure":this._objectiveNormalizedMeasureDirty=!1;break;case"measureStatus":this._objectiveMeasureStatusDirty=!1}}clearAllObjectiveDirty(){this._objectiveSatisfiedStatusDirty=!1,this._objectiveNormalizedMeasureDirty=!1,this._objectiveMeasureStatusDirty=!1}setPrimaryObjectiveState(e,t,i,s,r,n){this._objectiveSatisfiedStatus!==e&&(this._objectiveSatisfiedStatus=e,this._objectiveSatisfiedStatusDirty=!0),this._objectiveSatisfiedStatusKnown=!0,this._objectiveMeasureStatus!==t&&(this._objectiveMeasureStatus=t,this._objectiveMeasureStatusDirty=!0),this._objectiveNormalizedMeasure!==i&&(this._objectiveNormalizedMeasure=i,this._objectiveNormalizedMeasureDirty=!0),this._progressMeasure=s,this._progressMeasureStatus=r,this._completionStatus=n,this._primaryObjective&&(this._primaryObjective.satisfiedStatus=e,this._primaryObjective.measureStatus=t,this._primaryObjective.normalizedMeasure=i,this._primaryObjective.progressMeasure=s,this._primaryObjective.progressMeasureStatus=r,this._primaryObjective.completionStatus=n)}getObjectiveStateSnapshot(){return{primary:this._primaryObjective?{id:this._primaryObjective.id,satisfiedStatus:this.objectiveSatisfiedStatus,measureStatus:this.objectiveMeasureStatus,normalizedMeasure:this.objectiveNormalizedMeasure,progressMeasure:this.progressMeasure??0,progressMeasureStatus:this.progressMeasureStatus,progressStatus:this._primaryObjective.progressStatus,completionStatus:this.completionStatus,satisfiedByMeasure:this._primaryObjective.satisfiedByMeasure,minNormalizedMeasure:this._primaryObjective.minNormalizedMeasure}:null,objectives:this._objectives.map(e=>({id:e.id,satisfiedStatus:e.satisfiedStatus,measureStatus:e.measureStatus,normalizedMeasure:e.normalizedMeasure,progressMeasure:e.progressMeasure,progressMeasureStatus:e.progressMeasureStatus,progressStatus:e.progressStatus,completionStatus:e.completionStatus,satisfiedByMeasure:e.satisfiedByMeasure,minNormalizedMeasure:e.minNormalizedMeasure}))}}applyObjectiveStateSnapshot(e){if(e.primary){const t=this.getObjectiveById(e.primary.id);if(t&&t.isPrimary){const i=e.primary;t.objective.satisfiedByMeasure=i.satisfiedByMeasure??t.objective.satisfiedByMeasure,t.objective.minNormalizedMeasure=void 0!==i.minNormalizedMeasure?i.minNormalizedMeasure:t.objective.minNormalizedMeasure,this.setPrimaryObjectiveState(i.satisfiedStatus,i.measureStatus,i.normalizedMeasure,i.progressMeasure,i.progressMeasureStatus,i.completionStatus)}}for(const t of e.objectives){const e=this.getObjectiveById(t.id);if(e&&!e.isPrimary){const i=e.objective;i.satisfiedStatus=t.satisfiedStatus,i.measureStatus=t.measureStatus,i.normalizedMeasure=t.normalizedMeasure,i.progressMeasure=t.progressMeasure,i.progressMeasureStatus=t.progressMeasureStatus,i.completionStatus=t.completionStatus,i.satisfiedByMeasure=t.satisfiedByMeasure??i.satisfiedByMeasure,i.minNormalizedMeasure=void 0!==t.minNormalizedMeasure?t.minNormalizedMeasure:i.minNormalizedMeasure}}}getAvailableChildren(){return 0===this._children.length?[]:null!==this._processedChildren?this._processedChildren:this._children}setProcessedChildren(e){this._processedChildren=e}resetProcessedChildren(){this._processedChildren=null}get isNewAttempt(){return this._isNewAttempt}set isNewAttempt(e){this._isNewAttempt=e}get launchData(){return this._launchData}set launchData(e){this._launchData=e}get credit(){return this._credit}set credit(credit){this._credit=credit}get maxTimeAllowed(){return this._maxTimeAllowed}set maxTimeAllowed(e){this._maxTimeAllowed=e}get completionThreshold(){return this._completionThreshold}set completionThreshold(e){this._completionThreshold=e}getSuspensionState(){return{id:this._id,title:this._title,isVisible:this._isVisible,isActive:this._isActive,isSuspended:this._isSuspended,isCompleted:this._isCompleted,completionStatus:this._completionStatus,successStatus:this._successStatus,attemptCount:this._attemptCount,attemptCompletionAmount:this._attemptCompletionAmount,attemptAbsoluteDuration:this._attemptAbsoluteDuration,attemptExperiencedDuration:this._attemptExperiencedDuration,activityAbsoluteDuration:this._activityAbsoluteDuration,activityExperiencedDuration:this._activityExperiencedDuration,attemptAbsoluteDurationValue:this._attemptAbsoluteDurationValue,attemptExperiencedDurationValue:this._attemptExperiencedDurationValue,activityAbsoluteDurationValue:this._activityAbsoluteDurationValue,activityExperiencedDurationValue:this._activityExperiencedDurationValue,activityStartTimestampUtc:this._activityStartTimestampUtc,attemptStartTimestampUtc:this._attemptStartTimestampUtc,objectiveSatisfiedStatus:this._objectiveSatisfiedStatus,objectiveSatisfiedStatusKnown:this._objectiveSatisfiedStatusKnown,objectiveMeasureStatus:this._objectiveMeasureStatus,objectiveNormalizedMeasure:this._objectiveNormalizedMeasure,scaledPassingScore:this._scaledPassingScore,progressMeasure:this._progressMeasure,progressMeasureStatus:this._progressMeasureStatus,location:this._location,attemptAbsoluteStartTime:this._attemptAbsoluteStartTime,activityAttemptActive:this._activityAttemptActive,isHiddenFromChoice:this._isHiddenFromChoice,isAvailable:this._isAvailable,rollupConsiderations:{...this._rollupConsiderations},wasSkipped:this._wasSkipped,attemptProgressStatus:this._attemptProgressStatus,wasAutoCompleted:this._wasAutoCompleted,wasAutoSatisfied:this._wasAutoSatisfied,completedByMeasure:this._completedByMeasure,minProgressMeasure:this._minProgressMeasure,progressWeight:this._progressWeight,attemptCompletionAmountStatus:this._attemptCompletionAmountStatus,processedChildren:this._processedChildren?this._processedChildren.map(e=>e.id):null,isNewAttempt:this._isNewAttempt,selectionCountStatus:this._sequencingControls.selectionCountStatus,reorderChildren:this._sequencingControls.reorderChildren,primaryObjective:this._primaryObjective?{id:this._primaryObjective.id,satisfiedStatus:this._primaryObjective.satisfiedStatus,measureStatus:this._primaryObjective.measureStatus,normalizedMeasure:this._primaryObjective.normalizedMeasure,progressMeasure:this._primaryObjective.progressMeasure,progressMeasureStatus:this._primaryObjective.progressMeasureStatus,completionStatus:this._primaryObjective.completionStatus,satisfiedByMeasure:this._primaryObjective.satisfiedByMeasure,minNormalizedMeasure:this._primaryObjective.minNormalizedMeasure,progressStatus:this._primaryObjective.progressStatus,mapInfo:this._primaryObjective.mapInfo}:null,objectives:this._objectives.map(e=>({id:e.id,satisfiedStatus:e.satisfiedStatus,measureStatus:e.measureStatus,normalizedMeasure:e.normalizedMeasure,progressMeasure:e.progressMeasure,progressMeasureStatus:e.progressMeasureStatus,completionStatus:e.completionStatus,satisfiedByMeasure:e.satisfiedByMeasure,minNormalizedMeasure:e.minNormalizedMeasure,progressStatus:e.progressStatus,mapInfo:e.mapInfo})),children:this._children.map(e=>e.getSuspensionState())}}restoreSuspensionState(e){if(e){if(this._isVisible=e.isVisible??this._isVisible,this._isActive=e.isActive??this._isActive,this._isSuspended=e.isSuspended??this._isSuspended,this._isCompleted=e.isCompleted??this._isCompleted,this._completionStatus=e.completionStatus??this._completionStatus,this._successStatus=e.successStatus??this._successStatus,this._attemptCount=e.attemptCount??this._attemptCount,this._attemptCompletionAmount=e.attemptCompletionAmount??this._attemptCompletionAmount,this._attemptAbsoluteDuration=e.attemptAbsoluteDuration??this._attemptAbsoluteDuration,this._attemptExperiencedDuration=e.attemptExperiencedDuration??this._attemptExperiencedDuration,this._activityAbsoluteDuration=e.activityAbsoluteDuration??this._activityAbsoluteDuration,this._activityExperiencedDuration=e.activityExperiencedDuration??this._activityExperiencedDuration,this._attemptAbsoluteDurationValue=e.attemptAbsoluteDurationValue??this._attemptAbsoluteDurationValue,this._attemptExperiencedDurationValue=e.attemptExperiencedDurationValue??this._attemptExperiencedDurationValue,this._activityAbsoluteDurationValue=e.activityAbsoluteDurationValue??this._activityAbsoluteDurationValue,this._activityExperiencedDurationValue=e.activityExperiencedDurationValue??this._activityExperiencedDurationValue,this._activityStartTimestampUtc=e.activityStartTimestampUtc??this._activityStartTimestampUtc,this._attemptStartTimestampUtc=e.attemptStartTimestampUtc??this._attemptStartTimestampUtc,this._objectiveSatisfiedStatus=e.objectiveSatisfiedStatus??this._objectiveSatisfiedStatus,this._objectiveSatisfiedStatusKnown=e.objectiveSatisfiedStatusKnown??this._objectiveSatisfiedStatusKnown,this._objectiveMeasureStatus=e.objectiveMeasureStatus??this._objectiveMeasureStatus,this._objectiveNormalizedMeasure=e.objectiveNormalizedMeasure??this._objectiveNormalizedMeasure,this._scaledPassingScore=e.scaledPassingScore??this._scaledPassingScore,this._progressMeasure=e.progressMeasure??this._progressMeasure,this._progressMeasureStatus=e.progressMeasureStatus??this._progressMeasureStatus,this._location=e.location??this._location,this._attemptAbsoluteStartTime=e.attemptAbsoluteStartTime??this._attemptAbsoluteStartTime,this._activityAttemptActive=e.activityAttemptActive??this._activityAttemptActive,this._isHiddenFromChoice=e.isHiddenFromChoice??this._isHiddenFromChoice,this._isAvailable=e.isAvailable??this._isAvailable,e.rollupConsiderations&&(this._rollupConsiderations={...e.rollupConsiderations}),this._wasSkipped=e.wasSkipped??this._wasSkipped,this._attemptProgressStatus=e.attemptProgressStatus??this._attemptProgressStatus,this._wasAutoCompleted=e.wasAutoCompleted??this._wasAutoCompleted,this._wasAutoSatisfied=e.wasAutoSatisfied??this._wasAutoSatisfied,this._completedByMeasure=e.completedByMeasure??this._completedByMeasure,this._minProgressMeasure=e.minProgressMeasure??this._minProgressMeasure,this._progressWeight=e.progressWeight??this._progressWeight,this._attemptCompletionAmountStatus=e.attemptCompletionAmountStatus??this._attemptCompletionAmountStatus,this._isNewAttempt=e.isNewAttempt??this._isNewAttempt,void 0!==e.selectionCountStatus&&(this._sequencingControls.selectionCountStatus=e.selectionCountStatus),void 0!==e.reorderChildren&&(this._sequencingControls.reorderChildren=e.reorderChildren),e.processedChildren){const t=new Map(this._children.map(e=>[e.id,e]));this._processedChildren=e.processedChildren.map(id=>t.get(id)).filter(e=>void 0!==e)}else this._processedChildren=null;if(e.primaryObjective&&this._primaryObjective&&(this._primaryObjective.satisfiedStatus=e.primaryObjective.satisfiedStatus??this._primaryObjective.satisfiedStatus,this._primaryObjective.measureStatus=e.primaryObjective.measureStatus??this._primaryObjective.measureStatus,this._primaryObjective.normalizedMeasure=e.primaryObjective.normalizedMeasure??this._primaryObjective.normalizedMeasure,this._primaryObjective.progressMeasure=e.primaryObjective.progressMeasure??this._primaryObjective.progressMeasure,this._primaryObjective.progressMeasureStatus=e.primaryObjective.progressMeasureStatus??this._primaryObjective.progressMeasureStatus,this._primaryObjective.completionStatus=e.primaryObjective.completionStatus??this._primaryObjective.completionStatus,this._primaryObjective.progressStatus=e.primaryObjective.progressStatus??this._primaryObjective.progressStatus),e.objectives)for(const t of e.objectives){const e=this._objectives.find(e=>e.id===t.id);e&&(e.satisfiedStatus=t.satisfiedStatus??e.satisfiedStatus,e.measureStatus=t.measureStatus??e.measureStatus,e.normalizedMeasure=t.normalizedMeasure??e.normalizedMeasure,e.progressMeasure=t.progressMeasure??e.progressMeasure,e.progressMeasureStatus=t.progressMeasureStatus??e.progressMeasureStatus,e.completionStatus=t.completionStatus??e.completionStatus,e.progressStatus=t.progressStatus??e.progressStatus)}if(e.children&&Array.isArray(e.children))for(let t=0;e.children.length>t&&this._children.length>t;t++){const i=e.children[t],s=this._children.find(e=>e.id===i.id);s&&s.restoreSuspensionState(i)}}}toJSON(){this.jsonString=!0;const result={id:this._id,title:this._title,isVisible:this._isVisible,isActive:this._isActive,isSuspended:this._isSuspended,isCompleted:this._isCompleted,completionStatus:this._completionStatus,successStatus:this._successStatus,attemptCount:this._attemptCount,attemptCompletionAmount:this._attemptCompletionAmount,attemptAbsoluteDuration:this._attemptAbsoluteDuration,attemptExperiencedDuration:this._attemptExperiencedDuration,activityAbsoluteDuration:this._activityAbsoluteDuration,activityExperiencedDuration:this._activityExperiencedDuration,objectiveSatisfiedStatus:this._objectiveSatisfiedStatus,objectiveSatisfiedStatusKnown:this._objectiveSatisfiedStatusKnown,objectiveMeasureStatus:this._objectiveMeasureStatus,objectiveNormalizedMeasure:this._objectiveNormalizedMeasure,rollupConsiderations:{...this._rollupConsiderations},wasSkipped:this._wasSkipped,completedByMeasure:this._completedByMeasure,minProgressMeasure:this._minProgressMeasure,progressWeight:this._progressWeight,attemptCompletionAmountStatus:this._attemptCompletionAmountStatus,hideLmsUi:[...this._hideLmsUi],auxiliaryResources:this._auxiliaryResources.map(e=>({...e})),children:this._children.map(e=>e.toJSON())};return this.jsonString=!1,result}get auxiliaryResources(){return this._auxiliaryResources.map(e=>({...e}))}set auxiliaryResources(e){const t=[],i=new Set;for(const s of e||[]){if(!s)continue;const e="string"==typeof s.resourceId?s.resourceId.trim():"",r="string"==typeof s.purpose?s.purpose.trim():"";e&&!i.has(e)&&(i.add(e),t.push({resourceId:e,purpose:r}))}this._auxiliaryResources=t}addAuxiliaryResource(e){this.auxiliaryResources=[...this._auxiliaryResources,e]}captureRollupStatus(){return{measureStatus:this._objectiveMeasureStatus,normalizedMeasure:this._objectiveNormalizedMeasure,objectiveProgressStatus:null!=this._objectiveSatisfiedStatus,objectiveSatisfiedStatus:this._objectiveSatisfiedStatus,attemptProgressStatus:this._completionStatus!==q,attemptCompletionStatus:this._completionStatus===D}}static compareRollupStatus(e,t){return e.measureStatus===t.measureStatus&&1e-4>Math.abs(e.normalizedMeasure-t.normalizedMeasure)&&e.objectiveProgressStatus===t.objectiveProgressStatus&&e.objectiveSatisfiedStatus===t.objectiveSatisfiedStatus&&e.attemptProgressStatus===t.attemptProgressStatus&&e.attemptCompletionStatus===t.attemptCompletionStatus}get hideLmsUi(){return[...this._hideLmsUi]}set hideLmsUi(e){const t=new Set(de),i=new Set,s=[];for(const r of e)t.has(r)&&!i.has(r)&&(i.add(r),s.push(r));this._hideLmsUi=s}}class nt{checkChildForRollupSubprocess(e,t,i){if(!1===e.sequencingControls.tracked)return!1;let s=!1;if("measure"===t||"objective"===t){if(!e.sequencingControls.rollupObjectiveSatisfied)return!1;s=!0;const t=e.requiredForSatisfied,r=e.requiredForNotSatisfied;"satisfied"===i&&"ifNotSuspended"===t||"notSatisfied"===i&&"ifNotSuspended"===r?(!e.attemptProgressStatus||e.attemptCount>0&&e.isSuspended)&&(s=!1):"satisfied"===i&&"ifAttempted"===t||"notSatisfied"===i&&"ifAttempted"===r?e.attemptProgressStatus&&0!==e.attemptCount||(s=!1):("satisfied"===i&&"ifNotSkipped"===t||"notSatisfied"===i&&"ifNotSkipped"===r)&&e.wasSkipped&&(s=!1)}if("progress"===t){if(!e.sequencingControls.rollupProgressCompletion)return!1;s=!0;const t=e.requiredForCompleted,r=e.requiredForIncomplete;"completed"===i&&"ifNotSuspended"===t||"incomplete"===i&&"ifNotSuspended"===r?(!e.attemptProgressStatus||e.attemptCount>0&&e.isSuspended)&&(s=!1):"completed"===i&&"ifAttempted"===t||"incomplete"===i&&"ifAttempted"===r?e.attemptProgressStatus&&0!==e.attemptCount||(s=!1):("completed"===i&&"ifNotSkipped"===t||"incomplete"===i&&"ifNotSkipped"===r)&&e.wasSkipped&&(s=!1)}return!(s&&!e.isAvailable)&&s}filterChildrenForRequirement(e,t,mode,i){return e.filter(e=>this.shouldIncludeChildForRollup(e,t,mode,i))}shouldIncludeChildForRollup(e,t,mode,i){return!(!this.checkChildForRollupSubprocess(e,t,mode)||"objective"===t&&!i.measureSatisfactionIfActive&&(e.activityAttemptActive||e.isActive))}isChildSatisfiedForRollup(e){return!0===e.objectiveSatisfiedStatus||!1!==e.objectiveSatisfiedStatus&&e.successStatus===N}isChildCompletedForRollup(e){return!("completed"!==e.completionStatus&&!e.isCompleted)}getTrackableChildren(e){return e.children.filter(e=>!1!==e.sequencingControls.tracked)}}class ot{constructor(e){this.childFilter=e}evaluateRollupRule(e,t){const i=e.getAvailableChildren();let s=0,r=0;for(const e of i){let i=!1;switch(t.action){case Qe.SATISFIED:i=this.childFilter.checkChildForRollupSubprocess(e,"objective","satisfied");break;case Qe.NOT_SATISFIED:i=this.childFilter.checkChildForRollupSubprocess(e,"objective","notSatisfied");break;case Qe.COMPLETED:i=this.childFilter.checkChildForRollupSubprocess(e,"progress","completed");break;case Qe.INCOMPLETE:i=this.childFilter.checkChildForRollupSubprocess(e,"progress","incomplete")}i&&(s++,this.evaluateRollupConditionsSubprocess(e,t)&&r++)}return t.consideration===Ze.ALL?s>0&&r===s:null!==t.minimumCount?r>=t.minimumCount:null!==t.minimumPercent?(s>0?r/s:0)>=t.minimumPercent:s>0&&r===s}evaluateRollupConditionsSubprocess(e,t){if(0===t.conditions.length)return!0;switch(t.consideration){case Ze.ALL:return t.conditions.every(t=>t.evaluate(e));case Ze.ANY:return t.conditions.some(t=>t.evaluate(e));case Ze.NONE:return!t.conditions.some(t=>t.evaluate(e));case Ze.AT_LEAST_COUNT:case Ze.AT_LEAST_PERCENT:return t.conditions.every(t=>t.evaluate(e));default:return!1}}evaluateRulesForAction(e,t,i){const s=t.filter(e=>e.action===i);if(0===s.length)return null;for(const t of s)if(this.evaluateRollupRule(e,t))return!0;return!1}}class at{constructor(e,t){this.childFilter=e,this.eventCallback=t||null}measureRollupProcess(e){if(!e.sequencingControls.rollupObjectiveSatisfied)return[];const t=e.getAvailableChildren();if(0===t.length)return[];const i=e.rollupConsiderations,s=t.filter(e=>!(!this.childFilter.checkChildForRollupSubprocess(e,"measure")||!e.objectiveMeasureStatus||null===e.objectiveNormalizedMeasure||!i.measureSatisfactionIfActive&&(e.activityAttemptActive||e.isActive)));if(0===s.length)return e.objectiveMeasureStatus=!1,[];const r=this.calculateComplexWeightedMeasure(e,s,{enableThresholdBias:!1});return e.objectiveNormalizedMeasure=r,e.objectiveMeasureStatus=!0,this.identifyActivityClusters(s)}completionMeasureRollupProcess(e){const t=e.getAvailableChildren();if(0===t.length)return;const i=t.filter(e=>e.attemptCompletionAmountStatus);if(0===i.length)return void(e.attemptCompletionAmountStatus=!1);let s=0,r=0;for(const e of i)s+=e.attemptCompletionAmount*e.progressWeight,r+=e.progressWeight;r>0&&(e.attemptCompletionAmount=s/r,e.attemptCompletionAmountStatus=!0)}calculateComplexWeightedMeasure(e,t,i){let s=0,r=0;const n=[],o=i?.enableThresholdBias??!0;for(const e of t)if(this.childFilter.checkChildForRollupSubprocess(e,"measure")&&e.objectiveMeasureStatus&&null!==e.objectiveNormalizedMeasure){const t=this.calculateAdjustedWeight(e,e.sequencingControls.objectiveMeasureWeight,o);s+=e.objectiveNormalizedMeasure*t,r+=t,n.push({childId:e.id,measure:e.objectiveNormalizedMeasure,weight:t})}return this.eventCallback?.("complex_weighting_calculated",{activityId:e.id,weightingDetails:n,totalWeight:r,totalWeightedMeasure:s,result:r>0?s/r:0}),r>0?s/r:0}calculateAdjustedWeight(e,t){let i=2>=arguments.length||void 0===arguments[2]||arguments[2],s=t;return"completed"!==e.completionStatus&&(s*=.8),e.attemptCount>1&&(s*=Math.max(.5,1-.1*(e.attemptCount-1))),e.hasAttemptLimitExceeded()&&(s*=.6),i&&e.objectiveMeasureStatus&&(s*=(e.scaledPassingScore??.7)>e.objectiveNormalizedMeasure?.95:1.05),Math.max(0,s)}identifyActivityClusters(e){const t=[];for(const i of e)i.children.length>0&&i.sequencingControls.flow&&t.push(i);return t}}class ct{constructor(e,t,i){this.childFilter=e,this.ruleEvaluator=t,this.eventCallback=i||null}objectiveRollupProcess(e){const t=this.objectiveRollupUsingRules(e,e.rollupRules.rules);if(null!==t)return e.objectiveSatisfiedStatus=t,void this.syncPrimaryObjectiveFromActivity(e);const i=this.objectiveRollupUsingMeasure(e);if(null!==i)return e.objectiveSatisfiedStatus=i,void this.syncPrimaryObjectiveFromActivity(e);e.objectiveSatisfiedStatus=this.objectiveRollupUsingDefault(e),this.syncPrimaryObjectiveFromActivity(e)}objectiveRollupUsingRules(e,t){const i=t.filter(e=>e.action===Qe.SATISFIED),s=t.filter(e=>e.action===Qe.NOT_SATISFIED);for(const t of i)if(this.ruleEvaluator.evaluateRollupRule(e,t))return!0;for(const t of s)if(this.ruleEvaluator.evaluateRollupRule(e,t))return!1;return null}objectiveRollupUsingMeasure(e){return e.objectiveMeasureStatus&&null!==e.scaledPassingScore?e.objectiveNormalizedMeasure>=e.scaledPassingScore:null}objectiveRollupUsingDefault(e){const t=e.getAvailableChildren();if(0===t.length)return!1;const i=e.rollupConsiderations,s=t.filter(e=>!(!this.childFilter.checkChildForRollupSubprocess(e,"objective","satisfied")||!this.childFilter.checkChildForRollupSubprocess(e,"objective","notSatisfied")||!i.measureSatisfactionIfActive&&(e.activityAttemptActive||e.isActive)));return 0!==s.length&&!s.some(e=>!this.childFilter.isChildSatisfiedForRollup(e))&&s.every(e=>this.childFilter.isChildSatisfiedForRollup(e))}syncPrimaryObjectiveFromActivity(e){e.primaryObjective&&(e.primaryObjective.satisfiedStatus=e.objectiveSatisfiedStatus,e.primaryObjective.satisfiedStatusKnown=e.objectiveSatisfiedStatusKnown,e.primaryObjective.measureStatus=e.objectiveMeasureStatus,e.primaryObjective.normalizedMeasure=e.objectiveNormalizedMeasure,e.primaryObjective.progressMeasure=e.progressMeasure,e.primaryObjective.progressMeasureStatus=e.progressMeasureStatus,e.primaryObjective.completionStatus=e.completionStatus)}}class lt{constructor(e,t,i,s){this.childFilter=e,this.ruleEvaluator=t,this.objectiveProcessor=i,this.eventCallback=s||null}activityProgressRollupProcess(e){if(this.activityProgressRollupUsingMeasure(e))return;const t=e.rollupRules,i=t.rules.filter(e=>e.action===Qe.COMPLETED),s=t.rules.filter(e=>e.action===Qe.INCOMPLETE);for(const t of i)if(this.ruleEvaluator.evaluateRollupRule(e,t))return e.completionStatus=D,void this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e);for(const t of s)if(this.ruleEvaluator.evaluateRollupRule(e,t))return e.completionStatus=L,void this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e);const r=e.getAvailableChildren().filter(e=>this.childFilter.checkChildForRollupSubprocess(e,"progress","completed")&&this.childFilter.checkChildForRollupSubprocess(e,"progress","incomplete"));return 0===r.length||r.some(e=>!this.childFilter.isChildCompletedForRollup(e))?(e.completionStatus=L,void this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e)):(e.completionStatus=D,void this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e))}activityProgressRollupUsingMeasure(e){return!!e.completedByMeasure&&(e.attemptCompletionAmountStatus?(e.completionStatus=e.minProgressMeasure>e.attemptCompletionAmount?L:D,this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e),!0):(e.completionStatus=q,this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e),!0))}}class ut{constructor(e){this.eventCallback=e||null}durationRollupProcess(e){if(0===e.children.length)return;const t=e.getAvailableChildren();if(0===t.length)return;let s=null,n=null,o=null,a=null,c=0,l=0;for(const i of t){i.activityStartTimestampUtc&&(s&&i.activityStartTimestampUtc>=s||(s=i.activityStartTimestampUtc)),i.activityEndedDate&&(o&&o>=i.activityEndedDate||(o=i.activityEndedDate));const t="PT0H0M0S"!==i.activityExperiencedDurationValue?i.activityExperiencedDurationValue:i.activityExperiencedDuration;if(t&&"PT0H0M0S"!==t&&(c+=r(t,Z)),!e.attemptStartTimestampUtc||i.attemptStartTimestampUtc&&i.attemptStartTimestampUtc>=e.attemptStartTimestampUtc){i.attemptStartTimestampUtc&&(n&&i.attemptStartTimestampUtc>=n||(n=i.attemptStartTimestampUtc)),i.activityEndedDate&&(a&&a>=i.activityEndedDate||(a=i.activityEndedDate));const e="PT0H0M0S"!==i.attemptExperiencedDurationValue?i.attemptExperiencedDurationValue:i.attemptExperiencedDuration;e&&"PT0H0M0S"!==e&&(l+=r(e,Z))}}if(null!==s){if(e.activityStartTimestampUtc=s,!e.attemptStartTimestampUtc&&n&&(e.attemptStartTimestampUtc=n),e.activityEndedDate=o,o&&e.activityStartTimestampUtc){const t=new Date(e.activityStartTimestampUtc),s=o.getTime()-t.getTime();e.activityAbsoluteDurationValue=i(Math.max(0,s/1e3))}if(a&&e.attemptStartTimestampUtc){const t=new Date(e.attemptStartTimestampUtc),s=a.getTime()-t.getTime();e.attemptAbsoluteDurationValue=i(Math.max(0,s/1e3))}e.activityExperiencedDurationValue=i(c),e.attemptExperiencedDurationValue=i(l),this.eventCallback?.("duration_rollup_completed",{activityId:e.id,activityAbsoluteDuration:e.activityAbsoluteDurationValue,attemptAbsoluteDuration:e.attemptAbsoluteDurationValue,activityExperiencedDuration:e.activityExperiencedDurationValue,attemptExperiencedDuration:e.attemptExperiencedDurationValue,childCount:t.length})}}}class ht{constructor(e,t,i,s){this.processingClusters=new Set,this.measureProcessor=e,this.objectiveProcessor=t,this.progressProcessor=i,this.eventCallback=s||null}processCrossClusterDependencies(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(10>i)if(this.processingClusters.has(e.id))this.eventCallback?.("cross_cluster_skip_reentrant",{activityId:e.id});else try{this.processingClusters.add(e.id),this.eventCallback?.("cross_cluster_processing_started",{activityId:e.id,clusterCount:t.length,depth:i});const s=new Map;for(const e of t)this.analyzeCrossClusterDependencies(e,s);const r=this.resolveDependencyOrder(s);for(const e of r){const s=t.find(t=>t.id===e);s&&this.processClusterRollup(s,i)}this.eventCallback?.("cross_cluster_processing_completed",{activityId:e.id,processedClusters:r.length,dependencyMap:Array.from(s.entries())})}catch(t){this.eventCallback?.("cross_cluster_processing_error",{activityId:e.id,error:t instanceof Error?t.message:t+""})}finally{this.processingClusters.delete(e.id)}else this.eventCallback?.("cross_cluster_max_depth_reached",{activityId:e.id,depth:i,maxDepth:10})}identifyActivityClusters(e){const t=[];for(const i of e)i.children.length>0&&i.sequencingControls.flow&&t.push(i);return t}analyzeCrossClusterDependencies(e,t){t.set(e.id,[])}resolveDependencyOrder(e){const t=[],i=new Set,s=id=>{if(t.includes(id))return;if(i.has(id))return void this.eventCallback?.("circular_dependency_detected",{activityId:id});i.add(id);const r=e.get(id)||[];for(const e of r)s(e);i.delete(id),t.push(id)};for(const id of Array.from(e.keys()))s(id);return t}processClusterRollup(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;const i=this.measureProcessor.measureRollupProcess(e);e.sequencingControls.rollupObjectiveSatisfied&&this.objectiveProcessor.objectiveRollupProcess(e),e.sequencingControls.rollupProgressCompletion&&this.progressProcessor.activityProgressRollupProcess(e),i.length>1&&this.processCrossClusterDependencies(e,i,t+1)}}class dt{constructor(e){this.eventCallback=e||null}processGlobalObjectiveMapping(e,t){try{this.eventCallback?.("global_objective_processing_started",{activityId:e.id,globalObjectiveCount:t.size});const i=[];this.collectActivitiesRecursive(e,i);for(const e of i)this.syncGlobalObjectivesWritePhase(e,t);for(const e of i)this.syncGlobalObjectivesReadPhase(e,t);this.eventCallback?.("global_objective_processing_completed",{activityId:e.id,processedObjectives:t.size})}catch(t){this.eventCallback?.("global_objective_processing_error",{activityId:e.id,error:t instanceof Error?t.message:t+""})}}collectActivitiesRecursive(e,result){result.push(e);for(const t of e.children)this.collectActivitiesRecursive(t,result)}syncGlobalObjectivesWritePhase(e,t){const objectives=e.getAllObjectives();for(const i of objectives){const s=i.mapInfo.length>0?i.mapInfo:[this.createDefaultMapInfo(i)];for(const r of s){const s=this.ensureGlobalObjectiveEntry(t,r.targetObjectiveID||i.id,i);r.writeSatisfiedStatus&&i.measureStatus&&i.isDirty("satisfiedStatus")&&(s.satisfiedStatus=i.satisfiedStatus,s.satisfiedStatusKnown=!0,i.clearDirty("satisfiedStatus")),r.writeNormalizedMeasure&&i.measureStatus&&i.isDirty("normalizedMeasure")&&(s.normalizedMeasure=i.normalizedMeasure,s.normalizedMeasureKnown=!0,i.clearDirty("normalizedMeasure"),s.satisfiedByMeasure||i.satisfiedByMeasure)&&(s.satisfiedStatus=i.normalizedMeasure>=(i.minNormalizedMeasure??e.scaledPassingScore??.7),s.satisfiedStatusKnown=!0,i.clearDirty("satisfiedStatus")),r.writeCompletionStatus&&i.completionStatus!==q&&i.isDirty("completionStatus")&&(s.completionStatus=i.completionStatus,s.completionStatusKnown=!0,i.clearDirty("completionStatus")),r.writeProgressMeasure&&i.progressMeasureStatus&&i.isDirty("progressMeasure")&&(s.progressMeasure=i.progressMeasure,s.progressMeasureKnown=!0,i.clearDirty("progressMeasure")),r.updateAttemptData&&this.updateActivityAttemptData(e,s,i)}}}syncGlobalObjectivesReadPhase(e,t){const objectives=e.getAllObjectives();for(const i of objectives){const s=i.mapInfo.length>0?i.mapInfo:[this.createDefaultMapInfo(i)];for(const r of s){const s=t.get(r.targetObjectiveID||i.id);if(!s)continue;const n=i.isPrimary;r.readSatisfiedStatus&&s.satisfiedStatusKnown&&(i.satisfiedStatus=s.satisfiedStatus,i.measureStatus=!0),r.readNormalizedMeasure&&s.normalizedMeasureKnown&&(i.normalizedMeasure=s.normalizedMeasure,i.measureStatus=!0,s.satisfiedByMeasure||i.satisfiedByMeasure)&&(i.satisfiedStatus=s.normalizedMeasure>=(i.minNormalizedMeasure??e.scaledPassingScore??.7)),r.readProgressMeasure&&s.progressMeasureKnown&&(i.progressMeasure=s.progressMeasure,i.progressMeasureStatus=!0),r.readCompletionStatus&&s.completionStatusKnown&&(i.completionStatus=s.completionStatus),n&&i.applyToActivity(e),this.eventCallback?.("objective_synchronized",{activityId:e.id,objectiveId:i.id,globalState:s,synchronizationTime:(new Date).toISOString()})}}}synchronizeGlobalObjectives(e,t){const objectives=e.getAllObjectives();for(const i of objectives){const s=i.mapInfo.length>0?i.mapInfo:[this.createDefaultMapInfo(i)];for(const r of s){const s=this.ensureGlobalObjectiveEntry(t,r.targetObjectiveID||i.id,i);this.syncObjectiveState(e,i,r,s)}}}syncObjectiveState(e,t,i,s){try{const r=this.getLocalObjectiveState(e,t,t.isPrimary);i.readSatisfiedStatus&&s.satisfiedStatusKnown&&(t.satisfiedStatus=s.satisfiedStatus,t.measureStatus=!0),i.readNormalizedMeasure&&s.normalizedMeasureKnown&&(t.normalizedMeasure=s.normalizedMeasure,t.measureStatus=!0,s.satisfiedByMeasure||t.satisfiedByMeasure)&&(t.satisfiedStatus=s.normalizedMeasure>=(t.minNormalizedMeasure??e.scaledPassingScore??.7)),i.readProgressMeasure&&s.progressMeasureKnown&&(t.progressMeasure=s.progressMeasure,t.progressMeasureStatus=!0),i.readCompletionStatus&&s.completionStatusKnown&&(t.completionStatus=s.completionStatus),t.isPrimary&&t.applyToActivity(e),i.writeSatisfiedStatus&&t.measureStatus&&(s.satisfiedStatus=t.satisfiedStatus,s.satisfiedStatusKnown=!0),i.writeNormalizedMeasure&&t.measureStatus&&(s.normalizedMeasure=t.normalizedMeasure,s.normalizedMeasureKnown=!0,s.satisfiedByMeasure||t.satisfiedByMeasure)&&(s.satisfiedStatus=t.normalizedMeasure>=(t.minNormalizedMeasure??e.scaledPassingScore??.7),s.satisfiedStatusKnown=!0),i.writeCompletionStatus&&t.completionStatus!==q&&(s.completionStatus=t.completionStatus,s.completionStatusKnown=!0),i.writeProgressMeasure&&t.progressMeasureStatus&&(s.progressMeasure=t.progressMeasure,s.progressMeasureKnown=!0),i.updateAttemptData&&this.updateActivityAttemptData(e,s,t),this.eventCallback?.("objective_synchronized",{activityId:e.id,objectiveId:t.id,localState:r,globalState:s,synchronizationTime:(new Date).toISOString()})}catch(i){this.eventCallback?.("objective_sync_error",{activityId:e.id,objectiveId:t.id,error:i instanceof Error?i.message:i+"",timestamp:(new Date).toISOString()})}}ensureGlobalObjectiveEntry(e,t,i){return e.has(t)||e.set(t,{id:t,satisfiedStatus:i.satisfiedStatus,satisfiedStatusKnown:i.satisfiedStatusKnown,normalizedMeasure:i.normalizedMeasure,normalizedMeasureKnown:i.measureStatus,progressMeasure:i.progressMeasure,progressMeasureKnown:i.progressMeasureStatus,completionStatus:i.completionStatus,completionStatusKnown:i.completionStatus!==q,satisfiedByMeasure:i.satisfiedByMeasure,minNormalizedMeasure:i.minNormalizedMeasure}),e.get(t)}createDefaultMapInfo(e){return{targetObjectiveID:e.id,readSatisfiedStatus:!1,writeSatisfiedStatus:!0,readNormalizedMeasure:!1,writeNormalizedMeasure:!0,readCompletionStatus:!1,writeCompletionStatus:!0,readProgressMeasure:!1,writeProgressMeasure:!0,updateAttemptData:e.isPrimary}}getLocalObjectiveState(e,t,i){return i?{id:t.id,satisfiedStatus:e.objectiveSatisfiedStatus,measureStatus:e.objectiveMeasureStatus,normalizedMeasure:e.objectiveNormalizedMeasure,progressMeasure:e.progressMeasure,progressMeasureStatus:e.progressMeasureStatus,completionStatus:e.completionStatus,scaledPassingScore:e.scaledPassingScore}:{id:t.id,satisfiedStatus:t.satisfiedStatus,measureStatus:t.measureStatus,normalizedMeasure:t.normalizedMeasure,progressMeasure:t.progressMeasure,progressMeasureStatus:t.progressMeasureStatus,completionStatus:t.completionStatus,scaledPassingScore:t.minNormalizedMeasure}}updateActivityAttemptData(e,t,i){try{if(!i.isPrimary&&!t.updateAttemptData)return;const s=e.rollupRules.rules.some(e=>"completed"===e.action||"incomplete"===e.action);t.satisfiedStatusKnown&&t.satisfiedStatus&&(s||e.completionStatus!==q&&e.completionStatus!==L||(e.completionStatus=D),"unknown"===e.successStatus&&(e.successStatus="passed")),t.attemptCount&&t.attemptCount>e.attemptCount&&(e.attemptCount=t.attemptCount),t.progressMeasureKnown&&void 0!==t.progressMeasure&&(e.attemptCompletionAmount=t.progressMeasure),t.attemptAbsoluteDuration&&(e.attemptAbsoluteDuration=t.attemptAbsoluteDuration),t.attemptExperiencedDuration&&(e.attemptExperiencedDuration=t.attemptExperiencedDuration),t.activityAbsoluteDuration&&(e.activityAbsoluteDuration=t.activityAbsoluteDuration),t.activityExperiencedDuration&&(e.activityExperiencedDuration=t.activityExperiencedDuration),void 0!==t.location&&(e.location=t.location),void 0!==t.suspendData&&(e.isSuspended=t.suspendData.length>0)}catch(t){this.eventCallback?.("attempt_data_update_error",{activityId:e.id,error:t instanceof Error?t.message:t+"",timestamp:(new Date).toISOString()})}}}class mt{constructor(e,t){this.rollupStateLog=[],this.childFilter=e,this.eventCallback=t||null}validateRollupStateConsistency(e){try{this.eventCallback?.("rollup_validation_started",{activityId:e.id,timestamp:(new Date).toISOString()});const t=[];return this.validateActivityRollupState(e,t),t.length>0?(this.eventCallback?.("rollup_state_inconsistencies",{activityId:e.id,inconsistencies:t,count:t.length}),!1):(this.eventCallback?.("rollup_validation_completed",{activityId:e.id,result:"consistent"}),!0)}catch(t){return this.eventCallback?.("rollup_validation_error",{activityId:e.id,error:t instanceof Error?t.message:t+""}),!1}}validateActivityRollupState(e,t){const i=e.id;e.objectiveMeasureStatus&&null===e.objectiveNormalizedMeasure&&t.push(`Activity ${i}: measure status true but normalized measure is null`),e.objectiveMeasureStatus&&null!==e.scaledPassingScore&&"unknown"!==e.successStatus&&e.objectiveSatisfiedStatus!==e.objectiveNormalizedMeasure>=e.scaledPassingScore&&t.push(`Activity ${i}: satisfaction status inconsistent with measure`);const s=e.sequencingControls,r=e.getAvailableChildren();if(r.length>0&&s.rollupObjectiveSatisfied){const s=r.filter(e=>this.childFilter.checkChildForRollupSubprocess(e,"objective","satisfied")&&this.childFilter.isChildSatisfiedForRollup(e)),n=r.filter(e=>this.childFilter.checkChildForRollupSubprocess(e,"objective","notSatisfied")&&!this.childFilter.isChildSatisfiedForRollup(e));s.length>0&&0===n.length&&!1===e.objectiveSatisfiedStatus&&0===e.rollupRules.rules.length&&t.push(`Activity ${i}: all children satisfied but parent is not satisfied (no rollup rules to override)`)}if(r.length>0&&s.rollupProgressCompletion){const s=r.filter(e=>this.childFilter.checkChildForRollupSubprocess(e,"progress","completed")&&this.childFilter.isChildCompletedForRollup(e)),n=r.filter(e=>this.childFilter.checkChildForRollupSubprocess(e,"progress","incomplete")&&!this.childFilter.isChildCompletedForRollup(e));s.length>0&&0===n.length&&"completed"!==e.completionStatus&&0===e.rollupRules.rules.length&&t.push(`Activity ${i}: all children completed but parent is incomplete (no rollup rules to override)`)}for(const e of r)this.validateActivityRollupState(e,t);this.rollupStateLog.push({activity:i,timestamp:(new Date).toISOString(),state:{measureStatus:e.objectiveMeasureStatus,measure:e.objectiveNormalizedMeasure,satisfiedStatus:e.objectiveSatisfiedStatus,completionStatus:e.completionStatus}})}getRollupStateLog(){return[...this.rollupStateLog]}clearRollupStateLog(){this.rollupStateLog=[]}}class pt{constructor(e){this.eventCallback=e||null,this.childFilter=new nt,this.ruleEvaluator=new ot(this.childFilter),this.measureProcessor=new at(this.childFilter,e),this.objectiveProcessor=new ct(this.childFilter,this.ruleEvaluator,e),this.progressProcessor=new lt(this.childFilter,this.ruleEvaluator,this.objectiveProcessor,e),this.durationProcessor=new ut(e),this.globalObjectiveSynchronizer=new dt(e),this.stateValidator=new mt(this.childFilter,e),this.crossClusterProcessor=new ht(this.measureProcessor,this.objectiveProcessor,this.progressProcessor,e)}overallRollupProcess(e){const t=[];let i=e.parent,s=!1,r=!0;for(;i;){if(i.children.length>0&&this.durationProcessor.durationRollupProcess(i),!s){const e=i.captureRollupStatus();if(i.sequencingControls.rollupObjectiveSatisfied||i.sequencingControls.rollupProgressCompletion){if(i.children.length>0){const e=this.measureProcessor.measureRollupProcess(i);this.measureProcessor.completionMeasureRollupProcess(i),e.length>1&&this.crossClusterProcessor.processCrossClusterDependencies(i,e)}i.sequencingControls.rollupObjectiveSatisfied&&this.objectiveProcessor.objectiveRollupProcess(i),i.sequencingControls.rollupProgressCompletion&&this.progressProcessor.activityProgressRollupProcess(i)}const n=i.captureRollupStatus();r||!rt.compareRollupStatus(e,n)||(this.eventCallback?.("rollup_optimization_activated",{activityId:i.id,depth:t.length}),s=!0),!r&&rt.compareRollupStatus(e,n)||t.push(i)}i=i.parent,r=!1}return t}validateRollupStateConsistency(e){return this.stateValidator.validateRollupStateConsistency(e)}processGlobalObjectiveMapping(e,t){this.globalObjectiveSynchronizer.processGlobalObjectiveMapping(e,t)}calculateComplexWeightedMeasure(e,t,i){return this.measureProcessor.calculateComplexWeightedMeasure(e,t,i)}processCrossClusterDependencies(e,t){this.crossClusterProcessor.processCrossClusterDependencies(e,t)}getChildFilter(){return this.childFilter}getRuleEvaluator(){return this.ruleEvaluator}getMeasureProcessor(){return this.measureProcessor}getObjectiveProcessor(){return this.objectiveProcessor}getProgressProcessor(){return this.progressProcessor}getDurationProcessor(){return this.durationProcessor}getGlobalObjectiveSynchronizer(){return this.globalObjectiveSynchronizer}getStateValidator(){return this.stateValidator}getCrossClusterProcessor(){return this.crossClusterProcessor}}const _t=[D,L,q],gt=[N,j,x];function vt(e){return e&&_t.includes(e)?e:null}function St(e){return e&&gt.includes(e)?e:null}class ft{constructor(e){this.context=e}transferRteData(e){if(!this.context.getCMIData)return;const t=this.context.getCMIData();t&&(this.transferPrimaryObjective(e,t),this.transferNonPrimaryObjectives(e,t),this.context.fireEvent("onRteDataTransfer",{activityId:e.id,timestamp:(new Date).toISOString()}))}transferPrimaryObjective(e,t){const i=vt(t.completion_status);i&&i!==q&&(e.completionStatus=i,e.attemptProgressStatus=!0);let s=!1,r=!1,n=!1,o=0;const a=St(t.success_status);if(a&&a!==x&&(r=a===N,s=!0,e.objectiveSatisfiedStatus=r,e.objectiveSatisfiedStatusKnown=!0,e.successStatus=a,e.objectiveMeasureStatus=!0),t.score){const i=this.normalizeScore(t.score);null!==i&&(o=i,n=!0,e.objectiveNormalizedMeasure=o,e.objectiveMeasureStatus=!0)}if(e.primaryObjective&&(s||n)&&(e.primaryObjective.initializeFromCMI(s?r:e.primaryObjective.satisfiedStatus,n?o:e.primaryObjective.normalizedMeasure,s||n),s&&(e.primaryObjective.satisfiedStatusKnown=!0,e.primaryObjective.progressStatus=!0)),t.progress_measure&&""!==t.progress_measure){const i=parseFloat(t.progress_measure);isNaN(i)||(e.progressMeasure=i,e.progressMeasureStatus=!0,e.primaryObjective&&(e.primaryObjective.progressMeasure=i,e.primaryObjective.progressMeasureStatus=!0))}}transferNonPrimaryObjectives(e,t){if(t.objectives&&0!==t.objectives.length)for(const i of t.objectives){if(!i.id)continue;const t=e.getObjectiveById(i.id);if(!t||t.isPrimary)continue;const s=t.objective;let r=!1,n=!1,o=!1,a=0;const c=St(i.success_status);c&&c!==x&&(n=c===N,r=!0,s.progressStatus=!0);const l=vt(i.completion_status);if(l&&l!==q&&(s.completionStatus=l),i.score){const e=this.normalizeScore(i.score);null!==e&&(a=e,o=!0)}if((r||o)&&s.initializeFromCMI(r?n:s.satisfiedStatus,o?a:s.normalizedMeasure,o),i.progress_measure&&""!==i.progress_measure){const e=parseFloat(i.progress_measure);isNaN(e)||(s.progressMeasure=e,s.progressMeasureStatus=!0)}}}normalizeScore(score){if(score.scaled&&""!==score.scaled){const e=parseFloat(score.scaled);if(!isNaN(e))return e}if(score.raw&&""!==score.raw&&score.min&&""!==score.min&&score.max&&""!==score.max){const e=parseFloat(score.raw),t=parseFloat(score.min),i=parseFloat(score.max);if(!isNaN(e)&&!isNaN(t)&&!isNaN(i)&&i>t)return Math.max(-1,Math.min(1,(e-t)/(i-t)))}return null}}class yt{constructor(e,t,i,s){let r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,n=arguments.length>5?arguments[5]:void 0;this.invalidateCacheCallback=null,this.activityTree=e,this.sequencingProcess=t,this.rollupProcess=i,this.globalObjectiveMap=s,this.eventCallback=r,this.getCMIData=n?.getCMIData||null,this.is4thEdition=n?.is4thEdition||!1,this._rteDataTransferService=new ft({getCMIData:this.getCMIData,fireEvent:(e,t)=>this.fireEvent(e,t)})}setInvalidateCacheCallback(e){this.invalidateCacheCallback=e}processTerminationRequest(request){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],t=arguments.length>2?arguments[2]:void 0;const i=this.activityTree.currentActivity;if(!i)return{terminationRequest:request,sequencingRequest:null,exception:"TB.2.3-1",valid:!1};if((request===be.EXIT||request===be.ABANDON)&&!i.isActive)return{terminationRequest:request,sequencingRequest:null,exception:"TB.2.3-2",valid:!1};if(this.fireEvent("onTerminationRequestProcessing",{request:request,hasSequencingRequest:e,currentActivity:i.id,exitType:t}),"logout"===t)return this.fireEvent("onSequencingDebug",{message:"cmi.exit='logout' detected, treating as EXIT_ALL",activityId:i.id}),this.handleExitAll(i);switch(request){case be.EXIT:return this.handleExit(i,e);case be.EXIT_ALL:return this.handleExitAll(i);case be.ABANDON:return this.handleAbandon(i,e);case be.ABANDON_ALL:return this.handleAbandonAll(i);case be.SUSPEND_ALL:return this.handleSuspendAll(i);default:return{terminationRequest:request,sequencingRequest:null,exception:"TB.2.3-7",valid:!1}}}handleExitTermination(e,t){return this.handleExit(e,t)}handleExit(e,t){e.children.length>0&&this.terminateDescendants(e),this.endAttempt(e);const i=this.evaluateExitRules(e);if("EXIT_ALL"===i.action)return this.handleExitAll(e);"EXIT_PARENT"===i.action&&e.parent&&(this.activityTree.currentActivity=e.parent,this.endAttempt(this.activityTree.currentActivity));let s,r=!1;do{if(r=!1,s=this.evaluatePostConditions(this.activityTree.currentActivity||e),s.terminationRequest===be.EXIT_ALL)return this.fireEvent("onPostConditionExitAll",{activity:(this.activityTree.currentActivity||e).id}),this.handleExitAll(this.activityTree.root);if(s.terminationRequest===be.EXIT_PARENT){const t=this.activityTree.currentActivity||e;if(!t.parent)return{terminationRequest:be.EXIT_PARENT,sequencingRequest:null,exception:"TB.2.3-4",valid:!1};this.activityTree.currentActivity=t.parent,this.endAttempt(this.activityTree.currentActivity),r=!0,this.fireEvent("onPostConditionExitParent",{fromActivity:t.id,toActivity:this.activityTree.currentActivity.id})}if(!r&&(this.activityTree.currentActivity||e)===this.activityTree.root&&s.sequencingRequest!==be.RETRY)return{terminationRequest:be.EXIT,sequencingRequest:be.EXIT,exception:null,valid:!0}}while(r);if(!t&&!s.sequencingRequest){const t=this.activityTree.currentActivity||e;t.parent&&this.activityTree.setCurrentActivityWithoutActivation(t.parent)}return{terminationRequest:be.EXIT,sequencingRequest:s.sequencingRequest,exception:null,valid:!0}}handleExitAll(e){return this.activityTree.root&&this.handleMultiLevelExit(this.activityTree.root),this.activityTree.root&&this.endAttempt(this.activityTree.root),this.activityTree.currentActivity=null,this.cleanupSuspendedActivity(),{terminationRequest:be.EXIT_ALL,sequencingRequest:be.EXIT,exception:null,valid:!0}}handleAbandon(e,t){return e.isActive=!1,t||(this.activityTree.currentActivity=e.parent),{terminationRequest:be.ABANDON,sequencingRequest:null,exception:null,valid:!0}}handleAbandonAll(e){const t=[];let i=e;for(;null!==i;)t.push(i),i=i.parent;if(0===t.length)return{terminationRequest:be.ABANDON_ALL,sequencingRequest:null,exception:"TB.2.3-6",valid:!1};for(const e of t)e.isActive=!1;return this.activityTree.currentActivity=null,this.cleanupSuspendedActivity(),{terminationRequest:be.ABANDON_ALL,sequencingRequest:null,exception:null,valid:!0}}handleSuspendAll(e){const t=this.processSuspendAllRequest(e);return t.valid?{terminationRequest:be.SUSPEND_ALL,sequencingRequest:be.EXIT,exception:null,valid:!0}:t}processSuspendAllRequest(e){const t=this.activityTree.root;if(!e||!t)return this.fireEvent("onSuspendError",{exception:"TB.2.3-1",message:"No current activity to suspend",activity:e?.id}),{terminationRequest:be.SUSPEND_ALL,sequencingRequest:null,exception:"TB.2.3-1",valid:!1};if(e===t&&!e.isActive&&!e.isSuspended)return this.fireEvent("onSuspendError",{exception:"TB.2.3-3",message:"Nothing to suspend (root activity)",activity:e.id}),{terminationRequest:be.SUSPEND_ALL,sequencingRequest:null,exception:"TB.2.3-3",valid:!1};this.activityTree.suspendedActivity=e;const i=e,s=[];let r=i;for(;null!==r;)s.push(r),r=r.parent;if(0===s.length)return this.fireEvent("onSuspendError",{exception:"TB.2.3-5",message:"Activity path is empty",activity:i?.id}),{terminationRequest:be.SUSPEND_ALL,sequencingRequest:null,exception:"TB.2.3-5",valid:!1};for(const e of s)e.isActive=!1,e.isSuspended=!0;return this.activityTree.currentActivity=t,t.isActive=!1,this.fireEvent("onActivitySuspended",{activity:i?.id,suspendedPath:s.map(e=>e.id),pathLength:s.length,timestamp:(new Date).toISOString()}),{terminationRequest:be.SUSPEND_ALL,sequencingRequest:null,exception:null,valid:!0}}evaluateExitRules(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;t++;const i=e.sequencingRules.exitConditionRules;for(const s of i){let i;if(i="all"===s.conditionCombination?s.conditions.every(t=>t.evaluate(e)):s.conditions.some(t=>t.evaluate(e)),i){if(s.action===pe.EXIT_PARENT)return{action:"EXIT_PARENT",recursionDepth:t};if(s.action===pe.EXIT_ALL)return{action:"EXIT_ALL",recursionDepth:t}}}return{action:null,recursionDepth:t}}evaluatePostConditions(e){const t=this.sequencingProcess.evaluatePostConditionRules(e);return(t.sequencingRequest||t.terminationRequest)&&this.fireEvent("onPostConditionEvaluated",{activity:e.id,sequencingRequest:t.sequencingRequest,terminationRequest:t.terminationRequest,timestamp:(new Date).toISOString()}),t}handleMultiLevelExit(e){this.processExitAtLevel(e,0),this.terminateAll(e)}processExitAtLevel(e,t){const i=this.evaluateExitRules(e,0);i.action&&this.fireEvent("onMultiLevelExitAction",{activity:e.id,level:t,action:i.action});for(const i of e.children)this.processExitAtLevel(i,t+1)}cleanupSuspendedActivity(){const e=this.activityTree.suspendedActivity;if(e){let t=e;const i=[];for(;t;)t.isSuspended&&(t.isSuspended=!1,i.push(t.id)),t=t.parent;this.activityTree.suspendedActivity=null,this.fireEvent("onSuspendedActivityCleanup",{cleanedActivities:i,originalSuspendedActivity:e.id})}}terminateAll(e){for(const t of e.children)this.terminateAll(t);e.isActive&&this.endAttempt(e)}terminateDescendants(e){for(const t of e.children){t.children.length>0&&this.terminateDescendants(t);const e=this.exitActionRulesSubprocess(t);t.isActive&&("EXIT_ALL"===e&&this.terminateDescendants(t),this.endAttempt(t))}}exitActionRulesSubprocess(e){const t=e.sequencingRules.exitConditionRules;for(const i of t){let t;if(t="all"===i.conditionCombination?i.conditions.every(t=>t.evaluate(e)):i.conditions.some(t=>t.evaluate(e)),t){if(i.action===pe.EXIT_PARENT)return"EXIT_PARENT";if(i.action===pe.EXIT_ALL)return"EXIT_ALL"}}return null}clearSuspendedActivity(){if(this.activityTree.suspendedActivity){let e=this.activityTree.suspendedActivity;for(;e;)e.isSuspended=!1,e=e.parent;this.activityTree.suspendedActivity=null}}endAttempt(e){if(e.isActive){if(this._rteDataTransferService.transferRteData(e),e.isActive=!1,e.activityAttemptActive=!1,0===e.children.length){if(!e.isSuspended&&(e.sequencingControls.completionSetByContent||e.attemptProgressStatus||(e.attemptProgressStatus=!0,e.completionStatus="completed",e.wasAutoCompleted=!0,this.fireEvent("onAutoCompletion",{activityId:e.id,timestamp:(new Date).toISOString()})),!e.sequencingControls.objectiveSetByContent)){const t=e.primaryObjective;t&&(t.progressStatus||(t.progressStatus=!0,t.satisfiedStatus=!0,e.objectiveSatisfiedStatus=!0,e.successStatus="passed",e.wasAutoSatisfied=!0,this.fireEvent("onAutoSatisfaction",{activityId:e.id,timestamp:(new Date).toISOString()})))}}else{const t=e.children.some(e=>e.isSuspended);e.isSuspended=t}"unknown"===e.completionStatus&&(e.completionStatus="incomplete"),"unknown"===e.successStatus&&e.objectiveSatisfiedStatus&&(e.successStatus=e.objectiveSatisfiedStatus?"passed":"failed"),this.rollupProcess.processGlobalObjectiveMapping(this.activityTree.root||e,this.globalObjectiveMap),this.rollupProcess.overallRollupProcess(e),this.invalidateCacheCallback&&this.invalidateCacheCallback(),this.activityTree.root&&this.rollupProcess.validateRollupStateConsistency(this.activityTree.root),Ne.applySelectionAndRandomization(e,!1)}}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire sequencing event ${e}: ${t}`)}}}class bt{constructor(){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;this.valid=arguments.length>0&&void 0!==arguments[0]&&arguments[0],this.targetActivity=e,this.exception=t}}const Ct=class e{constructor(e,t,i){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,n=arguments.length>5?arguments[5]:void 0;this._deliveryInProgress=!1,this.contentDelivered=!1,this.checkActivityCallback=null,this.invalidateCacheCallback=null,this.updateNavigationValidityCallback=null,this.clearSuspendedActivityCallback=null,this.activityTree=e,this.rollupProcess=t,this.globalObjectiveMap=i,this.adlNav=s,this.eventCallback=r,this.now=n?.now||(()=>new Date),this.defaultHideLmsUi=n?.defaultHideLmsUi?[...n.defaultHideLmsUi]:[],this.defaultAuxiliaryResources=n?.defaultAuxiliaryResources?n.defaultAuxiliaryResources.map(e=>({...e})):[]}setCheckActivityCallback(e){this.checkActivityCallback=e}setInvalidateCacheCallback(e){this.invalidateCacheCallback=e}setUpdateNavigationValidityCallback(e){this.updateNavigationValidityCallback=e}setClearSuspendedActivityCallback(e){this.clearSuspendedActivityCallback=e}isDeliveryInProgress(){return this._deliveryInProgress}hasContentBeenDelivered(){return this.contentDelivered}resetContentDelivered(){this.contentDelivered=!1}setContentDelivered(e){this.contentDelivered=e}processDeliveryRequest(e){if(this.fireEvent("onDeliveryRequestProcessing",{activity:e.id,timestamp:(new Date).toISOString()}),e.children.length>0)return new bt(!1,null,"DB.1.1-1");const t=this.getActivityPath(e,!0);if(0===t.length)return new bt(!1,null,"DB.1.1-2");for(const e of t)if(this.checkActivityCallback&&!this.checkActivityCallback(e))return new bt(!1,null,"DB.1.1-3");return new bt(!0,e)}contentDeliveryEnvironmentProcess(e){this._deliveryInProgress=!0;try{const t=e.isSuspended;this.activityTree.suspendedActivity&&this.clearSuspendedActivityCallback&&this.clearSuspendedActivityCallback();const i=this.getActivityPath(e,!0);for(const e of i)e.isActive||(t||e.isSuspended?e.isSuspended=!1:e.incrementAttemptCount(),e.isActive=!0,Ne.applySelectionAndRandomization(e,1>=e.attemptCount));this.activityTree.currentActivity=e,this.initializeForDelivery(e),this.setupAttemptTracking(e),this.contentDelivered=!0,this.adlNav&&this.updateNavigationValidityCallback&&this.updateNavigationValidityCallback(),this.fireDeliveryEvent(e)}finally{this._deliveryInProgress=!1}}initializeForDelivery(e){"unknown"===e.completionStatus&&0===e.children.length&&(e.completionStatus="not attempted"),null===e.objectiveSatisfiedStatus&&(e.objectiveSatisfiedStatus=!1),null===e.progressMeasure&&(e.progressMeasure=0,e.progressMeasureStatus=!1),null===e.objectiveNormalizedMeasure&&(e.objectiveNormalizedMeasure=0,e.objectiveMeasureStatus=!1),e.attemptAbsoluteDuration="PT0H0M0S",e.attemptExperiencedDuration="PT0H0M0S",e.isAvailable=!0}setupAttemptTracking(e){e.wasSkipped=!1,e.attemptAbsoluteStartTime=this.now().toISOString(),e.location||(e.location=""),e.activityAttemptActive=!0,e.learnerPrefs||(e.learnerPrefs={audioCaptioning:"0",audioLevel:"1",deliverySpeed:"1",language:""})}fireDeliveryEvent(e){try{this.eventCallback&&this.eventCallback("onActivityDelivery",e),console.debug(`Activity delivered: ${e.id} - ${e.title}`)}catch(e){console.warn("Failed to fire activity delivery event: "+e)}}getEffectiveHideLmsUi(t){const i=new Set;for(const e of this.defaultHideLmsUi)i.add(e);let s=t;for(;s;){for(const e of s.hideLmsUi)i.add(e);s=s.parent}return e.HIDE_LMS_UI_ORDER.filter(e=>i.has(e))}getEffectiveAuxiliaryResources(e){const t=new Map;for(const e of this.defaultAuxiliaryResources)e.resourceId&&t.set(e.resourceId,{...e});const i=[];let s=e;for(;s;)i.push(s),s=s.parent;for(const e of i.reverse())for(const i of e.auxiliaryResources)i.resourceId&&t.set(i.resourceId,{...i});return Array.from(t.values())}getContentActivityData(e){return{hideLmsUi:this.getEffectiveHideLmsUi(e),auxiliaryResources:this.getEffectiveAuxiliaryResources(e),location:e.location||"",credit:e.credit||"credit",launchData:e.launchData||"",maxTimeAllowed:e.attemptAbsoluteDurationLimit||"",completionThreshold:e.completionThreshold?.toString()||"",timeLimitAction:e.timeLimitAction||"continue,no message"}}getActivityPath(e){let t=1>=arguments.length||void 0===arguments[1]||arguments[1];const i=[];let s=e;for(;null!==s;)i.unshift(s),s=s.parent;return!t&&i.length>0&&i.pop(),i}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire sequencing event ${e}: ${t}`)}}};Ct.HIDE_LMS_UI_ORDER=[...de];let At=Ct;class Et{constructor(e,t){this.cache=null,this.isDirty=!0,this.activityTree=e,this.sequencingProcess=t}predictContinueEnabled(){return this.ensureCacheValid(),this.cache?.continueEnabled??!1}predictPreviousEnabled(){return this.ensureCacheValid(),this.cache?.previousEnabled??!1}predictChoiceEnabled(e){return this.ensureCacheValid(),this.cache?.choiceEnabledMap.get(e)??!1}getAvailableChoices(){return this.ensureCacheValid(),Array.from(this.cache?.availableChoices??[])}getAllPredictions(){return this.ensureCacheValid(),{continueEnabled:this.cache?.continueEnabled??!1,previousEnabled:this.cache?.previousEnabled??!1,availableChoices:Array.from(this.cache?.availableChoices??[])}}invalidateCache(){this.isDirty=!0}updateCache(){this.isDirty=!0,this.ensureCacheValid()}ensureCacheValid(){const e=this.calculateTreeStateHash();!this.isDirty&&this.cache&&this.cache.treeStateHash===e||(this.recalculateCache(e),this.isDirty=!1)}recalculateCache(e){const t=this.activityTree.currentActivity;this.cache={continueEnabled:!1,previousEnabled:!1,availableChoices:new Set,choiceEnabledMap:new Map,treeStateHash:e},t?(this.cache.continueEnabled=this.predictContinueInternal(t),this.cache.previousEnabled=this.predictPreviousInternal(t),this.calculateAvailableChoices()):this.calculateAvailableChoicesFromRoot()}predictContinueInternal(e){return!!e.parent&&!!e.parent.sequencingControls.flow&&this.hasAvailableNextActivity(e)}hasAvailableNextActivity(e){const t=e.parent;if(!t)return!1;const i=t.children,s=i.indexOf(e);if(-1===s)return!1;if(i.length-1>s)for(let e=s+1;i.length>e;e++){const t=i[e];if(t&&this.isActivityPotentiallyDeliverableForward(t))return!0}return!(!t.parent||!t.sequencingControls.flow)&&this.hasAvailableNextActivity(t)}predictPreviousInternal(e){return!!e.parent&&!!e.parent.sequencingControls.flow&&!e.parent.sequencingControls.forwardOnly&&this.hasAvailablePreviousActivity(e)}hasAvailablePreviousActivity(e){const t=e.parent;if(!t)return!1;const i=t.children,s=i.indexOf(e);if(-1===s)return!1;if(s>0)for(let e=s-1;e>=0;e--){const t=i[e];if(t&&this.isActivityPotentiallyDeliverableBackward(t))return!0}return!(!t.parent||!t.sequencingControls.flow||t.sequencingControls.forwardOnly)&&this.hasAvailablePreviousActivity(t)}calculateAvailableChoicesFromRoot(){}calculateAvailableChoices(){this.cache&&this.activityTree.root&&this.recursivelyCheckChoiceAvailability(this.activityTree.root)}recursivelyCheckChoiceAvailability(e){if(!this.cache)return;const t=this.sequencingProcess.validateNavigationRequest(be.CHOICE,e.id,this.activityTree.currentActivity).valid;if(this.cache.choiceEnabledMap.set(e.id,t),t&&this.cache.availableChoices.add(e.id),e.children)for(const t of e.children)this.recursivelyCheckChoiceAvailability(t)}isActivityPotentiallyDeliverableForward(e){if(e.isHiddenFromChoice||!e.isAvailable)return!1;if(0===e.children.length)return!!e.isVisible&&this.sequencingProcess.canActivityBeDelivered(e);for(const t of e.children)if(this.isActivityPotentiallyDeliverableForward(t))return!0;return!1}isActivityPotentiallyDeliverableBackward(e){if(e.isHiddenFromChoice||!e.isAvailable)return!1;if(0===e.children.length)return e.isVisible;for(const t of e.children)if(this.isActivityPotentiallyDeliverableBackward(t))return!0;return!1}calculateTreeStateHash(){const e=this.activityTree.currentActivity,t=this.activityTree.suspendedActivity;return[e?.id??"none",t?.id??"none",this.getActivityTreeStateSignature()].join("|")}getActivityTreeStateSignature(){if(!this.activityTree.root)return"empty";const e=[];return this.collectActivitySignatures(this.activityTree.root,e),e.join(":")}collectActivitySignatures(e,t){if(t.push(e.id+(e.isActive?"A":"-")+(e.isSuspended?"S":"-")+e.completionStatus+e.successStatus+e.attemptCount),e.children)for(const i of e.children)this.collectActivitySignatures(i,t)}}var Mt=(e=>(e.START="start",e.RESUME_ALL="resumeAll",e.CONTINUE="continue",e.PREVIOUS="previous",e.CHOICE="choice",e.JUMP="jump",e.EXIT="exit",e.EXIT_ALL="exitAll",e.ABANDON="abandon",e.ABANDON_ALL="abandonAll",e.SUSPEND_ALL="suspendAll",e.NOT_VALID="_none_",e))(Mt||{});class wt{constructor(){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;this.valid=arguments.length>0&&void 0!==arguments[0]&&arguments[0],this.terminationRequest=e,this.sequencingRequest=t,this.targetActivityId=i,this.exception=s}}class Rt{constructor(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;this.getEffectiveHideLmsUiCallback=null,this.activityTree=e,this.sequencingProcess=t,this.adlNav=i,this.eventCallback=s,this.navigationLookAhead=new Et(e,t)}setGetEffectiveHideLmsUiCallback(e){this.getEffectiveHideLmsUiCallback=e}getNavigationLookAhead(){return this.navigationLookAhead}validateRequest(request){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.fireEvent("onNavigationRequestProcessing",{request:request,targetActivityId:e});const t=this.activityTree.currentActivity;switch(request){case"start":return this.validateStartRequest(t);case"resumeAll":return this.validateResumeRequest(t);case"continue":return this.validateContinueRequest(t);case"previous":return this.validatePreviousRequest(t);case"choice":return this.validateChoiceRequest(t,e);case"jump":return this.validateJumpRequest(e);case"exit":return this.validateExitRequest(t);case"exitAll":return this.validateExitAllRequest(t);case"abandon":return this.validateAbandonRequest(t);case"abandonAll":return this.validateAbandonAllRequest(t);case"suspendAll":return this.validateSuspendAllRequest(t);default:return new wt(!1,null,null,null,"NB.2.1-18")}}validateStartRequest(e){return null!==e?new wt(!1,null,null,null,"NB.2.1-1"):new wt(!0,null,be.START,null)}validateResumeRequest(e){return null!==e?new wt(!1,null,null,null,"NB.2.1-2"):null===this.activityTree.suspendedActivity?new wt(!1,null,null,null,"NB.2.1-3"):new wt(!0,null,be.RESUME_ALL,null)}validateContinueRequest(e){return e?e.parent&&e.parent.sequencingControls.flow?new wt(!0,e.isActive?be.EXIT:null,be.CONTINUE,null):new wt(!1,null,null,null,"NB.2.1-5"):new wt(!1,null,null,null,"NB.2.1-4")}validatePreviousRequest(e){if(!e)return new wt(!1,null,null,null,"NB.2.1-6");if(!e.parent||!e.parent.sequencingControls.flow)return new wt(!1,null,null,null,"NB.2.1-7");const t=this.validateForwardOnlyConstraints(e);return t.valid?new wt(!0,e.isActive?be.EXIT:null,be.PREVIOUS,null):new wt(!1,null,null,null,t.exception)}validateChoiceRequest(e,t){if(!t)return new wt(!1,null,null,null,"NB.2.1-9");const i=this.activityTree.getActivity(t);if(!i)return new wt(!1,null,null,null,"NB.2.1-10");const s=this.validateChoicePath(e,i);return s.valid?new wt(!0,e?.isActive?be.EXIT:null,be.CHOICE,t):new wt(!1,null,null,null,s.exception)}validateJumpRequest(e){return e?new wt(!0,null,be.JUMP,e):new wt(!1,null,null,null,"NB.2.1-12")}validateExitRequest(e){return e?new wt(!0,e===this.activityTree.root?be.EXIT_ALL:be.EXIT,null,null):new wt(!1,null,null,null,"NB.2.1-13")}validateExitAllRequest(e){return e?new wt(!0,be.EXIT_ALL,null,null):new wt(!1,null,null,null,"NB.2.1-14")}validateAbandonRequest(e){return e?new wt(!0,be.ABANDON,null,null):new wt(!1,null,null,null,"NB.2.1-15")}validateAbandonAllRequest(e){return e?new wt(!0,be.ABANDON_ALL,null,null):new wt(!1,null,null,null,"NB.2.1-16")}validateSuspendAllRequest(e){return e?new wt(!0,be.SUSPEND_ALL,null,null):new wt(!1,null,null,null,"NB.2.1-17")}validateChoicePath(e,t){if(t.isHiddenFromChoice)return{valid:!1,exception:"NB.2.1-11"};if(!t.isAvailable)return{valid:!1,exception:"NB.2.1-11"};if(this.isActivityDisabled(t))return{valid:!1,exception:"NB.2.1-11"};if(e){const i=this.findCommonAncestor(e,t);if(!i)return{valid:!1,exception:"NB.2.1-11"};let s=e;for(;s&&s!==i;){if(!0===s.isActive&&s.sequencingControls&&!1===s.sequencingControls.choiceExit&&t!==s&&!this.activityContains(s,t))return{valid:!1,exception:"NB.2.1-11"};s=s.parent}const r=this.validateConstrainChoice(e,t,i);if(!r.valid)return r;const n=this.validateChoiceSet(e,t,i);if(!n.valid)return n}let i=t;for(;i;){if(i.parent&&!i.parent.sequencingControls.choice)return{valid:!1,exception:"NB.2.1-11"};i=i.parent}return{valid:!0,exception:null}}validateForwardOnlyConstraints(e){if(e.parent?.sequencingControls.forwardOnly)return{valid:!1,exception:"NB.2.1-8"};let t=e.parent?.parent;for(;t;){if(t.sequencingControls.forwardOnly)return{valid:!1,exception:"NB.2.1-8"};t=t.parent}return{valid:!0,exception:null}}validateConstrainChoice(e,t,i){let s=i;for(;s;){if(s.sequencingControls?.constrainChoice||s.sequencingControls?.preventActivation){const i=this.findChildContaining(s,e);if(!i)return{valid:!1,exception:"NB.2.1-11"};if(t===s)return{valid:!1,exception:"NB.2.1-11"};const r=this.findChildContaining(s,t);if(!r)return{valid:!1,exception:"NB.2.1-11"};if(s.sequencingControls?.constrainChoice&&r!==i)return{valid:!1,exception:"NB.2.1-11"};if(s.sequencingControls?.preventActivation&&r!==i&&this.requiresNewActivation(r,t))return{valid:!1,exception:"NB.2.1-11"}}s=s.parent}return this.validateAncestors(i,e,t)}validateChoiceSet(e,t,i){if(!this.activityContains(i,t)&&t!==i)return{valid:!1,exception:"NB.2.1-11"};let s=t;for(;s&&s!==i;){if(!s.isAvailable||s.isHiddenFromChoice||this.isActivityDisabled(s))return{valid:!1,exception:"NB.2.1-11"};s=s.parent}return{valid:!0,exception:null}}isActivityDisabled(e){if(!e.isAvailable)return!0;if(e.isHiddenFromChoice)return!0;const t=this.evaluatePreConditionRulesForChoice(e);return!!t&&(t===pe.DISABLED||t===pe.HIDE_FROM_CHOICE||t===pe.STOP_FORWARD_TRAVERSAL)}findChildContaining(e,t){for(const i of e.children){if(i===t)return i;if(this.activityContains(i,t))return i}return null}activityContains(e,t){let i=t;for(;i;){if(i===e)return!0;i=i.parent}return!1}findCommonAncestor(e,t){const i=[];let s=e;for(;s;)i.push(s),s=s.parent;for(s=t;s;){if(i.includes(s))return s;s=s.parent}return null}validateAncestors(e,t,i){const s=e.children;if(!s||0===s.length)return{valid:!0,exception:null};const r=this.findChildContaining(e,t),n=this.findChildContaining(e,i);if(!r||!n)return{valid:!1,exception:"NB.2.1-11"};const o=s.indexOf(r),a=s.indexOf(n);if(e.sequencingControls.forwardOnly&&o>a)return{valid:!1,exception:"NB.2.1-8"};const c=s.findIndex(e=>e?.sequencingControls.stopForwardTraversal);if(r.sequencingControls.stopForwardTraversal&&a>o)return{valid:!1,exception:"NB.2.1-11"};if(-1!==c&&a>c)return{valid:!1,exception:"NB.2.1-11"};if(a>o&&e.sequencingControls.forwardOnly)for(let e=o+1;a>e;e++){const t=s[e];if(t){if(t.sequencingControls.stopForwardTraversal)return{valid:!1,exception:"NB.2.1-11"};if(this.isActivityMandatory(t)&&!this.isActivityCompleted(t))return{valid:!1,exception:"NB.2.1-11"}}}return{valid:!0,exception:null}}requiresNewActivation(e,t){return!this.branchHasActiveAttempt(e)&&!t.activityAttemptActive&&!t.isActive}branchHasActiveAttempt(e){if(e.activityAttemptActive||e.isActive)return!0;for(const t of e.children)if(this.branchHasActiveAttempt(t))return!0;return!1}isActivityMandatory(e){if(!e.isAvailable||e.isHiddenFromChoice)return!1;const t=this.evaluatePreConditionRulesForChoice(e);return t!==pe.SKIP&&t!==pe.DISABLED&&t!==pe.HIDE_FROM_CHOICE&&t!==pe.STOP_FORWARD_TRAVERSAL&&!this.isActivityDisabled(e)&&!1!==e.mandatory}isActivityCompleted(e){if(!e.isAvailable||e.isHiddenFromChoice)return!0;const t=this.evaluatePreConditionRulesForChoice(e);return t===pe.SKIP||t===pe.DISABLED||t===pe.HIDE_FROM_CHOICE||t===pe.STOP_FORWARD_TRAVERSAL||!!this.isActivityDisabled(e)||"completed"===e.completionStatus||"passed"===e.successStatus||"passed"===e.successStatus}evaluatePreConditionRulesForChoice(e){if(!e.sequencingRules)return null;return e.sequencingRules.evaluatePreConditionRules(e)||null}updateNavigationValidity(){if(!this.adlNav||!this.activityTree.currentActivity)return;this.navigationLookAhead.invalidateCache();const e=this.navigationLookAhead.predictContinueEnabled();try{this.adlNav.request_valid.continue=e?"true":"false"}catch(e){}const t=this.navigationLookAhead.predictPreviousEnabled();try{this.adlNav.request_valid.previous=t?"true":"false"}catch(e){}const i=this.activityTree.getAllActivities(),s={},r={};for(const e of i){const t=this.validateRequest("choice",e.id);s[e.id]=t.valid?"true":"false";const i=this.validateRequest("jump",e.id);r[e.id]=i.valid?"true":"false"}try{this.adlNav.request_valid.choice=s}catch(e){}try{this.adlNav.request_valid.jump=r}catch(e){}const n=this.getEffectiveHideLmsUiCallback?this.getEffectiveHideLmsUiCallback(this.activityTree.currentActivity):[];this.fireEvent("onNavigationValidityUpdate",{continue:e,previous:t,choice:s,jump:r,hideLmsUi:n})}getAllPredictions(){return this.navigationLookAhead.getAllPredictions()}predictContinueEnabled(){return this.navigationLookAhead.predictContinueEnabled()}predictPreviousEnabled(){return this.navigationLookAhead.predictPreviousEnabled()}predictChoiceEnabled(e){return this.navigationLookAhead.predictChoiceEnabled(e)}getAvailableChoices(){return this.navigationLookAhead.getAvailableChoices()}invalidateCache(){this.navigationLookAhead.invalidateCache()}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire sequencing event ${e}: ${t}`)}}}class Ot{constructor(e){this.globalObjectiveMap=new Map,this.eventCallback=null,this.eventCallback=e||null}initialize(e){try{this.globalObjectiveMap.clear(),e&&this.collectObjectives(e),this.fireEvent("onGlobalObjectiveMapInitialized",{objectiveCount:this.globalObjectiveMap.size,timestamp:(new Date).toISOString()})}catch(e){this.fireEvent("onGlobalObjectiveMapError",{error:e instanceof Error?e.message:e+"",timestamp:(new Date).toISOString()})}}collectObjectives(e){const objectives=e.getAllObjectives();if(0===objectives.length){const t=e.id+"_default_objective";this.globalObjectiveMap.has(t)||this.globalObjectiveMap.set(t,{id:t,satisfiedStatus:e.objectiveSatisfiedStatus,satisfiedStatusKnown:e.objectiveMeasureStatus,normalizedMeasure:e.objectiveNormalizedMeasure,normalizedMeasureKnown:e.objectiveMeasureStatus,progressMeasure:e.progressMeasure,progressMeasureKnown:e.progressMeasureStatus,completionStatus:e.completionStatus,completionStatusKnown:e.completionStatus!==q,readSatisfiedStatus:!0,writeSatisfiedStatus:!0,readNormalizedMeasure:!0,writeNormalizedMeasure:!0,readCompletionStatus:!0,writeCompletionStatus:!0,readProgressMeasure:!0,writeProgressMeasure:!0,satisfiedByMeasure:null!==e.scaledPassingScore,minNormalizedMeasure:e.scaledPassingScore,updateAttemptData:!0})}for(const e of objectives){const t=e.mapInfo.length>0?e.mapInfo:[{targetObjectiveID:e.id,readSatisfiedStatus:!0,writeSatisfiedStatus:!0,readNormalizedMeasure:!0,writeNormalizedMeasure:!0,readProgressMeasure:!0,writeProgressMeasure:!0,readCompletionStatus:!0,writeCompletionStatus:!0,updateAttemptData:e.isPrimary}];for(const i of t){const t=i.targetObjectiveID||e.id;this.globalObjectiveMap.has(t)||this.globalObjectiveMap.set(t,{id:t,satisfiedStatus:e.satisfiedStatus,satisfiedStatusKnown:e.measureStatus,normalizedMeasure:e.normalizedMeasure,normalizedMeasureKnown:e.measureStatus,progressMeasure:e.progressMeasure,progressMeasureKnown:e.progressMeasureStatus,completionStatus:e.completionStatus,completionStatusKnown:e.completionStatus!==q,readSatisfiedStatus:i.readSatisfiedStatus??!1,writeSatisfiedStatus:i.writeSatisfiedStatus??!1,readNormalizedMeasure:i.readNormalizedMeasure??!1,writeNormalizedMeasure:i.writeNormalizedMeasure??!1,readProgressMeasure:i.readProgressMeasure??!1,writeProgressMeasure:i.writeProgressMeasure??!1,readCompletionStatus:i.readCompletionStatus??!1,writeCompletionStatus:i.writeCompletionStatus??!1,readRawScore:i.readRawScore??!1,writeRawScore:i.writeRawScore??!1,readMinScore:i.readMinScore??!1,writeMinScore:i.writeMinScore??!1,readMaxScore:i.readMaxScore??!1,writeMaxScore:i.writeMaxScore??!1,satisfiedByMeasure:e.satisfiedByMeasure,minNormalizedMeasure:e.minNormalizedMeasure,updateAttemptData:i.updateAttemptData??e.isPrimary})}}for(const t of e.children)this.collectObjectives(t)}getMap(){return this.globalObjectiveMap}getSnapshot(){return this.serialize()}restoreSnapshot(e){this.restore(e)}updateObjective(e,t){try{this.globalObjectiveMap.set(e,{...this.globalObjectiveMap.get(e),...t,lastUpdated:(new Date).toISOString()}),this.fireEvent("onGlobalObjectiveUpdated",{objectiveId:e,data:t,timestamp:(new Date).toISOString()})}catch(t){this.fireEvent("onGlobalObjectiveUpdateError",{objectiveId:e,error:t instanceof Error?t.message:t+"",timestamp:(new Date).toISOString()})}}synchronize(e,t){e&&t.processGlobalObjectiveMapping(e,this.globalObjectiveMap)}getObjective(e){return this.globalObjectiveMap.get(e)}hasObjective(e){return this.globalObjectiveMap.has(e)}getObjectiveIds(){return Array.from(this.globalObjectiveMap.keys())}getObjectiveCount(){return this.globalObjectiveMap.size}clear(){this.globalObjectiveMap.clear(),this.fireEvent("onGlobalObjectiveMapCleared",{timestamp:(new Date).toISOString()})}serialize(){const e={};return this.globalObjectiveMap.forEach((t,id)=>{e[id]={...t}}),e}restore(e){if(this.globalObjectiveMap.clear(),e){for(const[id,t]of Object.entries(e))this.globalObjectiveMap.set(id,{...t});this.fireEvent("onGlobalObjectiveMapRestored",{objectiveCount:this.globalObjectiveMap.size,timestamp:(new Date).toISOString()})}}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire global objective event ${e}: ${t}`)}}}class Tt{constructor(e,t,i){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;this.getEffectiveHideLmsUiCallback=null,this.getEffectiveAuxiliaryResourcesCallback=null,this.contentDeliveredGetter=null,this.contentDeliveredSetter=null,this.activityTree=e,this.globalObjectiveService=t,this.rollupProcess=i,this.adlNav=s,this.eventCallback=r}setGetEffectiveHideLmsUiCallback(e){this.getEffectiveHideLmsUiCallback=e}setGetEffectiveAuxiliaryResourcesCallback(e){this.getEffectiveAuxiliaryResourcesCallback=e}setContentDeliveredAccessors(e,t){this.contentDeliveredGetter=e,this.contentDeliveredSetter=t}getState(){return{version:"1.0",timestamp:(new Date).toISOString(),contentDelivered:!!this.contentDeliveredGetter&&this.contentDeliveredGetter(),currentActivity:this.activityTree.currentActivity?.id||null,suspendedActivity:this.activityTree.suspendedActivity?.id||null,activityStates:this.serializeActivities(),navigationState:this.getNavigationState(),globalObjectiveMap:this.globalObjectiveService.getSnapshot()}}restoreState(e){try{if(!e||"1.0"!==e.version)return console.warn("Incompatible sequencing state version"),!1;if(this.contentDeliveredSetter&&this.contentDeliveredSetter(e.contentDelivered||!1),e.globalObjectiveMap&&this.globalObjectiveService.restoreSnapshot(e.globalObjectiveMap),e.activityStates&&this.deserializeActivities(e.activityStates),e.currentActivity){const t=this.activityTree.getActivity(e.currentActivity);t&&(this.activityTree.currentActivity=t,t.isActive=!0)}if(e.suspendedActivity){const t=this.activityTree.getActivity(e.suspendedActivity);t&&(this.activityTree.suspendedActivity=t,t.isSuspended=!0)}return e.navigationState&&this.restoreNavigationState(e.navigationState),this.activityTree.root&&this.globalObjectiveService.synchronize(this.activityTree.root,this.rollupProcess),console.debug("Sequencing state restored successfully"),!0}catch(e){return console.error("Failed to restore sequencing state: "+e),!1}}serializeActivities(){const e={},t=i=>{e[i.id]={id:i.id,title:i.title,isActive:i.isActive,isSuspended:i.isSuspended,isCompleted:i.isCompleted,completionStatus:i.completionStatus,successStatus:i.successStatus,attemptCount:i.attemptCount,attemptCompletionAmount:i.attemptCompletionAmount,attemptAbsoluteDuration:i.attemptAbsoluteDuration,attemptExperiencedDuration:i.attemptExperiencedDuration,activityAbsoluteDuration:i.activityAbsoluteDuration,activityExperiencedDuration:i.activityExperiencedDuration,objectiveSatisfiedStatus:i.objectiveSatisfiedStatus,objectiveMeasureStatus:i.objectiveMeasureStatus,objectiveNormalizedMeasure:i.objectiveNormalizedMeasure,progressMeasure:i.progressMeasure,progressMeasureStatus:i.progressMeasureStatus,isAvailable:i.isAvailable,isHiddenFromChoice:i.isHiddenFromChoice,location:i.location,attemptAbsoluteStartTime:i.attemptAbsoluteStartTime,objectives:i.getObjectiveStateSnapshot(),auxiliaryResources:i.auxiliaryResources,selectionRandomizationState:{selectionCountStatus:i.sequencingControls.selectionCountStatus,reorderChildren:i.sequencingControls.reorderChildren,childOrder:i.children.map(e=>e.id),selectedChildIds:i.children.filter(e=>e.isAvailable).map(e=>e.id),hiddenFromChoiceChildIds:i.children.filter(e=>e.isHiddenFromChoice).map(e=>e.id)}};for(const e of i.children)t(e)};return this.activityTree.root&&t(this.activityTree.root),e}deserializeActivities(e){const t=i=>{const s=e[i.id];s&&(i.isActive=s.isActive||!1,i.isSuspended=s.isSuspended||!1,i.isCompleted=s.isCompleted||!1,i.completionStatus=s.completionStatus||"unknown",i.successStatus=s.successStatus||"unknown",i.attemptCount=s.attemptCount||0,i.attemptCompletionAmount=s.attemptCompletionAmount||0,i.attemptAbsoluteDuration=s.attemptAbsoluteDuration||"PT0H0M0S",i.attemptExperiencedDuration=s.attemptExperiencedDuration||"PT0H0M0S",i.activityAbsoluteDuration=s.activityAbsoluteDuration||"PT0H0M0S",i.activityExperiencedDuration=s.activityExperiencedDuration||"PT0H0M0S",i.objectiveSatisfiedStatus=s.objectiveSatisfiedStatus||!1,i.objectiveMeasureStatus=s.objectiveMeasureStatus||!1,i.objectiveNormalizedMeasure=s.objectiveNormalizedMeasure||0,i.progressMeasure=s.progressMeasure??0,i.progressMeasureStatus=s.progressMeasureStatus||!1,i.isAvailable=!1!==s.isAvailable,i.isHiddenFromChoice=!0===s.isHiddenFromChoice,i.location=s.location||"",i.attemptAbsoluteStartTime=s.attemptAbsoluteStartTime||"",Array.isArray(s.auxiliaryResources)&&(i.auxiliaryResources=s.auxiliaryResources),s.objectives&&i.applyObjectiveStateSnapshot(s.objectives));for(const e of i.children)t(e);if(s?.selectionRandomizationState){const e=s.selectionRandomizationState,t=i.sequencingControls;void 0!==e.selectionCountStatus&&(t.selectionCountStatus=e.selectionCountStatus),void 0!==e.reorderChildren&&(t.reorderChildren=e.reorderChildren),e.childOrder&&e.childOrder.length>0&&i.setChildOrder(e.childOrder);const r=Array.isArray(e.selectedChildIds)?new Set(e.selectedChildIds):null,n=Array.isArray(e.hiddenFromChoiceChildIds)?new Set(e.hiddenFromChoiceChildIds):null;if(r||n)for(const e of i.children){if(r){const t=r.has(e.id);e.isAvailable=t,n||(e.isHiddenFromChoice=!t)}n&&(e.isHiddenFromChoice=n.has(e.id))}i.setProcessedChildren(i.children.filter(e=>e.isAvailable))}else i.resetProcessedChildren()};this.activityTree.root&&t(this.activityTree.root)}getNavigationState(){if(!this.adlNav)return null;const e=this.getEffectiveHideLmsUiCallback?this.getEffectiveHideLmsUiCallback(this.activityTree.currentActivity):[],t=this.getEffectiveAuxiliaryResourcesCallback?this.getEffectiveAuxiliaryResourcesCallback(this.activityTree.currentActivity):[];return{request:this.adlNav.request||"_none_",requestValid:{continue:this.adlNav.request_valid?.continue||"false",previous:this.adlNav.request_valid?.previous||"false",choice:"unknown",jump:"unknown",exit:this.adlNav.request_valid?.exit||"false",exitAll:this.adlNav.request_valid?.exitAll||"false",abandon:this.adlNav.request_valid?.abandon||"false",abandonAll:this.adlNav.request_valid?.abandonAll||"false",suspendAll:this.adlNav.request_valid?.suspendAll||"false"},hideLmsUi:e,auxiliaryResources:t}}restoreNavigationState(e){if(this.adlNav&&e)try{if(e.requestValid){const t=e.requestValid;this.adlNav.request_valid.continue=t.continue||"false",this.adlNav.request_valid.previous=t.previous||"false",this.adlNav.request_valid.exit=t.exit||"false",this.adlNav.request_valid.exitAll=t.exitAll||"false",this.adlNav.request_valid.abandon=t.abandon||"false",this.adlNav.request_valid.abandonAll=t.abandonAll||"false",this.adlNav.request_valid.suspendAll=t.suspendAll||"false"}}catch(e){console.warn("Could not fully restore navigation state: "+e)}}getSuspensionState(){const e={activityTree:this.activityTree.root?this.activityTree.root.getSuspensionState():null,currentActivityId:this.activityTree.currentActivity?.id||null,suspendedActivityId:this.activityTree.suspendedActivity?.id||null,globalObjectives:this.globalObjectiveService.getSnapshot(),timestamp:(new Date).toISOString()};return this.fireEvent("onSuspensionStateCaptured",{hasActivityTree:!!e.activityTree,currentActivityId:e.currentActivityId,suspendedActivityId:e.suspendedActivityId,globalObjectiveCount:Object.keys(e.globalObjectives).length,timestamp:e.timestamp}),e}restoreSuspensionState(e){if(e)try{if(e.globalObjectives&&this.globalObjectiveService.restoreSnapshot(e.globalObjectives),e.activityTree&&this.activityTree.root&&this.activityTree.root.restoreSuspensionState(e.activityTree),e.currentActivityId){const t=this.activityTree.getActivity(e.currentActivityId);t&&(this.activityTree.currentActivity=t)}if(e.suspendedActivityId){const t=this.activityTree.getActivity(e.suspendedActivityId);t&&(this.activityTree.suspendedActivity=t)}this.fireEvent("onSuspensionStateRestored",{currentActivityId:e.currentActivityId,suspendedActivityId:e.suspendedActivityId,globalObjectiveCount:e.globalObjectives?Object.keys(e.globalObjectives).length:0,originalTimestamp:e.timestamp,restoreTimestamp:(new Date).toISOString()})}catch(e){throw this.fireEvent("onSuspensionStateRestoreError",{error:e instanceof Error?e.message:e+"",timestamp:(new Date).toISOString()}),e}else this.fireEvent("onSuspensionStateRestoreError",{error:"No suspension state provided",timestamp:(new Date).toISOString()})}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire state manager event ${e}: ${t}`)}}}class It{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2?arguments[2]:void 0;this.contentDeliveredGetter=null,this.activityTree=e,this.eventCallback=t,this.now=i?.now||(()=>new Date)}setContentDeliveredGetter(e){this.contentDeliveredGetter=e}validateTreeConsistency(e){if(!this.activityTree.root)return{consistent:!1,exception:"DB.1.1-4"};if(!this.isActivityPartOfTree(e,this.activityTree.root))return{consistent:!1,exception:"DB.1.1-5"};const t=this.getActiveActivities();if(t.length>1)return this.fireEvent("onStateInconsistency",{activeActivities:t.map(e=>e.id),targetActivity:e.id}),{consistent:!1,exception:"DB.1.1-6"};let i=e;for(;i?.parent;){if(!i.parent.children.includes(i))return{consistent:!1,exception:"DB.1.1-7"};i=i.parent}return{consistent:!0,exception:null}}validateResources(e){const t=this.getRequiredResources(e);for(const e of t)if(!this.isResourceAvailable(e))return{available:!1,exception:"DB.1.1-8"};return this.checkSystemLimits().adequate?{available:!0,exception:null}:{available:!1,exception:"DB.1.1-9"}}validateConcurrentDelivery(e){return this.contentDeliveredGetter&&this.contentDeliveredGetter()&&this.activityTree.currentActivity&&this.activityTree.currentActivity!==e?{allowed:!1,exception:"DB.1.1-10"}:this.hasPendingDeliveryRequests()?{allowed:!1,exception:"DB.1.1-11"}:this.isDeliveryLocked()?{allowed:!1,exception:"DB.1.1-12"}:{allowed:!0,exception:null}}validateDependencies(e){const t=this.getPrerequisites(e);for(const i of t)if(!this.isPrerequisiteSatisfied(i,e))return{satisfied:!1,exception:"DB.1.1-13"};const i=this.getObjectiveDependencies(e);for(const e of i)if(!this.isObjectiveDependencySatisfied(e))return{satisfied:!1,exception:"DB.1.1-14"};return this.getSequencingRuleDependencies(e).satisfied?{satisfied:!0,exception:null}:{satisfied:!1,exception:"DB.1.1-15"}}checkActivity(e){return!!e.isAvailable&&!!this.checkLimitConditions(e)}checkLimitConditions(e){let result=!0,t="";if(null!==e.attemptLimit&&e.attemptLimit>0&&(e.attemptLimit>e.attemptCount||(result=!1,t="Attempt limit exceeded")),result&&e.attemptAbsoluteDurationLimit){const i=r(e.attemptAbsoluteDurationLimit,Z);i>0&&(i>r(e.attemptAbsoluteDuration||"PT0H0M0S",Z)||(result=!1,t="Attempt duration limit exceeded"))}if(result&&e.activityAbsoluteDurationLimit){const i=r(e.activityAbsoluteDurationLimit,Z);i>0&&(i>r(e.activityAbsoluteDuration||"PT0H0M0S",Z)||(result=!1,t="Activity duration limit exceeded"))}if(result&&e.beginTimeLimit){const i=this.now();new Date(e.beginTimeLimit)>i&&(result=!1,t="Not yet time to begin")}return result&&e.endTimeLimit&&this.now()>new Date(e.endTimeLimit)&&(result=!1,t="Time limit expired"),this.fireEvent("onLimitConditionCheck",{activity:e,result:result,failureReason:t,checks:{attemptLimit:e.attemptLimit,attemptCount:e.attemptCount,attemptDurationLimit:e.attemptAbsoluteDurationLimit,activityDurationLimit:e.activityAbsoluteDurationLimit,beginTimeLimit:e.beginTimeLimit,endTimeLimit:e.endTimeLimit}}),result}isActivityPartOfTree(e,t){if(e===t)return!0;for(const i of t.children)if(this.isActivityPartOfTree(e,i))return!0;return!1}getActiveActivities(){const e=[];return this.activityTree.root&&this.collectActiveActivities(this.activityTree.root,e),e}collectActiveActivities(e,t){e.isActive&&t.push(e);for(const i of e.children)this.collectActiveActivities(i,t)}getRequiredResources(e){const t=[],i=(e.title+" "+e.location).toLowerCase();return(i.includes("video")||i.includes("multimedia"))&&t.push("video-codec"),(i.includes("audio")||i.includes("sound"))&&t.push("audio-codec"),(i.includes("flash")||i.includes(".swf"))&&t.push("flash-plugin"),(i.includes("java")||i.includes("applet"))&&t.push("java-runtime"),e.children&&e.children.length>0&&t.push("high-bandwidth"),e.attemptAbsoluteDurationLimit&&this.parseDurationToMinutes(e.attemptAbsoluteDurationLimit)>60&&t.push("extended-storage"),e.attemptLimit&&e.attemptLimit>1&&t.push("persistent-storage"),t}isResourceAvailable(e){try{switch(e){case"video-codec":return!!document.createElement("video").canPlayType;case"audio-codec":return!!document.createElement("audio").canPlayType;case"flash-plugin":return navigator.plugins&&Array.from(navigator.plugins).some(e=>"Shockwave Flash"===e.name);case"java-runtime":return navigator.plugins&&Array.from(navigator.plugins).some(e=>"Java"===e.name);case"high-bandwidth":if("connection"in navigator){const e=navigator.connection;return"4g"===e.effectiveType||e.downlink>5}return!0;case"extended-storage":default:return!0;case"persistent-storage":return"localStorage"in window&&"sessionStorage"in window}}catch(e){return!1}}checkSystemLimits(){try{let e=!0;if("memory"in performance){const t=performance.memory;t.usedJSHeapSize/t.jsHeapSizeLimit>.8&&(e=!1)}if("deviceMemory"in navigator&&2>navigator.deviceMemory&&(e=!1),"hardwareConcurrency"in navigator&&2>navigator.hardwareConcurrency&&(e=!1),"connection"in navigator){const t=navigator.connection;(t.saveData||"slow-2g"===t.effectiveType)&&(e=!1)}return{adequate:e}}catch(e){return{adequate:!0}}}hasPendingDeliveryRequests(){return this.activityTree&&this.activityTree.pendingRequests?this.activityTree.pendingRequests.length>0:!("undefined"==typeof window||!window.pendingScormRequests)&&window.pendingScormRequests>0}isDeliveryLocked(){return!(!this.activityTree||!this.activityTree.navigationLocked)||(!(!this.activityTree||!this.activityTree.terminationInProgress)||(!this.checkSystemLimits().adequate||!("undefined"==typeof window||!window.scormMaintenanceMode)))}getPrerequisites(e){const t=[];if(e.sequencingRules&&e.sequencingRules.preConditionRules)for(const i of e.sequencingRules.preConditionRules)if(i.conditions&&i.conditions.length>0)for(const s of i.conditions)s.referencedObjectiveID&&s.referencedObjectiveID!==e.id&&t.push(s.referencedObjectiveID);if(e.parent&&e.sequencingControls&&!e.sequencingControls.choiceExit){const i=e.parent.children;if(i){const s=i.indexOf(e);for(let e=0;s>e;e++){const s=i[e];s&&t.push(s.id)}}}return e.prerequisiteActivities&&t.push(...e.prerequisiteActivities),Array.from(new Set(t))}isPrerequisiteSatisfied(e,t){const i=this.activityTree.getActivity(e);return!!i&&"completed"===i.completionStatus}getObjectiveDependencies(e){const t=[],objectives=e.objectives;if(objectives&&objectives.length>0)for(const e of objectives)e.globalObjectiveID&&t.push(e.globalObjectiveID),!e.satisfiedByMeasure&&e.readNormalizedMeasure&&t.push(e.id+"_measure");if(e.sequencingRules){const i=[...e.sequencingRules.preConditionRules||[],...e.sequencingRules.exitConditionRules||[],...e.sequencingRules.postConditionRules||[]];for(const s of i)if(s.conditions&&s.conditions.length>0)for(const i of s.conditions)i.objectiveReference&&i.objectiveReference!==e.id&&t.push(i.objectiveReference)}return Array.from(new Set(t))}isObjectiveDependencySatisfied(e){if(this.activityTree&&this.activityTree.globalObjectives){const t=this.activityTree.globalObjectives[e];if(t)return!0===t.satisfied&&!0===t.statusKnown}if(e.endsWith("_measure")){const t=e.replace("_measure","");if(this.activityTree&&this.activityTree.globalObjectives){const e=this.activityTree.globalObjectives[t];if(e)return!0===e.measureKnown&&e.normalizedMeasure>=0}}const t=this.activityTree.getActivity(e);return!!t&&t.objectiveSatisfiedStatus&&t.objectiveMeasureStatus}getSequencingRuleDependencies(e){let t=!0;try{if(e.sequencingRules&&e.sequencingRules.preConditionRules)for(const i of e.sequencingRules.preConditionRules)if(i.conditions&&i.conditions.length>0)for(const s of i.conditions)switch(s.conditionType||s.condition){case"activityProgressKnown":e.progressMeasureStatus||(t=!1);break;case"objectiveStatusKnown":case"objectiveSatisfied":this.isObjectiveDependencySatisfied(s.referencedObjectiveID||e.id)||(t=!1);break;case"attemptLimitExceeded":null===e.attemptLimit&&(t=!1);break;case"timeLimitExceeded":e.attemptAbsoluteDurationLimit||e.activityAbsoluteDurationLimit||(t=!1);break;case"always":case"never":break;default:t=!1}if(e.sequencingRules&&e.sequencingRules.exitConditionRules)for(const i of e.sequencingRules.exitConditionRules)if(i.conditions&&i.conditions.length>0)for(const s of i.conditions)["objectiveStatusKnown","objectiveSatisfied"].includes(s.conditionType||s.condition)&&(this.isObjectiveDependencySatisfied(s.referencedObjectiveID||e.id)||(t=!1));if(e.rollupRules&&e.rollupRules.rules)for(const i of e.rollupRules.rules)if(i.conditions&&i.conditions.length>0&&e.children&&e.children.length>0)for(const i of e.children)if(!i.isCompleted){t=!1;break}}catch(e){t=!1}return{satisfied:t}}parseDurationToMinutes(e){return r(e,Z)/60}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire delivery validator event ${e}: ${t}`)}}}class Nt{constructor(e,t,i){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,n=arguments.length>5?arguments[5]:void 0;this.eventCallback=null,this.activityTree=e,this.sequencingProcess=t,this.rollupProcess=i,this.adlNav=s,this.eventCallback=r,this.enhancedDeliveryValidation=!0===n?.enhancedDeliveryValidation,this.is4thEdition=n?.is4thEdition||!1,this.globalObjectiveService=new Ot(r||void 0),this.globalObjectiveService.initialize(e.root);const o={};n?.now&&(o.now=n.now),this.deliveryValidator=new It(e,r,o);const a={};n?.getCMIData&&(a.getCMIData=n.getCMIData),void 0!==n?.is4thEdition&&(a.is4thEdition=n.is4thEdition),this.terminationHandler=new yt(e,t,i,this.globalObjectiveService.getMap(),r,a);const c={};n?.now&&(c.now=n.now),n?.defaultHideLmsUi&&(c.defaultHideLmsUi=n.defaultHideLmsUi),n?.defaultAuxiliaryResources&&(c.defaultAuxiliaryResources=n.defaultAuxiliaryResources),this.deliveryHandler=new At(e,i,this.globalObjectiveService.getMap(),s,r,c),this.navigationValidityService=new Rt(e,t,s,r),this.stateManager=new Tt(e,this.globalObjectiveService,i,s,r),this.navigationLookAhead=this.navigationValidityService.getNavigationLookAhead(),this.setupCallbacks()}setupCallbacks(){this.terminationHandler.setInvalidateCacheCallback(()=>{this.navigationLookAhead.invalidateCache()}),this.deliveryHandler.setCheckActivityCallback(e=>this.deliveryValidator.checkActivity(e)),this.deliveryHandler.setInvalidateCacheCallback(()=>{this.navigationLookAhead.invalidateCache()}),this.deliveryHandler.setUpdateNavigationValidityCallback(()=>{this.navigationValidityService.updateNavigationValidity()}),this.deliveryHandler.setClearSuspendedActivityCallback(()=>{this.terminationHandler.clearSuspendedActivity()}),this.deliveryValidator.setContentDeliveredGetter(()=>this.deliveryHandler.hasContentBeenDelivered()),this.navigationValidityService.setGetEffectiveHideLmsUiCallback(e=>this.deliveryHandler.getEffectiveHideLmsUi(e)),this.stateManager.setGetEffectiveHideLmsUiCallback(e=>this.deliveryHandler.getEffectiveHideLmsUi(e)),this.stateManager.setGetEffectiveAuxiliaryResourcesCallback(e=>this.deliveryHandler.getEffectiveAuxiliaryResources(e)),this.stateManager.setContentDeliveredAccessors(()=>this.deliveryHandler.hasContentBeenDelivered(),e=>this.deliveryHandler.setContentDelivered(e))}processNavigationRequest(e){let t=arguments.length>2?arguments[2]:void 0;const i=this.navigationValidityService.validateRequest(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:null);if(!i.valid)return new bt(!1,null,i.exception);if(i.terminationRequest){const s=!!i.sequencingRequest,r=this.terminationHandler.processTerminationRequest(i.terminationRequest,s,t);if(!r.valid)return new bt(!1,null,r.exception||"TB.2.3-1");if(null!==r.sequencingRequest&&(s||r.sequencingRequest!==be.EXIT)&&(i.sequencingRequest=r.sequencingRequest),!i.sequencingRequest)return i.terminationRequest!==be.EXIT_ALL&&i.terminationRequest!==be.ABANDON_ALL||this.fireEvent("onSequencingSessionEnd",{reason:i.terminationRequest===be.EXIT_ALL?"exit_all":"abandon_all",navigationRequest:e}),new bt(!0,null)}if(i.sequencingRequest){const t=this.sequencingProcess.sequencingRequestProcess(i.sequencingRequest,i.targetActivityId);if(t.endSequencingSession)return this.fireEvent("onSequencingSessionEnd",{reason:"end_of_content",exception:t.exception,navigationRequest:e}),new bt(!1,null,t.exception||"SESSION_ENDED");if(t.exception)return new bt(!1,null,t.exception);if(t.deliveryRequest===Ce.DELIVER&&t.targetActivity)return this.activityTree.root&&(this.rollupProcess.validateRollupStateConsistency(this.activityTree.root)||this.fireEvent("onSequencingDebug",{message:"Rollup state inconsistency detected before delivery",activityId:this.activityTree.root.id})),this.rollupProcess.processGlobalObjectiveMapping(t.targetActivity,this.globalObjectiveService.getMap()),this.processDelivery(t.targetActivity)}return new bt(!1,null,"OP.1-1")}processDelivery(e){if(this.enhancedDeliveryValidation){const t=this.deliveryValidator.validateTreeConsistency(e);if(!t.consistent)return new bt(!1,null,t.exception);const i=this.deliveryValidator.validateResources(e);if(!i.available)return new bt(!1,null,i.exception);const s=this.deliveryValidator.validateConcurrentDelivery(e);if(!s.allowed)return new bt(!1,null,s.exception);const r=this.deliveryValidator.validateDependencies(e);if(!r.satisfied)return new bt(!1,null,r.exception)}const t=this.deliveryHandler.processDeliveryRequest(e);return t.valid&&(this.deliveryHandler.contentDeliveryEnvironmentProcess(t.targetActivity),this.navigationLookAhead.invalidateCache(),this.activityTree.root&&this.rollupProcess.validateRollupStateConsistency(this.activityTree.root)),t}hasContentBeenDelivered(){return this.deliveryHandler.hasContentBeenDelivered()}isDeliveryInProgress(){return this.deliveryHandler.isDeliveryInProgress()}resetContentDelivered(){this.deliveryHandler.resetContentDelivered()}setContentDelivered(e){this.deliveryHandler.setContentDelivered(e)}updateNavigationValidity(){this.navigationValidityService.updateNavigationValidity()}synchronizeGlobalObjectives(){this.globalObjectiveService.synchronize(this.activityTree.root,this.rollupProcess)}getGlobalObjectiveMap(){return this.globalObjectiveService.getMap()}getGlobalObjectiveMapSnapshot(){return this.globalObjectiveService.getSnapshot()}restoreGlobalObjectiveMapSnapshot(e){this.globalObjectiveService.restoreSnapshot(e)}updateGlobalObjective(e,t){this.globalObjectiveService.updateObjective(e,t)}getSequencingState(){return this.stateManager.getState()}restoreSequencingState(e){return this.stateManager.restoreState(e)}getSuspensionState(){return this.stateManager.getSuspensionState()}restoreSuspensionState(e){this.stateManager.restoreSuspensionState(e)}getNavigationLookAhead(){return this.navigationValidityService.getAllPredictions()}predictContinueEnabled(){return this.navigationValidityService.predictContinueEnabled()}predictPreviousEnabled(){return this.navigationValidityService.predictPreviousEnabled()}predictChoiceEnabled(e){return this.navigationValidityService.predictChoiceEnabled(e)}getAvailableChoices(){return this.navigationValidityService.getAvailableChoices()}invalidateNavigationCache(){this.navigationValidityService.invalidateCache()}applyDeliveryControls(e){e.sequencingControls.completionSetByContent||e.completionStatus===q&&(e.completionStatus=D,e.wasAutoCompleted=!0),e.sequencingControls.objectiveSetByContent||e.successStatus===x&&(e.successStatus=N,e.wasAutoSatisfied=!0)}getEffectiveHideLmsUi(e){return this.deliveryHandler.getEffectiveHideLmsUi(e)}getEffectiveAuxiliaryResources(e){return this.deliveryHandler.getEffectiveAuxiliaryResources(e)}getContentActivityData(e){return this.deliveryHandler.getContentActivityData(e)}terminationRequestProcess(request,e,t){return this.terminationHandler.processTerminationRequest(request,e,t)}contentDeliveryEnvironmentProcess(e){this.deliveryHandler.contentDeliveryEnvironmentProcess(e)}endAttemptProcess(e){this.terminationHandler.endAttempt(e)}handleExitTermination(e,t){return this.terminationHandler.handleExitTermination(e,t)}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire sequencing event ${e}: ${t}`)}}}class jt{constructor(e,cmi,adl,t,i){let s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};this.overallSequencingProcess=null,this.sequencingProcess=null,this.eventListeners={},this.isInitialized=!1,this.isSequencingActive=!1,this.lastCMIValues=new Map,this.lastSequencingResult=null,this.sequencing=e,this.cmi=cmi,this.adl=adl,this.eventService=t,this.loggingService=i,this.configuration={autoRollupOnCMIChange:!0,autoProgressOnCompletion:!1,validateNavigationRequests:!0,enableEventSystem:!0,logLevel:"info",now:()=>new Date,...s},this.activityDeliveryService=new ze(t,i,{onDeliverActivity:e=>this.handleActivityDelivery(e),onUnloadActivity:e=>this.handleActivityUnload(e),onSequencingComplete:result=>this.handleSequencingComplete(result),onSequencingError:e=>this.handleSequencingError(e)}),this.rollupProcess=new pt,this.configuration.now&&ge.setNowProvider(this.configuration.now),this.setupCMIChangeWatchers(),this.createSequencingProcesses()}createSequencingProcesses(){try{if(this.sequencing.initialized||this.sequencing.initialize(),this.sequencing.adlNav=this.adl.nav,this.sequencing.activityTree.root){const e={};this.configuration.now&&(e.now=this.configuration.now),this.configuration.getAttemptElapsedSeconds&&(e.getAttemptElapsedSeconds=this.configuration.getAttemptElapsedSeconds),this.configuration.getActivityElapsedSeconds&&(e.getActivityElapsedSeconds=this.configuration.getActivityElapsedSeconds),this.sequencingProcess=new Pe(this.sequencing.activityTree,this.sequencing.sequencingRules,this.sequencing.sequencingControls,this.adl.nav,e);const t={};this.configuration.now&&(t.now=this.configuration.now),t.defaultHideLmsUi=[...this.sequencing.hideLmsUi],this.sequencing.auxiliaryResources.length>0&&(t.defaultAuxiliaryResources=this.sequencing.auxiliaryResources.map(e=>({resourceId:e.resourceId,purpose:e.purpose}))),t.getCMIData=()=>this.getCMIDataForTransfer(),this.overallSequencingProcess=new Nt(this.sequencing.activityTree,this.sequencingProcess,this.rollupProcess,this.adl.nav,(e,t)=>this.handleSequencingProcessEvent(e,t),t),this.sequencing.overallSequencingProcess=this.overallSequencingProcess,this.isInitialized=!0,this.log("info","Sequencing processes created and ready for navigation")}}catch(e){this.log("error","Failed to create sequencing processes: "+e)}}initialize(){try{return this.log("info","Initializing sequencing service for SCO session"),this.isInitialized||this.createSequencingProcesses(),this.shouldAutoStartSequencing()&&!this.isSequencingActive&&this.startSequencing(),this.initializeCMITracking(),this.fireEvent("onSequencingStart",this.sequencing.getCurrentActivity()),this.log("info","Sequencing service initialized successfully"),p}catch(e){const t="Failed to initialize sequencing service: "+e;return this.log("error",t),this.fireEvent("onSequencingError",t,"initialization"),_}}terminate(){try{return this.log("info","Terminating sequencing service"),this.triggerFinalRollup(),this.endSequencing(),this.isInitialized=!1,this.fireEvent("onSequencingEnd"),this.log("info","Sequencing service terminated successfully"),p}catch(e){const t="Failed to terminate sequencing service: "+e;return this.log("error",t),this.fireEvent("onSequencingError",t,"termination"),_}}processNavigationRequest(request,e,t){if(!this.isInitialized||!this.overallSequencingProcess)return this.log("warn",`Navigation request '${request}' ignored - sequencing not initialized`),!1;try{this.log("info",`Processing navigation request: ${request}${e?` (target: ${e})`:""}${t?` (exit: ${t})`:""}`),this.fireEvent("onNavigationRequest",request,e);const i=this.parseNavigationRequest(request);if(null===i)return this.log("warn","Invalid navigation request: "+request),!1;const s=this.overallSequencingProcess.processNavigationRequest(i,e||null,t),r={deliveryRequest:s.valid?Ce.DELIVER:Ce.DO_NOT_DELIVER,targetActivity:s.targetActivity,exception:s.exception||null,endSequencingSession:!1};return this.lastSequencingResult=r,s.valid&&s.targetActivity?(this.activityDeliveryService.processSequencingResult(r),this.overallSequencingProcess.updateNavigationValidity(),this.log("info",`Navigation request '${request}' resulted in activity delivery: ${s.targetActivity.id}`),!0):(s.exception?(this.log("warn",`Navigation request '${request}' failed: ${s.exception}`),this.fireEvent("onSequencingError",s.exception,"navigation")):this.log("info",`Navigation request '${request}' completed with no activity delivery`),s.valid)}catch(e){const t=`Error processing navigation request '${request}': ${e}`;return this.log("error",t),this.fireEvent("onSequencingError",t,"navigation"),!1}}triggerRollupOnCMIChange(e,t,i){if(this.configuration.autoRollupOnCMIChange&&this.isInitialized&&["cmi.completion_status","cmi.success_status","cmi.score.scaled","cmi.score.raw","cmi.score.min","cmi.score.max","cmi.progress_measure","cmi.objectives.n.success_status","cmi.objectives.n.completion_status","cmi.objectives.n.score.scaled"].some(t=>e.startsWith(t)))try{this.log("debug",`Triggering rollup due to CMI change: ${e} = ${i} (was ${t})`);const s=this.sequencing.getCurrentActivity();if(!s)return void this.log("debug","No current activity for rollup");this.updateActivityFromCMI(s),this.rollupProcess.overallRollupProcess(s),this.overallSequencingProcess&&this.overallSequencingProcess.synchronizeGlobalObjectives(),this.overallSequencingProcess&&this.overallSequencingProcess.updateNavigationValidity(),this.fireEvent("onRollupComplete",s),this.log("debug","Rollup completed for activity: "+s.id)}catch(e){const t="Error during rollup on CMI change: "+e;this.log("error",t),this.fireEvent("onSequencingError",t,"rollup")}}setEventListeners(e){this.eventListeners={...this.eventListeners,...e},this.log("debug","Sequencing event listeners updated")}updateConfiguration(e){this.configuration={...this.configuration,...e},this.log("debug","Sequencing configuration updated")}getSequencingState(){return{isInitialized:this.isInitialized,isActive:this.isSequencingActive,currentActivity:this.sequencing.getCurrentActivity(),rootActivity:this.sequencing.getRootActivity(),lastSequencingResult:this.lastSequencingResult}}getOverallSequencingProcess(){return this.overallSequencingProcess}isDeliveryInProgress(){return this.overallSequencingProcess?.isDeliveryInProgress()??!1}setupCMIChangeWatchers(){}initializeCMITracking(){this.lastCMIValues.set("cmi.completion_status",this.cmi.completion_status),this.lastCMIValues.set("cmi.success_status",this.cmi.success_status),this.lastCMIValues.set("cmi.progress_measure",this.cmi.progress_measure),this.cmi.score&&(this.lastCMIValues.set("cmi.score.scaled",this.cmi.score.scaled),this.lastCMIValues.set("cmi.score.raw",this.cmi.score.raw))}shouldAutoStartSequencing(){return!(!this.sequencing.activityTree.root||this.sequencing.getCurrentActivity())}startSequencing(){if(this.overallSequencingProcess)try{this.processNavigationRequest("start")&&(this.isSequencingActive=!0,this.log("info","Automatic sequencing started"))}catch(e){this.log("error","Failed to start automatic sequencing: "+e)}}endSequencing(){this.isSequencingActive=!1,this.activityDeliveryService.reset()}triggerFinalRollup(){try{const e=this.sequencing.getCurrentActivity();e&&(this.updateActivityFromCMI(e),this.rollupProcess.overallRollupProcess(e),this.overallSequencingProcess&&this.overallSequencingProcess.synchronizeGlobalObjectives(),this.log("info","Final rollup completed"))}catch(e){this.log("error","Error during final rollup: "+e)}}updateActivityFromCMI(e){if("unknown"!==this.cmi.completion_status&&(e.completionStatus=this.cmi.completion_status,e.attemptProgressStatus=!0),"unknown"!==this.cmi.success_status&&(e.successStatus=this.cmi.success_status,e.objectiveSatisfiedStatus="passed"===this.cmi.success_status,e.objectiveMeasureStatus=!0,e.primaryObjective&&(e.primaryObjective.progressStatus=!0)),""!==this.cmi.progress_measure){const t=parseFloat(this.cmi.progress_measure);isNaN(t)||(e.progressMeasure=t,e.progressMeasureStatus=!0)}if(this.cmi.score&&""!==this.cmi.score.scaled){const t=parseFloat(this.cmi.score.scaled);isNaN(t)||(e.objectiveNormalizedMeasure=t,e.objectiveMeasureStatus=!0,e.primaryObjective&&(e.primaryObjective.progressStatus=!0))}e.primaryObjective&&e.primaryObjective.updateFromActivity(e)}getCMIDataForTransfer(){const e={completion_status:this.cmi.completion_status,success_status:this.cmi.success_status,progress_measure:this.cmi.progress_measure,score:{scaled:this.cmi.score?.scaled||"",raw:this.cmi.score?.raw||"",min:this.cmi.score?.min||"",max:this.cmi.score?.max||""},objectives:[]};if(this.cmi.objectives&&this.cmi.objectives.childArray)for(const t of this.cmi.objectives.childArray){const i=t;i.id&&e.objectives.push({id:i.id,success_status:i.success_status,completion_status:i.completion_status,progress_measure:i.progress_measure,score:{scaled:i.score?.scaled||"",raw:i.score?.raw||"",min:i.score?.min||"",max:i.score?.max||""}})}return e}parseNavigationRequest(request){let e=request;if(e.startsWith("_")&&"_none_"!==e&&(e=e.substring(1)),request.includes("choice"))return Mt.CHOICE;if(request.includes("jump"))return Mt.JUMP;switch(e){case"start":return Mt.START;case"resumeAll":return Mt.RESUME_ALL;case"continue":return Mt.CONTINUE;case"previous":return Mt.PREVIOUS;case"exit":return Mt.EXIT;case"exitAll":return Mt.EXIT_ALL;case"abandon":return Mt.ABANDON;case"abandonAll":return Mt.ABANDON_ALL;case"suspendAll":return Mt.SUSPEND_ALL;case"_none_":return Mt.NOT_VALID;default:return null}}handleActivityDelivery(e){this.log("info",`Activity delivered: ${e.id} - ${e.title}`),this.fireEvent("onActivityDelivery",e)}handleActivityUnload(e){this.log("info",`Activity unloaded: ${e.id} - ${e.title}`),this.fireEvent("onActivityUnload",e)}handleSequencingComplete(result){this.log("debug","Sequencing completed",result)}handleSequencingError(e){this.log("error","Sequencing error: "+e),this.fireEvent("onSequencingError",e,"sequencing")}fireEvent(e){if(this.configuration.enableEventSystem){for(var t=arguments.length,i=Array(t>1?t-1:0),s=1;t>s;s++)i[s-1]=arguments[s];"onSequencingDebug"!==e&&this.fireDebugEvent(e+" fired",{eventType:e,argsLength:i.length});try{const t=this.eventListeners[e];if(t&&"function"==typeof t)try{t(...i),this.log("debug",`Internal listener for ${e} executed successfully`)}catch(t){this.log("error",`Internal listener for ${e} failed: ${t}`)}try{this.eventService.processListeners("Sequencing."+e,i[0],...i.slice(1)),this.log("debug",`Event service listeners for ${e} processed`)}catch(t){this.log("warn",`Event service failed for ${e}: ${t}`)}try{if("undefined"!=typeof window&&window.scormSequencingEvents){const t=window.scormSequencingEvents;t[e]&&"function"==typeof t[e]&&(t[e](...i),this.log("debug",`Global listener for ${e} executed`))}}catch(t){this.log("warn",`Global listener for ${e} failed: ${t}`)}}catch(t){this.log("error",`Critical error firing event ${e}: ${t}`)}}}fireDebugEvent(e,t){try{const i=this.eventListeners.onSequencingDebug;i&&"function"==typeof i&&i(e,{timestamp:(new Date).toISOString(),...t});try{this.eventService.processListeners("Sequencing.onSequencingDebug",e,{timestamp:(new Date).toISOString(),...t})}catch(e){}}catch(e){console.debug("Debug event failed: "+e)}}fireActivityAttemptStart(e){this.fireEvent("onActivityAttemptStart",e),this.fireDebugEvent("Activity attempt started",{activityId:e.id,title:e.title,attemptCount:e.attemptCount})}fireActivityAttemptEnd(e){this.fireEvent("onActivityAttemptEnd",e),this.fireDebugEvent("Activity attempt ended",{activityId:e.id,title:e.title,completionStatus:e.completionStatus,successStatus:e.successStatus})}fireLimitConditionCheck(e,result){this.fireEvent("onLimitConditionCheck",e,result),this.fireDebugEvent("Limit condition check",{activityId:e.id,result:result,attemptCount:e.attemptCount,attemptLimit:e.attemptLimit})}fireNavigationValidityUpdate(e){this.fireEvent("onNavigationValidityUpdate",e),this.fireDebugEvent("Navigation validity updated",{validity:e})}fireSequencingStateChange(e){this.fireEvent("onSequencingStateChange",e),this.fireDebugEvent("Sequencing state changed",{stateKeys:Object.keys(e)})}handleSequencingProcessEvent(e,t){try{switch(e){case"onActivityDelivery":this.fireEvent("onActivityDelivery",t);break;case"onLimitConditionCheck":this.fireLimitConditionCheck(t.activity,t.result);break;case"onActivityAttemptStart":this.fireActivityAttemptStart(t);break;case"onActivityAttemptEnd":this.fireActivityAttemptEnd(t);break;case"onNavigationValidityUpdate":this.fireNavigationValidityUpdate(t);break;case"onSequencingSessionEnd":this.fireEvent("onSequencingSessionEnd",t);break;default:this.fireDebugEvent("Sequencing process event: "+e,t)}}catch(t){this.log("error",`Error handling sequencing process event ${e}: ${t}`)}}log(e,t,i){const s=["debug","info","warn","error"],r=this.configuration.logLevel||"info";if(s.indexOf(e)>=s.indexOf(r))switch(e){case"debug":this.loggingService.debug(`[Sequencing] ${t}${i?" - "+JSON.stringify(i):""}`);break;case"info":this.loggingService.info(`[Sequencing] ${t}${i?" - "+JSON.stringify(i):""}`);break;case"warn":this.loggingService.warn(`[Sequencing] ${t}${i?" - "+JSON.stringify(i):""}`);break;case"error":this.loggingService.error(`[Sequencing] ${t}${i?" - "+JSON.stringify(i):""}`)}}}class xt{loadFromFlattenedJSON(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2?arguments[2]:void 0,s=arguments.length>3?arguments[3]:void 0,r=arguments.length>4?arguments[4]:void 0;if(!s())return void console.error("loadFromFlattenedJSON can only be called before the call to lmsInitialize.");const n=/^(cmi\.interactions\.)(\d+)\.(.*)$/,o=/^(cmi\.objectives\.)(\d+)\.(.*)$/,interactions=[],objectives=[],a=[];for(const t in e)if({}.hasOwnProperty.call(e,t)){const i=t.match(n);if(i){interactions.push({key:t,value:e[t],index:+i[2],field:i[3]||""});continue}const s=t.match(o);if(s){objectives.push({key:t,value:e[t],index:+s[2],field:s[3]||""});continue}a.push({key:t,value:e[t]})}interactions.sort((e,t)=>e.index!==t.index?e.index-t.index:"id"===e.field?-1:"id"===t.field?1:"type"===e.field?-1:"type"===t.field?1:e.field.localeCompare(t.field)),objectives.sort((e,t)=>e.index!==t.index?e.index-t.index:"id"===e.field?-1:"id"===t.field?1:e.field.localeCompare(t.field)),a.sort((e,t)=>e.key.localeCompare(t.key));const c=e=>{e.forEach(e=>{const n={};n[e.key]=e.value,this.loadFromJSON(function(e){if(Object(e)!==e||Array.isArray(e))return e;const result={},pattern=/\.?([^.[\]]+)|\[(\d+)]/g;return Object.keys(e).filter(t=>({}.hasOwnProperty.call(e,t))).forEach(t=>{let i=result,s="";const r=RegExp(pattern);Array.from({length:t.match(RegExp(pattern,"g"))?.length??0},()=>r.exec(t)).forEach(e=>{e&&(i=i[s]??(i[s]=e[2]?[]:{}),s=e[2]||e[1]||"")}),i[s]=e[t]}),result[""]??result}(n),t,i,s,r)})};c(interactions),c(objectives),c(a)}loadFromJSON(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2?arguments[2]:void 0,s=arguments.length>3?arguments[3]:void 0,r=arguments.length>4?arguments[4]:void 0;if(s()){t=void 0!==t?t:"cmi",r(e);for(const n in e)if({}.hasOwnProperty.call(e,n)&&e[n]){const o=(t?t+".":"")+n,a=e[n];if(a.constructor===Array){for(let e=0;a.length>e;e++)if(a[e]){const t=a[e],n=`${o}.${e}`;t.constructor===Object?this.loadFromJSON(t,n,i,s,r):i(n,t)}}else a.constructor===Object?this.loadFromJSON(a,o,i,s,r):i(o,a)}}else console.error("loadFromJSON can only be called before the call to lmsInitialize.")}renderCMIToJSONString(cmi,e){return e?JSON.stringify({cmi:cmi}):JSON.stringify({cmi:cmi},(e,t)=>void 0===t?null:t,2)}renderCMIToJSONObject(cmi,e){return JSON.parse(this.renderCMIToJSONString(cmi,e))}getCommitObject(e,t,i,s,r,n){const o=t||e,a=i?s(e,o):r(e,o);return[P.DEBUG,"1",1,"DEBUG"].includes(n)&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(a)),a}}class Dt{constructor(e,t){this.settings=e,this.error_codes=t}processHttpRequest(e,t){return arguments.length>2&&void 0!==arguments[2]&&arguments[2]?this._handleImmediateRequest(e,t):this._performSyncXHR(e,t)}_handleImmediateRequest(e,t){const i=this.settings.requestHandler(t)??t,{body:s}=this._prepareRequestBody(i),r=navigator.sendBeacon(e,new Blob([s],{type:"text/plain;charset=UTF-8"}));return{result:r?"true":"false",errorCode:r?0:this.error_codes.GENERAL_COMMIT_FAILURE||391}}_performSyncXHR(e,t){const i=this.settings.requestHandler(t)??t,{body:s,contentType:r}=this._prepareRequestBody(i),n=new XMLHttpRequest;n.open("POST",e,!1),n.setRequestHeader("Content-Type",r),Object.entries(this.settings.xhrHeaders).forEach(e=>{let[t,i]=e;n.setRequestHeader(t,i+"")}),this.settings.xhrWithCredentials&&(n.withCredentials=!0);try{return n.send(s),this.settings.xhrResponseHandler(n)}catch(e){return{result:_,errorCode:this.error_codes.GENERAL_COMMIT_FAILURE||391,errorMessage:e instanceof Error?e.message:e+""}}}_prepareRequestBody(e){return{body:e instanceof Array?e.join("&"):JSON.stringify(e),contentType:e instanceof Array?"application/x-www-form-urlencoded":this.settings.commitRequestDataType}}updateSettings(e){this.settings=e}}function Lt(e,t,i,s){return We(e,t,i,M.TYPE_MISMATCH,b,s)}function qt(e,t,i,s){if(""===t)throw new b(e,M.VALUE_OUT_OF_RANGE);return Je(e,t,i,M.VALUE_OUT_OF_RANGE,b)}const Pt=new class{validateScore(e,t,i,s,r,n,o){return We(e,t,i,r,o)&&(!s||Je(e,t,s,n,o))}validateScorm12Audio(e,t){return Lt(e,t,H)&&qt(e,t,"-1#100")}validateScorm12Language(e,t){return Lt(e,t,k)}validateScorm12Speed(e,t){return Lt(e,t,H)&&qt(e,t,"-100#100")}validateScorm12Text(e,t){return Lt(e,t,H)&&qt(e,t,"-1#1")}validateReadOnly(e,t){if(t)throw new b(e,M.READ_ONLY_ELEMENT)}};class zt{constructor(e,t,i,s,r,n,o,a,c){if(this._settings=z,this._courseId="",new.target===zt)throw new TypeError("Cannot construct BaseAPI instances directly");this.currentState=0,this._error_codes=e,t&&(this.settings={...z,...t}),void 0!==t?.asyncCommit&&void 0===t.useAsynchronousCommits&&void 0===t.throttleCommits&&(console.warn("DEPRECATED: 'asyncCommit' setting is deprecated and will be removed in a future version. Use 'useAsynchronousCommits: true' and 'throttleCommits: true' instead."),t.asyncCommit&&(this.settings.useAsynchronousCommits=!0,this.settings.throttleCommits=!0)),!this.settings.useAsynchronousCommits&&this.settings.throttleCommits&&(console.warn("throttleCommits cannot be used with synchronous commits. Setting throttleCommits to false."),this.settings.throttleCommits=!1),this._loggingService=a||Ue(),this._loggingService.setLogLevel(this.settings.logLevel),this._loggingService.setLogHandler(this.settings.onLogMessage?this.settings.onLogMessage:F),i?this._httpService=i:this.settings.httpService?this._httpService=this.settings.httpService:this.settings.useAsynchronousCommits?(console.warn("WARNING: useAsynchronousCommits=true is not SCORM compliant. Commit failures will not be reported to the SCO, which may cause data loss. This setting should only be used for specific legacy compatibility cases."),this._httpService=new Fe(this.settings,this._error_codes)):this._httpService=new Dt(this.settings,this._error_codes),this._eventService=s||new Ge((e,t,i,s)=>this.apiLog(e,t,i,s)),this._serializationService=r||new xt,this._errorHandlingService=o||new $e(this._error_codes,(e,t,i,s)=>this.apiLog(e,t,i||P.ERROR,s),(e,t)=>this.getLmsErrorMessageDetails(e,t),void 0),this.settings.enableOfflineSupport&&(this._offlineStorageService=c||new Ye(this.settings,this._error_codes,(e,t,i,s)=>this.apiLog(e,t,i,s)),this.settings.courseId&&(this._courseId=this.settings.courseId),this.settings.syncOnTerminate&&this._eventService.on("BeforeTerminate",()=>{this._offlineStorageService?.isDeviceOnline()&&this._courseId&&this._offlineStorageService.hasPendingOfflineData(this._courseId).then(e=>{if(e)return this.apiLog("BeforeTerminate","Syncing pending offline data before termination",P.INFO),this._offlineStorageService?.syncOfflineData()}).then(e=>{e?this.processListeners("OfflineDataSynced"):!1===e&&this.processListeners("OfflineDataSyncFailed")}).catch(e=>{this.apiLog("BeforeTerminate","Error syncing offline data: "+e,P.ERROR),this.processListeners("OfflineDataSyncFailed")})}),this._offlineStorageService&&this._courseId&&this._offlineStorageService.getOfflineData(this._courseId).then(e=>{e&&(this.apiLog("constructor","Found offline data to restore",P.INFO),this.loadFromJSON(e.runtimeData))}).catch(e=>{this.apiLog("constructor","Error retrieving offline data: "+e,P.ERROR)})),this._cmiValueAccessService=new He({errorCodes:this._error_codes,getLastErrorCode:()=>this.lastErrorCode,setLastErrorCode:e=>{this.lastErrorCode=e},throwSCORMError:(e,t,i)=>this.throwSCORMError(e,t,i),isInitialized:()=>this.isInitialized(),validateCorrectResponse:(e,t)=>this.validateCorrectResponse(e,t),checkForDuplicateId:(e,t)=>this._checkForDuplicateId(e,t),getChildElement:(e,t,i)=>this.getChildElement(e,t,i),apiLog:(e,t,i)=>this.apiLog(e,t,i),checkObjectHasProperty:(e,t)=>this._checkObjectHasProperty(e,t),getDataModel:()=>this})}get lastErrorCode(){return this._errorHandlingService?.lastErrorCode??"0"}set lastErrorCode(e){this._errorHandlingService&&(this._errorHandlingService.lastErrorCode=e)}get eventService(){return this._eventService}get loggingService(){return this._loggingService}commonReset(e){this.apiLog("reset","Called",P.INFO),this.settings={...this.settings,...e},this.clearScheduledCommit(),this.currentState=0,this.lastErrorCode="0",this._eventService.reset(),this.startingData={},this._offlineStorageService&&(this._offlineStorageService.updateSettings(this.settings),e?.courseId&&(this._courseId=e.courseId))}initialize(e,t,i){let s=_;return this.isInitialized()?this.throwSCORMError("api",this._error_codes.INITIALIZED,t):this.isTerminated()?this.throwSCORMError("api",this._error_codes.TERMINATED,i):(this.settings.selfReportSessionTime&&this.cmi.setStartTime(),this.currentState=1,this.lastErrorCode="0",s=p,this.processListeners(e),this.settings.enableOfflineSupport&&this._offlineStorageService&&this._courseId&&this.settings.syncOnInitialize&&this._offlineStorageService.isDeviceOnline()&&this._offlineStorageService.hasPendingOfflineData(this._courseId).then(t=>{t&&(this.apiLog(e,"Syncing pending offline data on initialization",P.INFO),this._offlineStorageService?.syncOfflineData().then(t=>{t&&(this.apiLog(e,"Successfully synced offline data",P.INFO),this.processListeners("OfflineDataSynced"))}))})),this.apiLog(e,"returned: "+s,P.INFO),this.clearSCORMError(s),s}apiLog(e,t,i,s){t=function(e,t,i){let s=e?(e+"").padEnd(20)+": ":"";return i&&(s+=i,s=s.padEnd(70)),s+=t??"",s}(e,t,s),this._loggingService.log(i,t)}get settings(){return this._settings}set settings(e){const t=this._settings;this._settings={...this._settings,...e},this._httpService?.updateSettings(this._settings),void 0!==e.logLevel&&e.logLevel!==t.logLevel&&this._loggingService?.setLogLevel(e.logLevel),void 0!==e.onLogMessage&&e.onLogMessage!==t.onLogMessage&&this._loggingService?.setLogHandler(e.onLogMessage)}terminate(e,t){let i=p,s=!1;if(this.isNotInitialized()){const e=this._error_codes.TERMINATION_BEFORE_INIT??0;this.throwSCORMError("api",e),112===e&&(i=_)}else if(t&&this.isTerminated()){const e=this._error_codes.MULTIPLE_TERMINATION??0;this.throwSCORMError("api",e),113===e&&(i=_)}else{s=!0,this.processListeners("BeforeTerminate");const result=this.storeData(!0);if((result.errorCode??0)>0)result.errorMessage&&this.apiLog("terminate","Terminate failed with error: "+result.errorMessage,P.ERROR),result.errorDetails&&this.apiLog("terminate","Error details: "+JSON.stringify(result.errorDetails),P.DEBUG),this.throwSCORMError("api",result.errorCode??0),i=_;else{this.currentState=2,t&&(this.lastErrorCode="0");const e=result?.result??p;i="boolean"==typeof e?e+"":e}this.processListeners(e)}return this.apiLog(e,"returned: "+i,P.INFO),s&&this.clearSCORMError(i),i}getValue(e,t,i){let s="";if(this.checkState(t,this._error_codes.RETRIEVE_BEFORE_INIT??0,this._error_codes.RETRIEVE_AFTER_TERM??0)){try{s=this.getCMIValue(i)}catch(e){s=this.handleValueAccessException(i,e,s)}this.processListeners(e,i)}return this.apiLog(e,": returned: "+s,P.INFO,i),void 0===s?"":("0"===this.lastErrorCode&&this.clearSCORMError(s),s)}setValue(e,t,i,s,r){void 0!==r&&(r+="");let n=_;if(this.checkState(i,this._error_codes.STORE_BEFORE_INIT??0,this._error_codes.STORE_AFTER_TERM??0)){try{n=this.setCMIValue(s,r)}catch(e){n=this.handleValueAccessException(s,e,n)}this.processListeners(e,s,r)}return void 0===n&&(n=_),this.lastErrorCode+""=="0"&&this.settings.autocommit&&this.scheduleCommit(1e3*this.settings.autocommitSeconds,t),this.apiLog(e,": "+r+": result: "+n,P.INFO,s),"0"===this.lastErrorCode&&this.clearSCORMError(n),n}commit(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.clearScheduledCommit();let i=p;if(this.isNotInitialized()){const e=this._error_codes.COMMIT_BEFORE_INIT??0;this.throwSCORMError("api",e),142===e&&(i=_)}else if(t&&this.isTerminated()){const e=this._error_codes.COMMIT_AFTER_TERM??0;this.throwSCORMError("api",e),143===e&&(i=_)}else{const result=this.storeData(!1);(result.errorCode??0)>0&&(result.errorMessage&&this.apiLog("commit","Commit failed with error: "+result.errorMessage,P.ERROR),result.errorDetails&&this.apiLog("commit","Error details: "+JSON.stringify(result.errorDetails),P.DEBUG),this.throwSCORMError("api",result.errorCode));const s=result?.result??_;i="boolean"==typeof s?s+"":s,this.apiLog(e," Result: "+i,P.DEBUG,"HttpRequest"),t&&(this.lastErrorCode="0"),this.processListeners(e),this.settings.enableOfflineSupport&&this._offlineStorageService&&this._offlineStorageService.isDeviceOnline()&&this._courseId&&this._offlineStorageService.hasPendingOfflineData(this._courseId).then(t=>{t&&(this.apiLog(e,"Syncing pending offline data",P.INFO),this._offlineStorageService?.syncOfflineData().then(t=>{t?(this.apiLog(e,"Successfully synced offline data",P.INFO),this.processListeners("OfflineDataSynced")):this.apiLog(e,"Failed to sync some offline data",P.WARN)}))})}return this.apiLog(e,"returned: "+i,P.INFO),this.isNotInitialized()||t&&this.isTerminated()||this.clearSCORMError(i),i}getLastError(e){const t=this.lastErrorCode+"";return this.processListeners(e),this.apiLog(e,"returned: "+t,P.INFO),t}getErrorString(e,t){let i="";return null!==t&&""!==t&&(i=this.getLmsErrorMessageDetails(t),this.processListeners(e)),i.length>255&&(i=i.substring(0,255)),this.apiLog(e,"returned: "+i,P.INFO),i}getDiagnostic(e,t){let i="";const s=""===t?this.lastErrorCode+"":t;if(null!==s&&""!==s){const t=this._errorHandlingService.lastDiagnostic;i=t&&s+""==this.lastErrorCode+""?t:this.getLmsErrorMessageDetails(s,!0),this.processListeners(e)}return i.length>255&&(i=i.substring(0,255)),this.apiLog(e,"returned: "+i,P.INFO),i}checkState(e,t,i){return this.isNotInitialized()?(this.throwSCORMError("api",t),!1):!e||!this.isTerminated()||(this.throwSCORMError("api",i),!1)}_checkForDuplicateId(e,t){const i=(e,t)=>{if(e&&"object"==typeof e&&t in e){const i=e[t];return i instanceof R?i:void 0}},s=(e,t,i)=>{for(let s=0;e.childArray.length>s;s++)if(s!==t){const t=e.childArray[s];if(t&&"object"==typeof t&&"id"in t&&t.id===i)return!0}return!1},r=e.match(/^cmi\.objectives\.(\d+)\.id$/);if(r&&r[1]){const e=parseInt(r[1],10),objectives=i(this.cmi,"objectives");return!!objectives&&s(objectives,e,t)}const n=e.match(/^cmi\.interactions\.(\d+)\.id$/);if(n&&n[1]){const e=parseInt(n[1],10),interactions=i(this.cmi,"interactions");return!!interactions&&s(interactions,e,t)}const o=e.match(/^cmi\.interactions\.(\d+)\.objectives\.(\d+)\.id$/);if(o&&o[1]&&o[2]){const e=parseInt(o[1],10),r=parseInt(o[2],10),interactions=i(this.cmi,"interactions");if(interactions){const n=interactions.childArray[e];if(n){const objectives=i(n,"objectives");if(objectives)return s(objectives,r,t)}}return!1}return!1}getLmsErrorMessageDetails(e){throw Error("The getLmsErrorMessageDetails method has not been implemented")}getCMIValue(e){throw Error("The getCMIValue method has not been implemented")}setCMIValue(e,t){throw Error("The setCMIValue method has not been implemented")}_commonSetCMIValue(e,t,i,s){return this._cmiValueAccessService.setCMIValue(e,t,i,s)}_commonGetCMIValue(e,t,i){return this._cmiValueAccessService.getCMIValue(e,t,i)}isInitialized(){return 1===this.currentState}isNotInitialized(){return 0===this.currentState}isTerminated(){return 2===this.currentState}on(e,t){this._eventService.on(e,t)}off(e,t){this._eventService.off(e,t)}clear(e){this._eventService.clear(e)}processListeners(e,t,i){this._eventService.processListeners(e,t,i)}throwSCORMError(e,t,i){this._errorHandlingService.throwSCORMError(e,t??0,i)}clearSCORMError(e){this._errorHandlingService.clearSCORMError(e)}loadFromFlattenedJSON(e,t){t||(t=""),this._serializationService.loadFromFlattenedJSON(e,t,(e,t)=>this.setCMIValue(e,t),()=>this.isNotInitialized(),e=>{this.startingData=e})}getFlattenedCMI(){return o(this.renderCMIToJSONObject())}loadFromJSON(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";t&&""!==t||Object.hasOwnProperty.call(e,"cmi")||Object.hasOwnProperty.call(e,"adl")||(t="cmi"),this._serializationService.loadFromJSON(e,t,(e,t)=>this.setCMIValue(e,t),()=>this.isNotInitialized(),e=>{this.startingData=e})}renderCMIToJSONString(){return this._serializationService.renderCMIToJSONString(this.cmi,this.settings.sendFullCommit)}renderCMIToJSONObject(){return this._serializationService.renderCMIToJSONObject(this.cmi,this.settings.sendFullCommit)}processHttpRequest(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this.settings.enableOfflineSupport&&this._offlineStorageService&&!this._offlineStorageService.isDeviceOnline()&&this._courseId?(this.apiLog("processHttpRequest","Device is offline, storing data locally",P.INFO),t&&"object"==typeof t&&"cmi"in t?this._offlineStorageService.storeOffline(this._courseId,t):(this.apiLog("processHttpRequest","Invalid commit data format for offline storage",P.ERROR),{result:_,errorCode:this._error_codes.GENERAL??101})):this._httpService.processHttpRequest(e,t,i,(e,t,i,s)=>this.apiLog(e,t,i,s),(e,t,i)=>this.processListeners(e,t,i))}scheduleCommit(e,t){this._timeout||(this._timeout=new he(this,e,t),this.apiLog("scheduleCommit","scheduled",P.DEBUG,""))}clearScheduledCommit(){this._timeout&&(this._timeout.cancel(),this._timeout=void 0,this.apiLog("clearScheduledCommit","cleared",P.DEBUG,""))}_checkObjectHasProperty(e,t){return null!=e&&"object"==typeof e&&(Object.hasOwnProperty.call(e,t)||null!=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),t)||t in e)}handleValueAccessException(e,t,i){return t instanceof m?(this.lastErrorCode=t.errorCode+"",""!==i&&(i=_),this.throwSCORMError(e,t.errorCode,t.errorMessage)):this.throwSCORMError(e,this._error_codes.GENERAL,t instanceof Error&&t.message?t.message:"Unknown error"),i}getCommitObject(e){return this._serializationService.getCommitObject(e,this.settings.alwaysSendTotalTime,this.settings.renderCommonCommitFields,(e,t)=>this.renderCommitObject(e,t),(e,t)=>this.renderCommitCMI(e,t),this.settings.logLevel)}}class Ft extends u{constructor(e){super(e.CMIElement),this._raw="",this._min="",this.__children=e.score_children||g,this.__score_range=!!e.score_range&&Y,this._max=e.max||""===e.max?e.max:"100",this.__invalid_error_code=e.invalidErrorCode||M.INVALID_SET_VALUE,this.__invalid_type_code=e.invalidTypeCode||M.TYPE_MISMATCH,this.__invalid_range_code=e.invalidRangeCode||M.VALUE_OUT_OF_RANGE,this.__decimal_regex=e.decimalRegex||B,this.__error_class=e.errorClass}reset(){this._initialized=!1,this._raw="",this._min=""}get _children(){return this.__children}set _children(_children){throw new this.__error_class(this._cmi_element+"._children",this.__invalid_error_code)}get raw(){return this._raw}set raw(e){Pt.validateScore(this._cmi_element+".raw",e,this.__decimal_regex,this.__score_range,this.__invalid_type_code,this.__invalid_range_code,this.__error_class)&&(this._raw=e)}get min(){return this._min}set min(e){Pt.validateScore(this._cmi_element+".min",e,this.__decimal_regex,this.__score_range,this.__invalid_type_code,this.__invalid_range_code,this.__error_class)&&(this._min=e)}get max(){return this._max}set max(e){Pt.validateScore(this._cmi_element+".max",e,this.__decimal_regex,this.__score_range,this.__invalid_type_code,this.__invalid_range_code,this.__error_class)&&(this._max=e)}getScoreObject(){const e={};return Number.isNaN(Number.parseFloat(this.raw))||(e.raw=Number.parseFloat(this.raw)),Number.isNaN(Number.parseFloat(this.min))||(e.min=Number.parseFloat(this.min)),Number.isNaN(Number.parseFloat(this.max))||(e.max=Number.parseFloat(this.max)),e}toJSON(){this.jsonString=!0;const result={raw:this.raw,min:this.min,max:this.max};return this.jsonString=!1,result}}class kt extends u{constructor(){super("cmi.core"),this.__children="student_id,student_name,lesson_location,credit,lesson_status,entry,score,total_time,lesson_mode,exit,session_time",this._student_id="",this._student_name="",this._lesson_location="",this._credit="",this._lesson_status="not attempted",this._entry="",this._total_time="",this._lesson_mode="normal",this._exit="",this._session_time="00:00:00",this._suspend_data="",this.score=new Ft({CMIElement:"cmi.core.score",score_children:g,score_range:Y,invalidErrorCode:M.INVALID_SET_VALUE,invalidTypeCode:M.TYPE_MISMATCH,invalidRangeCode:M.VALUE_OUT_OF_RANGE,errorClass:b})}initialize(){super.initialize(),this.score?.initialize()}reset(){this._initialized=!1,this._exit="",this._entry="",this._session_time="00:00:00",this.score?.reset()}get _children(){return this.__children}set _children(_children){throw new b(this._cmi_element+"._children",M.INVALID_SET_VALUE)}get student_id(){return this._student_id}set student_id(student_id){if(this.initialized)throw new b(this._cmi_element+".student_id",M.READ_ONLY_ELEMENT);this._student_id=student_id}get student_name(){return this._student_name}set student_name(student_name){if(this.initialized)throw new b(this._cmi_element+".student_name",M.READ_ONLY_ELEMENT);this._student_name=student_name}get lesson_location(){return this._lesson_location}set lesson_location(lesson_location){Lt(this._cmi_element+".lesson_location",lesson_location,k,!0)&&(this._lesson_location=lesson_location)}get credit(){return this._credit}set credit(credit){if(this.initialized)throw new b(this._cmi_element+".credit",M.READ_ONLY_ELEMENT);Lt(this._cmi_element+".credit",credit,"^(credit|no-credit)$",!0)&&(this._credit=credit)}get lesson_status(){return this._lesson_status}set lesson_status(lesson_status){this.initialized?Lt(this._cmi_element+".lesson_status",lesson_status,"^(passed|completed|failed|incomplete|browsed)$")&&(this._lesson_status=lesson_status):Lt(this._cmi_element+".lesson_status",lesson_status,G)&&(this._lesson_status=lesson_status)}get entry(){return this._entry}set entry(entry){if(this.initialized)throw new b(this._cmi_element+".entry",M.READ_ONLY_ELEMENT);Lt(this._cmi_element+".entry",entry,"^(ab-initio|resume|)$",!0)&&(this._entry=entry)}get total_time(){return this._total_time}set total_time(total_time){if(this.initialized)throw new b(this._cmi_element+".total_time",M.READ_ONLY_ELEMENT);if(Lt(this._cmi_element+".total_time",total_time,V,!0))if(total_time){const e=s(total_time,V);this._total_time=t(e)}else this._total_time=total_time}get lesson_mode(){return this._lesson_mode}set lesson_mode(lesson_mode){if(this.initialized)throw new b(this._cmi_element+".lesson_mode",M.READ_ONLY_ELEMENT);Lt(this._cmi_element+".lesson_mode",lesson_mode,"^(normal|browse|review)$")&&(this._lesson_mode=lesson_mode)}get exit(){if(!this.jsonString)throw new b(this._cmi_element+".exit",M.WRITE_ONLY_ELEMENT);return this._exit}set exit(exit){"normal"===exit&&(console.warn("SCORM 1.2: Received non-standard value 'normal' for cmi.core.exit; normalizing to empty string."),exit=""),Lt(this._cmi_element+".exit",exit,"^(time-out|suspend|logout|)$",!0)&&(this._exit=exit)}get session_time(){if(!this.jsonString)throw new b(this._cmi_element+".session_time",M.WRITE_ONLY_ELEMENT);return this._session_time}set session_time(session_time){if(Lt(this._cmi_element+".session_time",session_time,V)){const e=s(session_time,V);this._session_time=t(e)}}get suspend_data(){return this._suspend_data}set suspend_data(suspend_data){Lt(this._cmi_element+".suspend_data",suspend_data,"^[\\s\\S]{0,64000}$",!0)&&(this._suspend_data=suspend_data)}getCurrentTotalTime(e){let i=this._session_time;if(void 0!==e){const s=(new Date).getTime()-e;i=t(s/1e3)}return r=this._total_time,n=i,"string"==typeof(o=RegExp(V))&&(o=RegExp(o)),t(s(r,o)+s(n,o));var r,n,o}toJSON(){this.jsonString=!0;const result={student_id:this.student_id,student_name:this.student_name,lesson_location:this.lesson_location,credit:this.credit,lesson_status:this.lesson_status,entry:this.entry,lesson_mode:this.lesson_mode,exit:this.exit,session_time:this.session_time,score:this.score};return this.jsonString=!1,result}}let Vt=class extends R{constructor(){super({CMIElement:"cmi.objectives",children:v,errorCode:M.INVALID_SET_VALUE,errorClass:b})}},Ht=class extends u{constructor(){super("cmi.objectives.n"),this._id="",this._status="",this.score=new Ft({CMIElement:"cmi.objectives.n.score",score_children:g,score_range:Y,invalidErrorCode:M.INVALID_SET_VALUE,invalidTypeCode:M.TYPE_MISMATCH,invalidRangeCode:M.VALUE_OUT_OF_RANGE,errorClass:b})}reset(){this._initialized=!1,this._id="",this._status="",this.score?.reset()}get id(){return this._id}set id(id){Lt(this._cmi_element+".id",id,U)&&(this._id=id)}get status(){return this._status}set status(status){Lt(this._cmi_element+".status",status,G)&&(this._status=status)}toJSON(){this.jsonString=!0;const result={id:this.id,status:this.status,score:this.score};return this.jsonString=!1,result}};class Bt extends u{constructor(e){super("cmi.student_data"),this._mastery_score="",this._max_time_allowed="",this._time_limit_action="",this.__children=e||"mastery_score,max_time_allowed,time_limit_action"}reset(){this._initialized=!1}get _children(){return this.__children}set _children(_children){throw new b(this._cmi_element+"._children",M.INVALID_SET_VALUE)}get mastery_score(){return this._mastery_score}set mastery_score(mastery_score){if(Pt.validateReadOnly(this._cmi_element+".mastery_score",this.initialized),null==mastery_score)return;let e=mastery_score;"string"!=typeof e&&(e+=""),""!==e?Lt(this._cmi_element+".mastery_score",e,B)&&qt(this._cmi_element+".mastery_score",e,Y)&&(this._mastery_score=e):this._mastery_score=mastery_score}get max_time_allowed(){return this._max_time_allowed}set max_time_allowed(max_time_allowed){if(Pt.validateReadOnly(this._cmi_element+".max_time_allowed",this.initialized),null==max_time_allowed)return;const e="string"==typeof max_time_allowed?max_time_allowed:max_time_allowed+"";this._max_time_allowed=""!==e?function(e,i){try{Lt(i,e,V,!0);const r=s(e,V);return t(r)}catch(e){}try{Lt(i,e,Z,!0);const s=r(e,Z);return t(s)}catch(e){}throw new b(i,M.TYPE_MISMATCH)}(e,this._cmi_element+".max_time_allowed"):""}get time_limit_action(){return this._time_limit_action}set time_limit_action(time_limit_action){if(Pt.validateReadOnly(this._cmi_element+".time_limit_action",this.initialized),null==time_limit_action)return;const e="string"==typeof time_limit_action?time_limit_action:time_limit_action+"";Lt(this._cmi_element+".time_limit_action",e,"^(exit,message|exit,no message|continue,message|continue,no message)$",!0)&&(this._time_limit_action=e)}toJSON(){this.jsonString=!0;const result={mastery_score:this.mastery_score,max_time_allowed:this.max_time_allowed,time_limit_action:this.time_limit_action};return this.jsonString=!1,result}}class Ut extends u{constructor(e){super("cmi.student_preference"),this._audio="",this._language="",this._speed="",this._text="",this.__children=e||"audio,language,speed,text"}reset(){this._initialized=!1}get _children(){return this.__children}set _children(_children){throw new b(this._cmi_element+"._children",M.INVALID_SET_VALUE)}get audio(){return this._audio}set audio(audio){Pt.validateScorm12Audio(this._cmi_element+".audio",audio)&&(this._audio=audio)}get language(){return this._language}set language(language){Pt.validateScorm12Language(this._cmi_element+".language",language)&&(this._language=language)}get speed(){return this._speed}set speed(speed){Pt.validateScorm12Speed(this._cmi_element+".speed",speed)&&(this._speed=speed)}get text(){return this._text}set text(text){Pt.validateScorm12Text(this._cmi_element+".text",text)&&(this._text=text)}toJSON(){this.jsonString=!0;const result={audio:this.audio,language:this.language,speed:this.speed,text:this.text};return this.jsonString=!1,result}}let $t=class extends R{constructor(){super({CMIElement:"cmi.interactions",children:"id,objectives,time,type,correct_responses,weighting,student_response,result,latency",errorCode:M.INVALID_SET_VALUE,errorClass:b})}},Gt=class extends u{constructor(){super("cmi.interactions.n"),this._id="",this._time="",this._type="",this._weighting="",this._student_response="",this._result="",this._latency="",this.objectives=new R({CMIElement:"cmi.interactions.n.objectives",errorCode:M.INVALID_SET_VALUE,errorClass:b,children:v}),this.correct_responses=new R({CMIElement:"cmi.interactions.correct_responses",errorCode:M.INVALID_SET_VALUE,errorClass:b,children:"pattern"})}initialize(){super.initialize(),this.objectives?.initialize(),this.correct_responses?.initialize()}reset(){this._initialized=!1,this._id="",this._time="",this._type="",this._weighting="",this._student_response="",this._result="",this._latency="",this.objectives?.reset(),this.correct_responses?.reset()}get id(){if(!this.jsonString)throw new b(this._cmi_element+".id",M.WRITE_ONLY_ELEMENT);return this._id}set id(id){Lt(this._cmi_element+".id",id,U)&&(this._id=id)}get time(){if(!this.jsonString)throw new b(this._cmi_element+".time",M.WRITE_ONLY_ELEMENT);return this._time}set time(time){Lt(this._cmi_element+".time",time,"^(?:[01]\\d|2[0123]):(?:[012345]\\d):(?:[012345]\\d)(\\.\\d{1,2})?$")&&(this._time=time)}get type(){if(!this.jsonString)throw new b(this._cmi_element+".type",M.WRITE_ONLY_ELEMENT);return this._type}set type(type){Lt(this._cmi_element+".type",type,"^(true-false|choice|fill-in|matching|performance|sequencing|likert|numeric)$")&&(this._type=type)}get weighting(){if(!this.jsonString)throw new b(this._cmi_element+".weighting",M.WRITE_ONLY_ELEMENT);return this._weighting}set weighting(weighting){Lt(this._cmi_element+".weighting",weighting,B)&&qt(this._cmi_element+".weighting",weighting,"-100#100")&&(this._weighting=weighting)}get student_response(){if(!this.jsonString)throw new b(this._cmi_element+".student_response",M.WRITE_ONLY_ELEMENT);return this._student_response}set student_response(student_response){Lt(this._cmi_element+".student_response",student_response,$,!0)&&(this._student_response=student_response)}get result(){if(!this.jsonString)throw new b(this._cmi_element+".result",M.WRITE_ONLY_ELEMENT);return this._result}set result(result){let e=result;"incorrect"===result&&(e="wrong",console.warn("SCORM 1.2: Received non-standard value 'incorrect' for cmi.interactions.n.result; normalizing to 'wrong'.")),Lt(this._cmi_element+".result",e,"^(correct|wrong|unanticipated|neutral|([0-9]{0,3})?(\\.[0-9]*)?)$")&&(this._result=e)}get latency(){if(!this.jsonString)throw new b(this._cmi_element+".latency",M.WRITE_ONLY_ELEMENT);return this._latency}set latency(latency){if(Lt(this._cmi_element+".latency",latency,V)){const e=s(latency,V);this._latency=t(e)}}toJSON(){this.jsonString=!0;const result={id:this.id,time:this.time,type:this.type,weighting:this.weighting,student_response:this.student_response,result:this.result,latency:this.latency,objectives:this.objectives,correct_responses:this.correct_responses};return this.jsonString=!1,result}},Yt=class extends u{constructor(){super("cmi.interactions.n.objectives.n"),this._id=""}reset(){this._initialized=!1,this._id=""}get id(){if(!this.jsonString)throw new b(this._cmi_element+".id",M.WRITE_ONLY_ELEMENT);return this._id}set id(id){Lt(this._cmi_element+".id",id,U)&&(this._id=id)}toJSON(){this.jsonString=!0;const result={id:this.id};return this.jsonString=!1,result}},Wt=class extends u{constructor(){super("cmi.interactions.correct_responses.n"),this._pattern=""}reset(){this._initialized=!1,this._pattern=""}get pattern(){if(!this.jsonString)throw new b(this._cmi_element+".pattern",M.WRITE_ONLY_ELEMENT);return this._pattern}set pattern(pattern){Lt(this._cmi_element+".pattern",pattern,$,!0)&&(this._pattern=pattern)}toJSON(){this.jsonString=!0;const result={pattern:this._pattern};return this.jsonString=!1,result}},Jt=class extends h{constructor(e,student_data,t){super("cmi"),this.__children="",this.__version="3.4",this._launch_data="",this._comments="",this._comments_from_lms="",t&&this.initialize(),this.__children=e||"core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions",this.core=new kt,this.objectives=new Vt,this.student_data=student_data||new Bt,this.student_preference=new Ut,this.interactions=new $t}reset(){this._initialized=!1,this._launch_data="",this._comments="",this.core?.reset(),this.objectives?.reset(!0),this.interactions?.reset(!0),this.student_data?.reset(),this.student_preference?.reset()}initialize(){super.initialize(),this.core?.initialize(),this.objectives?.initialize(),this.student_data?.initialize(),this.student_preference?.initialize(),this.interactions?.initialize()}toJSON(){this.jsonString=!0;const result={suspend_data:this.suspend_data,launch_data:this.launch_data,comments:this.comments,comments_from_lms:this.comments_from_lms,core:this.core,objectives:this.objectives,student_data:this.student_data,student_preference:this.student_preference,interactions:this.interactions};return this.jsonString=!1,result}get _version(){return this.__version}set _version(_version){throw new b(this._cmi_element+"._version",M.INVALID_SET_VALUE)}get _children(){return this.__children}set _children(_children){throw new b(this._cmi_element+"._children",M.INVALID_SET_VALUE)}get suspend_data(){return this.core?.suspend_data}set suspend_data(suspend_data){this.core&&(this.core.suspend_data=suspend_data)}get launch_data(){return this._launch_data}set launch_data(launch_data){if(this.initialized)throw new b(this._cmi_element+".launch_data",M.READ_ONLY_ELEMENT);this._launch_data=launch_data}get comments(){return this._comments}set comments(comments){Lt(this._cmi_element+".comments",comments,"^[\\s\\S]{0,4096}$",!0)&&(this._comments=comments)}get comments_from_lms(){return this._comments_from_lms}set comments_from_lms(comments_from_lms){if(this.initialized)throw new b(this._cmi_element+".comments_from_lms",M.READ_ONLY_ELEMENT);this._comments_from_lms=comments_from_lms}getCurrentTotalTime(){return this.core.getCurrentTotalTime(this.start_time)}};class Kt extends u{constructor(){super("cmi.nav"),this._event=""}reset(){this._event="",this._initialized=!1}get event(){return this._event}set event(e){(""===e||Lt(this._cmi_element+".event",e,"^(_?(previous|continue|start|resumeAll|exit|exitAll|abandon|abandonAll|suspendAll|retry|retryAll)|choice|jump|_none_)$"))&&(this._event=e)}toJSON(){this.jsonString=!0;const result={event:this.event};return this.jsonString=!1,result}}const Xt=class e extends zt{constructor(t,i){const s=t?{...t}:void 0;s&&void 0===s.mastery_override&&(s.mastery_override=!0),super(M,s,i),this.statusSetByModule=!1,this.cmi=new Jt,this.nav=new Kt,this.settings.globalStudentPreferences&&e._globalLearnerPrefs&&(""!==e._globalLearnerPrefs.audio&&(this.cmi.student_preference.audio=e._globalLearnerPrefs.audio),""!==e._globalLearnerPrefs.language&&(this.cmi.student_preference.language=e._globalLearnerPrefs.language),""!==e._globalLearnerPrefs.speed&&(this.cmi.student_preference.speed=e._globalLearnerPrefs.speed),""!==e._globalLearnerPrefs.text&&(this.cmi.student_preference.text=e._globalLearnerPrefs.text)),this.LMSInitialize=this.lmsInitialize,this.LMSFinish=this.lmsFinish,this.LMSGetValue=this.lmsGetValue,this.LMSSetValue=this.lmsSetValue,this.LMSCommit=this.lmsCommit,this.LMSGetLastError=this.lmsGetLastError,this.LMSGetErrorString=this.lmsGetErrorString,this.LMSGetDiagnostic=this.lmsGetDiagnostic}static clearGlobalPreferences(){e._globalLearnerPrefs=null}reset(e){this.commonReset(e),this.cmi?.reset(),this.nav?.reset(),this.statusSetByModule=!1}lmsInitialize(){return""!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"")?(this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),_):(this.cmi.initialize(),this.cmi.core.lesson_status?this.statusSetByModule=!0:this.cmi.core.lesson_status="not attempted",this.initialize("LMSInitialize","LMS was already initialized!","LMS is already finished!"))}lmsFinish(){if(""!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:""))return this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),_;const result=this.terminate("LMSFinish",!0);return result===p&&(""!==this.nav.event?this.processListeners("continue"===this.nav.event?"SequenceNext":"SequencePrevious"):this.settings.autoProgress&&this.processListeners("SequenceNext")),result}lmsGetValue(e){return this.getValue("LMSGetValue",!1,e)}lmsSetValue(e,t){return"cmi.core.lesson_status"===e&&(this.statusSetByModule=!0),this.setValue("LMSSetValue","LMSCommit",!1,e,t)}lmsCommit(){return""!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"")?(this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),_):this.settings.throttleCommits?(this.scheduleCommit(500,"LMSCommit"),p):this.commit("LMSCommit",!1)}lmsGetLastError(){return this.getLastError("LMSGetLastError")}lmsGetErrorString(e){return this.getErrorString("LMSGetErrorString",e)}lmsGetDiagnostic(e){return this.getDiagnostic("LMSGetDiagnostic",e)}setCMIValue(e,t){const result=this._commonSetCMIValue("LMSSetValue",!1,e,t);return this.settings.globalStudentPreferences&&("cmi.student_preference.audio"===e?this._updateGlobalPreference("audio",t):"cmi.student_preference.language"===e?this._updateGlobalPreference("language",t):"cmi.student_preference.speed"===e?this._updateGlobalPreference("speed",t):"cmi.student_preference.text"===e&&this._updateGlobalPreference("text",t)),result}_updateGlobalPreference(t,i){e._globalLearnerPrefs||(e._globalLearnerPrefs={audio:"",language:"",speed:"",text:""}),e._globalLearnerPrefs[t]=i}getCMIValue(e){return this._commonGetCMIValue("getCMIValue",!1,e)}getChildElement(e,t,i){return c(e,"cmi\\.objectives\\.\\d+")?new Ht:i&&c(e,"cmi\\.interactions\\.\\d+\\.correct_responses\\.\\d+")?new Wt:i&&c(e,"cmi\\.interactions\\.\\d+\\.objectives\\.\\d+")?new Yt:!i&&c(e,"cmi\\.interactions\\.\\d+")?new Gt:null}validateCorrectResponse(e,t){}getLmsErrorMessageDetails(e,t){let i="No Error",s="No Error";return S[e+=""]&&(i=S[e]?.basicMessage||i,s=S[e]?.detailMessage||s),t?s:i}replaceWithAnotherScormAPI(e){this.cmi=e.cmi}renderCommitCMI(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.renderCMIToJSONObject();(e||t)&&(i.cmi.core.total_time=this.cmi.getCurrentTotalTime());const result=[],s=o(i);switch(this.settings.dataCommitFormat){case"flattened":return o(i);case"params":for(const e in s)({}).hasOwnProperty.call(s,e)&&result.push(`${e}=${s[e]}`);return result;default:return i}}renderCommitObject(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.renderCommitCMI(e,t),r=e||t?this.cmi.getCurrentTotalTime():"",n=s(r,V),o=this.cmi.core.lesson_status;let a=q,c=x;o&&(a="completed"===o||"passed"===o?D:L,"passed"===o?c=N:"failed"===o&&(c=j));const l=this.cmi?.core?.score?.getScoreObject()||{},u={successStatus:c,completionStatus:a,runtimeData:i,totalTimeSeconds:n};return l&&(u.score=l),this.settings.autoPopulateCommitMetadata&&(this.settings.courseId&&(u.courseId=this.settings.courseId),this.settings.scoId&&(u.scoId=this.settings.scoId),this.cmi.core.student_id&&(u.learnerId=this.cmi.core.student_id),this.cmi.core.student_name&&(u.learnerName=this.cmi.core.student_name)),u}storeData(e){if(e){const t=this.cmi.core.lesson_status;if("browse"===this.cmi.core.lesson_mode&&""===(this.startingData?.cmi?.core?.lesson_status||"")&&"not attempted"===t)return this.cmi.core.lesson_status="browsed",this.processCommitData(e);if(this.cmi.core.lesson_status&&(this.statusSetByModule||"not attempted"!==this.cmi.core.lesson_status)||(this.cmi.core.lesson_status=this.settings.autoCompleteLessonStatus?"completed":"incomplete"),"normal"===this.cmi.core.lesson_mode&&"credit"===this.cmi.core.credit&&this.settings.mastery_override&&""!==this.cmi.student_data.mastery_score&&""!==this.cmi.core.score.raw){const e=parseFloat(this.cmi.core.score.raw),t=parseFloat(this.cmi.student_data.mastery_score);isNaN(e)||isNaN(t)||(this.cmi.core.lesson_status=t>e?"failed":"passed")}if(this.settings.score_overrides_status&&this.statusSetByModule&&"normal"===this.cmi.core.lesson_mode&&"credit"===this.cmi.core.credit&&""!==this.cmi.student_data.mastery_score&&""!==this.cmi.core.score.raw){const e=parseFloat(this.cmi.core.score.raw),t=parseFloat(this.cmi.student_data.mastery_score);isNaN(e)||isNaN(t)||(this.cmi.core.lesson_status=t>e?"failed":"passed")}}return this.processCommitData(e)}processCommitData(e){const t=this.getCommitObject(e);return"string"==typeof this.settings.lmsCommitUrl?this.processHttpRequest(this.settings.lmsCommitUrl,t,e):{result:p,errorCode:0}}};Xt._globalLearnerPrefs=null;let Scorm12API=Xt;class Qt extends u{constructor(){super("cmi.learner_preference"),this.__children=f.student_preference_children,this._audio_level="1",this._language="",this._delivery_speed="1",this._audio_captioning="0"}reset(){this._initialized=!1}get _children(){return this.__children}set _children(_children){throw new A(this._cmi_element+"._children",w.READ_ONLY_ELEMENT)}get audio_level(){return this._audio_level}set audio_level(audio_level){Ke(this._cmi_element+".audio_level",audio_level,ee)&&Xe(this._cmi_element+".audio_level",audio_level,"0#999.9999999")&&(this._audio_level=audio_level)}get language(){return this._language}set language(language){Ke(this._cmi_element+".language",language,"^([a-zA-Z]{1,8}|i|x)(-[a-zA-Z0-9-]{2,8})?$|^$")&&(this._language=language)}get delivery_speed(){return this._delivery_speed}set delivery_speed(delivery_speed){if(Ke(this._cmi_element+".delivery_speed",delivery_speed,ee)&&Xe(this._cmi_element+".delivery_speed",delivery_speed,"0#999.9999999")){if(0===parseFloat(delivery_speed))throw new A(this._cmi_element+".delivery_speed",w.VALUE_OUT_OF_RANGE);this._delivery_speed=delivery_speed}}get audio_captioning(){return this._audio_captioning}set audio_captioning(audio_captioning){Ke(this._cmi_element+".audio_captioning",audio_captioning,"^-?([0-9]+)$")&&Xe(this._cmi_element+".audio_captioning",audio_captioning,"-1#1")&&(this._audio_captioning=audio_captioning)}toJSON(){this.jsonString=!0;const result={audio_level:this.audio_level,language:this.language,delivery_speed:this.delivery_speed,audio_captioning:this.audio_captioning};return this.jsonString=!1,result}}class Zt extends R{constructor(){super({CMIElement:"cmi.interactions",children:f.interactions_children,errorCode:w.READ_ONLY_ELEMENT,errorClass:A})}}class ei extends u{constructor(){super("cmi.interactions.n"),this._id="",this._idIsSet=!1,this._type="",this._timestamp="",this._weighting="",this._learner_response="",this._result="",this._latency="",this._description="",this.objectives=new R({CMIElement:"cmi.interactions.n.objectives",errorCode:w.READ_ONLY_ELEMENT,errorClass:A,children:f.objectives_children}),this.correct_responses=new R({CMIElement:"cmi.interactions.n.correct_responses",errorCode:w.READ_ONLY_ELEMENT,errorClass:A,children:f.correct_responses_children})}initialize(){super.initialize(),this.objectives?.initialize(),this.correct_responses?.initialize()}reset(){this._initialized=!1,this._id="",this._idIsSet=!1,this._type="",this._timestamp="",this._weighting="",this._learner_response="",this._result="",this._latency="",this._description="",this.objectives=new R({CMIElement:"cmi.interactions.n.objectives",errorCode:w.READ_ONLY_ELEMENT,errorClass:A,children:f.objectives_children}),this.correct_responses=new R({CMIElement:"cmi.interactions.n.correct_responses",errorCode:w.READ_ONLY_ELEMENT,errorClass:A,children:f.correct_responses_children})}get id(){return this._id}set id(id){if(""===id||""===id.trim())throw new A(this._cmi_element+".id",w.TYPE_MISMATCH);if(this._idIsSet&&this._id!==id)throw new A(this._cmi_element+".id",w.GENERAL_SET_FAILURE);Ke(this._cmi_element+".id",id,ie)&&(this._id=id,this._idIsSet=!0)}get type(){return this._type}set type(type){if(this.initialized&&""===this._id)throw new A(this._cmi_element+".type",w.DEPENDENCY_NOT_ESTABLISHED);Ke(this._cmi_element+".type",type,"^(true-false|choice|fill-in|long-fill-in|matching|performance|sequencing|likert|numeric|other)$")&&(this._type=type)}get timestamp(){return this._timestamp}set timestamp(timestamp){if(this.initialized&&""===this._id)throw new A(this._cmi_element+".timestamp",w.DEPENDENCY_NOT_ESTABLISHED);Ke(this._cmi_element+".timestamp",timestamp,Q)&&(this._timestamp=timestamp)}get weighting(){return this._weighting}set weighting(weighting){if(this.initialized&&""===this._id)throw new A(this._cmi_element+".weighting",w.DEPENDENCY_NOT_ESTABLISHED);Ke(this._cmi_element+".weighting",weighting,ee)&&(this._weighting=weighting)}get learner_response(){return this._learner_response}set learner_response(learner_response){if(this.initialized&&(""===this._type||""===this._id))throw new A(this._cmi_element+".learner_response",w.DEPENDENCY_NOT_ESTABLISHED);{let e=[];const t=ce[this.type];if(!t)throw new A(this._cmi_element+".learner_response",w.TYPE_MISMATCH);if(t?.delimiter?e=learner_response.split("[,]"===t.delimiter?",":t.delimiter):e[0]=learner_response,0>=e.length||e.length>t.max)throw new A(this._cmi_element+".learner_response",w.GENERAL_SET_FAILURE);{const i=RegExp(t.format);for(let s=0;e.length>s;s++)if(t?.delimiter2){const r="[.]"===t.delimiter2?".":t.delimiter2,n=e[s]?.split(r);if(2!==n?.length)throw new A(this._cmi_element+".learner_response",w.TYPE_MISMATCH);if("performance"===this.type&&(""===n[0]||""===n[1]))throw new A(this._cmi_element+".learner_response",w.TYPE_MISMATCH);if(!n[0]?.match(i))throw new A(this._cmi_element+".learner_response",w.TYPE_MISMATCH);if(!t.format2||!n[1]?.match(RegExp(t.format2)))throw new A(this._cmi_element+".learner_response",w.TYPE_MISMATCH)}else{if(!e[s]?.match(i))throw new A(this._cmi_element+".learner_response",w.TYPE_MISMATCH);if(""!==e[s]&&t.unique)for(let t=0;s>t;t++)if(e[s]===e[t])throw new A(this._cmi_element+".learner_response",w.TYPE_MISMATCH)}}this._learner_response=learner_response}}get result(){return this._result}set result(result){Ke(this._cmi_element+".result",result,"^(correct|incorrect|unanticipated|neutral|-?([0-9]{1,4})(\\.[0-9]{1,18})?)$")&&(this._result=result)}get latency(){return this._latency}set latency(latency){if(this.initialized&&""===this._id)throw new A(this._cmi_element+".latency",w.DEPENDENCY_NOT_ESTABLISHED);Ke(this._cmi_element+".latency",latency,Z)&&(this._latency=latency)}get description(){return this._description}set description(description){if(this.initialized&&""===this._id)throw new A(this._cmi_element+".description",w.DEPENDENCY_NOT_ESTABLISHED);Ke(this._cmi_element+".description",description,K,!0)&&(this._description=description)}toJSON(){this.jsonString=!0;const result={id:this.id,type:this.type,objectives:this.objectives,timestamp:this.timestamp,weighting:this.weighting,learner_response:this.learner_response,result:this.result,latency:this.latency,description:this.description,correct_responses:this.correct_responses};return this.jsonString=!1,result}}class ti extends u{constructor(){super("cmi.interactions.n.objectives.n"),this._id=""}reset(){this._initialized=!1,this._id=""}get id(){return this._id}set id(id){if(""===id||""===id.trim())throw new A(this._cmi_element+".id",w.TYPE_MISMATCH);Ke(this._cmi_element+".id",id,ie)&&(this._id=id)}toJSON(){this.jsonString=!0;const result={id:this.id};return this.jsonString=!1,result}}function ii(e){return e.replace(/[[\]]/g,"")}function si(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ri(text,e){const t=si(e),i=RegExp("(?<!\\\\)"+t,"g"),s=RegExp("\\\\"+t,"g");return text.split(i).map(t=>t.replace(s,e))}function ni(text,e){const t=si(e),i=RegExp("(?<!\\\\)"+t),s=RegExp("\\\\"+t,"g"),r=text.split(i),n=r[0]??"";return 1===r.length?[n.replace(s,e)]:[n.replace(s,e),r.slice(1).join(e).replace(s,e)]}class oi extends u{constructor(e){super("cmi.interactions.n.correct_responses.n"),this._pattern="",this._interactionType=e}reset(){this._initialized=!1,this._pattern=""}get pattern(){return this._pattern}set pattern(pattern){if("fill-in"!==this._interactionType||""!==pattern){if(Ke(this._cmi_element+".pattern",pattern,"^.*$")){if(this._interactionType){const e=le[this._interactionType];e&&("matching"===this._interactionType&&/\\[.,]/.test(pattern)||function(type,pattern,e){if(pattern.trim()!==pattern)throw new A("cmi.interactions.n.correct_responses.n.pattern",w.TYPE_MISMATCH);const t=e.delimiter?ii(e.delimiter):null,i=t?ri(pattern,t):[pattern];for(const e of i)if(e.trim()!==e)throw new A("cmi.interactions.n.correct_responses.n.pattern",w.TYPE_MISMATCH);if("fill-in"===type&&""===pattern)return;const s=e.delimiter?ii(e.delimiter):null;let r;if(r=s?ri(pattern,s):[pattern],!e.delimiter&&pattern.includes(","))throw new A("cmi.interactions.n.correct_responses.n.pattern",w.TYPE_MISMATCH);if((e.unique||!1===e.duplicate)&&new Set(r).size!==r.length)throw new A("cmi.interactions.n.correct_responses.n.pattern",w.TYPE_MISMATCH);if(0===r.length||r.length>e.max)throw new A("cmi.interactions.n.correct_responses.n.pattern",w.GENERAL_SET_FAILURE);const n=RegExp(e.format),o=e.format2?RegExp(e.format2):null,a=e=>{if(!n.test(e))throw new A("cmi.interactions.n.correct_responses.n.pattern",w.TYPE_MISMATCH)},c=(e,t)=>{if(!t)throw new A("cmi.interactions.n.correct_responses.n.pattern",w.TYPE_MISMATCH);const i=ii(t),s=e.split(RegExp("(?<!\\\\)"+si(i),"g")).map(e=>e.replace(RegExp("\\\\"+si(i),"g"),i));if(2!==s.length||""===s[0]||""===s[1])throw new A("cmi.interactions.n.correct_responses.n.pattern",w.TYPE_MISMATCH);if(void 0!==s[0]&&!n.test(s[0])||o&&void 0!==s[1]&&!o.test(s[1]))throw new A("cmi.interactions.n.correct_responses.n.pattern",w.TYPE_MISMATCH)};for(const t of r)switch(type){case"numeric":{const i=e.delimiter?ii(e.delimiter):":",s=t.split(i);if(1>s.length||s.length>2)throw new A("cmi.interactions.n.correct_responses.n.pattern",w.TYPE_MISMATCH);s.forEach(a);break}case"performance":{const i=e.delimiter2;if(!i)throw new A("cmi.interactions.n.correct_responses.n.pattern",w.TYPE_MISMATCH);const s=ni(t,ii(i));if(2!==s.length)throw new A("cmi.interactions.n.correct_responses.n.pattern",w.TYPE_MISMATCH);const[r,a]=s;if(""===r||""===a||r===a)throw new A("cmi.interactions.n.correct_responses.n.pattern",w.TYPE_MISMATCH);if(void 0===r||!n.test(r))throw new A("cmi.interactions.n.correct_responses.n.pattern",w.TYPE_MISMATCH);if(o&&void 0!==a&&!o.test(a))throw new A("cmi.interactions.n.correct_responses.n.pattern",w.TYPE_MISMATCH);break}default:e.delimiter2?c(t,e.delimiter2):a(t)}}(this._interactionType,pattern,e))}this._pattern=pattern}}else this._pattern=""}toJSON(){this.jsonString=!0;const result={pattern:this.pattern};return this.jsonString=!1,result}}class ai extends Ft{constructor(){super({CMIElement:"cmi.score",score_children:f.score_children,max:"",invalidErrorCode:w.READ_ONLY_ELEMENT,invalidTypeCode:w.TYPE_MISMATCH,invalidRangeCode:w.VALUE_OUT_OF_RANGE,decimalRegex:ee,errorClass:A}),this._scaled=""}reset(){this._initialized=!1,this._scaled="",this._raw="",this._min="",this._max=""}get scaled(){return this._scaled}set scaled(e){Ke(this._cmi_element+".scaled",e,ee)&&Xe(this._cmi_element+".scaled",e,"-1#1")&&(this._scaled=e)}getScoreObject(){const e=super.getScoreObject();return Number.isNaN(Number.parseFloat(this.scaled))||(e.scaled=Number.parseFloat(this.scaled)),e}toJSON(){this.jsonString=!0;const result={scaled:this.scaled,raw:this.raw,min:this.min,max:this.max};return this.jsonString=!1,result}}class ci extends R{constructor(){super({CMIElement:"cmi.comments_from_lms",children:f.comments_children,errorCode:w.READ_ONLY_ELEMENT,errorClass:A})}}class li extends R{constructor(){super({CMIElement:"cmi.comments_from_learner",children:f.comments_children,errorCode:w.READ_ONLY_ELEMENT,errorClass:A})}}class ui extends u{constructor(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];super("cmi.comments_from_learner.n"),this._comment="",this._location="",this._timestamp="",this._comment="",this._location="",this._timestamp="",this._readOnlyAfterInit=e}reset(){this._initialized=!1}get comment(){return this._comment}set comment(comment){if(this.initialized&&this._readOnlyAfterInit)throw new A(this._cmi_element+".comment",w.READ_ONLY_ELEMENT);Ke(this._cmi_element+".comment",comment,X,!0)&&(this._comment=comment)}get location(){return this._location}set location(location){if(this.initialized&&this._readOnlyAfterInit)throw new A(this._cmi_element+".location",w.READ_ONLY_ELEMENT);Ke(this._cmi_element+".location",location,"^[\\u0000-\\uFFFF]{0,250}$")&&(this._location=location)}get timestamp(){return this._timestamp}set timestamp(timestamp){if(this.initialized&&this._readOnlyAfterInit)throw new A(this._cmi_element+".timestamp",w.READ_ONLY_ELEMENT);Ke(this._cmi_element+".timestamp",timestamp,Q)&&(this._timestamp=timestamp)}toJSON(){this.jsonString=!0;const result={comment:this.comment,location:this.location,timestamp:this.timestamp};return this.jsonString=!1,result}}class hi extends R{constructor(){super({CMIElement:"cmi.objectives",children:f.objectives_children,errorCode:w.READ_ONLY_ELEMENT,errorClass:A})}findObjectiveById(id){return this.childArray.find(e=>e.id===id)}findObjectiveByIndex(e){return this.childArray[e]}setObjectiveByIndex(e,t){this.childArray[e]=t}}class di extends u{constructor(){super("cmi.objectives.n"),this._id="",this._idIsSet=!1,this._success_status="unknown",this._completion_status="unknown",this._progress_measure="",this._description="",this.score=new ai}reset(){this._initialized=!1,this._id="",this._idIsSet=!1,this._success_status="unknown",this._completion_status="unknown",this._progress_measure="",this._description="",this.score?.reset()}initialize(){super.initialize(),this.score?.initialize()}get id(){return this._id}set id(id){if(""===id||""===id.trim())throw new A(this._cmi_element+".id",w.TYPE_MISMATCH);if(this._idIsSet&&this._id!==id)throw new A(this._cmi_element+".id",w.GENERAL_SET_FAILURE);Ke(this._cmi_element+".id",id,ie)&&(this._id=id,this._idIsSet=!0)}get success_status(){return this._success_status}set success_status(success_status){if(this.initialized&&""===this._id)throw new A(this._cmi_element+".success_status",w.DEPENDENCY_NOT_ESTABLISHED);Ke(this._cmi_element+".success_status",success_status,re)&&(this._success_status=success_status)}get completion_status(){return this._completion_status}set completion_status(completion_status){if(this.initialized&&""===this._id)throw new A(this._cmi_element+".completion_status",w.DEPENDENCY_NOT_ESTABLISHED);Ke(this._cmi_element+".completion_status",completion_status,se)&&(this._completion_status=completion_status)}get progress_measure(){return this._progress_measure}set progress_measure(progress_measure){if(this.initialized&&""===this._id)throw new A(this._cmi_element+".progress_measure",w.DEPENDENCY_NOT_ESTABLISHED);Ke(this._cmi_element+".progress_measure",progress_measure,ee)&&Xe(this._cmi_element+".progress_measure",progress_measure,"0#1")&&(this._progress_measure=progress_measure)}get description(){return this._description}set description(description){if(this.initialized&&""===this._id)throw new A(this._cmi_element+".description",w.DEPENDENCY_NOT_ESTABLISHED);Ke(this._cmi_element+".description",description,K,!0)&&(this._description=description)}toJSON(){this.jsonString=!0;const result={id:this.id,success_status:this.success_status,completion_status:this.completion_status,progress_measure:this.progress_measure,description:this.description,score:this.score};return this.jsonString=!1,result}fromJSON(e){e&&"object"==typeof e&&("string"==typeof e.id&&(this.id=e.id),"string"==typeof e.success_status&&(this.success_status=e.success_status),"string"==typeof e.completion_status&&(this.completion_status=e.completion_status),void 0!==e.progress_measure&&(this.progress_measure=e.progress_measure+""),"string"==typeof e.description&&(this.description=e.description),e.score&&"object"==typeof e.score&&(void 0!==e.score.scaled&&(this.score.scaled=e.score.scaled+""),void 0!==e.score.raw&&(this.score.raw=e.score.raw+""),void 0!==e.score.min&&(this.score.min=e.score.min+""),void 0!==e.score.max&&(this.score.max=e.score.max+"")))}}class mi extends u{constructor(){super("cmi"),this.__version="1.0",this.__children=f.cmi_children}get _version(){return this.__version}set _version(_version){throw new A(this._cmi_element+"._version",w.READ_ONLY_ELEMENT)}get _children(){return this.__children}set _children(_children){throw new A(this._cmi_element+"._children",w.READ_ONLY_ELEMENT)}reset(){this._initialized=!1}}class pi extends u{constructor(){super("cmi"),this._learner_id="",this._learner_name=""}get learner_id(){return this._learner_id}set learner_id(learner_id){if(this.initialized)throw new A(this._cmi_element+".learner_id",w.READ_ONLY_ELEMENT);this._learner_id=learner_id}get learner_name(){return this._learner_name}set learner_name(learner_name){if(this.initialized)throw new A(this._cmi_element+".learner_name",w.READ_ONLY_ELEMENT);this._learner_name=learner_name}reset(){this._initialized=!1}}class _i extends u{constructor(){super("cmi"),this._completion_status="unknown",this._success_status="unknown",this._progress_measure=""}get completion_status(){return this._completion_status}set completion_status(completion_status){Ke(this._cmi_element+".completion_status",completion_status,se)&&(this._completion_status=completion_status)}get success_status(){return this._success_status}set success_status(success_status){Ke(this._cmi_element+".success_status",success_status,re)&&(this._success_status=success_status)}get progress_measure(){return this._progress_measure}set progress_measure(progress_measure){Ke(this._cmi_element+".progress_measure",progress_measure,ee)&&Xe(this._cmi_element+".progress_measure",progress_measure,"0#1")&&(this._progress_measure=progress_measure)}reset(){this._initialized=!1,this._completion_status="unknown",this._success_status="unknown",this._progress_measure=""}}class gi extends u{constructor(){super("cmi"),this._entry="",this._exit="",this._session_time="PT0H0M0S",this._total_time="PT0S"}get entry(){return this._entry}set entry(entry){if(this.initialized)throw new A(this._cmi_element+".entry",w.READ_ONLY_ELEMENT);this._entry=entry}get exit(){if(!this.jsonString)throw new A(this._cmi_element+".exit",w.WRITE_ONLY_ELEMENT);return this._exit}getExitValueInternal(){return this._exit}set exit(exit){"logout"===exit&&console.warn('SCORM 2004: cmi.exit value "logout" is deprecated per 4th Edition. Consider using "normal" or "suspend" instead.'),Ke(this._cmi_element+".exit",exit,"^(time-out|suspend|logout|normal)$",!0)&&(this._exit=exit)}get session_time(){if(!this.jsonString)throw new A(this._cmi_element+".session_time",w.WRITE_ONLY_ELEMENT);return this._session_time}set session_time(session_time){Ke(this._cmi_element+".session_time",session_time,Z)&&(this._session_time=session_time)}get total_time(){return this._total_time}set total_time(total_time){if(this.initialized)throw new A(this._cmi_element+".total_time",w.READ_ONLY_ELEMENT);this._total_time=total_time}getCurrentTotalTime(e){let t=this._session_time;if(void 0!==e){const s=(new Date).getTime()-e;t=i(s/1e3)}return function(e,t,s){const n=RegExp(s);return i(r(e,n)+r(t,n))}(this._total_time,t,Z)}reset(){this._initialized=!1,this._entry="ab-initio",this._exit="",this._session_time="PT0H0M0S"}}class vi extends u{constructor(){super("cmi"),this._location="",this._launch_data="",this._suspend_data=""}get location(){return this._location}set location(location){Ke(this._cmi_element+".location",location,"^[\\u0000-\\uFFFF]{0,1000}$")&&(this._location=location)}get launch_data(){return this._launch_data}set launch_data(launch_data){if(this.initialized)throw new A(this._cmi_element+".launch_data",w.READ_ONLY_ELEMENT);this._launch_data=launch_data}get suspend_data(){return this._suspend_data}set suspend_data(suspend_data){Ke(this._cmi_element+".suspend_data",suspend_data,J,!0)&&(this._suspend_data=suspend_data)}reset(){this._initialized=!1,this._location="",this._suspend_data=""}}class Si extends u{constructor(){super("cmi"),this._credit="credit",this._mode="normal",this._time_limit_action="continue,no message",this._max_time_allowed=""}get credit(){return this._credit}set credit(credit){if(this.initialized)throw new A(this._cmi_element+".credit",w.READ_ONLY_ELEMENT);if(!/^(credit|no-credit)$/.test(credit))throw new A(this._cmi_element+".credit",w.TYPE_MISMATCH);this._credit=credit}get mode(){return this._mode}set mode(mode){if(this.initialized)throw new A(this._cmi_element+".mode",w.READ_ONLY_ELEMENT);if(!/^(browse|normal|review)$/.test(mode))throw new A(this._cmi_element+".mode",w.TYPE_MISMATCH);this._mode=mode}get time_limit_action(){return this._time_limit_action}set time_limit_action(time_limit_action){if(this.initialized)throw new A(this._cmi_element+".time_limit_action",w.READ_ONLY_ELEMENT);if(!/^(exit,message|exit,no message|continue,message|continue,no message)$/.test(time_limit_action))throw new A(this._cmi_element+".time_limit_action",w.TYPE_MISMATCH);this._time_limit_action=time_limit_action}get max_time_allowed(){return this._max_time_allowed}set max_time_allowed(max_time_allowed){if(this.initialized)throw new A(this._cmi_element+".max_time_allowed",w.READ_ONLY_ELEMENT);if(""!==max_time_allowed){if(!RegExp(Z).test(max_time_allowed))throw new A(this._cmi_element+".max_time_allowed",w.TYPE_MISMATCH);this._max_time_allowed=max_time_allowed}else this._max_time_allowed=max_time_allowed}reset(){this._initialized=!1}}class fi extends u{constructor(){super("cmi"),this._scaled_passing_score="",this._completion_threshold=""}get scaled_passing_score(){return this._scaled_passing_score}set scaled_passing_score(scaled_passing_score){if(this.initialized)throw new A(this._cmi_element+".scaled_passing_score",w.READ_ONLY_ELEMENT??404);if(""===scaled_passing_score)return void(this._scaled_passing_score=scaled_passing_score);if(!RegExp(ee).test(scaled_passing_score))throw new A(this._cmi_element+".scaled_passing_score",w.TYPE_MISMATCH??406);const e=parseFloat(scaled_passing_score);if(-1>e||e>1)throw new A(this._cmi_element+".scaled_passing_score",w.VALUE_OUT_OF_RANGE??407);this._scaled_passing_score=scaled_passing_score}get completion_threshold(){return this._completion_threshold}set completion_threshold(e){if(this.initialized)throw new A(this._cmi_element+".completion_threshold",w.READ_ONLY_ELEMENT??404);if(""===e)return void(this._completion_threshold=e);if(!RegExp(ee).test(e))throw new A(this._cmi_element+".completion_threshold",w.TYPE_MISMATCH??406);const t=parseFloat(e);if(0>t||t>1)throw new A(this._cmi_element+".completion_threshold",w.VALUE_OUT_OF_RANGE??407);this._completion_threshold=e}reset(){this._initialized=!1}}class yi extends h{constructor(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];super("cmi"),this.metadata=new mi,this.learner=new pi,this.status=new _i,this.session=new gi,this.content=new vi,this.settings=new Si,this.thresholds=new fi,this.learner_preference=new Qt,this.score=new ai,this.comments_from_learner=new li,this.comments_from_lms=new ci,this.interactions=new Zt,this.objectives=new hi,e&&this.initialize()}initialize(){super.initialize(),this.metadata?.initialize(),this.learner?.initialize(),this.status?.initialize(),this.session?.initialize(),this.content?.initialize(),this.settings?.initialize(),this.thresholds?.initialize(),this.learner_preference?.initialize(),this.score?.initialize(),this.comments_from_learner?.initialize(),this.comments_from_lms?.initialize(),this.interactions?.initialize(),this.objectives?.initialize()}reset(){this._initialized=!1,this.metadata?.reset(),this.learner?.reset(),this.status?.reset(),this.session?.reset(),this.content?.reset(),this.settings?.reset(),this.thresholds?.reset(),this.objectives?.reset(!0),this.interactions?.reset(!0),this.score?.reset(),this.comments_from_learner?.reset(),this.comments_from_lms?.reset(),this.learner_preference?.reset()}get _version(){return this.metadata._version}set _version(_version){this.metadata._version=_version}get _children(){return this.metadata._children}set _children(_children){this.metadata._children=_children}get completion_status(){return this.status.completion_status}set completion_status(completion_status){this.status.completion_status=completion_status}get completion_threshold(){return this.thresholds.completion_threshold}set completion_threshold(e){this.thresholds.completion_threshold=e}get credit(){return this.settings.credit}set credit(credit){this.settings.credit=credit}get entry(){return this.session.entry}set entry(entry){this.session.entry=entry}get exit(){return this.session.jsonString=this.jsonString,this.session.exit}set exit(exit){this.session.exit=exit}getExitValueInternal(){return this.session.getExitValueInternal()}get launch_data(){return this.content.launch_data}set launch_data(launch_data){this.content.launch_data=launch_data}get learner_id(){return this.learner.learner_id}set learner_id(learner_id){this.learner.learner_id=learner_id}get learner_name(){return this.learner.learner_name}set learner_name(learner_name){this.learner.learner_name=learner_name}get location(){return this.content.location}set location(location){this.content.location=location}get max_time_allowed(){return this.settings.max_time_allowed}set max_time_allowed(max_time_allowed){this.settings.max_time_allowed=max_time_allowed}get mode(){return this.settings.mode}set mode(mode){this.settings.mode=mode}get progress_measure(){return this.status.progress_measure}set progress_measure(progress_measure){this.status.progress_measure=progress_measure}get scaled_passing_score(){return this.thresholds.scaled_passing_score}set scaled_passing_score(scaled_passing_score){this.thresholds.scaled_passing_score=scaled_passing_score}get session_time(){return this.session.jsonString=this.jsonString,this.session.session_time}set session_time(session_time){this.session.session_time=session_time}get success_status(){return this.status.success_status}set success_status(success_status){this.status.success_status=success_status}get suspend_data(){return this.content.suspend_data}set suspend_data(suspend_data){this.content.suspend_data=suspend_data}get time_limit_action(){return this.settings.time_limit_action}set time_limit_action(time_limit_action){this.settings.time_limit_action=time_limit_action}get total_time(){return this.session.total_time}set total_time(total_time){this.session.total_time=total_time}getCurrentTotalTime(){return this.session.getCurrentTotalTime(this.start_time)}toJSON(){this.jsonString=!0,this.session.jsonString=!0;const result={comments_from_learner:this.comments_from_learner,comments_from_lms:this.comments_from_lms,completion_status:this.completion_status,completion_threshold:this.completion_threshold,credit:this.credit,entry:this.entry,exit:this.exit,interactions:this.interactions,launch_data:this.launch_data,learner_id:this.learner_id,learner_name:this.learner_name,learner_preference:this.learner_preference,location:this.location,max_time_allowed:this.max_time_allowed,mode:this.mode,objectives:this.objectives,progress_measure:this.progress_measure,scaled_passing_score:this.scaled_passing_score,score:this.score,session_time:this.session_time,success_status:this.success_status,suspend_data:this.suspend_data,time_limit_action:this.time_limit_action,total_time:this.total_time};return this.jsonString=!1,this.session.jsonString=!1,result}}class bi extends u{constructor(){super("adl"),this.data=new Ai,this._sequencing=null,this.nav=new Ci,this.data=new Ai}initialize(){super.initialize(),this.nav?.initialize()}reset(){this._initialized=!1,this.nav?.reset()}get sequencing(){return this._sequencing}set sequencing(e){this._sequencing=e,e&&(e.adlNav=this.nav,this.nav.sequencing=e)}toJSON(){this.jsonString=!0;const result={nav:this.nav,data:this.data};return this.jsonString=!1,result}}class Ci extends u{constructor(){super("adl.nav"),this._request="_none_",this._sequencing=null,this.request_valid=new Ri,this.request_valid.setParentNav(this)}get sequencing(){return this._sequencing}set sequencing(e){this._sequencing=e}initialize(){super.initialize(),this.request_valid?.initialize()}reset(){this._initialized=!1,this._request="_none_",this._sequencing&&(this._sequencing.adlNav=null),this._sequencing=null,this.request_valid?.reset()}get request(){return this._request}set request(request){Ke(this._cmi_element+".request",request,ne)&&(this._request=request)}toJSON(){this.jsonString=!0;const result={request:this.request};return this.jsonString=!1,result}}class Ai extends R{constructor(){super({CMIElement:"adl.data",children:f.adl_data_children,errorCode:w.READ_ONLY_ELEMENT,errorClass:A})}}class Ei extends u{constructor(){super("adl.data.n"),this._id="",this._store="",this._idIsSet=!1,this._storeIsSet=!1}reset(){this._initialized=!1,this._idIsSet=!1,this._storeIsSet=!1}get id(){return this._id}set id(id){if(this.initialized)throw new A(this._cmi_element+".id",w.READ_ONLY_ELEMENT);Ke(this._cmi_element+".id",id,ie)&&(this._id=id,this._idIsSet=!0)}get store(){if(this.initialized&&!this._storeIsSet)throw new A(this._cmi_element+".store",w.VALUE_NOT_INITIALIZED);return this._store}set store(e){if(this.initialized&&!this._idIsSet)throw new A(this._cmi_element+".store",w.DEPENDENCY_NOT_ESTABLISHED);Ke(this._cmi_element+".store",e,J)&&(this._store=e,this._storeIsSet=!0)}toJSON(){this.jsonString=!0;const result={id:this._id,store:this._store};return this.jsonString=!1,result}}class Mi{constructor(){this._parentNav=null,this._staticValues={}}setParentNav(nav){this._parentNav=nav}_isTargetValid(e){if(this._parentNav?.sequencing?.overallSequencingProcess){const t=this._parentNav.sequencing.overallSequencingProcess;if(t.predictChoiceEnabled)return t.predictChoiceEnabled(e)?"true":"false"}const t=this._staticValues[e];return t===T?"true":t===I?"false":"unknown"}getAll(){return{...this._staticValues}}setAll(e){this._staticValues={...e}}}class wi{constructor(){this._parentNav=null,this._staticValues={}}setParentNav(nav){this._parentNav=nav}_isTargetValid(e){if(this._parentNav?.sequencing?.activityTree)return this._parentNav.sequencing.activityTree.getActivity(e)?"true":"false";const t=this._staticValues[e];return t===T?"true":t===I?"false":"unknown"}getAll(){return{...this._staticValues}}setAll(e){this._staticValues={...e}}}class Ri extends u{constructor(){super("adl.nav.request_valid"),this._continue="unknown",this._previous="unknown",this._exit="unknown",this._exitAll="unknown",this._abandon="unknown",this._abandonAll="unknown",this._suspendAll="unknown",this._parentNav=null,this._choice=new Mi,this._jump=new wi}setParentNav(nav){this._parentNav=nav,this._choice.setParentNav(nav),this._jump.setParentNav(nav)}reset(){this._initialized=!1,this._continue="unknown",this._previous="unknown",this._choice.setAll({}),this._jump.setAll({}),this._exit="unknown",this._exitAll="unknown",this._abandon="unknown",this._abandonAll="unknown",this._suspendAll="unknown"}get continue(){if(this._parentNav?.sequencing?.overallSequencingProcess){const e=this._parentNav.sequencing.overallSequencingProcess;if(e.predictContinueEnabled)return e.predictContinueEnabled()?"true":"false"}return this._continue}set continue(e){if(this.initialized)throw new A(this._cmi_element+".continue",w.READ_ONLY_ELEMENT);Ke(this._cmi_element+".continue",e,oe)&&(this._continue=e)}get previous(){if(this._parentNav?.sequencing?.overallSequencingProcess){const e=this._parentNav.sequencing.overallSequencingProcess;if(e.predictPreviousEnabled)return e.predictPreviousEnabled()?"true":"false"}return this._previous}set previous(e){if(this.initialized)throw new A(this._cmi_element+".previous",w.READ_ONLY_ELEMENT);Ke(this._cmi_element+".previous",e,oe)&&(this._previous=e)}get choice(){return this._choice}set choice(e){if(this.initialized)throw new A(this._cmi_element+".choice",w.READ_ONLY_ELEMENT);if("object"!=typeof e)throw new A(this._cmi_element+".choice",w.TYPE_MISMATCH);const t={};for(const i in e)if({}.hasOwnProperty.call(e,i)&&Ke(this._cmi_element+".choice."+i,e[i]||"",oe)&&Ke(this._cmi_element+".choice."+i,i,ae)){const s=e[i];"true"===s?t[i]=T:"false"===s?t[i]=I:"unknown"===s&&(t[i]=O)}this._choice.setAll(t)}get jump(){return this._jump}set jump(e){if(this.initialized)throw new A(this._cmi_element+".jump",w.READ_ONLY_ELEMENT);if("object"!=typeof e)throw new A(this._cmi_element+".jump",w.TYPE_MISMATCH);const t={};for(const i in e)if({}.hasOwnProperty.call(e,i)&&Ke(this._cmi_element+".jump."+i,e[i]||"",oe)&&Ke(this._cmi_element+".jump."+i,i,ae)){const s=e[i];"true"===s?t[i]=T:"false"===s?t[i]=I:"unknown"===s&&(t[i]=O)}this._jump.setAll(t)}get exit(){return this._exit}set exit(e){if(this.initialized)throw new A(this._cmi_element+".exit",w.READ_ONLY_ELEMENT);Ke(this._cmi_element+".exit",e,oe)&&(this._exit=e)}get exitAll(){return this._exitAll}set exitAll(e){if(this.initialized)throw new A(this._cmi_element+".exitAll",w.READ_ONLY_ELEMENT);Ke(this._cmi_element+".exitAll",e,oe)&&(this._exitAll=e)}get abandon(){return this._abandon}set abandon(e){if(this.initialized)throw new A(this._cmi_element+".abandon",w.READ_ONLY_ELEMENT);Ke(this._cmi_element+".abandon",e,oe)&&(this._abandon=e)}get abandonAll(){return this._abandonAll}set abandonAll(e){if(this.initialized)throw new A(this._cmi_element+".abandonAll",w.READ_ONLY_ELEMENT);Ke(this._cmi_element+".abandonAll",e,oe)&&(this._abandonAll=e)}get suspendAll(){return this._suspendAll}set suspendAll(e){if(this.initialized)throw new A(this._cmi_element+".suspendAll",w.READ_ONLY_ELEMENT);Ke(this._cmi_element+".suspendAll",e,oe)&&(this._suspendAll=e)}toJSON(){this.jsonString=!0;const result={previous:this.previous,continue:this.continue,choice:this._choice.getAll(),jump:this._jump.getAll(),exit:this.exit,exitAll:this.exitAll,abandon:this.abandon,abandonAll:this.abandonAll,suspendAll:this.suspendAll};return this.jsonString=!1,result}}class Oi extends u{constructor(e){super("activityTree"),this._root=null,this._currentActivity=null,this._suspendedActivity=null,this._activities=new Map,e&&(this.root=e)}initialize(){super.initialize(),this._root&&this._root.initialize()}reset(){this._initialized=!1,this._currentActivity=null,this._suspendedActivity=null,this._activities.clear(),this._root&&(this._root.reset(),this._activities.set(this._root.id,this._root),this._addActivitiesToMap(this._root))}get root(){return this._root}set root(e){if(null!==e&&!(e instanceof rt))throw new A(this._cmi_element+".root",w.TYPE_MISMATCH);this._activities.clear(),this._root=e,e&&(this._activities.set(e.id,e),this._addActivitiesToMap(e))}_addActivitiesToMap(e){for(const t of e.children)this._activities.set(t.id,t),this._addActivitiesToMap(t)}get currentActivity(){return this._currentActivity}set currentActivity(e){if(null!==e&&!(e instanceof rt))throw new A(this._cmi_element+".currentActivity",w.TYPE_MISMATCH);if(this._currentActivity){this._currentActivity.isActive=!1;let e=this._currentActivity.parent;for(;e;)e.isActive=!1,e=e.parent}if(this._currentActivity=e,e){e.isActive=!0;let t=e.parent;for(;t;)t.isActive=!0,t=t.parent}}setCurrentActivityWithoutActivation(e){if(null!==e&&!(e instanceof rt))throw new A(this._cmi_element+".currentActivity",w.TYPE_MISMATCH);if(this._currentActivity){const t=new Set;if(e){t.add(e);let i=e.parent;for(;i;)t.add(i),i=i.parent}this._currentActivity.isActive=!1;let i=this._currentActivity.parent;for(;i;)t.has(i)||(i.isActive=!1),i=i.parent}this._currentActivity=e}get suspendedActivity(){return this._suspendedActivity}set suspendedActivity(e){if(null!==e&&!(e instanceof rt))throw new A(this._cmi_element+".suspendedActivity",w.TYPE_MISMATCH);if(this._suspendedActivity){this._suspendedActivity.isSuspended=!1;let e=this._suspendedActivity.parent;for(;e;)e.isSuspended=!1,e=e.parent}if(this._suspendedActivity=e,e){e.isSuspended=!0;let t=e.parent;for(;t;)t.isSuspended=!0,t=t.parent}}getActivity(id){return this._activities.get(id)||null}getAllActivities(){return Array.from(this._activities.values())}getParent(e){return e.parent}getChildren(e){return 1>=arguments.length||void 0===arguments[1]||arguments[1]?e.getAvailableChildren():e.children}getSiblings(e){return e.parent?e.parent.children.filter(t=>t!==e):[]}getNextSibling(e){let t=1>=arguments.length||void 0===arguments[1]||arguments[1];if(!e.parent)return null;let i=t?e.parent.getAvailableChildren():e.parent.children,s=i.indexOf(e);return-1===s&&t&&(i=e.parent.children,s=i.indexOf(e)),-1===s||s===i.length-1?null:i[s+1]??null}getPreviousSibling(e){let t=1>=arguments.length||void 0===arguments[1]||arguments[1];if(!e.parent)return null;let i=t?e.parent.getAvailableChildren():e.parent.children,s=i.indexOf(e);return-1===s&&t&&(i=e.parent.children,s=i.indexOf(e)),s>0?i[s-1]??null:null}getFirstChild(e){const t=1>=arguments.length||void 0===arguments[1]||arguments[1]?e.getAvailableChildren():e.children;return 0===t.length?null:t[0]??null}getLastChild(e){const t=1>=arguments.length||void 0===arguments[1]||arguments[1]?e.getAvailableChildren():e.children;return 0===t.length?null:t[t.length-1]??null}getCommonAncestor(e,t){const i=[];let s=e;for(;s;)i.unshift(s),s=s.parent;for(s=t;s;){if(i.includes(s))return s;s=s.parent}return null}toJSON(){this.jsonString=!0;const result={root:this._root,currentActivity:this._currentActivity?this._currentActivity.id:null,suspendedActivity:this._suspendedActivity?this._suspendedActivity.id:null};return this.jsonString=!1,result}}class Ti extends u{constructor(){super("sequencing"),this._adlNav=null,this._hideLmsUi=[],this._auxiliaryResources=[],this._overallSequencingProcess=null,this._activityTree=new Oi,this._sequencingRules=new Se,this._sequencingControls=new Ie,this._rollupRules=new it}initialize(){super.initialize(),this._activityTree.initialize(),this._sequencingRules.initialize(),this._sequencingControls.initialize(),this._rollupRules.initialize()}reset(){this._initialized=!1,this._activityTree.reset(),this._sequencingRules.reset(),this._sequencingControls.reset(),this._rollupRules.reset(),this._hideLmsUi=[],this._auxiliaryResources=[]}get activityTree(){return this._activityTree}set activityTree(e){if(!(e instanceof Oi))throw new A(this._cmi_element+".activityTree",w.TYPE_MISMATCH);this._activityTree=e}get sequencingRules(){return this._sequencingRules}set sequencingRules(e){if(!(e instanceof Se))throw new A(this._cmi_element+".sequencingRules",w.TYPE_MISMATCH);this._sequencingRules=e}get sequencingControls(){return this._sequencingControls}set sequencingControls(e){if(!(e instanceof Ie))throw new A(this._cmi_element+".sequencingControls",w.TYPE_MISMATCH);this._sequencingControls=e}get hideLmsUi(){return[...this._hideLmsUi]}set hideLmsUi(e){this._hideLmsUi=[...e]}get auxiliaryResources(){return this._auxiliaryResources.map(e=>({...e}))}set auxiliaryResources(e){this._auxiliaryResources=e.map(e=>({...e}))}get rollupRules(){return this._rollupRules}set rollupRules(e){if(!(e instanceof it))throw new A(this._cmi_element+".rollupRules",w.TYPE_MISMATCH);this._rollupRules=e}get adlNav(){return this._adlNav}set adlNav(e){this._adlNav=e}get overallSequencingProcess(){return this._overallSequencingProcess}set overallSequencingProcess(e){this._overallSequencingProcess=e}processRollup(){const e=this._activityTree.root;e&&this._processRollupRecursive(e)}_processRollupRecursive(e){for(const t of e.children)this._processRollupRecursive(t);this._rollupRules.processRollup(e)}getCurrentActivity(){return this._activityTree.currentActivity}getRootActivity(){return this._activityTree.root}toJSON(){this.jsonString=!0;const result={activityTree:this._activityTree,sequencingRules:this._sequencingRules,sequencingControls:this._sequencingControls,rollupRules:this._rollupRules,adlNav:this._adlNav};return this.jsonString=!1,result}}class Ii{constructor(e){this.context=e}checkValidResponseType(e,t,i,s){let r=[];t?.delimiter?r=(i+"").split(t.delimiter):r[0]=i,r.length>0&&t.max>=r.length?this.context.checkCorrectResponseValue?this.context.checkCorrectResponseValue(e,s,r,i):this.checkCorrectResponseValue(e,s,r,i):r.length>t.max&&this.context.throwSCORMError(e,w.GENERAL_SET_FAILURE,"Data Model Element Pattern Too Long: "+i)}checkDuplicateChoiceResponse(e,t,i){const s=t.correct_responses._count;if("choice"===t.type)for(let r=0;s>r&&"0"===this.context.getLastErrorCode();r++){const s=t.correct_responses.childArray[r];s?.pattern===i&&this.context.throwSCORMError(e,w.GENERAL_SET_FAILURE,""+i)}}validateCorrectResponse(e,t,i){const s=+e.split(".")[4];if(!t)return void this.context.throwSCORMError(e,w.DEPENDENCY_NOT_ESTABLISHED,e);const r=t.correct_responses._count;this.checkDuplicateChoiceResponse(e,t,i);const n=le[t.type];n&&(void 0===n.limit||n.limit>r)?(this.checkValidResponseType(e,n,i,t.type),"0"===this.context.getLastErrorCode()&&(!n.duplicate||!this.checkDuplicatedPattern(t.correct_responses,s,i))||"0"===this.context.getLastErrorCode()&&""===i||"0"===this.context.getLastErrorCode()&&this.context.throwSCORMError(e,w.GENERAL_SET_FAILURE,`Data Model Element Pattern Already Exists: ${e} - ${i}`)):this.context.throwSCORMError(e,w.GENERAL_SET_FAILURE,`Data Model Element Collection Limit Reached: ${e} - ${i}`)}checkDuplicatedPattern(e,t,i){let s=!1;const r=e._count;for(let n=0;r>n&&!s;n++)if(n!==t){const t=e.childArray[n],r=t?.pattern;r===i&&(s=!0)}return s}checkCorrectResponseValue(e,t,i,s){const r=le[t];if(!r)return void this.context.throwSCORMError(e,w.TYPE_MISMATCH,"Incorrect Response Type: "+t);const n=RegExp(r.format);for(let o=0;i.length>o&&"0"===this.context.getLastErrorCode();o++)if(t.match("^(fill-in|long-fill-in|matching|performance|sequencing)$")&&(i[o]=this.removeCorrectResponsePrefixes(e,i[o])),r?.delimiter2){const a=i[o].split(r.delimiter2);2===a.length&&a[0].match(n)&&r.format2&&a[1].match(RegExp(r.format2))||this.context.throwSCORMError(e,w.TYPE_MISMATCH,`${t}: ${s}`)}else{const a=i[o].match(n);if(!a&&""!==s||!a&&"true-false"===t)this.context.throwSCORMError(e,w.TYPE_MISMATCH,`${t}: ${s}`);else if("numeric"===t&&i.length>1)+i[0]>+i[1]&&this.context.throwSCORMError(e,w.TYPE_MISMATCH,`${t}: ${s}`);else if(""!==i[o]&&r.unique)for(let r=0;o>r&&"0"===this.context.getLastErrorCode();r++)i[o]===i[r]&&this.context.throwSCORMError(e,w.TYPE_MISMATCH,`${t}: ${s}`)}}removeCorrectResponsePrefixes(e,t){let i=!1,s=!1,r=!1;const n=RegExp("^({(lang|case_matters|order_matters)=([^}]+)})");let o=t.match(n),a=null;for(;o;){switch(o[2]){case"lang":if(a=t.match("^(({lang=([a-zA-Z]{1,8}|i|x)?(-[a-zA-Z0-9-]{2,8})?}))(.*?)$"),a){const i=a[3];void 0!==i&&i.length>0&&(ue.includes(i.toLowerCase())||this.context.throwSCORMError(e,w.TYPE_MISMATCH,""+t))}r=!0;break;case"case_matters":r||i||s||"true"!==o[3]&&"false"!==o[3]&&this.context.throwSCORMError(e,w.TYPE_MISMATCH,""+t),s=!0;break;case"order_matters":s||r||i||"true"!==o[3]&&"false"!==o[3]&&this.context.throwSCORMError(e,w.TYPE_MISMATCH,""+t),i=!0}o=(t=t.substring(o[1]?.length||0)).match(n)}return t}}class Ni{constructor(e,t){this.context=e,this.responseValidator=t}getChildElement(e,t,i){if(c(e,"cmi\\.objectives\\.\\d+"))return new di;if(i){if(c(e,"cmi\\.interactions\\.\\d+\\.correct_responses\\.\\d+"))return this.createCorrectResponsesObject(e,t);if(c(e,"cmi\\.interactions\\.\\d+\\.objectives\\.\\d+"))return new ti}else if(c(e,"cmi\\.interactions\\.\\d+"))return new ei;return c(e,"cmi\\.comments_from_learner\\.\\d+")?new ui:c(e,"cmi\\.comments_from_lms\\.\\d+")?new ui(!0):c(e,"adl\\.data\\.\\d+")?new Ei:null}createCorrectResponsesObject(e,t){const i=e.split("."),s=this.context.cmi.interactions.childArray[+i[2]];if(this.context.isInitialized()){if(void 0===s||!s.type)return this.context.throwSCORMError(e,w.DEPENDENCY_NOT_ESTABLISHED,e),null;{const i=le[s.type];if(i&&void 0!==i.limit&&s.correct_responses._count>=i.limit)return this.context.throwSCORMError(e,w.GENERAL_SET_FAILURE,"Data Model Element Collection Limit Reached: "+e),null;if(this.responseValidator.checkDuplicateChoiceResponse(e,s,t),!i)return this.context.throwSCORMError(e,w.GENERAL_SET_FAILURE,"Incorrect Response Type: "+s.type),null;this.responseValidator.checkValidResponseType(e,i,t,s.type)}}return"0"===this.context.getLastErrorCode()?new oi(s?.type):null}evaluateCompletionStatus(){const e=this.context.cmi.completion_threshold,t=this.context.cmi.progress_measure,i=this.context.cmi.completion_status;if(""!==e&&null!=e){const i=parseFloat(e+"");if(!isNaN(i)){if(""!==t&&null!=t){const e=parseFloat(t+"");if(!isNaN(e))return i>e?L:D}return q}}return i||q}evaluateSuccessStatus(){const e=this.context.cmi.scaled_passing_score,t=this.context.cmi.score.scaled,i=this.context.cmi.success_status;if(""!==e&&null!=e){const i=parseFloat(e+"");if(!isNaN(i)){if(""!==t&&null!=t){const e=parseFloat(t+"");if(!isNaN(e))return i>e?j:N}return x}}return i||x}}class ji{applySequencingControlsSettings(e,t){void 0!==t.enabled&&(e.enabled=t.enabled),void 0!==t.choice&&(e.choice=t.choice),void 0!==t.choiceExit&&(e.choiceExit=t.choiceExit),void 0!==t.flow&&(e.flow=t.flow),void 0!==t.forwardOnly&&(e.forwardOnly=t.forwardOnly),void 0!==t.useCurrentAttemptObjectiveInfo&&(e.useCurrentAttemptObjectiveInfo=t.useCurrentAttemptObjectiveInfo),void 0!==t.useCurrentAttemptProgressInfo&&(e.useCurrentAttemptProgressInfo=t.useCurrentAttemptProgressInfo),void 0!==t.preventActivation&&(e.preventActivation=t.preventActivation),void 0!==t.constrainChoice&&(e.constrainChoice=t.constrainChoice),void 0!==t.stopForwardTraversal&&(e.stopForwardTraversal=t.stopForwardTraversal),void 0!==t.rollupObjectiveSatisfied&&(e.rollupObjectiveSatisfied=t.rollupObjectiveSatisfied),void 0!==t.rollupProgressCompletion&&(e.rollupProgressCompletion=t.rollupProgressCompletion),void 0!==t.objectiveMeasureWeight&&(e.objectiveMeasureWeight=t.objectiveMeasureWeight),void 0!==t.selectionTiming&&(e.selectionTiming=t.selectionTiming),void 0!==t.selectCount&&(e.selectCount=t.selectCount),void 0!==t.randomizeChildren&&(e.randomizeChildren=t.randomizeChildren),void 0!==t.randomizationTiming&&(e.randomizationTiming=t.randomizationTiming),void 0!==t.selectionCountStatus&&(e.selectionCountStatus=t.selectionCountStatus),void 0!==t.reorderChildren&&(e.reorderChildren=t.reorderChildren),void 0!==t.completionSetByContent&&(e.completionSetByContent=t.completionSetByContent),void 0!==t.objectiveSetByContent&&(e.objectiveSetByContent=t.objectiveSetByContent)}applySequencingRulesSettings(e,t){if(t){if(t.preConditionRules)for(const i of t.preConditionRules){const t=this.createSequencingRule(i);e.addPreConditionRule(t)}if(t.exitConditionRules)for(const i of t.exitConditionRules){const t=this.createSequencingRule(i);e.addExitConditionRule(t)}if(t.postConditionRules)for(const i of t.postConditionRules){const t=this.createSequencingRule(i);e.addPostConditionRule(t)}}}createSequencingRule(e){const t=new ve(e.action,e.conditionCombination);for(const i of e.conditions){const e=new ge(i.condition,i.operator,new Map(Object.entries(i.parameters||{})));i.referencedObjective&&(e.referencedObjective=i.referencedObjective),t.addCondition(e)}return t}applyRollupRulesSettings(e,t){if(t?.rules)for(const i of t.rules){const t=this.createRollupRule(i);e.addRule(t)}}createRollupRule(e){const t=new tt(e.action,e.consideration,e.minimumCount,e.minimumPercent);for(const i of e.conditions){const e=new et(i.condition,new Map(Object.entries(i.parameters||{})));t.addCondition(e)}return t}sanitizeSequencingCollections(e){if(!e)return{};const t={};for(const[id,i]of Object.entries(e)){const e=id.trim();if(!e)continue;const s={};if(i.sequencingControls&&(s.sequencingControls={...i.sequencingControls}),i.sequencingRules){const e=e=>{const t={action:e.action,conditions:e.conditions.map(e=>{const t={condition:e.condition};return void 0!==e.operator&&(t.operator=e.operator),e.parameters&&(t.parameters={...e.parameters}),void 0!==e.referencedObjective&&(t.referencedObjective=e.referencedObjective),t})};return void 0!==e.conditionCombination&&(t.conditionCombination=e.conditionCombination),t};s.sequencingRules={},i.sequencingRules.preConditionRules&&(s.sequencingRules.preConditionRules=i.sequencingRules.preConditionRules.map(e)),i.sequencingRules.exitConditionRules&&(s.sequencingRules.exitConditionRules=i.sequencingRules.exitConditionRules.map(e)),i.sequencingRules.postConditionRules&&(s.sequencingRules.postConditionRules=i.sequencingRules.postConditionRules.map(e))}i.rollupRules&&(s.rollupRules={rules:i.rollupRules.rules?.map(e=>{const t={action:e.action,conditions:e.conditions.map(e=>{const t={condition:e.condition};return e.parameters&&(t.parameters={...e.parameters}),t})};return void 0!==e.consideration&&(t.consideration=e.consideration),void 0!==e.minimumCount&&(t.minimumCount=e.minimumCount),void 0!==e.minimumPercent&&(t.minimumPercent=e.minimumPercent),t})}),i.rollupConsiderations&&(s.rollupConsiderations={...i.rollupConsiderations}),i.selectionRandomizationState&&(s.selectionRandomizationState=this.cloneSelectionRandomizationState(i.selectionRandomizationState)),i.hideLmsUi&&(s.hideLmsUi=this.sanitizeHideLmsUi(i.hideLmsUi)),i.auxiliaryResources&&(s.auxiliaryResources=this.sanitizeAuxiliaryResources(i.auxiliaryResources)),t[e]=s}return t}normalizeCollectionRefs(e){if(!e)return[];const t=Array.isArray(e)?e:[e],i=new Set,result=[];for(const e of t){const t=e.trim();t&&!i.has(t)&&(i.add(t),result.push(t))}return result}applySequencingCollection(e,t,i){if(t){if(t.sequencingControls&&this.applySequencingControlsSettings(e.sequencingControls,t.sequencingControls),t.sequencingRules&&this.applySequencingRulesSettings(e.sequencingRules,t.sequencingRules),t.rollupRules&&this.applyRollupRulesSettings(e.rollupRules,t.rollupRules),t.rollupConsiderations&&e.applyRollupConsiderations(t.rollupConsiderations),t.hideLmsUi){const i=this.mergeHideLmsUi(e.hideLmsUi,t.hideLmsUi);i.length>0&&(e.hideLmsUi=i)}if(t.auxiliaryResources){const i=this.sanitizeAuxiliaryResources(t.auxiliaryResources);i.length>0&&(e.auxiliaryResources=this.mergeAuxiliaryResources(e.auxiliaryResources,i))}t.selectionRandomizationState&&i.push(this.cloneSelectionRandomizationState(t.selectionRandomizationState))}}sanitizeHideLmsUi(e){if(!e)return[];const t=new Set(de),i=new Set,s=[];for(const r of e)t.has(r)&&!i.has(r)&&(i.add(r),s.push(r));return s}mergeHideLmsUi(e,t){return t&&0!==t.length?this.sanitizeHideLmsUi([...e,...t]):e}sanitizeAuxiliaryResources(e){if(!e)return[];const t=new Set,i=[];for(const s of e){if(!s)continue;if(!s.resourceId||"string"!=typeof s.resourceId)continue;if(!s.purpose||"string"!=typeof s.purpose)continue;const e=s.resourceId.trim(),r=s.purpose.trim();if(!e||!r)continue;const n=`${e}::${r}`;t.has(n)||(t.add(n),i.push({resourceId:e,purpose:r}))}return i}mergeAuxiliaryResources(e,t){const i=[],s=new Set;for(const r of[...e??[],...t??[]]){if(!r)continue;const e=r.resourceId;e&&!s.has(e)&&(s.add(e),i.push({resourceId:e,purpose:r.purpose}))}return i}cloneSelectionRandomizationState(e){const t={};return e.childOrder&&(t.childOrder=[...e.childOrder]),e.selectedChildIds&&(t.selectedChildIds=[...e.selectedChildIds]),e.hiddenFromChoiceChildIds&&(t.hiddenFromChoiceChildIds=[...e.hiddenFromChoiceChildIds]),void 0!==e.selectionCountStatus&&(t.selectionCountStatus=e.selectionCountStatus),void 0!==e.reorderChildren&&(t.reorderChildren=e.reorderChildren),t}applySelectionRandomizationState(e,t){const i=e.sequencingControls;void 0!==t.selectionCountStatus&&(i.selectionCountStatus=t.selectionCountStatus),void 0!==t.reorderChildren&&(i.reorderChildren=t.reorderChildren);const s=t.selectedChildIds?new Set(t.selectedChildIds):null,r=t.hiddenFromChoiceChildIds?new Set(t.hiddenFromChoiceChildIds):null;t.childOrder&&t.childOrder.length>0&&e.setChildOrder(t.childOrder);let n=!1;if(s||r)for(const t of e.children){if(s){const e=s.has(t.id);t.isAvailable=e,r||(t.isHiddenFromChoice=!e),n=!0}r&&(t.isHiddenFromChoice=r.has(t.id),n=!0)}(n||s||void 0!==t.selectionCountStatus||void 0!==t.reorderChildren||t.childOrder&&t.childOrder.length>0)&&e.setProcessedChildren(e.children.filter(e=>e.isAvailable))}}class xi{constructor(e,t){this.sequencingCollections=e||{},this.sequencingConfigBuilder=t||new ji}setSequencingCollections(e){this.sequencingCollections=e}createActivity(e){const t=new rt(e.id,e.title),i=[],s=this.sequencingConfigBuilder.normalizeCollectionRefs(e.sequencingCollectionRefs);for(const e of s){const s=this.sequencingCollections[e];s&&this.sequencingConfigBuilder.applySequencingCollection(t,s,i)}if(void 0!==e.isVisible&&(t.isVisible=e.isVisible),void 0!==e.isActive&&(t.isActive=e.isActive),void 0!==e.isSuspended&&(t.isSuspended=e.isSuspended),void 0!==e.isCompleted&&(t.isCompleted=e.isCompleted),void 0!==e.isHiddenFromChoice&&(t.isHiddenFromChoice=e.isHiddenFromChoice),void 0!==e.isAvailable&&(t.isAvailable=e.isAvailable),void 0!==e.attemptLimit&&(t.attemptLimit=e.attemptLimit),void 0!==e.attemptAbsoluteDurationLimit&&(t.attemptAbsoluteDurationLimit=e.attemptAbsoluteDurationLimit),void 0!==e.activityAbsoluteDurationLimit&&(t.activityAbsoluteDurationLimit=e.activityAbsoluteDurationLimit),void 0!==e.timeLimitAction&&(t.timeLimitAction=e.timeLimitAction),void 0!==e.timeLimitDuration&&(t.timeLimitDuration=e.timeLimitDuration),void 0!==e.beginTimeLimit&&(t.beginTimeLimit=e.beginTimeLimit),void 0!==e.endTimeLimit&&(t.endTimeLimit=e.endTimeLimit),e.primaryObjective){const i=this.createActivityObjectiveFromSettings(e.primaryObjective,!0);t.primaryObjective=i,null!==i.minNormalizedMeasure&&(t.scaledPassingScore=i.minNormalizedMeasure)}if(e.objectives)for(const i of e.objectives){const e=!0===i.isPrimary,s=this.createActivityObjectiveFromSettings(i,e);e?t.primaryObjective=s:t.addObjective(s)}if(e.sequencingControls&&this.sequencingConfigBuilder.applySequencingControlsSettings(t.sequencingControls,e.sequencingControls),e.sequencingRules&&this.sequencingConfigBuilder.applySequencingRulesSettings(t.sequencingRules,e.sequencingRules),e.rollupRules&&this.sequencingConfigBuilder.applyRollupRulesSettings(t.rollupRules,e.rollupRules),e.rollupConsiderations&&t.applyRollupConsiderations(e.rollupConsiderations),e.hideLmsUi){const i=this.sequencingConfigBuilder.mergeHideLmsUi(t.hideLmsUi,e.hideLmsUi);i.length>0&&(t.hideLmsUi=i)}if(e.auxiliaryResources){const i=this.sequencingConfigBuilder.sanitizeAuxiliaryResources(e.auxiliaryResources);i.length>0&&(t.auxiliaryResources=this.sequencingConfigBuilder.mergeAuxiliaryResources(t.auxiliaryResources,i))}if(e.children)for(const i of e.children){const e=this.createActivity(i);t.addChild(e)}e.selectionRandomizationState&&i.push(this.sequencingConfigBuilder.cloneSelectionRandomizationState(e.selectionRandomizationState));for(const e of i)this.sequencingConfigBuilder.applySelectionRandomizationState(t,e);return t}extractActivityIds(e){const t=[e.id];for(const i of e.children)t.push(...this.extractActivityIds(i));return t}createActivityObjectiveFromSettings(e,t){const i=(e.mapInfo||[]).map(e=>({targetObjectiveID:e.targetObjectiveID,readSatisfiedStatus:e.readSatisfiedStatus??!1,readNormalizedMeasure:e.readNormalizedMeasure??!1,writeSatisfiedStatus:e.writeSatisfiedStatus??!1,writeNormalizedMeasure:e.writeNormalizedMeasure??!1,readCompletionStatus:e.readCompletionStatus??!1,writeCompletionStatus:e.writeCompletionStatus??!1,readProgressMeasure:e.readProgressMeasure??!1,writeProgressMeasure:e.writeProgressMeasure??!1,readRawScore:e.readRawScore??!1,writeRawScore:e.writeRawScore??!1,readMinScore:e.readMinScore??!1,writeMinScore:e.writeMinScore??!1,readMaxScore:e.readMaxScore??!1,writeMaxScore:e.writeMaxScore??!1,updateAttemptData:e.updateAttemptData??!1}));return new st(e.objectiveID,{description:e.description??null,satisfiedByMeasure:e.satisfiedByMeasure??!1,minNormalizedMeasure:e.minNormalizedMeasure??null,mapInfo:i,isPrimary:t})}}class Di{constructor(e){this._globalObjectives=[],this.context=e}get globalObjectives(){return this._globalObjectives}set globalObjectives(objectives){this._globalObjectives=objectives}updateSequencingService(e){this.context.sequencingService=e}syncGlobalObjectiveIdsFromSequencing(){if(!this.context.sequencingService)return;const e=this.context.sequencingService.getOverallSequencingProcess();if(!e)return;const t=e.getGlobalObjectiveMap();if(!t||0===t.size)return;const i=Array.from(t.keys()),s=this.context.getSettings(),r=Array.from(new Set((s.globalObjectiveIds||[]).concat(i)));s.globalObjectiveIds=r}restoreGlobalObjectivesToCMI(){if(0!==this._globalObjectives.length)for(let e=0;this._globalObjectives.length>e;e++){const t=this._globalObjectives[e];if(!t||!t.id)continue;if(this.context.cmi.objectives.findObjectiveById(t.id))continue;const i=this.context.cmi.objectives.childArray.length;this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.id`,t.id),t.success_status&&"unknown"!==t.success_status&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.success_status`,t.success_status),t.completion_status&&"unknown"!==t.completion_status&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.completion_status`,t.completion_status),""!==t.score.scaled&&null!==t.score.scaled&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.score.scaled`,t.score.scaled),""!==t.score.raw&&null!==t.score.raw&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.score.raw`,t.score.raw),""!==t.score.min&&null!==t.score.min&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.score.min`,t.score.min),""!==t.score.max&&null!==t.score.max&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.score.max`,t.score.max),""!==t.progress_measure&&null!==t.progress_measure&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.progress_measure`,t.progress_measure),""!==t.description&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.description`,t.description)}}updateGlobalObjectiveFromCMI(e,t){if(!e||!this.context.sequencingService)return;const i=this.context.sequencingService.getOverallSequencingProcess();if(!i)return;if(!i.getGlobalObjectiveMap().has(e)){const s=this.buildObjectiveMapEntryFromCMI(t);return void i.updateGlobalObjective(e,s)}const s={};t.success_status&&t.success_status!==x&&(s.satisfiedStatus=t.success_status===N,s.satisfiedStatusKnown=!0);const r=this.parseObjectiveNumber(t.score?.scaled);null!==r&&(s.normalizedMeasure=r,s.normalizedMeasureKnown=!0);const n=this.parseObjectiveNumber(t.progress_measure);null!==n&&(s.progressMeasure=n,s.progressMeasureKnown=!0),t.completion_status&&t.completion_status!==q&&(s.completionStatus=t.completion_status,s.completionStatusKnown=!0),0!==Object.keys(s).length&&i.updateGlobalObjective(e,s)}buildObjectiveMapEntryFromCMI(e){const entry={id:e.id,satisfiedStatusKnown:!1,normalizedMeasureKnown:!1,progressMeasureKnown:!1,completionStatusKnown:!1,readSatisfiedStatus:!0,writeSatisfiedStatus:!0,readNormalizedMeasure:!0,writeNormalizedMeasure:!0,readCompletionStatus:!0,writeCompletionStatus:!0,readProgressMeasure:!0,writeProgressMeasure:!0};e.success_status&&e.success_status!==x&&(entry.satisfiedStatus=e.success_status===N,entry.satisfiedStatusKnown=!0);const t=this.parseObjectiveNumber(e.score?.scaled);null!==t&&(entry.normalizedMeasure=t,entry.normalizedMeasureKnown=!0);const i=this.parseObjectiveNumber(e.progress_measure);return null!==i&&(entry.progressMeasure=i,entry.progressMeasureKnown=!0),e.completion_status&&e.completion_status!==q&&(entry.completionStatus=e.completion_status,entry.completionStatusKnown=!0),entry}buildCMIObjectivesFromMap(e){const objectives=[];if(!e||"object"!=typeof e)return objectives;for(const[t,entry]of Object.entries(e)){if(!entry||"object"!=typeof entry)continue;const e=new di;e.id=entry.id??t,!0===entry.satisfiedStatusKnown&&(e.success_status=entry.satisfiedStatus?N:j);const i=this.parseObjectiveNumber(entry.normalizedMeasure);!0===entry.normalizedMeasureKnown&&null!==i&&(e.score.scaled=i+"");const s=this.parseObjectiveNumber(entry.progressMeasure);!0===entry.progressMeasureKnown&&null!==s&&(e.progress_measure=s+""),!0===entry.completionStatusKnown&&"string"==typeof entry.completionStatus&&(e.completion_status=entry.completionStatus),objectives.push(e)}return objectives}buildCMIObjectiveFromJSON(e){const t=new di;if(!e||"object"!=typeof e)return t;"string"==typeof e.id&&(t.id=e.id),"string"==typeof e.success_status&&(t.success_status=e.success_status),"string"==typeof e.completion_status&&(t.completion_status=e.completion_status),"string"==typeof e.progress_measure&&""!==e.progress_measure&&(t.progress_measure=e.progress_measure),"string"==typeof e.description&&(t.description=e.description);const score=e.score;return score&&"object"==typeof score&&("string"==typeof score.scaled&&""!==score.scaled?t.score.scaled=score.scaled:"number"==typeof score.scaled&&Number.isFinite(score.scaled)&&(t.score.scaled=score.scaled+""),"string"==typeof score.raw&&""!==score.raw?t.score.raw=score.raw:"number"==typeof score.raw&&Number.isFinite(score.raw)&&(t.score.raw=score.raw+""),"string"==typeof score.min&&""!==score.min?t.score.min=score.min:"number"==typeof score.min&&Number.isFinite(score.min)&&(t.score.min=score.min+""),"string"==typeof score.max&&""!==score.max?t.score.max=score.max:"number"==typeof score.max&&Number.isFinite(score.max)&&(t.score.max=score.max+"")),t}captureGlobalObjectiveSnapshot(e){const t={},i=e??this.context.sequencingService?.getOverallSequencingProcess()??null;if(i){const e=i.getGlobalObjectiveMapSnapshot();for(const[id,i]of Object.entries(e))t[id]={...i}}for(const e of this._globalObjectives)e.id&&!t[e.id]&&(t[e.id]=this.buildObjectiveMapEntryFromCMI(e));return t}parseObjectiveNumber(e){if(null==e)return null;if("number"==typeof e&&Number.isFinite(e))return e;const t=parseFloat(e+"");return Number.isFinite(t)?t:null}syncCmiToSequencingActivity(e,t,i){if(!this.context.sequencing)return;const s=this.context.sequencing.getCurrentActivity();if(!s||!s.primaryObjective)return;const r=s.primaryObjective;t!==x&&(r.satisfiedStatus=t===N,r.satisfiedStatusKnown=!0,r.measureStatus=!0,s.objectiveMeasureStatus=!0,s.objectiveSatisfiedStatus=t===N,s.objectiveSatisfiedStatusKnown=!0),e!==q&&(r.completionStatus=e),void 0!==i?.scaled&&null!==i.scaled&&(r.normalizedMeasure=i.scaled,r.measureStatus=!0)}findOrCreateGlobalObjective(e){let t=this._globalObjectives.findIndex(t=>t.id===e);if(-1===t){t=this._globalObjectives.length;const i=new di;i.id=e,this._globalObjectives.push(i)}return{index:t,objective:this._globalObjectives[t]}}}class Li{constructor(e,t){this.context=e,this.globalObjectiveManager=t}async saveSequencingState(e){const t=this.context.getSettings();if(!t.sequencingStatePersistence)return this.context.apiLog("saveSequencingState","No persistence configuration provided",P.WARN),!1;try{const i=this.serializeSequencingState(),s={learnerId:this.context.learnerId||"unknown",courseId:t.courseId||"unknown",attemptNumber:1,lastUpdated:(new Date).toISOString(),version:t.sequencingStatePersistence.stateVersion||"1.0",...e},r=t.sequencingStatePersistence;let n=i;if(!1!==r.compress&&(n=this.compressStateData(i)),r.maxStateSize&&n.length>r.maxStateSize)throw Error(`State size ${n.length} exceeds limit ${r.maxStateSize}`);const o=await r.persistence.saveState(n,s);return r.debugPersistence&&this.context.apiLog("saveSequencingState",`State save ${o?"succeeded":"failed"}: size=${n.length}`,o?P.INFO:P.WARN),o}catch(e){return this.context.apiLog("saveSequencingState","Error saving sequencing state: "+(e instanceof Error?e.message:e+""),P.ERROR),!1}}async loadSequencingState(e){const t=this.context.getSettings();if(!t.sequencingStatePersistence)return this.context.apiLog("loadSequencingState","No persistence configuration provided",P.WARN),!1;try{const i={learnerId:this.context.learnerId||"unknown",courseId:t.courseId||"unknown",attemptNumber:1,version:t.sequencingStatePersistence.stateVersion||"1.0",...e},s=t.sequencingStatePersistence,r=await s.persistence.loadState(i);if(!r)return s.debugPersistence&&this.context.apiLog("loadSequencingState","No sequencing state found to load",P.INFO),!1;let n=r;!1!==s.compress&&(n=this.decompressStateData(r));const o=this.deserializeSequencingState(n);return s.debugPersistence&&this.context.apiLog("loadSequencingState",`State load ${o?"succeeded":"failed"}: size=${r.length}`,o?P.INFO:P.WARN),o}catch(e){return this.context.apiLog("loadSequencingState","Error loading sequencing state: "+(e instanceof Error?e.message:e+""),P.ERROR),!1}}serializeSequencingState(){const e=this.context.getSettings(),t={version:e.sequencingStatePersistence?.stateVersion||"1.0",timestamp:(new Date).toISOString(),sequencing:null,currentActivityId:null,globalObjectives:this.globalObjectiveManager.globalObjectives.map(e=>e.toJSON()),globalObjectiveMap:{},adlNavState:{request:this.context.adl.nav.request,request_valid:this.context.adl.nav.request_valid},contentDelivered:!1};if(this.context.sequencingService){const e=this.context.sequencingService.getOverallSequencingProcess();if(e){const i=e.getSequencingState();t.sequencing=i,t.contentDelivered=e.hasContentBeenDelivered(),t.globalObjectiveMap=this.globalObjectiveManager.captureGlobalObjectiveSnapshot(e)}const i=this.context.sequencing.getCurrentActivity();i&&(t.currentActivityId=i.id)}return t.globalObjectiveMap&&0!==Object.keys(t.globalObjectiveMap).length||(t.globalObjectiveMap=this.globalObjectiveManager.captureGlobalObjectiveSnapshot()),JSON.stringify(t)}deserializeSequencingState(e){try{const t=JSON.parse(e),i=this.context.getSettings(),s=i.sequencingStatePersistence?.stateVersion||"1.0";if(t.version!==s&&this.context.apiLog("deserializeSequencingState",`State version mismatch: ${t.version} vs expected ${s}`,P.WARN),t.globalObjectiveMap&&t.sequencing&&!t.sequencing.globalObjectiveMap&&(t.sequencing.globalObjectiveMap=t.globalObjectiveMap),t.sequencing&&this.context.sequencingService){const e=this.context.sequencingService.getOverallSequencingProcess();e&&(e.restoreSequencingState(t.sequencing),t.contentDelivered&&e.setContentDelivered(!0))}const r=new Map;if(Array.isArray(t.globalObjectives))for(const e of t.globalObjectives){const t=this.globalObjectiveManager.buildCMIObjectiveFromJSON(e);t.id&&r.set(t.id,t)}if(t.globalObjectiveMap&&"object"==typeof t.globalObjectiveMap){const e=this.globalObjectiveManager.buildCMIObjectivesFromMap(t.globalObjectiveMap);for(const t of e)t.id&&(r.has(t.id)||r.set(t.id,t))}return r.size>0&&(this.globalObjectiveManager.globalObjectives=Array.from(r.values()),this.globalObjectiveManager.globalObjectives.forEach(e=>{e.id&&this.globalObjectiveManager.updateGlobalObjectiveFromCMI(e.id,e)})),t.adlNavState&&(this.context.adl.nav.request=t.adlNavState.request||"_none_",this.context.adl.nav.request_valid=t.adlNavState.request_valid||{}),!0}catch(e){return this.context.apiLog("deserializeSequencingState","Error deserializing sequencing state: "+(e instanceof Error?e.message:e+""),P.ERROR),!1}}compressStateData(e){return"undefined"!=typeof btoa?btoa(encodeURIComponent(e)):e}decompressStateData(e){if("undefined"!=typeof atob)try{return decodeURIComponent(atob(e))}catch{return e}return e}}class qi{constructor(e,t){this.context=e,this.globalObjectiveManager=t||null}setGlobalObjectiveManager(e){this.globalObjectiveManager=e}updateSequencingService(e){this.context.sequencingService=e}renderCommitCMI(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.context.renderCMIToJSONObject();e||t?i.cmi.total_time=this.context.cmi.getCurrentTotalTime():delete i.cmi.total_time;const result=[],s=o(i);switch(this.context.getSettings().dataCommitFormat){case"flattened":return o(i);case"params":for(const e in s)({}).hasOwnProperty.call(s,e)&&result.push(`${e}=${s[e]}`);return result;default:return i}}renderCommitObject(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.renderCommitCMI(e,t),s=e||t?this.context.cmi.getCurrentTotalTime():"",n=r(s,Z);let o=q,a=x;this.context.cmi.completion_status&&("completed"===this.context.cmi.completion_status?o=D:"incomplete"===this.context.cmi.completion_status&&(o=L)),this.context.cmi.success_status&&("passed"===this.context.cmi.success_status?a=N:"failed"===this.context.cmi.success_status&&(a=j));const c=this.context.cmi?.score?.getScoreObject()||{},l={completionStatus:o,successStatus:a,totalTimeSeconds:n,runtimeData:i};c&&(l.score=c);const u=this.context.getSettings();if(u.autoPopulateCommitMetadata){u.courseId&&(l.courseId=u.courseId),u.scoId&&(l.scoId=u.scoId),this.context.cmi.learner_id&&(l.learnerId=this.context.cmi.learner_id),this.context.cmi.learner_name&&(l.learnerName=this.context.cmi.learner_name);const e=this.context.sequencingService?.getSequencingState();e?.currentActivity?.id&&(l.activityId=e.currentActivity.id)}return this.globalObjectiveManager&&this.globalObjectiveManager.syncCmiToSequencingActivity(o,a,c),l}determineEntryValue(e,t){const i=e?.trim();return""===e||null==e||""===i?"ab-initio":"suspend"===e?"resume":"logout"===e||"normal"===e?"":"time-out"===e&&t?"resume":""}}"undefined"!=typeof window&&(window.Scorm12API=Scorm12API,window.Scorm2004API=class extends zt{constructor(e,t){const i=e?{...e}:void 0;i&&void 0===i.mastery_override&&(i.mastery_override=!1),super(w,i,t),this._version="1.0",this._sequencingService=null,this._extractedScoItemIds=[],this._sequencingCollections={},this._statePersistence=null,this.cmi=new yi,this.adl=new bi,this._sequencing=new Ti,this.adl.sequencing=this._sequencing,this._sequencingConfigBuilder=new ji,this._activityTreeBuilder=new xi({},this._sequencingConfigBuilder),this._responseValidator=new Ii({throwSCORMError:(e,t,i)=>this.throwSCORMError(e,t,i),getLastErrorCode:()=>this.lastErrorCode,checkCorrectResponseValue:(e,t,i,s)=>this._responseValidator.checkCorrectResponseValue(e,t,i,s)}),this._cmiHandler=new Ni({cmi:this.cmi,isInitialized:()=>this.isInitialized(),throwSCORMError:(e,t,i)=>this.throwSCORMError(e,t,i),getLastErrorCode:()=>this.lastErrorCode},this._responseValidator);const s={getSettings:()=>this.settings,cmi:this.cmi,sequencing:this._sequencing,sequencingService:this._sequencingService,commonSetCMIValue:this._commonSetCMIValue.bind(this)};this._globalObjectiveManager=new Di(s);const r={getSettings:()=>this.settings,cmi:this.cmi,sequencingService:this._sequencingService,renderCMIToJSONObject:this.renderCMIToJSONObject.bind(this)};this._dataSerializer=new qi(r,this._globalObjectiveManager),i?.sequencing&&this.configureSequencing(i.sequencing),this.initializeSequencingService(i),this.Initialize=this.lmsInitialize,this.Terminate=this.lmsFinish,this.GetValue=this.lmsGetValue,this.SetValue=this.lmsSetValue,this.Commit=this.lmsCommit,this.GetLastError=this.lmsGetLastError,this.GetErrorString=this.lmsGetErrorString,this.GetDiagnostic=this.lmsGetDiagnostic}reset(e){this.commonReset(e),this.cmi?.reset(),this.adl?.reset()}get version(){return this._version}get globalObjectives(){return this._globalObjectiveManager.globalObjectives}set _globalObjectives(objectives){this._globalObjectiveManager.globalObjectives=objectives}get _globalObjectives(){return this._globalObjectiveManager.globalObjectives}compressStateData(e){return this._statePersistence?this._statePersistence.compressStateData(e):"undefined"!=typeof btoa?btoa(encodeURIComponent(e)):e}decompressStateData(e){if(this._statePersistence)return this._statePersistence.decompressStateData(e);if("undefined"!=typeof atob)try{return decodeURIComponent(atob(e))}catch{return e}return e}lmsInitialize(){if(""!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:""))return this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),_;this.cmi.initialize();const result=this.initialize("Initialize","LMS was already initialized!","LMS is already finished!");return result===p&&this._sequencingService&&this._sequencingService.initialize(),result===p&&this._globalObjectiveManager.restoreGlobalObjectivesToCMI(),result===p&&this.settings.sequencingStatePersistence&&this.loadSequencingState().catch(()=>{this.apiLog("lmsInitialize","Failed to auto-load sequencing state",P.WARN)}),result}lmsFinish(){if(""!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:""))return this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),_;const e=this.adl?.nav?.request||"_none_",t=this.cmi?.getExitValueInternal()||"",i=this.isTerminated(),s=this._sequencingService?.isDeliveryInProgress()??!1,result=this.terminate("Terminate",!0);if(result===p&&!i&&!s){let i=!1,s=null,r=e,n="";const o=RegExp(ne);if("_none_"!==e){const t=e.match(o);t&&(t.groups?.choice_target?(n=t.groups?.choice_target,r="choice"):t.groups?.jump_target&&(n=t.groups?.jump_target,r="jump"))}if(this._sequencingService)try{let e,o=null;"_none_"!==r?(o=r,e=n||void 0):this._sequencing.getCurrentActivity()&&(o="exit"),o&&(i=this._sequencingService.processNavigationRequest(o,e,t),s=o)}catch(e){i=!1}if(!i)if("_none_"!==e){const e={continue:"SequenceNext",previous:"SequencePrevious",choice:"SequenceChoice",jump:"SequenceJump",exit:"SequenceExit",exitAll:"SequenceExitAll",abandon:"SequenceAbandon",abandonAll:"SequenceAbandonAll"}[r];e&&this.processListeners(e,"adl.nav.request",n)}else this.settings.autoProgress&&this.processListeners("SequenceNext",void 0,"next");this._sequencingService&&s&&["exitAll","abandonAll","suspendAll"].includes(s)&&this._sequencingService.terminate(),this.adl.nav.request="_none_"}return result}lmsGetValue(e){if("adl.nav.request"===e)return this.throwSCORMError(e,w.WRITE_ONLY_ELEMENT,"adl.nav.request is write-only"),"";const t="^adl\\.nav\\.request_valid\\.(choice|jump)\\.{target=([a-zA-Z0-9-_]+)}$";if(c(e,t)){const i=e.match(t);if(i){const request=i[1],e=i[2]?.replace(/{target=/g,"").replace(/}/g,"")||"";if("choice"===request||"jump"===request){const t=this._sequencing?.overallSequencingProcess;return this.settings.scoItemIdValidator?this.settings.scoItemIdValidator(e)+"":t?.predictChoiceEnabled&&"choice"===request?t.predictChoiceEnabled(e)?"true":"false":t?.predictJumpEnabled&&"jump"===request?t.predictJumpEnabled(e)?"true":"false":this._extractedScoItemIds.length>0?this._extractedScoItemIds.includes(e)+"":this.settings?.scoItemIds?.includes(e)+""}}}return this.isTerminated()?(this.lastErrorCode=w.RETRIEVE_AFTER_TERM+"",""):this.isInitialized()?"cmi.completion_status"===e?this._cmiHandler.evaluateCompletionStatus():"cmi.success_status"===e?this._cmiHandler.evaluateSuccessStatus():this.getValue("GetValue",!0,e):(this.lastErrorCode=w.RETRIEVE_BEFORE_INIT+"","")}lmsSetValue(e,t){let i=null;try{i=this.getCMIValue(e)}catch(e){i=null}const result=this.setValue("SetValue","Commit",!0,e,t);if(result===p&&this._sequencingService)try{this._sequencingService.triggerRollupOnCMIChange(e,i,t)}catch(t){console.warn(`Sequencing rollup failed for ${e}: ${t}`)}return result===p&&"setValue"===this.settings.sequencingStatePersistence?.autoSaveOn&&["cmi.completion_status","cmi.success_status","cmi.score.scaled","cmi.objectives","adl.nav.request"].some(t=>e.startsWith(t))&&this.saveSequencingState().catch(()=>{this.apiLog("lmsSetValue","Failed to auto-save sequencing state",P.WARN)}),result}lmsCommit(){if(""!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:""))return this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),_;if(this.settings.throttleCommits)return this.scheduleCommit(500,"Commit"),p;{const result=this.commit("Commit",!0);return result===p&&"commit"===this.settings.sequencingStatePersistence?.autoSaveOn&&this.saveSequencingState().catch(()=>{this.apiLog("lmsCommit","Failed to auto-save sequencing state",P.WARN)}),result}}lmsGetLastError(){return this.getLastError("GetLastError")}lmsGetErrorString(e){return this.getErrorString("GetErrorString",e)}lmsGetDiagnostic(e){return this.getDiagnostic("GetDiagnostic",e)}setCMIValue(e,t){if(c(e,"cmi\\.objectives\\.\\d+")){const i=+e.split(".")[2],s="cmi.objectives."+i;let r;if(c(e,"cmi\\.objectives\\.\\d+\\.id"))r=t;else{const e=this.cmi.objectives.findObjectiveByIndex(i);r=e?e.id:void 0}if(r&&this.settings.globalObjectiveIds?.includes(r)){const{index:i}=this._globalObjectiveManager.findOrCreateGlobalObjective(r),n=e.replace(s,"_globalObjectives."+i);this._commonSetCMIValue("SetGlobalObjectiveValue",!0,n,t);const o=this._globalObjectiveManager.globalObjectives[i];r&&o&&this._globalObjectiveManager.updateGlobalObjectiveFromCMI(r,o)}}return this._commonSetCMIValue("SetValue",!0,e,t)}getChildElement(e,t,i){return this._cmiHandler.getChildElement(e,t,i)}validateCorrectResponse(e,t){const i=e.split("."),s=this.cmi.interactions.childArray[+i[2]];s?this._responseValidator.validateCorrectResponse(e,s,t):this.throwSCORMError(e,w.DEPENDENCY_NOT_ESTABLISHED,e)}getCMIValue(e){return this._commonGetCMIValue("GetValue",!0,e)}getLmsErrorMessageDetails(e,t){let i="",s="";const r=f.error_descriptions[e+=""];return r&&(i=r.basicMessage,s=r.detailMessage),t?s:i}replaceWithAnotherScormAPI(e){this.cmi=e.cmi,this.adl=e.adl}renderCommitCMI(e){return this._dataSerializer.renderCommitCMI(e,arguments.length>1&&void 0!==arguments[1]&&arguments[1])}renderCommitObject(e){return this._dataSerializer.renderCommitObject(e,arguments.length>1&&void 0!==arguments[1]&&arguments[1])}storeData(e){e&&"normal"===this.cmi.mode&&"credit"===this.cmi.credit&&(this.cmi.completion_threshold&&this.cmi.progress_measure&&(this.cmi.completion_status=this.cmi.completion_threshold>this.cmi.progress_measure?"incomplete":"completed"),this.cmi.scaled_passing_score&&this.cmi.score.scaled&&(this.cmi.success_status=this.cmi.scaled_passing_score>this.cmi.score.scaled?"failed":"passed"));let t=!1;this.adl.nav.request!==this.startingData?.adl?.nav?.request&&"_none_"!==this.adl.nav.request&&(t=!0);const i=this.getCommitObject(e),s=this.cmi?.score?.getScoreObject()||{};let r=q;"completed"===this.cmi.completion_status?r=D:"incomplete"===this.cmi.completion_status&&(r=L);let n=x;if("passed"===this.cmi.success_status?n=N:"failed"===this.cmi.success_status&&(n=j),this._globalObjectiveManager.syncCmiToSequencingActivity(r,n,s),"string"==typeof this.settings.lmsCommitUrl){const result=this.processHttpRequest(this.settings.lmsCommitUrl,i,e);if(t&&void 0!==result.navRequest&&""!==result.navRequest&&"string"==typeof result.navRequest){const e=function(e){const t=new Set(["start","resumeAll","continue","previous","choice","jump","exit","exitAll","abandon","abandonAll","suspendAll","_none_"]),i=e.trim();if(!i)return{command:"_none_",targetActivityId:null,valid:!1,error:"Empty navigation request"};if(t.has(i))return{command:i,targetActivityId:null,valid:!0};const s=i.indexOf(".");if(s>0){const e=i.substring(0,s),t=i.substring(s+1);if(("choice"===e||"jump"===e)&&t)return/^[a-zA-Z0-9._-]+$/.test(t)?{command:e,targetActivityId:t,valid:!0}:{command:"_none_",targetActivityId:null,valid:!1,error:"Invalid target activity ID: contains disallowed characters"}}return{command:"_none_",targetActivityId:null,valid:!1,error:`Unrecognized navigation command: "${i}"`}}(result.navRequest);if(e.valid){const t={start:"SequenceStart",resumeAll:"SequenceResumeAll",continue:"SequenceNext",previous:"SequencePrevious",choice:"SequenceChoice",jump:"SequenceJump",exit:"SequenceExit",exitAll:"SequenceExitAll",abandon:"SequenceAbandon",abandonAll:"SequenceAbandonAll",suspendAll:"SequenceSuspendAll"}[e.command];t&&this.processListeners(t,"adl.nav.request",e.targetActivityId)}else this.apiLog("storeData","Invalid navigation request from LMS: "+e.error,P.WARN)}else result?.navRequest&&!t&&"object"==typeof result.navRequest&&Object.hasOwnProperty.call(result.navRequest,"name")&&result.navRequest.name&&this.processListeners(result.navRequest.name,result.navRequest.data);return result}return{result:p,errorCode:0}}configureSequencing(e){this._sequencingCollections=this._sequencingConfigBuilder.sanitizeSequencingCollections(e.collections),this._activityTreeBuilder.setSequencingCollections(this._sequencingCollections),e.activityTree&&this.configureActivityTree(e.activityTree),e.sequencingRules&&this.configureSequencingRules(e.sequencingRules),e.sequencingControls&&this.configureSequencingControls(e.sequencingControls),e.rollupRules&&this.configureRollupRules(e.rollupRules),this._sequencing.hideLmsUi=e.hideLmsUi?this._sequencingConfigBuilder.sanitizeHideLmsUi(e.hideLmsUi):[],this._sequencing.auxiliaryResources=e.auxiliaryResources?this._sequencingConfigBuilder.sanitizeAuxiliaryResources(e.auxiliaryResources):[]}configureActivityTree(e){const t=this._activityTreeBuilder.createActivity(e);this._sequencing.activityTree.root=t,this._extractedScoItemIds=this._activityTreeBuilder.extractActivityIds(t)}configureSequencingRules(e){this._sequencingConfigBuilder.applySequencingRulesSettings(this._sequencing.sequencingRules,e)}configureSequencingControls(e){this._sequencingConfigBuilder.applySequencingControlsSettings(this._sequencing.sequencingControls,e)}configureRollupRules(e){this._sequencingConfigBuilder.applyRollupRulesSettings(this._sequencing.rollupRules,e)}initializeSequencingService(e){try{if(this._sequencingService=new jt(this._sequencing,this.cmi,this.adl,this.eventService||this,this.loggingService,{autoRollupOnCMIChange:e?.sequencing?.autoRollupOnCMIChange??!0,autoProgressOnCompletion:e?.sequencing?.autoProgressOnCompletion??!1,validateNavigationRequests:e?.sequencing?.validateNavigationRequests??!0,enableEventSystem:e?.sequencing?.enableEventSystem??!0,logLevel:e?.sequencing?.logLevel??"info"}),e?.sequencing?.eventListeners&&this._sequencingService.setEventListeners(e.sequencing.eventListeners),this._globalObjectiveManager.updateSequencingService(this._sequencingService),this._dataSerializer.updateSequencingService(this._sequencingService),e?.sequencingStatePersistence){const e={getSettings:()=>this.settings,apiLog:this.apiLog.bind(this),adl:this.adl,sequencing:this._sequencing,sequencingService:this._sequencingService,learnerId:this.cmi.learner_id};this._statePersistence=new Li(e,this._globalObjectiveManager)}this._globalObjectiveManager.syncGlobalObjectiveIdsFromSequencing()}catch(e){console.warn("Failed to initialize sequencing service:",e),this._sequencingService=null}}getSequencingService(){return this._sequencingService}setSequencingEventListeners(e){this._sequencingService&&this._sequencingService.setEventListeners(e)}updateSequencingConfiguration(e){this._sequencingService&&this._sequencingService.updateConfiguration(e)}getSequencingState(){return this._sequencingService?this._sequencingService.getSequencingState():{isInitialized:!1,isActive:!1,currentActivity:null,rootActivity:this._sequencing.getRootActivity(),lastSequencingResult:null}}processNavigationRequest(request,e){return!!this._sequencingService&&this._sequencingService.processNavigationRequest(request,e)}resetSequencingState(){this._sequencing?.reset(),this._sequencingService?.setEventListeners({})}getActivityTrackingData(e){if(!this._sequencing?.activityTree)return null;const t=this._sequencing.activityTree.getActivity(e);return t?{completionStatus:t.completionStatus||"unknown",successStatus:t.successStatus||"unknown",progressMeasure:t.progressMeasure??null,score:t.objectiveMeasureStatus?t.objectiveNormalizedMeasure:null}:null}async saveSequencingState(e){if(this._statePersistence)return this._statePersistence.saveSequencingState(e);if(!this.settings.sequencingStatePersistence)return this.apiLog("saveSequencingState","No persistence configuration provided",P.WARN),!1;const t={getSettings:()=>this.settings,apiLog:this.apiLog.bind(this),adl:this.adl,sequencing:this._sequencing,sequencingService:this._sequencingService,learnerId:this.cmi.learner_id};return new Li(t,this._globalObjectiveManager).saveSequencingState(e)}async loadSequencingState(e){if(this._statePersistence)return this._statePersistence.loadSequencingState(e);if(!this.settings.sequencingStatePersistence)return this.apiLog("loadSequencingState","No persistence configuration provided",P.WARN),!1;const t={getSettings:()=>this.settings,apiLog:this.apiLog.bind(this),adl:this.adl,sequencing:this._sequencing,sequencingService:this._sequencingService,learnerId:this.cmi.learner_id};return new Li(t,this._globalObjectiveManager).loadSequencingState(e)}serializeSequencingState(){if(this._statePersistence)return this._statePersistence.serializeSequencingState();const e={getSettings:()=>this.settings,apiLog:this.apiLog.bind(this),adl:this.adl,sequencing:this._sequencing,sequencingService:this._sequencingService,learnerId:this.cmi.learner_id};return new Li(e,this._globalObjectiveManager).serializeSequencingState()}deserializeSequencingState(e){if(this._statePersistence)return this._statePersistence.deserializeSequencingState(e);const t={getSettings:()=>this.settings,apiLog:this.apiLog.bind(this),adl:this.adl,sequencing:this._sequencing,sequencingService:this._sequencingService,learnerId:this.cmi.learner_id};return new Li(t,this._globalObjectiveManager).deserializeSequencingState(e)}determineEntryValue(e,t){return this._dataSerializer.determineEntryValue(e,t)}})}();
1
+ !function(){"use strict";const e={D:86400,H:3600,M:60,S:1},t=e=>{if(!e||0>=e)return"00:00:00";const t=Math.floor(e/3600),i=new Date(1e3*e),s=i.getUTCMinutes(),r=i.getSeconds(),n=e%1;let o="";return a(n)>0&&(o=a(n)>2?n.toFixed(2):n+"",o="."+o.split(".")[1]),(t+":"+s+":"+r).replace(/\b\d\b/g,"0$&")+o},i=t=>{if(!t||0>=t)return"PT0S";let i="P",s=t;return Object.entries(e).forEach(e=>{let[t,r]=e,n=Math.floor(s/r);s%=r,a(s)>2&&(s=+(+s).toFixed(2)),"S"===t&&s>0&&(n+=s),n&&((i.indexOf("D")>0||["H","M","S"].includes(t))&&-1===i.indexOf("T")&&(i+="T"),i+=`${n}${t}`)}),i},s=l((e,t)=>{if("number"!=typeof e&&"boolean"!=typeof e||(e+=""),"string"==typeof t&&(t=RegExp(t)),!e)return 0;if(!e.match(t))return/^\d+(?:\.\d+)?$/.test(e)?+e:0;const i=e.split(":");return 3600*+i[0]+60*+i[1]+ +i[2]},(e,t)=>`${"string"==typeof e?e:(e??"")+""}:${"string"==typeof t?t:t?.toString()??""}`),r=l((e,t)=>{if("string"==typeof t&&(t=RegExp(t)),!e||!e?.match?.(t))return 0;const[,i,s,r,n,o,a,c]=RegExp(t).exec?.(e)??[];let result=0;return result+=+c||0,result+=60*+a||0,result+=3600*+o||0,result+=86400*+n||0,result+=604800*+r||0,result+=2592e3*+s||0,result+=31536e3*+i||0,result},(e,t)=>`${e??""}:${"string"==typeof t?t:t?.toString()??""}`),n=l((e,t)=>("string"==typeof t&&(t=RegExp(t)),!(!e||!e?.match?.(t))));function o(e){const result={};return function e(t,i){if(Object(t)!==t)result[i]=t;else if(Array.isArray(t))t.forEach((t,s)=>{e(t,`${i}[${s}]`)}),0===t.length&&(result[i]=[]);else{const s=Object.keys(t).filter(e=>({}.hasOwnProperty.call(t,e))),r=0===s.length;s.forEach(s=>{e(t[s],i?`${i}.${s}`:s)}),r&&i&&(result[i]={})}}(e,""),result}function a(e){if(Math.floor(e)===e||0>(e+"")?.indexOf?.("."))return 0;const t=(""+e).split(".")?.[1];return t?.length??0}function c(e,t){return"string"==typeof e&&RegExp(t).test(e)}function l(e,t){const i=new Map;return function(){for(var s=arguments.length,r=Array(s),n=0;s>n;n++)r[n]=arguments[n];const o=t?t(...r):JSON.stringify(r);return i.has(o)?i.get(o):(()=>{const result=e(...r);return i.set(o,result),result})()}}var u=Object.defineProperty,h=(e,t,i)=>((e,t,i)=>t in e?u(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class d{constructor(e){h(this,"jsonString",!1),h(this,"_cmi_element"),h(this,"_initialized",!1),this._cmi_element=e}get initialized(){return this._initialized}initialize(){this._initialized=!0}}class m extends d{constructor(){super(...arguments),h(this,"_start_time")}get start_time(){return this._start_time}setStartTime(){if(void 0!==this._start_time)throw Error("Start time has already been set.");this._start_time=(new Date).getTime()}}var p=Object.defineProperty,_=(e,t,i)=>((e,t,i)=>t in e?p(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class g extends Error{constructor(e,t){super(`${e} : ${""+t}`),_(this,"_errorCode"),this._errorCode=t,Object.setPrototypeOf(this,g.prototype)}get errorCode(){return this._errorCode}}class v extends g{constructor(e,t,i,s){super(e,t),_(this,"_errorMessage"),_(this,"_detailedMessage",""),this.message=`${e} : ${i}`,this._errorMessage=i,s&&(this._detailedMessage=s),Object.setPrototypeOf(this,v.prototype)}get errorMessage(){return this._errorMessage}get detailedMessage(){return this._detailedMessage}}const f="true",S="false",b="raw,min,max",y="id,score,status",C={0:{basicMessage:"No Error",detailMessage:"No error occurred, the previous API call was successful."},101:{basicMessage:"General Exception",detailMessage:"No specific error code exists to describe the error."},201:{basicMessage:"Invalid argument error",detailMessage:"Indicates that an argument represents an invalid data model element or is otherwise incorrect."},202:{basicMessage:"Element cannot have children",detailMessage:'Indicates that LMSGetValue was called with a data model element name that ends in "_children" for a data model element that does not support the "_children" suffix.'},203:{basicMessage:"Element not an array - cannot have count",detailMessage:'Indicates that LMSGetValue was called with a data model element name that ends in "_count" for a data model element that does not support the "_count" suffix.'},301:{basicMessage:"Not initialized",detailMessage:"Indicates that an API call was made before the call to lmsInitialize."},401:{basicMessage:"Not implemented error",detailMessage:"The data model element indicated in a call to LMSGetValue or LMSSetValue is valid, but was not implemented by this LMS. SCORM 1.2 defines a set of data model elements as being optional for an LMS to implement."},402:{basicMessage:"Invalid set value, element is a keyword",detailMessage:'Indicates that LMSSetValue was called on a data model element that represents a keyword (elements that end in "_children" and "_count").'},403:{basicMessage:"Element is read only",detailMessage:"LMSSetValue was called with a data model element that can only be read."},404:{basicMessage:"Element is write only",detailMessage:"LMSGetValue was called on a data model element that can only be written to."},405:{basicMessage:"Incorrect Data Type",detailMessage:"LMSSetValue was called with a value that is not consistent with the data format of the supplied data model element."},407:{basicMessage:"Element Value Out Of Range",detailMessage:"The numeric value supplied to a LMSSetValue call is outside of the numeric range allowed for the supplied data model element."},408:{basicMessage:"Data Model Dependency Not Established",detailMessage:"Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element."}},A={cmi_children:"_version,comments_from_learner,comments_from_lms,completion_status,completion_threshold,credit,entry,exit,interactions,launch_data,learner_id,learner_name,learner_preference,location,max_time_allowed,mode,objectives,progress_measure,scaled_passing_score,score,session_time,success_status,suspend_data,time_limit_action,total_time",comments_children:"comment,timestamp,location",score_children:"max,raw,scaled,min",objectives_children:"progress_measure,completion_status,success_status,description,score,id",correct_responses_children:"pattern",student_preference_children:"audio_level,audio_captioning,delivery_speed,language",interactions_children:"id,type,objectives,timestamp,correct_responses,weighting,learner_response,result,latency,description",adl_data_children:"id,store",error_descriptions:{0:{basicMessage:"No Error",detailMessage:"No error occurred, the previous API call was successful."},101:{basicMessage:"General Exception",detailMessage:"No specific error code exists to describe the error."},102:{basicMessage:"General Initialization Failure",detailMessage:"Call to Initialize failed for an unknown reason."},103:{basicMessage:"Already Initialized",detailMessage:"Call to Initialize failed because Initialize was already called."},104:{basicMessage:"Content Instance Terminated",detailMessage:"Call to Initialize failed because Terminate was already called."},111:{basicMessage:"General Termination Failure",detailMessage:"Call to Terminate failed for an unknown reason."},112:{basicMessage:"Termination Before Initialization",detailMessage:"Call to Terminate failed because it was made before the call to Initialize."},113:{basicMessage:"Termination After Termination",detailMessage:"Call to Terminate failed because Terminate was already called."},122:{basicMessage:"Retrieve Data Before Initialization",detailMessage:"Call to GetValue failed because it was made before the call to Initialize."},123:{basicMessage:"Retrieve Data After Termination",detailMessage:"Call to GetValue failed because it was made after the call to Terminate."},132:{basicMessage:"Store Data Before Initialization",detailMessage:"Call to SetValue failed because it was made before the call to Initialize."},133:{basicMessage:"Store Data After Termination",detailMessage:"Call to SetValue failed because it was made after the call to Terminate."},142:{basicMessage:"Commit Before Initialization",detailMessage:"Call to Commit failed because it was made before the call to Initialize."},143:{basicMessage:"Commit After Termination",detailMessage:"Call to Commit failed because it was made after the call to Terminate."},201:{basicMessage:"General Argument Error",detailMessage:"An invalid argument was passed to an API method (usually indicates that Initialize, Commit or Terminate did not receive the expected empty string argument."},301:{basicMessage:"General Get Failure",detailMessage:"Indicates a failed GetValue call where no other specific error code is applicable. Use GetDiagnostic for more information."},351:{basicMessage:"General Set Failure",detailMessage:"Indicates a failed SetValue call where no other specific error code is applicable. Use GetDiagnostic for more information."},391:{basicMessage:"General Commit Failure",detailMessage:"Indicates a failed Commit call where no other specific error code is applicable. Use GetDiagnostic for more information."},401:{basicMessage:"Undefined Data Model Element",detailMessage:"The data model element name passed to GetValue or SetValue is not a valid SCORM data model element."},402:{basicMessage:"Unimplemented Data Model Element",detailMessage:"The data model element indicated in a call to GetValue or SetValue is valid, but was not implemented by this LMS. In SCORM 2004, this error would indicate an LMS that is not fully SCORM conformant."},403:{basicMessage:"Data Model Element Value Not Initialized",detailMessage:"Attempt to read a data model element that has not been initialized by the LMS or through a SetValue call. This error condition is often reached during normal execution of a SCO."},404:{basicMessage:"Data Model Element Is Read Only",detailMessage:"SetValue was called with a data model element that can only be read."},405:{basicMessage:"Data Model Element Is Write Only",detailMessage:"GetValue was called on a data model element that can only be written to."},406:{basicMessage:"Data Model Element Type Mismatch",detailMessage:"SetValue was called with a value that is not consistent with the data format of the supplied data model element."},407:{basicMessage:"Data Model Element Value Out Of Range",detailMessage:"The numeric value supplied to a SetValue call is outside of the numeric range allowed for the supplied data model element."},408:{basicMessage:"Data Model Dependency Not Established",detailMessage:"Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element."}}},E=C;class w extends v{constructor(e,t){!{}.hasOwnProperty.call(E,t+"")?super(e,101,E[101]?.basicMessage,E[101]?.detailMessage):super(e,t,E[t+""]?.basicMessage||"Unknown error",E[t+""]?.detailMessage),Object.setPrototypeOf(this,w.prototype)}}const M=A.error_descriptions;class O extends v{constructor(e,t){!{}.hasOwnProperty.call(M,t+"")?super(e,101,M[101]?.basicMessage,M[101]?.detailMessage):super(e,t,M[t+""]?.basicMessage||"Unknown error",M[t+""]?.detailMessage),Object.setPrototypeOf(this,O.prototype)}}const R={GENERAL:101,INITIALIZATION_FAILED:101,INITIALIZED:101,TERMINATED:101,TERMINATION_FAILURE:101,TERMINATION_BEFORE_INIT:101,MULTIPLE_TERMINATION:101,RETRIEVE_BEFORE_INIT:101,RETRIEVE_AFTER_TERM:101,STORE_BEFORE_INIT:101,STORE_AFTER_TERM:101,COMMIT_BEFORE_INIT:101,COMMIT_AFTER_TERM:101,ARGUMENT_ERROR:101,CHILDREN_ERROR:101,COUNT_ERROR:101,GENERAL_GET_FAILURE:101,GENERAL_SET_FAILURE:101,GENERAL_COMMIT_FAILURE:101,UNDEFINED_DATA_MODEL:101,UNIMPLEMENTED_ELEMENT:101,VALUE_NOT_INITIALIZED:101,INVALID_SET_VALUE:101,READ_ONLY_ELEMENT:101,WRITE_ONLY_ELEMENT:101,TYPE_MISMATCH:101,VALUE_OUT_OF_RANGE:101,DEPENDENCY_NOT_ESTABLISHED:101},T={...R,RETRIEVE_BEFORE_INIT:301,STORE_BEFORE_INIT:301,COMMIT_BEFORE_INIT:301,ARGUMENT_ERROR:201,CHILDREN_ERROR:202,COUNT_ERROR:203,UNDEFINED_DATA_MODEL:401,UNIMPLEMENTED_ELEMENT:401,VALUE_NOT_INITIALIZED:301,INVALID_SET_VALUE:402,READ_ONLY_ELEMENT:403,WRITE_ONLY_ELEMENT:404,TYPE_MISMATCH:405,VALUE_OUT_OF_RANGE:407,DEPENDENCY_NOT_ESTABLISHED:408},j={...R,INITIALIZATION_FAILED:102,INITIALIZED:103,TERMINATED:104,TERMINATION_FAILURE:111,TERMINATION_BEFORE_INIT:112,MULTIPLE_TERMINATION:113,MULTIPLE_TERMINATIONS:113,RETRIEVE_BEFORE_INIT:122,RETRIEVE_AFTER_TERM:123,STORE_BEFORE_INIT:132,STORE_AFTER_TERM:133,COMMIT_BEFORE_INIT:142,COMMIT_AFTER_TERM:143,ARGUMENT_ERROR:201,GENERAL_GET_FAILURE:301,GENERAL_SET_FAILURE:351,GENERAL_COMMIT_FAILURE:391,UNDEFINED_DATA_MODEL:401,UNIMPLEMENTED_ELEMENT:402,VALUE_NOT_INITIALIZED:403,READ_ONLY_ELEMENT:404,WRITE_ONLY_ELEMENT:405,TYPE_MISMATCH:406,VALUE_OUT_OF_RANGE:407,DEPENDENCY_NOT_ESTABLISHED:408};var I=Object.defineProperty,N=(e,t,i)=>((e,t,i)=>t in e?I(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class x extends d{constructor(e){super(e.CMIElement),N(this,"_errorCode"),N(this,"_errorClass"),N(this,"__children"),N(this,"childArray"),this.__children=e.children,this._errorCode=e.errorCode??T.GENERAL,this._errorClass=e.errorClass||g,this.childArray=[]}reset(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this._initialized=!1,e)this.childArray=[];else for(let e=0;this.childArray.length>e;e++)this.childArray[e]?.reset()}get _children(){return this.__children}set _children(_children){throw new this._errorClass(this._cmi_element+"._children",this._errorCode)}get _count(){return this.childArray.length}set _count(_count){throw new this._errorClass(this._cmi_element+"._count",this._errorCode)}toJSON(){this.jsonString=!0;const result={};for(let e=0;this.childArray.length>e;e++)result[e+""]=this.childArray[e];return this.jsonString=!1,result}}const q="unknown",D="true",L="false",P="passed",z="failed",F="unknown",k="completed",V="incomplete",H="unknown",B={_:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,NONE:5},U={autocommit:!1,autocommitSeconds:10,throttleCommits:!1,useAsynchronousCommits:!1,sendFullCommit:!0,lmsCommitUrl:!1,dataCommitFormat:"json",commitRequestDataType:"application/json;charset=UTF-8",autoProgress:!1,logLevel:B.ERROR,selfReportSessionTime:!1,alwaysSendTotalTime:!1,renderCommonCommitFields:!1,autoCompleteLessonStatus:!1,strict_errors:!0,xhrHeaders:{},xhrWithCredentials:!1,fetchMode:"cors",asyncModeBeaconBehavior:"never",responseHandler:async function(e){if(void 0!==e){let t=null;try{if("function"==typeof e.json)t=await e.json();else if("function"==typeof e.text){const i=await e.text();i&&(t=JSON.parse(i))}}catch(e){}return null!==t&&{}.hasOwnProperty.call(t,"result")?{result:t.result,errorCode:"number"==typeof t.errorCode?t.errorCode:!0===t.result||t.result===f?0:101}:200===e.status?{result:f,errorCode:0}:{result:S,errorCode:101}}return{result:S,errorCode:101}},xhrResponseHandler:function(e){if(void 0!==e){let t=null;if(200>e.status||e.status>299)return{result:S,errorCode:101};try{t=JSON.parse(e.responseText)}catch(e){}return null!==t&&{}.hasOwnProperty.call(t,"result")?{result:t.result,errorCode:"number"==typeof t.errorCode?t.errorCode:!0===t.result||t.result===f?0:101}:{result:f,errorCode:0}}return{result:S,errorCode:101}},requestHandler:function(e){return e},onLogMessage:$,mastery_override:!1,score_overrides_status:!1,completion_status_on_failed:"completed",scoItemIds:[],scoItemIdValidator:!1,globalObjectiveIds:[],enableOfflineSupport:!1,courseId:"",syncOnInitialize:!0,syncOnTerminate:!0,maxSyncAttempts:5,scoId:"",autoPopulateCommitMetadata:!1,httpService:null,globalStudentPreferences:!1};function $(e,t){switch(e){case"4":case 4:case"ERROR":case B.ERROR:console.error(t);break;case"3":case 3:case"WARN":case B.WARN:console.warn(t);break;case"2":case 2:case"INFO":case B.INFO:console.info(t);break;case"1":case 1:case"DEBUG":case B.DEBUG:console.debug?console.debug(t):console.log(t)}}const G="^[\\s\\S]{0,255}$",Y="^([0-9]+):([0-9]{2}):([0-9]{2})(\\.\\d{1,2})?$",W="^-?([0-9]+)$",J="^-?([0-9]{0,10})(\\.[0-9]*)?$",K="^[\\u0021-\\u007E\\s]{0,255}$",X="^.*$",Q="^(passed|completed|failed|incomplete|browsed|not attempted)$",Z="0#100",ee="^[\\u0000-\\uFFFF]{0,4000}$",te="^[\\u0000-\\uFFFF]{0,64000}$",ie="^({lang=([a-zA-Z]{1,8}|i|x)(-[a-zA-Z0-9-]{2,8})?})?((?!{.*$).{0,250}$)?$",se="^({lang=([a-zA-Z]{1,8}|i|x)(-[a-zA-Z0-9-]{2,8})?})?((?!{.*$).{0,4000}$)?$",re="^(19[7-9][0-9]|[2-9][0-9]{3})((-(0[1-9]|1[0-2]))((-(0[1-9]|[1-2][0-9]|3[0-1]))(T([0-1][0-9]|2[0-3])((:[0-5][0-9])((:[0-5][0-9])((\\.[0-9]{1,6})((Z|([+|-]([0-1][0-9]|2[0-3])))(:[0-5][0-9])?)?)?)?)?)?)?)?$",ne="^P(?:([.,\\d]+)Y)?(?:([.,\\d]+)M)?(?:([.,\\d]+)W)?(?:([.,\\d]+)D)?(?:T?(?:([.,\\d]+)H)?(?:([.,\\d]+)M)?(?:(\\d+(?:\\.\\d{1,2})?)S)?)?$",oe="^-?([0-9]{1,10})(\\.[0-9]{1,18})?$",ae="^(?=.*\\w)[\\w\\-\\(\\)\\+\\.\\:\\=\\@\\;\\$\\_\\!\\*\\'\\%\\/\\#]{1,250}$",ce="^(?:(?!urn:)\\S{1,4000}|urn:[A-Za-z0-9-]{1,31}:\\S{1,4000}|.{1,4000})$",le="^(completed|incomplete|not attempted|unknown)$",ue="^(passed|failed|unknown)$",he="^(_?(start|resumeAll|previous|continue|exit|exitAll|abandon|abandonAll|suspendAll|retry|retryAll)|_none_|(\\{target=(?<choice_target>\\S{0,}[a-zA-Z0-9-_]+)})?choice|(\\{target=(?<jump_target>\\S{0,}[a-zA-Z0-9-_]+)})?jump)$",de="^(unknown|true|false)$",me="^{target=\\S{0,}[a-zA-Z0-9-_]+}$",pe={"true-false":{format:"^true$|^false$",max:1,delimiter:"",unique:!1},choice:{format:ce,max:36,delimiter:"[,]",unique:!0},"fill-in":{format:ie,max:10,delimiter:"[,]",unique:!1},"long-fill-in":{format:se,max:1,delimiter:"",unique:!1},matching:{format:ae,format2:ae,max:36,delimiter:"[,]",delimiter2:"[.]",unique:!1},performance:{format:"^$|"+ae,format2:oe+"|^$|"+ae,max:250,delimiter:"[,]",delimiter2:"[.]",unique:!1},sequencing:{format:ae,max:36,delimiter:"[,]",unique:!1},likert:{format:ae,max:1,delimiter:"",unique:!1},numeric:{format:oe,max:1,delimiter:"",unique:!1},other:{format:ee,max:1,delimiter:"",unique:!1}},_e={"true-false":{max:1,delimiter:"",unique:!1,duplicate:!1,format:"^true$|^false$",limit:1},choice:{max:36,delimiter:"[,]",unique:!0,duplicate:!1,format:ce},"fill-in":{max:10,delimiter:"[,]",unique:!1,duplicate:!1,format:"^(({lang=([a-zA-Z]{1,8}|i|x)?(-[a-zA-Z0-9-]{2,8})?})?(.{0,250})?)?$"},"long-fill-in":{max:1,delimiter:"",unique:!1,duplicate:!0,format:se},matching:{max:36,delimiter:"[,]",delimiter2:"[.]",unique:!1,duplicate:!1,format:ae,format2:ae},performance:{max:250,delimiter:"[,]",delimiter2:"[.]",unique:!1,duplicate:!1,format:ae,format2:`^(${ae})$|^(?:\\d+(?:\\.\\d+)?(?::\\d+(?:\\.\\d+)?)?)$`},sequencing:{max:36,delimiter:"[,]",unique:!1,duplicate:!1,format:ae},likert:{max:1,delimiter:"",unique:!1,duplicate:!1,format:ae,limit:1},numeric:{max:2,delimiter:"[:]",unique:!1,duplicate:!1,format:oe,limit:1},other:{max:1,delimiter:"",unique:!1,duplicate:!1,format:ee,limit:1}},ge=["aa","ab","ae","af","ak","am","an","ar","as","av","ay","az","ba","be","bg","bh","bi","bm","bn","bo","br","bs","ca","ce","ch","co","cr","cs","cu","cv","cy","da","de","dv","dz","ee","el","en","eo","es","et","eu","fa","ff","fi","fj","fo","fr","fy","ga","gd","gl","gn","gu","gv","ha","he","hi","ho","hr","ht","hu","hy","hz","ia","id","ie","ig","ii","ik","io","is","it","iu","ja","jv","ka","kg","ki","kj","kk","kl","km","kn","ko","kr","ks","ku","kv","kw","ky","la","lb","lg","li","ln","lo","lt","lu","lv","mg","mh","mi","mk","ml","mn","mo","mr","ms","mt","my","na","nb","nd","ne","ng","nl","nn","no","nr","nv","ny","oc","oj","om","or","os","pa","pi","pl","ps","pt","qu","rm","rn","ro","ru","rw","sa","sc","sd","se","sg","sh","si","sk","sl","sm","sn","so","sq","sr","ss","st","su","sv","sw","ta","te","tg","th","ti","tk","tl","tn","to","tr","ts","tt","tw","ty","ug","uk","ur","uz","ve","vi","vo","wa","wo","xh","yi","yo","za","zh","zu","aar","abk","ave","afr","aka","amh","arg","ara","asm","ava","aym","aze","bak","bel","bul","bih","bis","bam","ben","tib","bod","bre","bos","cat","che","cha","cos","cre","cze","ces","chu","chv","wel","cym","dan","ger","deu","div","dzo","ewe","gre","ell","eng","epo","spa","est","baq","eus","per","fas","ful","fin","fij","fao","fre","fra","fry","gle","gla","glg","grn","guj","glv","hau","heb","hin","hmo","hrv","hat","hun","arm","hye","her","ina","ind","ile","ibo","iii","ipk","ido","ice","isl","ita","iku","jpn","jav","geo","kat","kon","kik","kua","kaz","kal","khm","kan","kor","kau","kas","kur","kom","cor","kir","lat","ltz","lug","lim","lin","lao","lit","lub","lav","mlg","mah","mao","mri","mac","mkd","mal","mon","mol","mar","may","msa","mlt","bur","mya","nau","nob","nde","nep","ndo","dut","nld","nno","nor","nbl","nav","nya","oci","oji","orm","ori","oss","pan","pli","pol","pus","por","que","roh","run","rum","ron","rus","kin","san","srd","snd","sme","sag","slo","sin","slk","slv","smo","sna","som","alb","sqi","srp","ssw","sot","sun","swe","swa","tam","tel","tgk","tha","tir","tuk","tgl","tsn","ton","tur","tso","tat","twi","tah","uig","ukr","urd","uzb","ven","vie","vol","wln","wol","xho","yid","yor","zha","chi","zho","zul"];var ve=Object.defineProperty,fe=(e,t,i)=>((e,t,i)=>t in e?ve(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Se{constructor(e,t,i){fe(this,"_API"),fe(this,"_cancelled",!1),fe(this,"_timeout"),fe(this,"_callback"),this._API=e,this._timeout=setTimeout(this.wrapper.bind(this),t),this._callback=i}cancel(){this._cancelled=!0,this._timeout&&clearTimeout(this._timeout)}wrapper(){this._cancelled||this._API.isInitialized()&&(async()=>{await this._API.commit(this._callback)})()}}const be=["continue","previous","exit","exitAll","abandon","abandonAll","suspendAll"];var ye=Object.defineProperty,Ce=(e,t,i)=>((e,t,i)=>t in e?ye(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i),Ae=(e=>(e.NOT="not",e.AND="and",e.OR="or",e))(Ae||{}),Ee=(e=>(e.SKIP="skip",e.DISABLED="disabled",e.HIDE_FROM_CHOICE="hiddenFromChoice",e.STOP_FORWARD_TRAVERSAL="stopForwardTraversal",e.EXIT_PARENT="exitParent",e.EXIT_ALL="exitAll",e.RETRY="retry",e.RETRY_ALL="retryAll",e.CONTINUE="continue",e.PREVIOUS="previous",e.EXIT="exit",e))(Ee||{});const we=class e extends d{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"always",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new Map;super("ruleCondition"),Ce(this,"_condition","always"),Ce(this,"_operator",null),Ce(this,"_parameters",new Map),Ce(this,"_referencedObjective",null),this._condition=e,this._operator=t,this._parameters=i}static setNowProvider(t){"function"==typeof t&&(e._now=t)}static setElapsedSecondsHook(t){e._getElapsedSecondsHook=t}reset(){this._initialized=!1,this._condition="always",this._operator=null,this._parameters=new Map}get condition(){return this._condition}set condition(e){this._condition=e}get operator(){return this._operator}set operator(e){this._operator=e}get parameters(){return this._parameters}set parameters(e){this._parameters=e}get referencedObjective(){return this._referencedObjective}set referencedObjective(e){this._referencedObjective=e}resolveReferencedObjective(e){return this._referencedObjective?e.primaryObjective?.id===this._referencedObjective?e.primaryObjective:(e.objectives||[]).find(e=>e.id===this._referencedObjective)||null:null}evaluate(e){let result;const t=this.resolveReferencedObjective(e);switch(this._condition){case"satisfied":case"objectiveSatisfied":result=t?!0===t.satisfiedStatus:e.successStatus===P||!0===e.objectiveSatisfiedStatus;break;case"objectiveStatusKnown":case"objectiveMeasureKnown":result=t?!!t.measureStatus:!!e.objectiveMeasureStatus;break;case"objectiveMeasureGreaterThan":{const i=this._parameters.get("threshold")||0;result=!!(t?t.measureStatus:e.objectiveMeasureStatus)&&(t?t.normalizedMeasure:e.objectiveNormalizedMeasure)>i;break}case"objectiveMeasureLessThan":{const i=this._parameters.get("threshold")||0;result=!!(t?t.measureStatus:e.objectiveMeasureStatus)&&i>(t?t.normalizedMeasure:e.objectiveNormalizedMeasure);break}case"completed":case"activityCompleted":result=t?t.completionStatus===k:e.isCompleted;break;case"progressKnown":case"activityProgressKnown":result=t?t.completionStatus!==H:"unknown"!==e.completionStatus;break;case"attempted":result=e.attemptCount>0;break;case"attemptLimitExceeded":result=e.hasAttemptLimitExceeded();break;case"timeLimitExceeded":result=this.evaluateTimeLimitExceeded(e);break;case"outsideAvailableTimeRange":result=this.evaluateOutsideAvailableTimeRange(e);break;case"always":result=!0;break;default:result=!1}return"not"===this._operator&&(result=!result),result}evaluateTimeLimitExceeded(t){let i=t.timeLimitDuration;if(!i&&t.attemptAbsoluteDurationLimit&&(i=t.attemptAbsoluteDurationLimit),!i)return!1;const s=r(i,ne);if(0>=s)return!1;let n=0;if(e._getElapsedSecondsHook)try{const i=e._getElapsedSecondsHook(t);"number"!=typeof i||Number.isNaN(i)||0>i||(n=i)}catch{n=0}if(0===n&&t.attemptExperiencedDuration){const e=r(t.attemptExperiencedDuration,ne);e>0&&(n=e)}if(0===n&&t.attemptAbsoluteStartTime)try{const i=new Date(t.attemptAbsoluteStartTime).getTime(),s=e._now().getTime();Number.isNaN(i)||Number.isNaN(s)||i>s||(n=(s-i)/1e3)}catch{n=0}return n>s}evaluateOutsideAvailableTimeRange(t){const i=t.beginTimeLimit,s=t.endTimeLimit;if(!i&&!s)return!1;const r=e._now();return!(!i||r>=new Date(i))||!(!s||new Date(s)>=r)}parseISO8601Duration(e){return 1e3*r(e,ne)}toJSON(){this.jsonString=!0;const result={condition:this._condition,operator:this._operator,parameters:Object.fromEntries(this._parameters)};return this.jsonString=!1,result}};Ce(we,"_now",()=>new Date),Ce(we,"_getElapsedSecondsHook");let Me=we;class Oe extends d{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"skip",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"and";super("sequencingRule"),Ce(this,"_conditions",[]),Ce(this,"_action","skip"),Ce(this,"_conditionCombination","and"),this._action=e,this._conditionCombination=t}reset(){this._initialized=!1,this._conditions=[],this._action="skip",this._conditionCombination="and"}get conditions(){return this._conditions}addCondition(e){if(!(e instanceof Me))throw new O(this._cmi_element+".conditions",j.TYPE_MISMATCH);this._conditions.includes(e)||this._conditions.push(e)}removeCondition(e){if(!(e instanceof Me))throw new O(this._cmi_element+".conditions",j.TYPE_MISMATCH);const t=this._conditions.indexOf(e);return-1!==t&&(this._conditions.splice(t,1),!0)}get action(){return this._action}set action(e){this._action=e}get conditionCombination(){return this._conditionCombination}set conditionCombination(e){this._conditionCombination=e}evaluate(e){return 0===this._conditions.length||("all"===this._conditionCombination||"and"===this._conditionCombination?this._conditions.every(t=>t.evaluate(e)):("any"===this._conditionCombination||"or"===this._conditionCombination)&&this._conditions.some(t=>t.evaluate(e)))}toJSON(){this.jsonString=!0;const result={conditions:this._conditions,action:this._action,conditionCombination:this._conditionCombination};return this.jsonString=!1,result}}class Re extends d{constructor(){super("sequencingRules"),Ce(this,"_preConditionRules",[]),Ce(this,"_exitConditionRules",[]),Ce(this,"_postConditionRules",[])}reset(){this._initialized=!1,this._preConditionRules=[],this._exitConditionRules=[],this._postConditionRules=[]}get preConditionRules(){return this._preConditionRules}addPreConditionRule(e){if(!(e instanceof Oe))throw new O(this._cmi_element+".preConditionRules",j.TYPE_MISMATCH);this._preConditionRules.push(e)}get exitConditionRules(){return this._exitConditionRules}addExitConditionRule(e){if(!(e instanceof Oe))throw new O(this._cmi_element+".exitConditionRules",j.TYPE_MISMATCH);this._exitConditionRules.push(e)}get postConditionRules(){return this._postConditionRules}addPostConditionRule(e){if(!(e instanceof Oe))throw new O(this._cmi_element+".postConditionRules",j.TYPE_MISMATCH);this._postConditionRules.push(e)}evaluatePreConditionRules(e){for(const t of this._preConditionRules)if(t.evaluate(e))return t.action;return null}evaluateExitConditionRules(e){for(const t of this._exitConditionRules)if(t.evaluate(e))return t.action;return null}evaluatePostConditionRules(e){for(const t of this._postConditionRules)if(t.evaluate(e))return t.action;return null}toJSON(){this.jsonString=!0;const result={preConditionRules:this._preConditionRules,exitConditionRules:this._exitConditionRules,postConditionRules:this._postConditionRules};return this.jsonString=!1,result}}class Te{constructor(e){this.activityTree=e}isInTree(e){return this.activityTree.getAllActivities().includes(e)}isAncestorOf(e,t){let i=t;for(;i;){if(i===e)return!0;i=i.parent}return!1}findCommonAncestor(e,t){if(!e||!t)return null;const i=[];let s=e;for(;s;)i.push(s),s=s.parent;for(s=t;s;){if(i.includes(s))return s;s=s.parent}return null}findChildInPath(e,t){let i=t;for(;i&&i.parent;){if(i.parent===e)return i;i=i.parent}return null}isLastInTree(e){if(e.children.length>0)return!1;let t=e;for(;t;){if(this.activityTree.getNextSibling(t))return!1;t=t.parent}return!0}getCurrentInParent(e){if(e.children)for(const t of e.children)if(t.isActive)return t;return null}isMandatory(e){if(e.sequencingRules&&e.sequencingRules.preConditionRules)for(const t of e.sequencingRules.preConditionRules)if("skip"===t.action&&t.conditions&&0===t.conditions.length)return!1;return!0===e.mandatory}isCompleted(e){return"completed"===e.completionStatus||"passed"===e.completionStatus||"passed"===e.successStatus}isAvailableForChoice(e){return e.isVisible&&!e.isHiddenFromChoice&&e.isAvailable&&(!e.sequencingControls||e.sequencingControls.choice)}getAncestors(e){const t=[];let i=e.parent;for(;i;)t.push(i),i=i.parent;return t}getPathToRoot(e){const t=[e];let i=e.parent;for(;i;)t.push(i),i=i.parent;return t}isLeaf(e){return 0===e.children.length}isCluster(e){return e.children.length>0}getDepth(e){let t=0,i=e.parent;for(;i;)t++,i=i.parent;return t}}class je{constructor(e,t){this.activityTree=e,this.treeQueries=t}validateChoice(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!this.treeQueries.isInTree(t))return{valid:!1,exception:"SB.2.9-2"};if(t===this.activityTree.root)return{valid:!1,exception:"SB.2.9-3"};const s=this.validatePathToRoot(t);if(!s.valid)return s;if(i.checkAvailability&&!t.isAvailable)return{valid:!1,exception:"SB.2.9-7"};if(!e)return{valid:!0,exception:null};const r=this.validateChoiceExit(e,t);if(!r.valid)return r;const n=this.validateAncestorConstraints(e,t);return n.valid?{valid:!0,exception:null}:n}validatePathToRoot(e){let t=e;for(;t;){if(t.isHiddenFromChoice)return{valid:!1,exception:"SB.2.9-4"};if(t.parent&&!t.parent.sequencingControls.choice)return{valid:!1,exception:"SB.2.9-5"};if(t.parent&&t.parent.sequencingControls.preventActivation&&0===e.attemptCount&&!e.isActive)return{valid:!1,exception:"SB.2.9-6"};t=t.parent}return{valid:!0,exception:null}}validateChoiceExit(e,t){let i=e.parent;for(;i;){if(i.isActive&&!i.sequencingControls.choiceExit){if(!this.treeQueries.isAncestorOf(i,t))return{valid:!1,exception:"SB.2.9-8"};break}i=i.parent}return{valid:!0,exception:null}}validateAncestorConstraints(e,t){let i=t.parent;for(;i;){const s=this.validateConstraintsAtLevel(i,e,t);if(!s.valid)return s;i=i.parent}return{valid:!0,exception:null}}validateConstraintsAtLevel(e,t,i){const s=this.treeQueries.findChildInPath(e,i),r=this.treeQueries.findChildInPath(e,t);if(!s||!r)return{valid:!0,exception:null};const n=e.children,o=n.indexOf(s),a=n.indexOf(r);if(-1===o||-1===a)return{valid:!0,exception:null};if(e.sequencingControls.forwardOnly&&a>o)return{valid:!1,exception:"SB.2.9-5"};if(o>a)for(let e=a+1;o>e;e++){const t=n[e];if(t&&this.treeQueries.isMandatory(t)&&!this.treeQueries.isCompleted(t))return{valid:!1,exception:"SB.2.9-6"}}if(e.sequencingControls.constrainChoice){if(o>a+1)return{valid:!1,exception:"SB.2.9-7"};if(a>o&&"completed"!==i.completionStatus&&"passed"!==i.completionStatus)return{valid:!1,exception:"SB.2.9-7"}}return e.sequencingControls.preventActivation&&0===i.attemptCount&&!i.isActive?{valid:!1,exception:"SB.2.9-6"}:{valid:!0,exception:null}}checkForwardOnlyViolation(e){let t=e.parent;for(;t;){if(t.sequencingControls.forwardOnly)return{valid:!1,exception:"SB.2.9-5"};t=t.parent}return{valid:!0,exception:null}}isAvailableForChoice(e){return this.treeQueries.isAvailableForChoice(e)}validateFlowConstraints(e,t){const i=[];for(const s of t)this.meetsFlowConstraints(s,e)&&i.push(s);return{valid:i.length>0,validChildren:i}}meetsFlowConstraints(e,t){return!(!e.isAvailable||e.isHiddenFromChoice)&&(!t.sequencingControls.constrainChoice||this.validateConstrainChoiceForFlow(e,t))}validateConstrainChoiceForFlow(e,t){if(!t.sequencingControls||!t.sequencingControls.constrainChoice)return!0;const i=t.children;if(!i||0===i.length)return!0;const s=i.indexOf(e);if(-1===s)return!1;const r=this.treeQueries.getCurrentInParent(t);if(!r)return this.isAvailableForChoice(e);const n=i.indexOf(r);return-1===n||(t.sequencingControls.flow?t.sequencingControls.forwardOnly&&n>s?"completed"===e.completionStatus||"passed"===e.completionStatus:n>s?n>s&&("completed"===e.completionStatus||"passed"===e.completionStatus)&&this.isAvailableForChoice(e):(s===n||s===n+1)&&this.isAvailableForChoice(e):this.isAvailableForChoice(e)&&("completed"===e.completionStatus||"unknown"===e.completionStatus||"incomplete"===e.completionStatus))}validateTraversalConstraints(e){let t=!0,i=!0;return e.parent?.sequencingControls.constrainChoice&&(t=this.evaluateConstrainChoiceForTraversal(e)),e.sequencingControls&&e.sequencingControls.stopForwardTraversal&&(i=!1),e.parent?.sequencingControls.forwardOnly&&(i=this.evaluateForwardOnlyForChoice(e)),{canTraverse:t,canTraverseInto:i}}evaluateConstrainChoiceForTraversal(e){if(!e.parent)return!0;let t=e.parent;for(;t;){if(t.sequencingControls&&t.sequencingControls.constrainChoice){const i=t.children,s=this.treeQueries.findChildInPath(t,e);if(s){const r=i.indexOf(s),n=this.treeQueries.getCurrentInParent(t);if(n){const s=i.indexOf(n);if(-1!==s&&-1!==r){if(r>s)for(let e=s+1;r>e;e++){const t=i[e];if(t&&this.treeQueries.isMandatory(t)&&!this.treeQueries.isCompleted(t))return!1}if(t.sequencingControls.forwardOnly&&s>r&&!this.treeQueries.isCompleted(e))return!1}}}}t=t.parent}return this.isAvailableForChoice(e)}evaluateForwardOnlyForChoice(e){if(!e.parent)return!0;const t=e.parent;if(!t.sequencingControls||!t.sequencingControls.forwardOnly)return!0;const i=t.children;if(!i||0===i.length)return!0;const s=i.indexOf(e);if(-1===s)return!1;const r=this.treeQueries.getCurrentInParent(t);if(!r)return this.isAvailableForChoice(e);const n=i.indexOf(r);return-1===n||(n>s?!("completed"!==e.completionStatus&&"passed"!==e.completionStatus||!e.sequencingControls||!e.sequencingControls.choice):this.isAvailableForChoice(e))}hasTimeBoundaryViolation(e,t){if(e.beginTimeLimit)try{if(new Date(e.beginTimeLimit)>t)return!0}catch{}if(e.endTimeLimit)try{if(t>new Date(e.endTimeLimit))return!0}catch{}return!1}hasAttemptLimitViolation(e){return!(!e.attemptLimit||e.attemptLimit>e.attemptCount)}}var Ie=Object.defineProperty,Ne=(e,t,i)=>((e,t,i)=>t in e?Ie(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i),xe=(e=>(e.START="start",e.RESUME_ALL="resumeAll",e.CONTINUE="continue",e.PREVIOUS="previous",e.CHOICE="choice",e.JUMP="jump",e.EXIT="exit",e.EXIT_PARENT="exitParent",e.EXIT_ALL="exitAll",e.ABANDON="abandon",e.ABANDON_ALL="abandonAll",e.SUSPEND_ALL="suspendAll",e.RETRY="retry",e.RETRY_ALL="retryAll",e))(xe||{}),qe=(e=>(e.DELIVER="deliver",e.DO_NOT_DELIVER="doNotDeliver",e))(qe||{});class De{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"doNotDeliver",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];Ne(this,"deliveryRequest"),Ne(this,"targetActivity"),Ne(this,"exception"),Ne(this,"endSequencingSession"),this.deliveryRequest=e,this.targetActivity=t,this.exception=i,this.endSequencingSession=s}}class Le{constructor(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];Ne(this,"identifiedActivity"),Ne(this,"deliverable"),Ne(this,"exception"),Ne(this,"endSequencingSession"),this.identifiedActivity=e,this.deliverable=t,this.exception=i,this.endSequencingSession=s}}class Pe{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;Ne(this,"activity"),Ne(this,"exception"),this.activity=e,this.exception=t}}var ze=(e=>(e.FORWARD="forward",e.BACKWARD="backward",e))(ze||{}),Fe=Object.defineProperty,ke=(e,t,i)=>((e,t,i)=>t in e?Fe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Ve{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};ke(this,"now"),ke(this,"getAttemptElapsedSecondsHook"),this.now=e.now||(()=>new Date),this.getAttemptElapsedSecondsHook=e.getAttemptElapsedSecondsHook||null}checkSequencingRules(e,t){for(const i of t)if(this.checkRuleSubprocess(e,i))return i.action;return null}checkRuleSubprocess(e,t){if(0===t.conditions.length)return!0;const i=t.conditionCombination;return"all"===i||i===Ae.AND?t.conditions.every(t=>t.evaluate(e)):("any"===i||i===Ae.OR)&&t.conditions.some(t=>t.evaluate(e))}evaluateExitRules(e){const t=this.checkSequencingRules(e,e.sequencingRules.exitConditionRules);return t===Ee.EXIT||t===Ee.EXIT_PARENT||t===Ee.EXIT_ALL?t:null}evaluatePostConditionAction(e){const t=this.checkSequencingRules(e,e.sequencingRules.postConditionRules);return t&&[Ee.EXIT_PARENT,Ee.EXIT_ALL,Ee.RETRY,Ee.RETRY_ALL,Ee.CONTINUE,Ee.PREVIOUS,Ee.STOP_FORWARD_TRAVERSAL].includes(t)?t:null}evaluatePostConditions(e){const t=this.evaluatePostConditionAction(e);if(!t)return{sequencingRequest:null,terminationRequest:null};switch(t){case Ee.EXIT_PARENT:return{sequencingRequest:null,terminationRequest:xe.EXIT_PARENT};case Ee.EXIT_ALL:return{sequencingRequest:null,terminationRequest:xe.EXIT_ALL};case Ee.RETRY:return{sequencingRequest:xe.RETRY,terminationRequest:null};case Ee.RETRY_ALL:return{sequencingRequest:xe.RETRY,terminationRequest:xe.EXIT_ALL};case Ee.CONTINUE:return{sequencingRequest:xe.CONTINUE,terminationRequest:null};case Ee.PREVIOUS:return{sequencingRequest:xe.PREVIOUS,terminationRequest:null};case Ee.STOP_FORWARD_TRAVERSAL:return e.sequencingControls.stopForwardTraversal=!0,{sequencingRequest:null,terminationRequest:null};default:return{sequencingRequest:null,terminationRequest:null}}}checkLimitConditions(e){if(null!==e.attemptLimit&&e.attemptCount>=e.attemptLimit)return!0;if(null!==e.attemptAbsoluteDurationLimit){const t=this.parseDuration(e.attemptAbsoluteDurationLimit);if(t>0&&this.parseDuration(e.attemptExperiencedDuration)>=t)return!0}if(null!==e.activityAbsoluteDurationLimit){const t=this.parseDuration(e.activityAbsoluteDurationLimit);if(t>0&&this.parseDuration(e.activityExperiencedDuration)>=t)return!0}return!1}parseDuration(e){if(!e||"string"!=typeof e)return 0;const t=e.match(/^P(?:(\d+(?:\.\d+)?)Y)?(?:(\d+(?:\.\d+)?)M)?(?:(\d+(?:\.\d+)?)W)?(?:(\d+(?:\.\d+)?)D)?(?:T(?:(\d+(?:\.\d+)?)H)?(?:(\d+(?:\.\d+)?)M)?(?:(\d+(?:\.\d+)?)S)?)?$/);if(!t||"P"===e||e.endsWith("T"))return 0;let i=0;return i+=315576e5*parseFloat(t[1]||"0"),i+=30.44*24*parseFloat(t[2]||"0")*36e5,i+=6048e5*parseFloat(t[3]||"0"),i+=864e5*parseFloat(t[4]||"0"),i+=36e5*parseFloat(t[5]||"0"),i+=6e4*parseFloat(t[6]||"0"),i+=1e3*parseFloat(t[7]||"0"),i}getElapsedSeconds(e){if(this.getAttemptElapsedSecondsHook)try{return this.getAttemptElapsedSecondsHook(e)||0}catch{return 0}if(e.attemptAbsoluteStartTime){const t=new Date(e.attemptAbsoluteStartTime).getTime(),i=this.now().getTime();if(!Number.isNaN(t)&&i>t)return Math.max(0,(i-t)/1e3)}return 0}isTimeLimitExceeded(e){let t=e.timeLimitDuration;if(!t&&e.attemptAbsoluteDurationLimit&&(t=e.attemptAbsoluteDurationLimit),!t)return!1;const i=r(t,ne);return i>0&&this.getElapsedSeconds(e)>i}isOutsideAvailableTimeRange(e){const t=this.now();if(e.beginTimeLimit)try{const i=new Date(e.beginTimeLimit);if(!Number.isNaN(i.getTime())&&i>t)return!0}catch{}if(e.endTimeLimit)try{const i=new Date(e.endTimeLimit);if(!Number.isNaN(i.getTime())&&t>i)return!0}catch{}return!1}canDeliverActivity(e){if(this.checkLimitConditions(e))return{canDeliver:!1,wasSkipped:!1};const t=this.checkSequencingRules(e,e.sequencingRules.preConditionRules);return{canDeliver:t!==Ee.SKIP&&t!==Ee.DISABLED,wasSkipped:t===Ee.SKIP}}}var He=Object.defineProperty,Be=(e,t,i)=>((e,t,i)=>t in e?He(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i),Ue=(e=>(e.NEVER="never",e.ONCE="once",e.ON_EACH_NEW_ATTEMPT="onEachNewAttempt",e))(Ue||{}),$e=(e=>(e.NEVER="never",e.ONCE="once",e.ON_EACH_NEW_ATTEMPT="onEachNewAttempt",e))($e||{});class Ge extends d{constructor(){super("sequencingControls"),Be(this,"_enabled",!0),Be(this,"_choice",!0),Be(this,"_choiceExit",!0),Be(this,"_flow",!0),Be(this,"_forwardOnly",!1),Be(this,"_useCurrentAttemptObjectiveInfo",!0),Be(this,"_useCurrentAttemptProgressInfo",!0),Be(this,"_preventActivation",!1),Be(this,"_constrainChoice",!1),Be(this,"_stopForwardTraversal",!1),Be(this,"_rollupObjectiveSatisfied",!0),Be(this,"_rollupProgressCompletion",!0),Be(this,"_objectiveMeasureWeight",1),Be(this,"_selectionTiming","never"),Be(this,"_selectCount",null),Be(this,"_selectionCountStatus",!1),Be(this,"_randomizeChildren",!1),Be(this,"_randomizationTiming","never"),Be(this,"_reorderChildren",!1),Be(this,"_completionSetByContent",!1),Be(this,"_objectiveSetByContent",!1),Be(this,"_tracked",!0)}reset(){this._initialized=!1,this._enabled=!0,this._choice=!0,this._choiceExit=!0,this._flow=!0,this._forwardOnly=!1,this._useCurrentAttemptObjectiveInfo=!0,this._useCurrentAttemptProgressInfo=!0,this._preventActivation=!1,this._constrainChoice=!1,this._stopForwardTraversal=!1,this._rollupObjectiveSatisfied=!0,this._rollupProgressCompletion=!0,this._objectiveMeasureWeight=1,this._selectionTiming="never",this._selectCount=null,this._selectionCountStatus=!1,this._randomizeChildren=!1,this._randomizationTiming="never",this._reorderChildren=!1,this._completionSetByContent=!1,this._objectiveSetByContent=!1,this._tracked=!0}get enabled(){return this._enabled}set enabled(e){this._enabled=e}get choice(){return this._choice}set choice(e){this._choice=e}get choiceExit(){return this._choiceExit}set choiceExit(e){this._choiceExit=e}get flow(){return this._flow}set flow(e){this._flow=e}get forwardOnly(){return this._forwardOnly}set forwardOnly(e){this._forwardOnly=e}get useCurrentAttemptObjectiveInfo(){return this._useCurrentAttemptObjectiveInfo}set useCurrentAttemptObjectiveInfo(e){this._useCurrentAttemptObjectiveInfo=e}get useCurrentAttemptProgressInfo(){return this._useCurrentAttemptProgressInfo}set useCurrentAttemptProgressInfo(e){this._useCurrentAttemptProgressInfo=e}get preventActivation(){return this._preventActivation}set preventActivation(e){this._preventActivation=e}get constrainChoice(){return this._constrainChoice}set constrainChoice(e){this._constrainChoice=e}get stopForwardTraversal(){return this._stopForwardTraversal}set stopForwardTraversal(e){this._stopForwardTraversal=e}get rollupObjectiveSatisfied(){return this._rollupObjectiveSatisfied}set rollupObjectiveSatisfied(e){this._rollupObjectiveSatisfied=e}get rollupProgressCompletion(){return this._rollupProgressCompletion}set rollupProgressCompletion(e){this._rollupProgressCompletion=e}get objectiveMeasureWeight(){return this._objectiveMeasureWeight}set objectiveMeasureWeight(e){0>e||(this._objectiveMeasureWeight=e)}isChoiceNavigationAllowed(){return this._enabled&&!this._constrainChoice}isFlowNavigationAllowed(){return this._enabled&&this._flow}isForwardNavigationAllowed(){return this._enabled&&this._flow}isBackwardNavigationAllowed(){return this._enabled&&this._flow&&!this._forwardOnly}get selectionTiming(){return this._selectionTiming}set selectionTiming(e){this._selectionTiming=e}get selectCount(){return this._selectCount}set selectCount(e){(null===e||e>0)&&(this._selectCount=e)}get selectionCountStatus(){return this._selectionCountStatus}set selectionCountStatus(e){this._selectionCountStatus=e}get randomizeChildren(){return this._randomizeChildren}set randomizeChildren(e){this._randomizeChildren=e}get randomizationTiming(){return this._randomizationTiming}set randomizationTiming(e){this._randomizationTiming=e}get reorderChildren(){return this._reorderChildren}set reorderChildren(e){this._reorderChildren=e}get completionSetByContent(){return this._completionSetByContent}set completionSetByContent(e){this._completionSetByContent=e}get objectiveSetByContent(){return this._objectiveSetByContent}set objectiveSetByContent(e){this._objectiveSetByContent=e}get tracked(){return this._tracked}set tracked(e){this._tracked=e}toJSON(){this.jsonString=!0;const result={enabled:this._enabled,choice:this._choice,choiceExit:this._choiceExit,flow:this._flow,forwardOnly:this._forwardOnly,useCurrentAttemptObjectiveInfo:this._useCurrentAttemptObjectiveInfo,useCurrentAttemptProgressInfo:this._useCurrentAttemptProgressInfo,preventActivation:this._preventActivation,constrainChoice:this._constrainChoice,stopForwardTraversal:this._stopForwardTraversal,rollupObjectiveSatisfied:this._rollupObjectiveSatisfied,rollupProgressCompletion:this._rollupProgressCompletion,objectiveMeasureWeight:this._objectiveMeasureWeight,selectionTiming:this._selectionTiming,selectCount:this._selectCount,selectionCountStatus:this._selectionCountStatus,randomizeChildren:this._randomizeChildren,randomizationTiming:this._randomizationTiming,reorderChildren:this._reorderChildren,completionSetByContent:this._completionSetByContent,objectiveSetByContent:this._objectiveSetByContent,tracked:this._tracked};return this.jsonString=!1,result}}class Ye{static selectChildrenProcess(e){const t=e.sequencingControls,i=[...e.children];if(t.selectionTiming===Ue.NEVER)return i;if(t.selectionTiming===Ue.ONCE&&t.selectionCountStatus)return i;if(t.selectionTiming!==Ue.ONCE&&!t.selectionCountStatus)return i;const s=t.selectCount;if(null===s||s>=i.length)return t.selectionTiming===Ue.ONCE&&(t.selectionCountStatus=!0),i;const r=[],n=i.map((e,t)=>t);for(let e=0;s>e&&0!==n.length;e++){const e=Math.floor(Math.random()*n.length),t=n[e];void 0!==t&&i[t]&&r.push(i[t]),n.splice(e,1)}t.selectionTiming===Ue.ONCE&&(t.selectionCountStatus=!0);for(const e of i)r.includes(e)||(e.isHiddenFromChoice=!0,e.isAvailable=!1);return r}static randomizeChildrenProcess(e){const t=e.sequencingControls,i=[...e.children];if(t.randomizationTiming===$e.NEVER)return i;if(t.randomizationTiming===$e.ONCE&&t.reorderChildren)return i;if(!t.randomizeChildren)return i;const s=[...i];for(let e=s.length-1;e>0;e--){const t=Math.floor(Math.random()*(e+1)),i=s[e],r=s[t];i&&r&&(s[e]=r,s[t]=i)}return t.randomizationTiming===$e.ONCE&&(t.reorderChildren=!0),e.children.length=0,e.children.push(...s),s}static applySelectionAndRandomization(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=e.sequencingControls;if(!t&&(e.isActive||e.isSuspended))return e.children;let s=!1,r=!1;i.selectionTiming===Ue.ON_EACH_NEW_ATTEMPT?(s=t,t&&(i.selectionCountStatus=!0)):i.selectionTiming===Ue.ONCE&&(s=!i.selectionCountStatus),i.randomizationTiming===$e.ON_EACH_NEW_ATTEMPT?(r=t,t&&(i.reorderChildren=!1)):i.randomizationTiming===$e.ONCE&&(r=!i.reorderChildren),s&&this.selectChildrenProcess(e),r&&this.randomizeChildrenProcess(e);const n=e.children.filter(e=>e.isAvailable);return e.setProcessedChildren(n),n}static isSelectionNeeded(e){const t=e.sequencingControls;return t.selectionTiming!==Ue.NEVER&&(t.selectionTiming!==Ue.ONCE||!t.selectionCountStatus)&&null!==t.selectCount&&e.children.length>t.selectCount}static isRandomizationNeeded(e){const t=e.sequencingControls;return t.randomizationTiming!==$e.NEVER&&(t.randomizationTiming!==$e.ONCE||!t.reorderChildren)&&t.randomizeChildren}}class We{constructor(e,t){this.activityTree=e,this.ruleEngine=t}flowSubprocess(e,t){let i=e,s=!0,r=!1;for(;i;){const e=this.flowTreeTraversalSubprocess(i,t,s);if(!e.activity){let s=null;return e.exception?s=e.exception:t===ze.BACKWARD?s="SB.2.1-3":r&&(s="SB.2.1-2"),new Le(i,!1,s,e.endSequencingSession)}r=e.activity.children.length>0&&0===e.activity.getAvailableChildren().length;const n=this.flowActivityTraversalSubprocess(e.activity,t===ze.FORWARD,!0,t);if(n)return new Le(n,!0,null,!1);i=e.activity,s=!1}return new Le(null,!1,null,!1)}flowTreeTraversalSubprocess(e,t){return t===ze.FORWARD?this.traverseForward(e,arguments.length>2&&void 0!==arguments[2]&&arguments[2]):this.traverseBackward(e)}traverseForward(e,t){if(t&&this.isActivityLastOverall(e))return this.activityTree.root&&this.terminateDescendentAttempts(this.activityTree.root),{activity:null,endSequencingSession:!0};if(!t){this.ensureSelectionAndRandomization(e);const t=e.getAvailableChildren();if(t.length>0)return{activity:t[0]||null,endSequencingSession:!1}}let i=e;for(;i;){const e=this.activityTree.getNextSibling(i);if(e)return{activity:e,endSequencingSession:!1};i=i.parent}return this.activityTree.root&&this.terminateDescendentAttempts(this.activityTree.root),{activity:null,endSequencingSession:!0}}traverseBackward(e){if(e.parent&&e.parent.sequencingControls.forwardOnly)return{activity:null,endSequencingSession:!1,exception:"SB.2.1-4"};const t=this.activityTree.getPreviousSibling(e);if(t)return{activity:this.getLastDescendant(t),endSequencingSession:!1};let i=e,s=0;for(;i&&i.parent;){if(++s>1e4)throw Error("Infinite loop detected in backward traversal");const e=this.activityTree.getPreviousSibling(i.parent);if(e)return{activity:this.getLastDescendant(e),endSequencingSession:!1};i=i.parent}return{activity:null,endSequencingSession:!1}}getLastDescendant(e){let t=e,i=0;for(;;){if(++i>1e4)throw Error("Infinite loop detected while getting last descendant");this.ensureSelectionAndRandomization(t);const e=t.getAvailableChildren();if(0===e.length)break;const s=e[e.length-1];if(!s)break;t=s}return t}flowActivityTraversalSubprocess(e,t,i,mode){const s=e.parent;if(s&&!s.sequencingControls.flow)return null;if(!e.isAvailable)return null;if(mode===ze.FORWARD&&e.sequencingControls.stopForwardTraversal)return null;if(i){this.ensureSelectionAndRandomization(e);const t=e.getAvailableChildren();for(const e of t){const t=this.flowActivityTraversalSubprocess(e,mode===ze.FORWARD,!0,mode);if(t)return t}}return 0===e.children.length&&this.checkActivityProcess(e)?e:null}checkActivityProcess(e){if(!e.isAvailable)return!1;if(0===e.children.length&&!e.isVisible)return!1;if(this.ruleEngine.checkLimitConditions(e))return!1;const t=this.ruleEngine.canDeliverActivity(e);return e.wasSkipped=t.wasSkipped,t.canDeliver}ensureSelectionAndRandomization(e){e.getAvailableChildren()===e.children&&(Ye.isSelectionNeeded(e)||Ye.isRandomizationNeeded(e))&&Ye.applySelectionAndRandomization(e,e.isNewAttempt)}isActivityLastOverall(e){if(e.children.length>0)return!1;let t=e;for(;t;){if(this.activityTree.getNextSibling(t))return!1;t=t.parent}return!0}terminateDescendentAttempts(e){e.isActive=!1;for(const t of e.children)this.terminateDescendentAttempts(t)}findFirstDeliverableActivity(e){if(0===e.children.length)return this.checkActivityProcess(e)?e:null;this.ensureSelectionAndRandomization(e);const t=e.getAvailableChildren();for(const e of t){const t=this.flowActivityTraversalSubprocess(e,!0,!0,ze.FORWARD);if(t)return t}return null}canDeliver(e){return this.checkActivityProcess(e)}}class Je{constructor(e,t){this.activityTree=e,this.traversalService=t}handleStart(){const result=new De;if(!this.activityTree.root)return result.exception="SB.2.5-1",result;if(this.activityTree.currentActivity)return result.exception="SB.2.5-2",result;const e=this.traversalService.findFirstDeliverableActivity(this.activityTree.root);return e?(result.deliveryRequest=qe.DELIVER,result.targetActivity=e,result):(result.exception="SB.2.5-3",result)}handleResumeAll(){const result=new De;return this.activityTree.suspendedActivity?this.activityTree.currentActivity?(result.exception="SB.2.6-2",result):(result.deliveryRequest=qe.DELIVER,result.targetActivity=this.activityTree.suspendedActivity,result):(result.exception="SB.2.6-1",result)}handleContinue(e){const result=new De;if(e.isActive)return result.exception="SB.2.7-1",result;if(e.parent&&!e.parent.sequencingControls.flow)return result.exception="SB.2.7-2",result;const t=this.traversalService.flowSubprocess(e,ze.FORWARD);return result.endSequencingSession=t.endSequencingSession,t.deliverable&&t.identifiedActivity?(result.deliveryRequest=qe.DELIVER,result.targetActivity=t.identifiedActivity,result):(result.exception=t.exception||"SB.2.7-2",result)}handlePrevious(e){const result=new De;if(e.isActive)return result.exception="SB.2.8-1",result;if(e.parent&&!e.parent.sequencingControls.flow)return result.exception="SB.2.8-2",result;const t=this.checkForwardOnlyViolation(e);if(t)return result.exception=t,result;const i=this.traversalService.flowSubprocess(e,ze.BACKWARD);return i.deliverable&&i.identifiedActivity?(result.deliveryRequest=qe.DELIVER,result.targetActivity=i.identifiedActivity,result):(result.exception=i.exception||"SB.2.8-3",result)}checkForwardOnlyViolation(e){let t=e.parent;for(;t;){if(t.sequencingControls.forwardOnly)return"SB.2.9-5";t=t.parent}return null}}class Ke{constructor(e,t,i,s){this.activityTree=e,this.constraintValidator=t,this.traversalService=i,this.treeQueries=s}handleChoice(e,t){const result=new De,i=this.activityTree.getActivity(e);if(!i)return result.exception="SB.2.9-1",result;if(t&&t.isActive)return result.exception="SB.2.9-6",result;const s=this.constraintValidator.validateChoice(t,i,{checkAvailability:!0});if(!s.valid)return result.exception=s.exception,result;const r=this.treeQueries.findCommonAncestor(t,i);t&&this.terminateDescendentAttemptsProcess(r||this.activityTree.root);const n=this.buildActivityPath(i,r);for(const e of n)if(!this.traversalService.checkActivityProcess(e))return result;let o=i;if(i.children.length>0){const e=this.choiceFlowSubprocess(i);if(!e)return result.exception="SB.2.9-7",result;o=e}return result.deliveryRequest=qe.DELIVER,result.targetActivity=o,result}handleJump(e){const result=new De,t=this.activityTree.getActivity(e);return t?this.treeQueries.isInTree(t)?t.isAvailable?(result.deliveryRequest=qe.DELIVER,result.targetActivity=t,result):(result.exception="SB.2.13-3",result):(result.exception="SB.2.13-2",result):(result.exception="SB.2.13-1",result)}getAvailableChoices(){const e=this.activityTree.getAllActivities(),t=this.activityTree.currentActivity,i=[];for(const s of e)s!==this.activityTree.root&&!s.isHiddenFromChoice&&s.isAvailable&&s.isVisible&&(s.parent&&!s.parent.sequencingControls.choice||this.constraintValidator.validateChoice(t,s).valid&&i.push(s));return i}buildActivityPath(e,t){const i=[];let s=e;for(;s&&s!==t;)i.unshift(s),s=s.parent;return i}choiceFlowSubprocess(e){return 0===e.children.length?e:this.choiceFlowTreeTraversal(e)}choiceFlowTreeTraversal(e){this.traversalService.ensureSelectionAndRandomization(e);const t=e.getAvailableChildren(),i=this.constraintValidator.validateFlowConstraints(e,t);if(!i.valid)return null;for(const e of i.validChildren){const t=this.enhancedChoiceTraversal(e);if(t.activity)return t.activity}return null}enhancedChoiceTraversal(e){if(arguments.length>1&&void 0!==arguments[1]&&arguments[1]&&e===this.activityTree.root)return new Pe(null,"SB.2.4-3");if(!e.isAvailable)return new Pe(null,null);if(e.isHiddenFromChoice)return new Pe(null,null);if(e.sequencingControls&&e.sequencingControls.stopForwardTraversal)return new Pe(null,"SB.2.4-1");const t=this.constraintValidator.validateTraversalConstraints(e);if(!t.canTraverse)return new Pe(null,null);if(0===e.children.length)return this.traversalService.checkActivityProcess(e)?new Pe(e,null):new Pe(null,null);if(e.parent?.sequencingControls.constrainChoice&&!t.canTraverseInto)return new Pe(null,"SB.2.4-2");if(t.canTraverseInto){const t=this.choiceFlowTreeTraversal(e);return new Pe(t,null)}return new Pe(null,null)}terminateDescendentAttemptsProcess(e){e.isActive=!1;for(const t of e.children)this.terminateDescendentAttemptsProcess(t)}}class Xe{constructor(e,t){this.activityTree=e,this.ruleEngine=t}handleExit(e){const result=new De;return e.parent?e.parent.sequencingControls.choiceExit?(this.terminateDescendentAttempts(e),result):(result.exception="SB.2.11-2",result):(result.exception="SB.2.11-1",result)}handleExitAll(){const result=new De;return this.activityTree.root&&this.terminateDescendentAttempts(this.activityTree.root),result}handleAbandon(e){const result=new De;return e.isActive=!1,this.activityTree.currentActivity=e.parent,result}handleAbandonAll(){const result=new De;return this.activityTree.currentActivity=null,result}handleSuspendAll(e){const result=new De;return e===this.activityTree.root?(result.exception="SB.2.15-1",result):(e.isSuspended=!0,this.activityTree.suspendedActivity=e,this.activityTree.currentActivity=null,result)}terminateDescendentAttempts(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=null;t||(i=this.ruleEngine.evaluateExitRules(e)),e.isActive=!1;for(const i of e.children)this.terminateDescendentAttempts(i,t);i&&!t&&this.processDeferredExitAction(i,e)}processDeferredExitAction(e,t){switch(e){case Ee.EXIT:break;case Ee.EXIT_PARENT:t.parent&&t.parent.isActive&&this.terminateDescendentAttempts(t.parent,!0);break;case Ee.EXIT_ALL:this.activityTree.root&&this.activityTree.root!==t&&this.activityTree.getAllActivities().some(e=>e.isActive)&&this.terminateDescendentAttempts(this.activityTree.root,!0)}}}class Qe{constructor(e,t){this.activityTree=e,this.traversalService=t}handleRetry(e){const result=new De;if(e.isActive||e.isSuspended)return result.exception="SB.2.10-2",result;if(e.children.length>0){this.traversalService.ensureSelectionAndRandomization(e);const t=e.getAvailableChildren();let i=null;for(const e of t)if(i=this.traversalService.flowActivityTraversalSubprocess(e,!0,!0,ze.FORWARD),i)break;return i?(result.deliveryRequest=qe.DELIVER,result.targetActivity=i,result):(result.exception="SB.2.10-3",result)}return this.terminateDescendentAttempts(e),result.deliveryRequest=qe.DELIVER,result.targetActivity=e,result}handleRetryAll(){if(this.activityTree.currentActivity=null,!this.activityTree.root){const e=new De;return e.exception="SB.2.10-1",e}const e=this.traversalService.findFirstDeliverableActivity(this.activityTree.root),result=new De;return e?(result.deliveryRequest=qe.DELIVER,result.targetActivity=e,result):(result.exception="SB.2.10-3",result)}terminateDescendentAttempts(e){e.isActive=!1;for(const t of e.children)this.terminateDescendentAttempts(t)}}var Ze=Object.defineProperty,et=(e,t,i)=>((e,t,i)=>t in e?Ze(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class tt{constructor(e,t,i){let s=arguments.length>4?arguments[4]:void 0;et(this,"activityTree"),et(this,"treeQueries"),et(this,"constraintValidator"),et(this,"ruleEngine"),et(this,"traversalService"),et(this,"flowHandler"),et(this,"choiceHandler"),et(this,"exitHandler"),et(this,"retryHandler"),et(this,"_now"),et(this,"_getAttemptElapsedSecondsHook"),this.activityTree=e,this._now=s?.now||(()=>new Date),this._getAttemptElapsedSecondsHook=s?.getAttemptElapsedSeconds,this.treeQueries=new Te(e),this.ruleEngine=new Ve({now:this._now,getAttemptElapsedSecondsHook:this._getAttemptElapsedSecondsHook}),this.constraintValidator=new je(e,this.treeQueries),this.traversalService=new We(e,this.ruleEngine),this.flowHandler=new Je(e,this.traversalService),this.choiceHandler=new Ke(e,this.constraintValidator,this.traversalService,this.treeQueries),this.exitHandler=new Xe(e,this.ruleEngine),this.retryHandler=new Qe(e,this.traversalService)}get now(){return this._now}set now(e){this._now=e,Me.setNowProvider(e),this.ruleEngine=new Ve({now:e,getAttemptElapsedSecondsHook:this._getAttemptElapsedSecondsHook}),this.traversalService=new We(this.activityTree,this.ruleEngine),this.flowHandler=new Je(this.activityTree,this.traversalService),this.choiceHandler=new Ke(this.activityTree,this.constraintValidator,this.traversalService,this.treeQueries),this.retryHandler=new Qe(this.activityTree,this.traversalService)}get getAttemptElapsedSecondsHook(){return this._getAttemptElapsedSecondsHook}set getAttemptElapsedSecondsHook(e){this._getAttemptElapsedSecondsHook=e,Me.setElapsedSecondsHook(e),this.ruleEngine=new Ve({now:this._now,getAttemptElapsedSecondsHook:e}),this.traversalService=new We(this.activityTree,this.ruleEngine),this.flowHandler=new Je(this.activityTree,this.traversalService),this.choiceHandler=new Ke(this.activityTree,this.constraintValidator,this.traversalService,this.treeQueries),this.retryHandler=new Qe(this.activityTree,this.traversalService)}sequencingRequestProcess(request){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const t=this.activityTree.currentActivity;switch(request){case xe.START:return this.flowHandler.handleStart();case xe.RESUME_ALL:return this.flowHandler.handleResumeAll();case xe.CONTINUE:return t?this.flowHandler.handleContinue(t):new De(qe.DO_NOT_DELIVER,null,"SB.2.12-1");case xe.PREVIOUS:return t?this.flowHandler.handlePrevious(t):new De(qe.DO_NOT_DELIVER,null,"SB.2.12-1");case xe.CHOICE:return e?this.choiceHandler.handleChoice(e,t):new De(qe.DO_NOT_DELIVER,null,"SB.2.12-5");case xe.JUMP:return e?this.choiceHandler.handleJump(e):new De(qe.DO_NOT_DELIVER,null,"SB.2.12-5");case xe.EXIT:return t?this.exitHandler.handleExit(t):new De(qe.DO_NOT_DELIVER,null,"SB.2.12-1");case xe.EXIT_ALL:return t?this.exitHandler.handleExitAll():new De(qe.DO_NOT_DELIVER,null,"SB.2.12-1");case xe.ABANDON:return t?this.exitHandler.handleAbandon(t):new De(qe.DO_NOT_DELIVER,null,"SB.2.12-1");case xe.ABANDON_ALL:return t?this.exitHandler.handleAbandonAll():new De(qe.DO_NOT_DELIVER,null,"SB.2.12-1");case xe.SUSPEND_ALL:return t?this.exitHandler.handleSuspendAll(t):new De(qe.DO_NOT_DELIVER,null,"SB.2.12-1");case xe.RETRY:return t?this.retryHandler.handleRetry(t):new De(qe.DO_NOT_DELIVER,null,"SB.2.12-1");case xe.RETRY_ALL:return this.retryHandler.handleRetryAll();default:return new De(qe.DO_NOT_DELIVER,null,"SB.2.12-6")}}evaluatePostConditionRules(e){return this.ruleEngine.evaluatePostConditions(e)}canActivityBeDelivered(e){return this.traversalService.canDeliver(e)}validateNavigationRequest(request){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(!Object.values(xe).includes(request))return{valid:!1,exception:"SB.2.12-6"};switch(request){case xe.CONTINUE:case xe.PREVIOUS:if(!t)return{valid:!1,exception:"SB.2.12-1"};if(t.isActive)return{valid:!1,exception:request===xe.CONTINUE?"SB.2.7-1":"SB.2.8-1"};if(t.parent&&!t.parent.sequencingControls.flow)return{valid:!1,exception:request===xe.CONTINUE?"SB.2.7-2":"SB.2.8-2"};if(request===xe.PREVIOUS){const e=this.constraintValidator.checkForwardOnlyViolation(t);if(!e.valid)return e}break;case xe.CHOICE:{if(!e)return{valid:!1,exception:"SB.2.12-5"};const i=this.activityTree.getActivity(e);if(!i)return{valid:!1,exception:"SB.2.9-1"};const s=this.constraintValidator.validateChoice(t,i,{checkAvailability:!0});if(!s.valid)return s;if(!this.traversalService.canDeliver(i))return{valid:!1,exception:"SB.2.9-6"};if(this.ruleEngine.checkSequencingRules(i,i.sequencingRules.preConditionRules)===Ee.HIDE_FROM_CHOICE)return{valid:!1,exception:"SB.2.9-4"};break}case xe.JUMP:if(!e)return{valid:!1,exception:"SB.2.12-5"};if(!this.activityTree.getActivity(e))return{valid:!1,exception:"SB.2.13-1"}}return{valid:!0,exception:null}}getAvailableChoices(){return this.choiceHandler.getAvailableChoices()}getTreeQueries(){return this.treeQueries}getConstraintValidator(){return this.constraintValidator}getRuleEngine(){return this.ruleEngine}getTraversalService(){return this.traversalService}}var it=Object.defineProperty,st=(e,t,i)=>((e,t,i)=>t in e?it(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class rt{constructor(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};st(this,"eventService"),st(this,"loggingService"),st(this,"callbacks"),st(this,"currentDeliveredActivity",null),st(this,"pendingDelivery",null),this.eventService=e,this.loggingService=t,this.callbacks=i}processSequencingResult(result){if(result.exception)return this.loggingService.error("Sequencing error: "+result.exception),void this.callbacks.onSequencingError?.(result.exception);result.deliveryRequest===qe.DELIVER&&result.targetActivity?this.deliverActivity(result.targetActivity):this.loggingService.info("Sequencing completed with no delivery request"),this.callbacks.onSequencingComplete?.(result)}deliverActivity(e){this.currentDeliveredActivity!==e?(this.currentDeliveredActivity&&this.unloadActivity(this.currentDeliveredActivity),this.pendingDelivery=e,this.loggingService.info(`Delivering activity: ${e.id} - ${e.title}`),this.eventService.processListeners("ActivityDelivery",e.id,e),this.callbacks.onDeliverActivity?.(e),this.currentDeliveredActivity=e,this.pendingDelivery=null,e.isActive=!0):this.loggingService.info("Skipping delivery - activity already delivered: "+e.id)}unloadActivity(e){this.loggingService.info(`Unloading activity: ${e.id} - ${e.title}`),this.eventService.processListeners("ActivityUnload",e.id,e),this.callbacks.onUnloadActivity?.(e),e.isActive=!1}getCurrentDeliveredActivity(){return this.currentDeliveredActivity}getPendingDelivery(){return this.pendingDelivery}updateCallbacks(e){this.callbacks={...this.callbacks,...e}}reset(){this.currentDeliveredActivity&&this.unloadActivity(this.currentDeliveredActivity),this.currentDeliveredActivity=null,this.pendingDelivery=null}}var nt=Object.defineProperty,ot=(e,t,i)=>((e,t,i)=>t in e?nt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class at{constructor(e,t){ot(this,"settings"),ot(this,"error_codes"),this.settings=e,this.error_codes=t}processHttpRequest(e,t){return this._performAsyncRequest(e,t,arguments.length>2&&void 0!==arguments[2]&&arguments[2],arguments.length>3?arguments[3]:void 0,arguments.length>4?arguments[4]:void 0),{result:f,errorCode:0}}async _performAsyncRequest(e,t,i,s,r){try{const s=this.settings.requestHandler(t);let n;n=i&&"never"!==this.settings.asyncModeBeaconBehavior?await this.performBeacon(e,s):await this.performFetch(e,s);const result=await this.transformResponse(n,r);this._isSuccessResponse(n,result)?r("CommitSuccess"):r("CommitError",void 0,result.errorCode)}catch(e){s("processHttpRequest","Async request failed: "+(e instanceof Error?e.message:e+""),B.ERROR),r("CommitError")}}_prepareRequestBody(e){return{body:e instanceof Array?e.join("&"):JSON.stringify(e),contentType:e instanceof Array?"application/x-www-form-urlencoded":this.settings.commitRequestDataType}}async performFetch(e,t){if("always"===this.settings.asyncModeBeaconBehavior)return this.performBeacon(e,t);const{body:i,contentType:s}=this._prepareRequestBody(t),r={method:"POST",mode:this.settings.fetchMode,body:i,headers:{...this.settings.xhrHeaders,"Content-Type":s},keepalive:!0};return this.settings.xhrWithCredentials&&(r.credentials="include"),fetch(e,r)}async performBeacon(e,t){const{body:i,contentType:s}=this._prepareRequestBody(t),r=navigator.sendBeacon(e,new Blob([i],{type:s}));return Promise.resolve({status:r?200:0,ok:r,json:async()=>({result:r?"true":"false",errorCode:r?0:this.error_codes.GENERAL_COMMIT_FAILURE||391}),text:async()=>JSON.stringify({result:r?"true":"false",errorCode:r?0:this.error_codes.GENERAL_COMMIT_FAILURE||391})})}async transformResponse(e,t){let result;try{result="function"==typeof this.settings.responseHandler?await this.settings.responseHandler(e):await e.json()}catch(t){const i=await e.text().catch(()=>"Unable to read response text");return{result:S,errorCode:this.error_codes.GENERAL_COMMIT_FAILURE||391,errorMessage:"Failed to parse LMS response: "+(t instanceof Error?t.message:t+""),errorDetails:JSON.stringify({status:e.status,statusText:e.statusText,url:e.url,responseText:i.substring(0,500),parseError:t instanceof Error?t.message:t+""})}}return Object.hasOwnProperty.call(result,"errorCode")||(result.errorCode=this._isSuccessResponse(e,result)?0:this.error_codes.GENERAL_COMMIT_FAILURE||391),this._isSuccessResponse(e,result)||(result.errorDetails={status:e.status,statusText:e.statusText,url:e.url,...result.errorDetails}),result}_isSuccessResponse(e,result){const t=result.result;return!(200>e.status||e.status>299||!0!==t&&"true"!==t&&t!==f)}updateSettings(e){this.settings=e}}var ct=Object.defineProperty;const lt="{target=";function ut(e,t){const i=e[t];return void 0===i?(void 0!==console&&console.warn&&console.warn("CMIValueAccessService: Unknown error code key: "+t),e.GENERAL??0):i}class ht{constructor(e){var t;((e,t,i)=>{t in e?ct(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i})(this,"context"+"",t),this.context=e}getUndefinedDataModelErrorCode(e){return ut(this.context.errorCodes,e?"UNDEFINED_DATA_MODEL":"GENERAL")}setCMIValue(e,t,i,s){if(!i||""===i)return t&&this.context.throwSCORMError(i,ut(this.context.errorCodes,"GENERAL_SET_FAILURE"),"The data model element was not specified"),S;this.context.setLastErrorCode("0");const r=i.split(".");let n=this.context.getDataModel(),o=S,a=!1;const c=`The data model element passed to ${e} (${i}) is not a valid SCORM data model element.`,l=this.getUndefinedDataModelErrorCode(t);for(let e=0;r.length>e;e++){if(e===r.length-1){o=this.setFinalAttribute(n,r[e],s,i,t,l,c);break}{const o=this.traverseToNextLevel(n,r,e,s,i,t,a,l,c);if(o.error)break;n=o.refObject,e=o.idx,a=o.foundFirstIndex}}return o===S&&this.context.apiLog(e,`There was an error setting the value for: ${i}, value of: ${s}`,B.WARN),o}getCMIValue(e,t,i){if(!i||""===i)return t&&this.context.throwSCORMError(i,ut(this.context.errorCodes,"GENERAL_GET_FAILURE"),"The data model element was not specified"),"";if(t&&i.endsWith("._version")&&"cmi._version"!==i)return this.context.throwSCORMError(i,ut(this.context.errorCodes,"GENERAL_GET_FAILURE"),"The _version keyword was used incorrectly"),"";const s=i.split(".");let r=this.context.getDataModel(),n=null;const o=`The data model element passed to ${e} (${i}) has not been initialized.`,a=`The data model element passed to ${e} (${i}) is not a valid SCORM data model element.`,c=this.getUndefinedDataModelErrorCode(t);for(let e=0;s.length>e;e++){n=s[e];const l=this.validateGetAttribute(r,n,i,t,c,a,e===s.length-1);if(void 0!==l.returnValue)return l.returnValue;if(l.error)return"";if(null==n){this.context.throwSCORMError(i,c,a);break}if(r=r[n],void 0===r){this.context.throwSCORMError(i,c,a);break}if(r instanceof x){const t=this.handleGetArrayAccess(r,s,e,i,o);if(t.error)return"";r=t.refObject,e=t.idx}}return null==r?(t||("_children"===n?this.context.throwSCORMError(i,ut(this.context.errorCodes,"CHILDREN_ERROR"),void 0):"_count"===n&&this.context.throwSCORMError(i,ut(this.context.errorCodes,"COUNT_ERROR"),void 0)),""):r}setFinalAttribute(e,t,i,s,r,n,o){return r&&t?.startsWith(lt)?this.context.isInitialized()?(this.context.throwSCORMError(s,ut(this.context.errorCodes,"READ_ONLY_ELEMENT")),S):f:void 0!==t&&this.context.checkObjectHasProperty(e,t)?c(s,"\\.correct_responses\\.\\d+$")&&this.context.isInitialized()&&"pattern"!==t&&(this.context.validateCorrectResponse(s,i),"0"!==this.context.getLastErrorCode())?(this.context.throwSCORMError(s,ut(this.context.errorCodes,"TYPE_MISMATCH")),S):r&&"0"!==this.context.getLastErrorCode()?S:void 0===t||"__proto__"===t||"constructor"===t?(this.context.throwSCORMError(s,n,o),S):r&&"id"===t&&this.context.isInitialized()&&this.context.checkForDuplicateId(s,i)?(this.context.throwSCORMError(s,ut(this.context.errorCodes,"GENERAL_SET_FAILURE")),S):(e[t]=i,f):(this.context.throwSCORMError(s,n,o),S)}traverseToNextLevel(e,t,i,s,r,n,o,a,c){const l=t[i];if(void 0===l||!this.context.checkObjectHasProperty(e,l))return this.context.throwSCORMError(r,a,c),{refObject:e,idx:i,foundFirstIndex:o,error:!0};if(!(e=e[l]))return this.context.throwSCORMError(r,a,c),{refObject:e,idx:i,foundFirstIndex:o,error:!0};if(e instanceof x){const l=this.handleSetArrayAccess(e,t,i,s,r,n,o,a,c);return l.error?{refObject:e,idx:i,foundFirstIndex:o,error:!0}:l}return{refObject:e,idx:i,foundFirstIndex:o,error:!1}}handleSetArrayAccess(e,t,i,s,r,n,o,a,c){const l=parseInt(t[i+1]||"0",10);if(!isNaN(l)){const t=e.childArray[l];if(t)return{refObject:t,idx:i+1,foundFirstIndex:!0,error:!1};{if(l>e.childArray.length){const t=n?ut(this.context.errorCodes,"GENERAL_SET_FAILURE"):ut(this.context.errorCodes,"INVALID_SET_VALUE")||ut(this.context.errorCodes,"GENERAL_SET_FAILURE");return this.context.throwSCORMError(r,t,`Cannot set array element at index ${l}. Array indices must be sequential. Current array length is ${e.childArray.length}, expected index ${e.childArray.length}.`),{refObject:e,idx:i,foundFirstIndex:o,error:!0}}const t=this.context.getChildElement(r,s,o);return t?(e.initialized&&t.initialize(),e.childArray[l]=t,{refObject:t,idx:i+1,foundFirstIndex:!0,error:!1}):("0"===this.context.getLastErrorCode()&&this.context.throwSCORMError(r,a,c),{refObject:e,idx:i,foundFirstIndex:o,error:!0})}}return{refObject:e,idx:i,foundFirstIndex:o,error:!1}}validateGetAttribute(e,t,i,s,r,n,o){if(s){const s=t+"";if(s.startsWith(lt)&&"function"==typeof e._isTargetValid){const t=s.substring(8,s.length-1);return{error:!1,returnValue:e._isTargetValid(t)}}if(void 0===t||!this.context.checkObjectHasProperty(e,t))return"_children"===t?(this.context.throwSCORMError(i,ut(this.context.errorCodes,"GENERAL_GET_FAILURE"),"The data model element does not have children"),{error:!0}):"_count"===t?(this.context.throwSCORMError(i,ut(this.context.errorCodes,"GENERAL_GET_FAILURE"),"The data model element is not a collection and therefore does not have a count"),{error:!0}):(this.context.throwSCORMError(i,r,n),{error:!0})}else if(o&&(void 0===t||!this.context.checkObjectHasProperty(e,t)))return this.context.throwSCORMError(i,r,n),{error:!0};return{error:!1}}handleGetArrayAccess(e,t,i,s,r){const n=parseInt(t[i+1]||"",10);if(!isNaN(n)){const t=e.childArray[n];return t?{refObject:t,idx:i+1,error:!1}:(this.context.throwSCORMError(s,ut(this.context.errorCodes,"VALUE_NOT_INITIALIZED"),r),{refObject:e,idx:i,error:!0})}return{refObject:e,idx:i,error:!1}}}var dt=Object.defineProperty,mt=(e,t,i)=>((e,t,i)=>t in e?dt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);const pt=class e{constructor(){mt(this,"_logLevel",B.ERROR),mt(this,"_logHandler"),this._logHandler=$}static getInstance(){return e._instance||(e._instance=new e),e._instance}setLogLevel(e){this._logLevel=e}getLogLevel(){return this._logLevel}setLogHandler(e){this._logHandler=e}log(e,t){this.shouldLog(e)&&this._logHandler(e,t)}error(e){this.log(B.ERROR,e)}warn(e){this.log(B.WARN,e)}info(e){this.log(B.INFO,e)}debug(e){this.log(B.DEBUG,e)}shouldLog(e){return this.getNumericLevel(e)>=this.getNumericLevel(this._logLevel)}getNumericLevel(e){if(void 0===e)return B.NONE;if("number"==typeof e)return e;switch(e){case"1":case"DEBUG":return B.DEBUG;case"2":case"INFO":return B.INFO;case"3":case"WARN":return B.WARN;case"4":case"ERROR":default:return B.ERROR;case"5":case"NONE":return B.NONE}}};mt(pt,"_instance");let _t=pt;function gt(){return _t.getInstance()}var vt=Object.defineProperty,ft=(e,t,i)=>((e,t,i)=>t in e?vt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class St{constructor(e,t,i,s){ft(this,"_lastErrorCode","0"),ft(this,"_lastDiagnostic",""),ft(this,"_errorCodes"),ft(this,"_apiLog"),ft(this,"_getLmsErrorMessageDetails"),ft(this,"_loggingService"),this._errorCodes=e,this._apiLog=t,this._getLmsErrorMessageDetails=i,this._loggingService=s||gt()}get lastErrorCode(){return this._lastErrorCode}set lastErrorCode(e){this._lastErrorCode=e}get lastDiagnostic(){return this._lastDiagnostic}throwSCORMError(e,t,i){this._lastDiagnostic=i||"",i||(i=this._getLmsErrorMessageDetails(t,!0));const s=`SCORM Error ${t}: ${i}${e?` [Element: ${e}]`:""}`;this._apiLog("throwSCORMError",t+": "+i,B.ERROR,e),this._loggingService.error(s),this._lastErrorCode=t+""}clearSCORMError(e){void 0!==e&&e!==S&&(this._lastErrorCode="0")}handleValueAccessException(e,t,i){if(t instanceof v){const s=t;this._lastErrorCode=s.errorCode+"",this._lastDiagnostic="",this._loggingService.warn(`Validation Error ${s.errorCode}: ${s.message} [Element: ${e}]`),i=S}else if(t instanceof Error){const s=t.constructor.name;this._loggingService.error(`${s}: ${t.message} [Element: ${e}]\n${t.stack||""}`),this.throwSCORMError(e,this._errorCodes.GENERAL,`${s}: ${t.message}`),i=S}else{this._loggingService.error(`Unknown error occurred while accessing [Element: ${e}]`);try{const e=JSON.stringify(t);this._loggingService.error("Error details: "+e)}catch(e){this._loggingService.error("Could not stringify error object for details")}this.throwSCORMError(e,this._errorCodes.GENERAL,"Unknown error"),i=S}return i}get errorCodes(){return this._errorCodes}}var bt=Object.defineProperty,yt=(e,t,i)=>((e,t,i)=>t in e?bt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Ct{constructor(e){yt(this,"listenerMap",new Map),yt(this,"listenerCount",0),yt(this,"apiLog"),this.apiLog=e}parseListenerName(e){if(!e)return null;const t=e.split("."),i=t[0];let s=null;return t.length>1&&(s=e.replace(i+".","")),{functionName:i??e,CMIElement:s}}on(e,t){if(!t)return;const i=e.split(" ");for(const e of i){const i=this.parseListenerName(e);if(!i)continue;const{functionName:s,CMIElement:r}=i,n=this.listenerMap.get(s)??[];n.push({functionName:s,CMIElement:r,callback:t}),this.listenerMap.set(s,n),this.listenerCount++,this.apiLog("on","Added event listener: "+this.listenerCount,B.INFO,s)}}off(e,t){if(!t)return;const i=e.split(" ");for(const e of i){const i=this.parseListenerName(e);if(!i)continue;const{functionName:s,CMIElement:r}=i,n=this.listenerMap.get(s);if(!n)continue;const o=n.findIndex(e=>e.CMIElement===r&&e.callback===t);-1!==o&&(n.splice(o,1),this.listenerCount--,0===n.length&&this.listenerMap.delete(s),this.apiLog("off","Removed event listener: "+this.listenerCount,B.INFO,s))}}clear(e){const t=e.split(" ");for(const e of t){const t=this.parseListenerName(e);if(!t)continue;const{functionName:i,CMIElement:s}=t;if(this.listenerMap.has(i)){const e=this.listenerMap.get(i),t=null===s?[]:e.filter(e=>e.CMIElement!==s);this.listenerCount-=e.length-t.length,0===t.length?this.listenerMap.delete(i):this.listenerMap.set(i,t)}}}processListeners(e,t,i){this.apiLog(e,i,B.INFO,t);const s=this.listenerMap.get(e);if(s)for(const r of s){const s=!!r.CMIElement;let n=!1;if(t&&r.CMIElement)if(r.CMIElement.endsWith("*")){const e=r.CMIElement.slice(0,-1);n=t.startsWith(e)}else n=r.CMIElement===t;s&&!n||(this.apiLog("processListeners","Processing listener: "+r.functionName,B.DEBUG,t),e.startsWith("Sequence")||"CommitError"===e?r.callback(i):"CommitSuccess"===e?r.callback():r.callback(t,i))}}reset(){this.listenerMap.clear(),this.listenerCount=0}}var At=Object.defineProperty,Et=(e,t,i)=>((e,t,i)=>t in e?At(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class wt{constructor(e,t,i){this.apiLog=i,Et(this,"settings"),Et(this,"error_codes"),Et(this,"storeName","scorm_again_offline_data"),Et(this,"syncQueue","scorm_again_sync_queue"),Et(this,"isOnline",navigator.onLine),Et(this,"syncInProgress",!1),Et(this,"boundOnlineStatusChangeHandler"),Et(this,"boundCustomNetworkStatusHandler"),this.settings=e,this.error_codes=t,this.boundOnlineStatusChangeHandler=this.handleOnlineStatusChange.bind(this),this.boundCustomNetworkStatusHandler=this.handleCustomNetworkStatus.bind(this),window.addEventListener("online",this.boundOnlineStatusChangeHandler),window.addEventListener("offline",this.boundOnlineStatusChangeHandler),window.addEventListener("scorm-again:network-status",this.boundCustomNetworkStatusHandler)}handleOnlineStatusChange(){const e=this.isOnline;this.isOnline=navigator.onLine,!e&&this.isOnline?(this.apiLog("OfflineStorageService","Device is back online, attempting to sync...",B.INFO),this.syncOfflineData().then(e=>{e?this.apiLog("OfflineStorageService","Sync completed successfully",B.INFO):this.apiLog("OfflineStorageService","Sync failed",B.ERROR)},e=>{this.apiLog("OfflineStorageService","Error during sync: "+e,B.ERROR)})):e&&!this.isOnline&&this.apiLog("OfflineStorageService","Device is offline, data will be stored locally",B.INFO)}handleCustomNetworkStatus(e){if(!(e instanceof CustomEvent))return void this.apiLog("OfflineStorageService","Invalid network status event received",B.WARN);const{online:t}=e.detail;if("boolean"!=typeof t)return void this.apiLog("OfflineStorageService","Invalid online status value in custom event",B.WARN);const i=this.isOnline;this.isOnline=t,this.apiLog("OfflineStorageService","Network status updated via custom event: "+(t?"online":"offline"),B.INFO),!i&&this.isOnline?(this.apiLog("OfflineStorageService","Device is back online, attempting to sync...",B.INFO),this.syncOfflineData().then(e=>{e?this.apiLog("OfflineStorageService","Sync completed successfully",B.INFO):this.apiLog("OfflineStorageService","Sync failed",B.ERROR)},e=>{this.apiLog("OfflineStorageService","Error during sync: "+e,B.ERROR)})):i&&!this.isOnline&&this.apiLog("OfflineStorageService","Device is offline, data will be stored locally",B.INFO)}storeOffline(e,t){try{const i={id:`${e}_${Date.now()}_${Math.random().toString(36).substring(2,9)}`,courseId:e,timestamp:Date.now(),data:t,syncAttempts:0},s=this.getFromStorage(this.syncQueue)||[];return s.push(i),this.saveToStorage(this.syncQueue,s),this.saveToStorage(`${this.storeName}_${e}`,t),this.apiLog("OfflineStorageService","Stored data offline for course "+e,B.INFO),{result:f,errorCode:0}}catch(t){const i=(t instanceof Error?t.message:t+"").includes("storage quota");return this.apiLog("OfflineStorageService",i?"storage quota exceeded - cannot store offline data for course "+e:"Error storing offline data: "+t,B.ERROR),{result:S,errorCode:this.error_codes.GENERAL??0}}}async getOfflineData(e){try{return this.getFromStorage(`${this.storeName}_${e}`)||null}catch(e){return this.apiLog("OfflineStorageService","Error retrieving offline data: "+e,B.ERROR),null}}async syncOfflineData(){if(this.syncInProgress||!this.isOnline)return!1;this.syncInProgress=!0;try{const e=this.getFromStorage(this.syncQueue)||[];if(0===e.length)return this.syncInProgress=!1,!0;this.apiLog("OfflineStorageService",`Found ${e.length} items to sync`,B.INFO);const t=[];for(const i of e){const e=this.settings.maxSyncAttempts??5;if(e>i.syncAttempts)try{const e=await this.sendDataToLMS(i.data);!0===e.result||e.result===f?this.apiLog("OfflineStorageService","Successfully synced item "+i.id,B.INFO):(i.syncAttempts++,t.push(i),this.apiLog("OfflineStorageService",`Failed to sync item ${i.id}, attempt #${i.syncAttempts}`,B.WARN))}catch(e){i.syncAttempts++,t.push(i),this.apiLog("OfflineStorageService",`Error syncing item ${i.id}: ${e}`,B.ERROR)}else this.apiLog("OfflineStorageService",`Removing abandoned item ${i.id} after ${e} failed sync attempts`,B.WARN)}return this.saveToStorage(this.syncQueue,t),this.apiLog("OfflineStorageService",`Sync completed. ${e.length-t.length} items synced, ${t.length} items remaining`,B.INFO),this.syncInProgress=!1,!0}catch(e){return this.apiLog("OfflineStorageService","Error during sync process: "+e,B.ERROR),this.syncInProgress=!1,!1}}async sendDataToLMS(e){if(!this.settings.lmsCommitUrl)return{result:S,errorCode:this.error_codes.GENERAL||101};try{const t=this.settings.requestHandler(e),i={method:"POST",mode:this.settings.fetchMode,body:JSON.stringify(t),headers:{...this.settings.xhrHeaders,"Content-Type":this.settings.commitRequestDataType}};this.settings.xhrWithCredentials&&(i.credentials="include");const s=await fetch(this.settings.lmsCommitUrl,i),result="function"==typeof this.settings.responseHandler?await this.settings.responseHandler(s):await s.json();return 200>s.status||s.status>299||!0!==result.result&&result.result!==f?(Object.hasOwnProperty.call(result,"errorCode")||(result.errorCode=this.error_codes.GENERAL),result):(Object.hasOwnProperty.call(result,"errorCode")||(result.errorCode=0),result)}catch(e){return this.apiLog("OfflineStorageService","Error sending data to LMS: "+e,B.ERROR),{result:S,errorCode:this.error_codes.GENERAL||101}}}isDeviceOnline(){return this.isOnline}getFromStorage(e){const t=localStorage.getItem(e);if(t)try{return JSON.parse(t)}catch(e){return null}return null}saveToStorage(e,t){try{localStorage.setItem(e,JSON.stringify(t))}catch(e){if(e instanceof DOMException&&"QuotaExceededError"===e.name)throw Error("storage quota exceeded - localStorage is full",{cause:e});throw e}}async hasPendingOfflineData(e){return(this.getFromStorage(this.syncQueue)||[]).some(t=>t.courseId===e)}updateSettings(e){this.settings=e}destroy(){window.removeEventListener("online",this.boundOnlineStatusChangeHandler),window.removeEventListener("offline",this.boundOnlineStatusChangeHandler),window.removeEventListener("scorm-again:network-status",this.boundCustomNetworkStatusHandler)}}const Mt=l((e,t,i,s,r,n)=>{if("string"!=typeof t)return!1;const o=RegExp(i),a=t.match(o);if(n&&""===t)return!0;if(!a||""===a[0])throw new r(e,s);return!0},(e,t,i,s,r,n)=>`${e}:${"string"==typeof t?t:`[${typeof t}]`}:${i}:${s}:${n||!1}`),Ot=l((e,t,i,s,r)=>{const n=i.split("#");if(isNaN(t=+t))throw new r(e,s);const o=n[0],a=n[1],c=void 0!==a&&""!==a&&"*"!==a;if(void 0!==o&&""!==o&&+o>t)throw new r(e,s);if(c&&t>+a)throw new r(e,s);return!0},(e,t,i,s,r)=>`${e}:${t}:${i}:${s}`);function Rt(e,t,i,s){return Mt(e,t,i,j.TYPE_MISMATCH,O,s)}function Tt(e,t,i){return Ot(e,t,i,j.VALUE_OUT_OF_RANGE,O)}var jt=Object.defineProperty,It=(e,t,i)=>((e,t,i)=>t in e?jt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i),Nt=(e=>(e.SATISFIED="satisfied",e.NOT_SATISFIED="notSatisfied",e.COMPLETED="completed",e.INCOMPLETE="incomplete",e))(Nt||{}),xt=(e=>(e.ALL="all",e.ANY="any",e.NONE="none",e.AT_LEAST_COUNT="atLeastCount",e.AT_LEAST_PERCENT="atLeastPercent",e))(xt||{});class qt extends d{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"always",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Map;super("rollupCondition"),It(this,"_condition","always"),It(this,"_parameters",new Map),this._condition=e,this._parameters=t}reset(){this._initialized=!1}get condition(){return this._condition}set condition(e){this._condition=e}get parameters(){return this._parameters}set parameters(e){this._parameters=e}evaluate(e){switch(this._condition){case"satisfied":return!0===e.objectiveSatisfiedStatus||e.successStatus===P;case"objectiveStatusKnown":return e.objectiveSatisfiedStatusKnown;case"objectiveMeasureKnown":return e.objectiveMeasureStatus;case"objectiveMeasureGreaterThan":{const t=this._parameters.get("threshold")||0;return e.objectiveMeasureStatus&&e.objectiveNormalizedMeasure>t}case"objectiveMeasureLessThan":{const t=this._parameters.get("threshold")||0;return e.objectiveMeasureStatus&&t>e.objectiveNormalizedMeasure}case"completed":return e.isCompleted;case"progressKnown":return e.completionStatus!==H;case"attempted":return e.attemptCount>0;case"notAttempted":return 0===e.attemptCount;case"always":return!0;default:return!1}}toJSON(){this.jsonString=!0;const result={condition:this._condition,parameters:Object.fromEntries(this._parameters)};return this.jsonString=!1,result}}class Dt extends d{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"satisfied",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"all",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;super("rollupRule"),It(this,"_conditions",[]),It(this,"_action","satisfied"),It(this,"_consideration","all"),It(this,"_minimumCount",0),It(this,"_minimumPercent",0),this._action=e,this._consideration=t,this._minimumCount=i,this._minimumPercent=s}reset(){this._initialized=!1,this._conditions=[]}get conditions(){return this._conditions}addCondition(e){if(!(e instanceof qt))throw new O(this._cmi_element+".conditions",j.TYPE_MISMATCH);this._conditions.push(e)}removeCondition(e){const t=this._conditions.indexOf(e);return-1!==t&&(this._conditions.splice(t,1),!0)}get action(){return this._action}set action(e){this._action=e}get consideration(){return this._consideration}set consideration(e){this._consideration=e}get minimumCount(){return this._minimumCount}set minimumCount(e){0>e||(this._minimumCount=e)}get minimumPercent(){return this._minimumPercent}set minimumPercent(e){0>e||e>100||(this._minimumPercent=e)}evaluate(e){if(0===e.length)return!1;const t=e.filter(e=>this._conditions.every(t=>t.evaluate(e)));switch(this._consideration){case"all":return t.length===e.length;case"any":return t.length>0;case"none":return 0===t.length;case"atLeastCount":return t.length>=this._minimumCount;case"atLeastPercent":return t.length/e.length*100>=this._minimumPercent;default:return!1}}toJSON(){this.jsonString=!0;const result={conditions:this._conditions,action:this._action,consideration:this._consideration,minimumCount:this._minimumCount,minimumPercent:this._minimumPercent};return this.jsonString=!1,result}}class Lt extends d{constructor(){super("rollupRules"),It(this,"_rules",[])}reset(){this._initialized=!1,this._rules=[]}get rules(){return this._rules}addRule(e){if(!(e instanceof Dt))throw new O(this._cmi_element+".rules",j.TYPE_MISMATCH);this._rules.push(e)}removeRule(e){const t=this._rules.indexOf(e);return-1!==t&&(this._rules.splice(t,1),!0)}processRollup(e){if(!e||0===e.children.length)return;const t=e.getAvailableChildren();let i=!1,s=!1;if(e.sequencingControls.rollupObjectiveSatisfied&&null!==this._objectiveRollupUsingMeasure(e,t)&&(s=!0),!s)for(const r of this._rules)if(r.evaluate(t))switch(r.action){case"satisfied":e.successStatus=P,s=!0;break;case"notSatisfied":e.successStatus=z,s=!0;break;case"completed":e.completionStatus=k,e.isCompleted=!0,i=!0;break;case"incomplete":e.completionStatus=V,e.isCompleted=!1,i=!0}i||this._defaultCompletionRollup(e,t),s||this._defaultSuccessRollup(e,t)}_defaultCompletionRollup(e,t){t.every(e=>e.isCompleted)?(e.completionStatus=k,e.isCompleted=!0):t.some(e=>e.completionStatus===V)&&(e.completionStatus=V,e.isCompleted=!1)}_objectiveRollupUsingMeasure(e,t){if(0>=e.sequencingControls.objectiveMeasureWeight)return null;let i=0,s=0,r=!1;for(const e of t)if(e.sequencingControls.rollupObjectiveSatisfied&&e.objectiveMeasureStatus&&!0===e.objectiveMeasureStatus){const t=e.sequencingControls.objectiveMeasureWeight;t>0&&(s+=e.objectiveNormalizedMeasure*t,i+=t,r=!0)}if(!r||0===i)return null;const n=s/i;return e.objectiveNormalizedMeasure=n,e.objectiveMeasureStatus=!0,e.scaledPassingScore>n?(e.successStatus=z,e.objectiveSatisfiedStatus=!1,!1):(e.successStatus=P,e.objectiveSatisfiedStatus=!0,!0)}_defaultSuccessRollup(e,t){t.every(e=>e.successStatus===P)?e.successStatus=P:t.some(e=>e.successStatus===z)&&(e.successStatus=z)}toJSON(){this.jsonString=!0;const result={rules:this._rules};return this.jsonString=!1,result}}var Pt=Object.defineProperty,zt=(e,t,i)=>((e,t,i)=>t in e?Pt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Ft{constructor(id){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};zt(this,"_id"),zt(this,"_description"),zt(this,"_satisfiedByMeasure"),zt(this,"_minNormalizedMeasure"),zt(this,"_mapInfo"),zt(this,"_isPrimary"),zt(this,"_satisfiedStatus",!1),zt(this,"_satisfiedStatusKnown",!1),zt(this,"_measureStatus",!1),zt(this,"_normalizedMeasure",0),zt(this,"_progressMeasure",0),zt(this,"_progressMeasureStatus",!1),zt(this,"_completionStatus",H),zt(this,"_progressStatus",!1),zt(this,"_satisfiedStatusDirty",!1),zt(this,"_normalizedMeasureDirty",!1),zt(this,"_completionStatusDirty",!1),zt(this,"_progressMeasureDirty",!1),this._id=id,this._description=e.description??null,this._satisfiedByMeasure=e.satisfiedByMeasure??!1,this._minNormalizedMeasure=e.minNormalizedMeasure??null,this._mapInfo=e.mapInfo?[...e.mapInfo]:[],this._isPrimary=e.isPrimary??!1}get id(){return this._id}get description(){return this._description}get satisfiedByMeasure(){return this._satisfiedByMeasure}set satisfiedByMeasure(e){this._satisfiedByMeasure=e}get minNormalizedMeasure(){return this._minNormalizedMeasure}set minNormalizedMeasure(e){this._minNormalizedMeasure=e}get mapInfo(){return this._mapInfo}set mapInfo(e){this._mapInfo=[...e]}get isPrimary(){return this._isPrimary}set isPrimary(e){this._isPrimary=e}get satisfiedStatus(){return this._satisfiedStatus}set satisfiedStatus(e){this._satisfiedStatus!==e&&(this._satisfiedStatus=e,this._satisfiedStatusDirty=!0)}get satisfiedStatusKnown(){return this._satisfiedStatusKnown}set satisfiedStatusKnown(e){this._satisfiedStatusKnown=e}get measureStatus(){return this._measureStatus}set measureStatus(e){this._measureStatus=e}get normalizedMeasure(){return this._normalizedMeasure}set normalizedMeasure(e){this._normalizedMeasure!==e&&(this._normalizedMeasure=e,this._normalizedMeasureDirty=!0)}get progressMeasure(){return this._progressMeasure}set progressMeasure(e){this._progressMeasure!==e&&(this._progressMeasure=e,this._progressMeasureDirty=!0)}get progressMeasureStatus(){return this._progressMeasureStatus}set progressMeasureStatus(e){this._progressMeasureStatus=e}get completionStatus(){return this._completionStatus}set completionStatus(e){this._completionStatus!==e&&(this._completionStatus=e,this._completionStatusDirty=!0)}get progressStatus(){return this._progressStatus}set progressStatus(e){this._progressStatus=e}isDirty(e){switch(e){case"satisfiedStatus":return this._satisfiedStatusDirty;case"normalizedMeasure":return this._normalizedMeasureDirty;case"completionStatus":return this._completionStatusDirty;case"progressMeasure":return this._progressMeasureDirty}}clearDirty(e){switch(e){case"satisfiedStatus":this._satisfiedStatusDirty=!1;break;case"normalizedMeasure":this._normalizedMeasureDirty=!1;break;case"completionStatus":this._completionStatusDirty=!1;break;case"progressMeasure":this._progressMeasureDirty=!1}}clearAllDirty(){this._satisfiedStatusDirty=!1,this._normalizedMeasureDirty=!1,this._completionStatusDirty=!1,this._progressMeasureDirty=!1}initializeFromCMI(e,t,i){this._satisfiedStatus=e,this._satisfiedStatusDirty=!0,this._normalizedMeasure=t,this._normalizedMeasureDirty=!0,this._measureStatus=i}resetState(){this._satisfiedStatus=!1,this._satisfiedStatusKnown=!1,this._measureStatus=!1,this._normalizedMeasure=0,this._progressMeasure=0,this._progressMeasureStatus=!1,this._completionStatus=H,this._progressStatus=!1,this.clearAllDirty()}updateFromActivity(e){this._satisfiedStatus!==e.objectiveSatisfiedStatus&&(this._satisfiedStatus=e.objectiveSatisfiedStatus,this._satisfiedStatusDirty=!0),this._satisfiedStatusKnown=e.objectiveSatisfiedStatusKnown,this._measureStatus=e.objectiveMeasureStatus,this._normalizedMeasure!==e.objectiveNormalizedMeasure&&(this._normalizedMeasure=e.objectiveNormalizedMeasure,this._normalizedMeasureDirty=!0),this._progressMeasure!==e.progressMeasure&&(this._progressMeasure=e.progressMeasure,this._progressMeasureDirty=!0),this._progressMeasureStatus=e.progressMeasureStatus,this._completionStatus!==e.completionStatus&&(this._completionStatus=e.completionStatus,this._completionStatusDirty=!0)}applyToActivity(e){this._isPrimary&&e.setPrimaryObjectiveState(this._satisfiedStatus,this._measureStatus,this._normalizedMeasure,this._progressMeasure,this._progressMeasureStatus,this._completionStatus)}}class kt extends d{constructor(){let id=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";super("activity"),zt(this,"_id",""),zt(this,"_title",""),zt(this,"_children",[]),zt(this,"_parent",null),zt(this,"_isVisible",!0),zt(this,"_isActive",!1),zt(this,"_isSuspended",!1),zt(this,"_isCompleted",!1),zt(this,"_completionStatus",H),zt(this,"_successStatus",F),zt(this,"_attemptCount",0),zt(this,"_attemptCompletionAmount",0),zt(this,"_attemptAbsoluteDuration","PT0H0M0S"),zt(this,"_attemptExperiencedDuration","PT0H0M0S"),zt(this,"_activityAbsoluteDuration","PT0H0M0S"),zt(this,"_activityExperiencedDuration","PT0H0M0S"),zt(this,"_attemptAbsoluteDurationValue","PT0H0M0S"),zt(this,"_attemptExperiencedDurationValue","PT0H0M0S"),zt(this,"_activityAbsoluteDurationValue","PT0H0M0S"),zt(this,"_activityExperiencedDurationValue","PT0H0M0S"),zt(this,"_activityStartTimestampUtc",null),zt(this,"_attemptStartTimestampUtc",null),zt(this,"_activityEndedDate",null),zt(this,"_objectiveSatisfiedStatus",!1),zt(this,"_objectiveSatisfiedStatusKnown",!1),zt(this,"_objectiveMeasureStatus",!1),zt(this,"_objectiveNormalizedMeasure",0),zt(this,"_scaledPassingScore",.7),zt(this,"_objectiveSatisfiedStatusDirty",!1),zt(this,"_objectiveNormalizedMeasureDirty",!1),zt(this,"_objectiveMeasureStatusDirty",!1),zt(this,"_progressMeasure",0),zt(this,"_progressMeasureStatus",!1),zt(this,"_location",""),zt(this,"_attemptAbsoluteStartTime",""),zt(this,"_learnerPrefs",null),zt(this,"_activityAttemptActive",!1),zt(this,"_isHiddenFromChoice",!1),zt(this,"_isAvailable",!0),zt(this,"_hideLmsUi",[]),zt(this,"_auxiliaryResources",[]),zt(this,"_attemptLimit",null),zt(this,"_attemptAbsoluteDurationLimit",null),zt(this,"_activityAbsoluteDurationLimit",null),zt(this,"_timeLimitAction",null),zt(this,"_timeLimitDuration",null),zt(this,"_beginTimeLimit",null),zt(this,"_endTimeLimit",null),zt(this,"_launchData",""),zt(this,"_credit","credit"),zt(this,"_maxTimeAllowed",""),zt(this,"_completionThreshold",""),zt(this,"_sequencingControls"),zt(this,"_sequencingRules"),zt(this,"_rollupRules"),zt(this,"_processedChildren",null),zt(this,"_isNewAttempt",!1),zt(this,"_primaryObjective",null),zt(this,"_objectives",[]),zt(this,"_rollupConsiderations",{requiredForSatisfied:"always",requiredForNotSatisfied:"always",requiredForCompleted:"always",requiredForIncomplete:"always",measureSatisfactionIfActive:!0}),zt(this,"_requiredForSatisfied","always"),zt(this,"_requiredForNotSatisfied","always"),zt(this,"_requiredForCompleted","always"),zt(this,"_requiredForIncomplete","always"),zt(this,"_wasSkipped",!1),zt(this,"_attemptProgressStatus",!1),zt(this,"_wasAutoCompleted",!1),zt(this,"_wasAutoSatisfied",!1),zt(this,"_completedByMeasure",!1),zt(this,"_minProgressMeasure",1),zt(this,"_progressWeight",1),zt(this,"_attemptCompletionAmountStatus",!1),this._id=id,this._title=e,this._sequencingControls=new Ge,this._sequencingRules=new Re,this._rollupRules=new Lt,this._primaryObjective=null,this._objectives=[]}initialize(){super.initialize();for(const e of this._children)e.initialize()}reset(){this._initialized=!1,this._isActive=!1,this._isSuspended=!1,this._isCompleted=!1,this._completionStatus=H,this._successStatus=F,this._attemptCount=0,this._attemptCompletionAmount=0,this._attemptAbsoluteDuration="PT0H0M0S",this._attemptExperiencedDuration="PT0H0M0S",this._activityAbsoluteDuration="PT0H0M0S",this._activityExperiencedDuration="PT0H0M0S",this._attemptAbsoluteDurationValue="PT0H0M0S",this._attemptExperiencedDurationValue="PT0H0M0S",this._activityAbsoluteDurationValue="PT0H0M0S",this._activityExperiencedDurationValue="PT0H0M0S",this._activityStartTimestampUtc=null,this._attemptStartTimestampUtc=null,this._activityEndedDate=null,this._objectiveSatisfiedStatus=!1,this._objectiveSatisfiedStatusKnown=!1,this._objectiveMeasureStatus=!1,this._objectiveNormalizedMeasure=0,this._progressMeasure=0,this._progressMeasureStatus=!1,this._location="",this._attemptAbsoluteStartTime="",this._learnerPrefs=null,this._activityAttemptActive=!1,this._primaryObjective&&(this._primaryObjective.resetState(),this._primaryObjective.updateFromActivity(this));for(const e of this._objectives)e.resetState();for(const e of this._children)e.reset();this._wasSkipped=!1,this._attemptProgressStatus=!1,this._wasAutoCompleted=!1,this._wasAutoSatisfied=!1,this._completedByMeasure=!1,this._minProgressMeasure=1,this._progressWeight=1,this._attemptCompletionAmountStatus=!1,this.clearAllObjectiveDirty()}get id(){return this._id}set id(id){Rt(this._cmi_element+".id",id,ce)&&(this._id=id)}get title(){return this._title}set title(e){Rt(this._cmi_element+".title",e,ie)&&(this._title=e)}get children(){return this._children}addChild(e){if(!(e instanceof kt))throw new O(this._cmi_element+".children",j.TYPE_MISMATCH);e._parent=this,this._children.push(e)}setChildOrder(e){if(0===e.length)return;const t=new Map(this._children.map(e=>[e.id,e])),i=[];for(const id of e){const e=t.get(id);e&&(i.push(e),t.delete(id))}if(t.size>0)for(const e of this._children)t.has(e.id)&&(i.push(e),t.delete(e.id));i.length===this._children.length&&this._children.splice(0,this._children.length,...i)}removeChild(e){const t=this._children.indexOf(e);return-1!==t&&(this._children.splice(t,1),e._parent=null,!0)}get parent(){return this._parent}get isVisible(){return this._isVisible}set isVisible(e){this._isVisible=e}get isActive(){return this._isActive}set isActive(e){this._isActive=e}get isSuspended(){return this._isSuspended}set isSuspended(e){this._isSuspended=e}get isCompleted(){return this._isCompleted}set isCompleted(e){this._isCompleted=e,this._completionStatus=e?k:V}get completionStatus(){return this._completionStatus}set completionStatus(e){this._completionStatus=e,this._isCompleted=e===k,this.updatePrimaryObjectiveFromActivity()}get successStatus(){return this._successStatus}set successStatus(e){this._successStatus=e}get attemptCount(){return this._attemptCount}set attemptCount(e){this._attemptCount=e}get attemptCompletionAmount(){return this._attemptCompletionAmount}set attemptCompletionAmount(e){this._attemptCompletionAmount=e}incrementAttemptCount(){this._attemptCount++,this._isNewAttempt=!0;const e=this._sequencingControls;"onEachNewAttempt"!==e.selectionTiming&&"onEachNewAttempt"!==e.randomizationTiming||(this._processedChildren=null)}get objectiveSatisfiedStatus(){return this._objectiveSatisfiedStatus}set objectiveSatisfiedStatus(e){this._objectiveSatisfiedStatus!==e&&(this._objectiveSatisfiedStatus=e,this._objectiveSatisfiedStatusDirty=!0),this._objectiveSatisfiedStatusKnown=!0,this._successStatus=e?P:z,this.updatePrimaryObjectiveFromActivity()}get objectiveSatisfiedStatusKnown(){return this._objectiveSatisfiedStatusKnown}set objectiveSatisfiedStatusKnown(e){this._objectiveSatisfiedStatusKnown=e}get objectiveMeasureStatus(){return this._objectiveMeasureStatus}set objectiveMeasureStatus(e){this._objectiveMeasureStatus!==e&&(this._objectiveMeasureStatus=e,this._objectiveMeasureStatusDirty=!0),this.updatePrimaryObjectiveFromActivity()}get objectiveNormalizedMeasure(){return this._objectiveNormalizedMeasure}set objectiveNormalizedMeasure(e){this._objectiveNormalizedMeasure!==e&&(this._objectiveNormalizedMeasure=e,this._objectiveNormalizedMeasureDirty=!0),this.updatePrimaryObjectiveFromActivity()}get scaledPassingScore(){return this._scaledPassingScore}set scaledPassingScore(e){-1>e||e>1||(this._scaledPassingScore=e)}get progressMeasure(){return this._progressMeasure}set progressMeasure(e){this._progressMeasure=e,this.updatePrimaryObjectiveFromActivity()}get progressMeasureStatus(){return this._progressMeasureStatus}set progressMeasureStatus(e){this._progressMeasureStatus=e,this.updatePrimaryObjectiveFromActivity()}get location(){return this._location}set location(location){this._location=location}get attemptAbsoluteStartTime(){return this._attemptAbsoluteStartTime}set attemptAbsoluteStartTime(e){this._attemptAbsoluteStartTime=e}get learnerPrefs(){return this._learnerPrefs}set learnerPrefs(e){this._learnerPrefs=e}get activityAttemptActive(){return this._activityAttemptActive}set activityAttemptActive(e){this._activityAttemptActive=e}get isHiddenFromChoice(){return this._isHiddenFromChoice}set isHiddenFromChoice(e){this._isHiddenFromChoice=e}get isAvailable(){return this._isAvailable}set isAvailable(e){this._isAvailable=e}get attemptLimit(){return this._attemptLimit}set attemptLimit(e){this._attemptLimit=e}hasAttemptLimitExceeded(){return null!==this._attemptLimit&&this._attemptCount>=this._attemptLimit}get timeLimitDuration(){return this._timeLimitDuration}set timeLimitDuration(e){this._timeLimitDuration=e}get timeLimitAction(){return this._timeLimitAction}set timeLimitAction(e){this._timeLimitAction=e}get beginTimeLimit(){return this._beginTimeLimit}set beginTimeLimit(e){this._beginTimeLimit=e}get endTimeLimit(){return this._endTimeLimit}set endTimeLimit(e){this._endTimeLimit=e}get attemptAbsoluteDurationLimit(){return this._attemptAbsoluteDurationLimit}set attemptAbsoluteDurationLimit(e){if(null!==e&&!n(e,ne))throw new O(this._cmi_element+".attemptAbsoluteDurationLimit",j.TYPE_MISMATCH);this._attemptAbsoluteDurationLimit=e}get attemptExperiencedDuration(){return this._attemptExperiencedDuration}set attemptExperiencedDuration(e){if(!n(e,ne))throw new O(this._cmi_element+".attemptExperiencedDuration",j.TYPE_MISMATCH);this._attemptExperiencedDuration=e}get activityAbsoluteDurationLimit(){return this._activityAbsoluteDurationLimit}set activityAbsoluteDurationLimit(e){if(null!==e&&!n(e,ne))throw new O(this._cmi_element+".activityAbsoluteDurationLimit",j.TYPE_MISMATCH);this._activityAbsoluteDurationLimit=e}get activityExperiencedDuration(){return this._activityExperiencedDuration}set activityExperiencedDuration(e){if(!n(e,ne))throw new O(this._cmi_element+".activityExperiencedDuration",j.TYPE_MISMATCH);this._activityExperiencedDuration=e}get attemptAbsoluteDuration(){return this._attemptAbsoluteDurationLimit||"PT0H0M0S"}set attemptAbsoluteDuration(e){this._attemptAbsoluteDurationLimit=e}get activityAbsoluteDuration(){return this._activityAbsoluteDurationLimit||"PT0H0M0S"}set activityAbsoluteDuration(e){this._activityAbsoluteDurationLimit=e}get attemptAbsoluteDurationValue(){return this._attemptAbsoluteDurationValue}set attemptAbsoluteDurationValue(e){if(!n(e,ne))throw new O(this._cmi_element+".attemptAbsoluteDurationValue",j.TYPE_MISMATCH);this._attemptAbsoluteDurationValue=e}get attemptExperiencedDurationValue(){return this._attemptExperiencedDurationValue}set attemptExperiencedDurationValue(e){if(!n(e,ne))throw new O(this._cmi_element+".attemptExperiencedDurationValue",j.TYPE_MISMATCH);this._attemptExperiencedDurationValue=e}get activityAbsoluteDurationValue(){return this._activityAbsoluteDurationValue}set activityAbsoluteDurationValue(e){if(!n(e,ne))throw new O(this._cmi_element+".activityAbsoluteDurationValue",j.TYPE_MISMATCH);this._activityAbsoluteDurationValue=e}get activityExperiencedDurationValue(){return this._activityExperiencedDurationValue}set activityExperiencedDurationValue(e){if(!n(e,ne))throw new O(this._cmi_element+".activityExperiencedDurationValue",j.TYPE_MISMATCH);this._activityExperiencedDurationValue=e}get activityStartTimestampUtc(){return this._activityStartTimestampUtc}set activityStartTimestampUtc(timestamp){this._activityStartTimestampUtc=timestamp}get attemptStartTimestampUtc(){return this._attemptStartTimestampUtc}set attemptStartTimestampUtc(timestamp){this._attemptStartTimestampUtc=timestamp}get activityEndedDate(){return this._activityEndedDate}set activityEndedDate(e){this._activityEndedDate=e}get sequencingControls(){return this._sequencingControls}set sequencingControls(e){this._sequencingControls=e}get sequencingRules(){return this._sequencingRules}set sequencingRules(e){this._sequencingRules=e}get rollupRules(){return this._rollupRules}set rollupRules(e){this._rollupRules=e}get rollupConsiderations(){return{...this._rollupConsiderations}}set rollupConsiderations(e){this._rollupConsiderations={...e}}applyRollupConsiderations(e){this._rollupConsiderations={...this._rollupConsiderations,...e}}get requiredForSatisfied(){return this._requiredForSatisfied}set requiredForSatisfied(e){this._requiredForSatisfied=e}get requiredForNotSatisfied(){return this._requiredForNotSatisfied}set requiredForNotSatisfied(e){this._requiredForNotSatisfied=e}get requiredForCompleted(){return this._requiredForCompleted}set requiredForCompleted(e){this._requiredForCompleted=e}get requiredForIncomplete(){return this._requiredForIncomplete}set requiredForIncomplete(e){this._requiredForIncomplete=e}get wasSkipped(){return this._wasSkipped}set wasSkipped(e){this._wasSkipped=e}get attemptProgressStatus(){return this._attemptProgressStatus}set attemptProgressStatus(e){this._attemptProgressStatus=e}get wasAutoCompleted(){return this._wasAutoCompleted}set wasAutoCompleted(e){this._wasAutoCompleted=e}get wasAutoSatisfied(){return this._wasAutoSatisfied}set wasAutoSatisfied(e){this._wasAutoSatisfied=e}get completedByMeasure(){return this._completedByMeasure}set completedByMeasure(e){this._completedByMeasure=e}get minProgressMeasure(){return this._minProgressMeasure}set minProgressMeasure(e){if(0>e||e>1)throw new O(this._cmi_element+".minProgressMeasure",j.TYPE_MISMATCH);this._minProgressMeasure=e}get progressWeight(){return this._progressWeight}set progressWeight(e){if(0>e)throw new O(this._cmi_element+".progressWeight",j.TYPE_MISMATCH);this._progressWeight=e}get attemptCompletionAmountStatus(){return this._attemptCompletionAmountStatus}set attemptCompletionAmountStatus(e){this._attemptCompletionAmountStatus=e}get primaryObjective(){return this._primaryObjective}set primaryObjective(e){this._primaryObjective=e,this._primaryObjective&&(this._primaryObjective.isPrimary=!0,null!==this._primaryObjective.minNormalizedMeasure&&(this._scaledPassingScore=this._primaryObjective.minNormalizedMeasure??this._scaledPassingScore),this._primaryObjective.updateFromActivity(this)),this.syncPrimaryObjectiveCollection()}get objectives(){return this._objectives.filter(e=>e.id!==this._primaryObjective?.id)}set objectives(objectives){this._objectives=[...objectives],this.syncPrimaryObjectiveCollection()}addObjective(e){this._objectives.find(t=>t.id===e.id)||this._objectives.push(e)}syncPrimaryObjectiveCollection(){if(!this._primaryObjective)return void(this._objectives=this._objectives.filter(e=>!e.isPrimary));const e=this._objectives.findIndex(e=>e.id===this._primaryObjective?.id);0>e?this._objectives=[this._primaryObjective,...this._objectives]:this._objectives[e]=this._primaryObjective}getObjectiveById(e){if(this._primaryObjective?.id===e)return{objective:this._primaryObjective,isPrimary:!0};const t=this._objectives.find(t=>t.id===e);return t?{objective:t,isPrimary:!1}:null}getAllObjectives(){const objectives=[];this._primaryObjective&&objectives.push(this._primaryObjective);const e=this._objectives.filter(e=>e!==this._primaryObjective&&e.id!==this._primaryObjective?.id);return objectives.concat(e)}updatePrimaryObjectiveFromActivity(){this._primaryObjective&&this._primaryObjective.updateFromActivity(this)}isObjectiveDirty(e){switch(e){case"satisfiedStatus":return this._objectiveSatisfiedStatusDirty;case"normalizedMeasure":return this._objectiveNormalizedMeasureDirty;case"measureStatus":return this._objectiveMeasureStatusDirty}}clearObjectiveDirty(e){switch(e){case"satisfiedStatus":this._objectiveSatisfiedStatusDirty=!1;break;case"normalizedMeasure":this._objectiveNormalizedMeasureDirty=!1;break;case"measureStatus":this._objectiveMeasureStatusDirty=!1}}clearAllObjectiveDirty(){this._objectiveSatisfiedStatusDirty=!1,this._objectiveNormalizedMeasureDirty=!1,this._objectiveMeasureStatusDirty=!1}setPrimaryObjectiveState(e,t,i,s,r,n){this._objectiveSatisfiedStatus!==e&&(this._objectiveSatisfiedStatus=e,this._objectiveSatisfiedStatusDirty=!0),this._objectiveSatisfiedStatusKnown=!0,this._objectiveMeasureStatus!==t&&(this._objectiveMeasureStatus=t,this._objectiveMeasureStatusDirty=!0),this._objectiveNormalizedMeasure!==i&&(this._objectiveNormalizedMeasure=i,this._objectiveNormalizedMeasureDirty=!0),this._progressMeasure=s,this._progressMeasureStatus=r,this._completionStatus=n,this._primaryObjective&&(this._primaryObjective.satisfiedStatus=e,this._primaryObjective.measureStatus=t,this._primaryObjective.normalizedMeasure=i,this._primaryObjective.progressMeasure=s,this._primaryObjective.progressMeasureStatus=r,this._primaryObjective.completionStatus=n)}getObjectiveStateSnapshot(){return{primary:this._primaryObjective?{id:this._primaryObjective.id,satisfiedStatus:this.objectiveSatisfiedStatus,measureStatus:this.objectiveMeasureStatus,normalizedMeasure:this.objectiveNormalizedMeasure,progressMeasure:this.progressMeasure??0,progressMeasureStatus:this.progressMeasureStatus,progressStatus:this._primaryObjective.progressStatus,completionStatus:this.completionStatus,satisfiedByMeasure:this._primaryObjective.satisfiedByMeasure,minNormalizedMeasure:this._primaryObjective.minNormalizedMeasure}:null,objectives:this._objectives.map(e=>({id:e.id,satisfiedStatus:e.satisfiedStatus,measureStatus:e.measureStatus,normalizedMeasure:e.normalizedMeasure,progressMeasure:e.progressMeasure,progressMeasureStatus:e.progressMeasureStatus,progressStatus:e.progressStatus,completionStatus:e.completionStatus,satisfiedByMeasure:e.satisfiedByMeasure,minNormalizedMeasure:e.minNormalizedMeasure}))}}applyObjectiveStateSnapshot(e){if(e.primary){const t=this.getObjectiveById(e.primary.id);if(t&&t.isPrimary){const i=e.primary;t.objective.satisfiedByMeasure=i.satisfiedByMeasure??t.objective.satisfiedByMeasure,t.objective.minNormalizedMeasure=void 0!==i.minNormalizedMeasure?i.minNormalizedMeasure:t.objective.minNormalizedMeasure,this.setPrimaryObjectiveState(i.satisfiedStatus,i.measureStatus,i.normalizedMeasure,i.progressMeasure,i.progressMeasureStatus,i.completionStatus)}}for(const t of e.objectives){const e=this.getObjectiveById(t.id);if(e&&!e.isPrimary){const i=e.objective;i.satisfiedStatus=t.satisfiedStatus,i.measureStatus=t.measureStatus,i.normalizedMeasure=t.normalizedMeasure,i.progressMeasure=t.progressMeasure,i.progressMeasureStatus=t.progressMeasureStatus,i.completionStatus=t.completionStatus,i.satisfiedByMeasure=t.satisfiedByMeasure??i.satisfiedByMeasure,i.minNormalizedMeasure=void 0!==t.minNormalizedMeasure?t.minNormalizedMeasure:i.minNormalizedMeasure}}}getAvailableChildren(){return 0===this._children.length?[]:null!==this._processedChildren?this._processedChildren:this._children}setProcessedChildren(e){this._processedChildren=e}resetProcessedChildren(){this._processedChildren=null}get isNewAttempt(){return this._isNewAttempt}set isNewAttempt(e){this._isNewAttempt=e}get launchData(){return this._launchData}set launchData(e){this._launchData=e}get credit(){return this._credit}set credit(credit){this._credit=credit}get maxTimeAllowed(){return this._maxTimeAllowed}set maxTimeAllowed(e){this._maxTimeAllowed=e}get completionThreshold(){return this._completionThreshold}set completionThreshold(e){this._completionThreshold=e}getSuspensionState(){return{id:this._id,title:this._title,isVisible:this._isVisible,isActive:this._isActive,isSuspended:this._isSuspended,isCompleted:this._isCompleted,completionStatus:this._completionStatus,successStatus:this._successStatus,attemptCount:this._attemptCount,attemptCompletionAmount:this._attemptCompletionAmount,attemptAbsoluteDuration:this._attemptAbsoluteDuration,attemptExperiencedDuration:this._attemptExperiencedDuration,activityAbsoluteDuration:this._activityAbsoluteDuration,activityExperiencedDuration:this._activityExperiencedDuration,attemptAbsoluteDurationValue:this._attemptAbsoluteDurationValue,attemptExperiencedDurationValue:this._attemptExperiencedDurationValue,activityAbsoluteDurationValue:this._activityAbsoluteDurationValue,activityExperiencedDurationValue:this._activityExperiencedDurationValue,activityStartTimestampUtc:this._activityStartTimestampUtc,attemptStartTimestampUtc:this._attemptStartTimestampUtc,objectiveSatisfiedStatus:this._objectiveSatisfiedStatus,objectiveSatisfiedStatusKnown:this._objectiveSatisfiedStatusKnown,objectiveMeasureStatus:this._objectiveMeasureStatus,objectiveNormalizedMeasure:this._objectiveNormalizedMeasure,scaledPassingScore:this._scaledPassingScore,progressMeasure:this._progressMeasure,progressMeasureStatus:this._progressMeasureStatus,location:this._location,attemptAbsoluteStartTime:this._attemptAbsoluteStartTime,activityAttemptActive:this._activityAttemptActive,isHiddenFromChoice:this._isHiddenFromChoice,isAvailable:this._isAvailable,rollupConsiderations:{...this._rollupConsiderations},wasSkipped:this._wasSkipped,attemptProgressStatus:this._attemptProgressStatus,wasAutoCompleted:this._wasAutoCompleted,wasAutoSatisfied:this._wasAutoSatisfied,completedByMeasure:this._completedByMeasure,minProgressMeasure:this._minProgressMeasure,progressWeight:this._progressWeight,attemptCompletionAmountStatus:this._attemptCompletionAmountStatus,processedChildren:this._processedChildren?this._processedChildren.map(e=>e.id):null,isNewAttempt:this._isNewAttempt,selectionCountStatus:this._sequencingControls.selectionCountStatus,reorderChildren:this._sequencingControls.reorderChildren,primaryObjective:this._primaryObjective?{id:this._primaryObjective.id,satisfiedStatus:this._primaryObjective.satisfiedStatus,measureStatus:this._primaryObjective.measureStatus,normalizedMeasure:this._primaryObjective.normalizedMeasure,progressMeasure:this._primaryObjective.progressMeasure,progressMeasureStatus:this._primaryObjective.progressMeasureStatus,completionStatus:this._primaryObjective.completionStatus,satisfiedByMeasure:this._primaryObjective.satisfiedByMeasure,minNormalizedMeasure:this._primaryObjective.minNormalizedMeasure,progressStatus:this._primaryObjective.progressStatus,mapInfo:this._primaryObjective.mapInfo}:null,objectives:this._objectives.map(e=>({id:e.id,satisfiedStatus:e.satisfiedStatus,measureStatus:e.measureStatus,normalizedMeasure:e.normalizedMeasure,progressMeasure:e.progressMeasure,progressMeasureStatus:e.progressMeasureStatus,completionStatus:e.completionStatus,satisfiedByMeasure:e.satisfiedByMeasure,minNormalizedMeasure:e.minNormalizedMeasure,progressStatus:e.progressStatus,mapInfo:e.mapInfo})),children:this._children.map(e=>e.getSuspensionState())}}restoreSuspensionState(e){if(e){if(this._isVisible=e.isVisible??this._isVisible,this._isActive=e.isActive??this._isActive,this._isSuspended=e.isSuspended??this._isSuspended,this._isCompleted=e.isCompleted??this._isCompleted,this._completionStatus=e.completionStatus??this._completionStatus,this._successStatus=e.successStatus??this._successStatus,this._attemptCount=e.attemptCount??this._attemptCount,this._attemptCompletionAmount=e.attemptCompletionAmount??this._attemptCompletionAmount,this._attemptAbsoluteDuration=e.attemptAbsoluteDuration??this._attemptAbsoluteDuration,this._attemptExperiencedDuration=e.attemptExperiencedDuration??this._attemptExperiencedDuration,this._activityAbsoluteDuration=e.activityAbsoluteDuration??this._activityAbsoluteDuration,this._activityExperiencedDuration=e.activityExperiencedDuration??this._activityExperiencedDuration,this._attemptAbsoluteDurationValue=e.attemptAbsoluteDurationValue??this._attemptAbsoluteDurationValue,this._attemptExperiencedDurationValue=e.attemptExperiencedDurationValue??this._attemptExperiencedDurationValue,this._activityAbsoluteDurationValue=e.activityAbsoluteDurationValue??this._activityAbsoluteDurationValue,this._activityExperiencedDurationValue=e.activityExperiencedDurationValue??this._activityExperiencedDurationValue,this._activityStartTimestampUtc=e.activityStartTimestampUtc??this._activityStartTimestampUtc,this._attemptStartTimestampUtc=e.attemptStartTimestampUtc??this._attemptStartTimestampUtc,this._objectiveSatisfiedStatus=e.objectiveSatisfiedStatus??this._objectiveSatisfiedStatus,this._objectiveSatisfiedStatusKnown=e.objectiveSatisfiedStatusKnown??this._objectiveSatisfiedStatusKnown,this._objectiveMeasureStatus=e.objectiveMeasureStatus??this._objectiveMeasureStatus,this._objectiveNormalizedMeasure=e.objectiveNormalizedMeasure??this._objectiveNormalizedMeasure,this._scaledPassingScore=e.scaledPassingScore??this._scaledPassingScore,this._progressMeasure=e.progressMeasure??this._progressMeasure,this._progressMeasureStatus=e.progressMeasureStatus??this._progressMeasureStatus,this._location=e.location??this._location,this._attemptAbsoluteStartTime=e.attemptAbsoluteStartTime??this._attemptAbsoluteStartTime,this._activityAttemptActive=e.activityAttemptActive??this._activityAttemptActive,this._isHiddenFromChoice=e.isHiddenFromChoice??this._isHiddenFromChoice,this._isAvailable=e.isAvailable??this._isAvailable,e.rollupConsiderations&&(this._rollupConsiderations={...e.rollupConsiderations}),this._wasSkipped=e.wasSkipped??this._wasSkipped,this._attemptProgressStatus=e.attemptProgressStatus??this._attemptProgressStatus,this._wasAutoCompleted=e.wasAutoCompleted??this._wasAutoCompleted,this._wasAutoSatisfied=e.wasAutoSatisfied??this._wasAutoSatisfied,this._completedByMeasure=e.completedByMeasure??this._completedByMeasure,this._minProgressMeasure=e.minProgressMeasure??this._minProgressMeasure,this._progressWeight=e.progressWeight??this._progressWeight,this._attemptCompletionAmountStatus=e.attemptCompletionAmountStatus??this._attemptCompletionAmountStatus,this._isNewAttempt=e.isNewAttempt??this._isNewAttempt,void 0!==e.selectionCountStatus&&(this._sequencingControls.selectionCountStatus=e.selectionCountStatus),void 0!==e.reorderChildren&&(this._sequencingControls.reorderChildren=e.reorderChildren),e.processedChildren){const t=new Map(this._children.map(e=>[e.id,e]));this._processedChildren=e.processedChildren.map(id=>t.get(id)).filter(e=>void 0!==e)}else this._processedChildren=null;if(e.primaryObjective&&this._primaryObjective&&(this._primaryObjective.satisfiedStatus=e.primaryObjective.satisfiedStatus??this._primaryObjective.satisfiedStatus,this._primaryObjective.measureStatus=e.primaryObjective.measureStatus??this._primaryObjective.measureStatus,this._primaryObjective.normalizedMeasure=e.primaryObjective.normalizedMeasure??this._primaryObjective.normalizedMeasure,this._primaryObjective.progressMeasure=e.primaryObjective.progressMeasure??this._primaryObjective.progressMeasure,this._primaryObjective.progressMeasureStatus=e.primaryObjective.progressMeasureStatus??this._primaryObjective.progressMeasureStatus,this._primaryObjective.completionStatus=e.primaryObjective.completionStatus??this._primaryObjective.completionStatus,this._primaryObjective.progressStatus=e.primaryObjective.progressStatus??this._primaryObjective.progressStatus),e.objectives)for(const t of e.objectives){const e=this._objectives.find(e=>e.id===t.id);e&&(e.satisfiedStatus=t.satisfiedStatus??e.satisfiedStatus,e.measureStatus=t.measureStatus??e.measureStatus,e.normalizedMeasure=t.normalizedMeasure??e.normalizedMeasure,e.progressMeasure=t.progressMeasure??e.progressMeasure,e.progressMeasureStatus=t.progressMeasureStatus??e.progressMeasureStatus,e.completionStatus=t.completionStatus??e.completionStatus,e.progressStatus=t.progressStatus??e.progressStatus)}if(e.children&&Array.isArray(e.children))for(let t=0;e.children.length>t&&this._children.length>t;t++){const i=e.children[t],s=this._children.find(e=>e.id===i.id);s&&s.restoreSuspensionState(i)}}}toJSON(){this.jsonString=!0;const result={id:this._id,title:this._title,isVisible:this._isVisible,isActive:this._isActive,isSuspended:this._isSuspended,isCompleted:this._isCompleted,completionStatus:this._completionStatus,successStatus:this._successStatus,attemptCount:this._attemptCount,attemptCompletionAmount:this._attemptCompletionAmount,attemptAbsoluteDuration:this._attemptAbsoluteDuration,attemptExperiencedDuration:this._attemptExperiencedDuration,activityAbsoluteDuration:this._activityAbsoluteDuration,activityExperiencedDuration:this._activityExperiencedDuration,objectiveSatisfiedStatus:this._objectiveSatisfiedStatus,objectiveSatisfiedStatusKnown:this._objectiveSatisfiedStatusKnown,objectiveMeasureStatus:this._objectiveMeasureStatus,objectiveNormalizedMeasure:this._objectiveNormalizedMeasure,rollupConsiderations:{...this._rollupConsiderations},wasSkipped:this._wasSkipped,completedByMeasure:this._completedByMeasure,minProgressMeasure:this._minProgressMeasure,progressWeight:this._progressWeight,attemptCompletionAmountStatus:this._attemptCompletionAmountStatus,hideLmsUi:[...this._hideLmsUi],auxiliaryResources:this._auxiliaryResources.map(e=>({...e})),children:this._children.map(e=>e.toJSON())};return this.jsonString=!1,result}get auxiliaryResources(){return this._auxiliaryResources.map(e=>({...e}))}set auxiliaryResources(e){const t=[],i=new Set;for(const s of e||[]){if(!s)continue;const e="string"==typeof s.resourceId?s.resourceId.trim():"",r="string"==typeof s.purpose?s.purpose.trim():"";e&&!i.has(e)&&(i.add(e),t.push({resourceId:e,purpose:r}))}this._auxiliaryResources=t}addAuxiliaryResource(e){this.auxiliaryResources=[...this._auxiliaryResources,e]}captureRollupStatus(){return{measureStatus:this._objectiveMeasureStatus,normalizedMeasure:this._objectiveNormalizedMeasure,objectiveProgressStatus:null!=this._objectiveSatisfiedStatus,objectiveSatisfiedStatus:this._objectiveSatisfiedStatus,attemptProgressStatus:this._completionStatus!==H,attemptCompletionStatus:this._completionStatus===k}}static compareRollupStatus(e,t){return e.measureStatus===t.measureStatus&&1e-4>Math.abs(e.normalizedMeasure-t.normalizedMeasure)&&e.objectiveProgressStatus===t.objectiveProgressStatus&&e.objectiveSatisfiedStatus===t.objectiveSatisfiedStatus&&e.attemptProgressStatus===t.attemptProgressStatus&&e.attemptCompletionStatus===t.attemptCompletionStatus}get hideLmsUi(){return[...this._hideLmsUi]}set hideLmsUi(e){const t=new Set(be),i=new Set,s=[];for(const r of e)t.has(r)&&!i.has(r)&&(i.add(r),s.push(r));this._hideLmsUi=s}}class Vt{checkChildForRollupSubprocess(e,t,i){if(!1===e.sequencingControls.tracked)return!1;let s=!1;if("measure"===t||"objective"===t){if(!e.sequencingControls.rollupObjectiveSatisfied)return!1;s=!0;const t=e.requiredForSatisfied,r=e.requiredForNotSatisfied;"satisfied"===i&&"ifNotSuspended"===t||"notSatisfied"===i&&"ifNotSuspended"===r?(!e.attemptProgressStatus||e.attemptCount>0&&e.isSuspended)&&(s=!1):"satisfied"===i&&"ifAttempted"===t||"notSatisfied"===i&&"ifAttempted"===r?e.attemptProgressStatus&&0!==e.attemptCount||(s=!1):("satisfied"===i&&"ifNotSkipped"===t||"notSatisfied"===i&&"ifNotSkipped"===r)&&e.wasSkipped&&(s=!1)}if("progress"===t){if(!e.sequencingControls.rollupProgressCompletion)return!1;s=!0;const t=e.requiredForCompleted,r=e.requiredForIncomplete;"completed"===i&&"ifNotSuspended"===t||"incomplete"===i&&"ifNotSuspended"===r?(!e.attemptProgressStatus||e.attemptCount>0&&e.isSuspended)&&(s=!1):"completed"===i&&"ifAttempted"===t||"incomplete"===i&&"ifAttempted"===r?e.attemptProgressStatus&&0!==e.attemptCount||(s=!1):("completed"===i&&"ifNotSkipped"===t||"incomplete"===i&&"ifNotSkipped"===r)&&e.wasSkipped&&(s=!1)}return!(s&&!e.isAvailable)&&s}filterChildrenForRequirement(e,t,mode,i){return e.filter(e=>this.shouldIncludeChildForRollup(e,t,mode,i))}shouldIncludeChildForRollup(e,t,mode,i){return!(!this.checkChildForRollupSubprocess(e,t,mode)||"objective"===t&&!i.measureSatisfactionIfActive&&(e.activityAttemptActive||e.isActive))}isChildSatisfiedForRollup(e){return!0===e.objectiveSatisfiedStatus||!1!==e.objectiveSatisfiedStatus&&e.successStatus===P}isChildCompletedForRollup(e){return!("completed"!==e.completionStatus&&!e.isCompleted)}getTrackableChildren(e){return e.children.filter(e=>!1!==e.sequencingControls.tracked)}}var Ht=Object.defineProperty;class Bt{constructor(e){var t;((e,t,i)=>{t in e?Ht(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i})(this,"childFilter"+"",t),this.childFilter=e}evaluateRollupRule(e,t){const i=e.getAvailableChildren();let s=0,r=0;for(const e of i){let i=!1;switch(t.action){case Nt.SATISFIED:i=this.childFilter.checkChildForRollupSubprocess(e,"objective","satisfied");break;case Nt.NOT_SATISFIED:i=this.childFilter.checkChildForRollupSubprocess(e,"objective","notSatisfied");break;case Nt.COMPLETED:i=this.childFilter.checkChildForRollupSubprocess(e,"progress","completed");break;case Nt.INCOMPLETE:i=this.childFilter.checkChildForRollupSubprocess(e,"progress","incomplete")}i&&(s++,this.evaluateRollupConditionsSubprocess(e,t)&&r++)}return t.consideration===xt.ALL?s>0&&r===s:null!==t.minimumCount?r>=t.minimumCount:null!==t.minimumPercent?(s>0?r/s:0)>=t.minimumPercent:s>0&&r===s}evaluateRollupConditionsSubprocess(e,t){if(0===t.conditions.length)return!0;switch(t.consideration){case xt.ALL:return t.conditions.every(t=>t.evaluate(e));case xt.ANY:return t.conditions.some(t=>t.evaluate(e));case xt.NONE:return!t.conditions.some(t=>t.evaluate(e));case xt.AT_LEAST_COUNT:case xt.AT_LEAST_PERCENT:return t.conditions.every(t=>t.evaluate(e));default:return!1}}evaluateRulesForAction(e,t,i){const s=t.filter(e=>e.action===i);if(0===s.length)return null;for(const t of s)if(this.evaluateRollupRule(e,t))return!0;return!1}}var Ut=Object.defineProperty,$t=(e,t,i)=>((e,t,i)=>t in e?Ut(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Gt{constructor(e,t){$t(this,"childFilter"),$t(this,"eventCallback"),this.childFilter=e,this.eventCallback=t||null}measureRollupProcess(e){if(!e.sequencingControls.rollupObjectiveSatisfied)return[];const t=e.getAvailableChildren();if(0===t.length)return[];const i=e.rollupConsiderations,s=t.filter(e=>!(!this.childFilter.checkChildForRollupSubprocess(e,"measure")||!e.objectiveMeasureStatus||null===e.objectiveNormalizedMeasure||!i.measureSatisfactionIfActive&&(e.activityAttemptActive||e.isActive)));if(0===s.length)return e.objectiveMeasureStatus=!1,[];const r=this.calculateComplexWeightedMeasure(e,s,{enableThresholdBias:!1});return e.objectiveNormalizedMeasure=r,e.objectiveMeasureStatus=!0,this.identifyActivityClusters(s)}completionMeasureRollupProcess(e){const t=e.getAvailableChildren();if(0===t.length)return;const i=t.filter(e=>e.attemptCompletionAmountStatus);if(0===i.length)return void(e.attemptCompletionAmountStatus=!1);let s=0,r=0;for(const e of i)s+=e.attemptCompletionAmount*e.progressWeight,r+=e.progressWeight;r>0&&(e.attemptCompletionAmount=s/r,e.attemptCompletionAmountStatus=!0)}calculateComplexWeightedMeasure(e,t,i){let s=0,r=0;const n=[],o=i?.enableThresholdBias??!0;for(const e of t)if(this.childFilter.checkChildForRollupSubprocess(e,"measure")&&e.objectiveMeasureStatus&&null!==e.objectiveNormalizedMeasure){const t=this.calculateAdjustedWeight(e,e.sequencingControls.objectiveMeasureWeight,o);s+=e.objectiveNormalizedMeasure*t,r+=t,n.push({childId:e.id,measure:e.objectiveNormalizedMeasure,weight:t})}return this.eventCallback?.("complex_weighting_calculated",{activityId:e.id,weightingDetails:n,totalWeight:r,totalWeightedMeasure:s,result:r>0?s/r:0}),r>0?s/r:0}calculateAdjustedWeight(e,t){let i=2>=arguments.length||void 0===arguments[2]||arguments[2],s=t;return"completed"!==e.completionStatus&&(s*=.8),e.attemptCount>1&&(s*=Math.max(.5,1-.1*(e.attemptCount-1))),e.hasAttemptLimitExceeded()&&(s*=.6),i&&e.objectiveMeasureStatus&&(s*=(e.scaledPassingScore??.7)>e.objectiveNormalizedMeasure?.95:1.05),Math.max(0,s)}identifyActivityClusters(e){const t=[];for(const i of e)i.children.length>0&&i.sequencingControls.flow&&t.push(i);return t}}var Yt=Object.defineProperty,Wt=(e,t,i)=>((e,t,i)=>t in e?Yt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Jt{constructor(e,t,i){Wt(this,"childFilter"),Wt(this,"ruleEvaluator"),Wt(this,"eventCallback"),this.childFilter=e,this.ruleEvaluator=t,this.eventCallback=i||null}objectiveRollupProcess(e){const t=this.objectiveRollupUsingRules(e,e.rollupRules.rules);if(null!==t)return e.objectiveSatisfiedStatus=t,void this.syncPrimaryObjectiveFromActivity(e);const i=this.objectiveRollupUsingMeasure(e);if(null!==i)return e.objectiveSatisfiedStatus=i,void this.syncPrimaryObjectiveFromActivity(e);e.objectiveSatisfiedStatus=this.objectiveRollupUsingDefault(e),this.syncPrimaryObjectiveFromActivity(e)}objectiveRollupUsingRules(e,t){const i=t.filter(e=>e.action===Nt.SATISFIED),s=t.filter(e=>e.action===Nt.NOT_SATISFIED);for(const t of i)if(this.ruleEvaluator.evaluateRollupRule(e,t))return!0;for(const t of s)if(this.ruleEvaluator.evaluateRollupRule(e,t))return!1;return null}objectiveRollupUsingMeasure(e){return e.objectiveMeasureStatus&&null!==e.scaledPassingScore?e.objectiveNormalizedMeasure>=e.scaledPassingScore:null}objectiveRollupUsingDefault(e){const t=e.getAvailableChildren();if(0===t.length)return!1;const i=e.rollupConsiderations,s=t.filter(e=>!(!this.childFilter.checkChildForRollupSubprocess(e,"objective","satisfied")||!this.childFilter.checkChildForRollupSubprocess(e,"objective","notSatisfied")||!i.measureSatisfactionIfActive&&(e.activityAttemptActive||e.isActive)));return 0!==s.length&&!s.some(e=>!this.childFilter.isChildSatisfiedForRollup(e))&&s.every(e=>this.childFilter.isChildSatisfiedForRollup(e))}syncPrimaryObjectiveFromActivity(e){e.primaryObjective&&(e.primaryObjective.satisfiedStatus=e.objectiveSatisfiedStatus,e.primaryObjective.satisfiedStatusKnown=e.objectiveSatisfiedStatusKnown,e.primaryObjective.measureStatus=e.objectiveMeasureStatus,e.primaryObjective.normalizedMeasure=e.objectiveNormalizedMeasure,e.primaryObjective.progressMeasure=e.progressMeasure,e.primaryObjective.progressMeasureStatus=e.progressMeasureStatus,e.primaryObjective.completionStatus=e.completionStatus)}}var Kt=Object.defineProperty,Xt=(e,t,i)=>((e,t,i)=>t in e?Kt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Qt{constructor(e,t,i,s){Xt(this,"childFilter"),Xt(this,"ruleEvaluator"),Xt(this,"objectiveProcessor"),Xt(this,"eventCallback"),this.childFilter=e,this.ruleEvaluator=t,this.objectiveProcessor=i,this.eventCallback=s||null}activityProgressRollupProcess(e){if(this.activityProgressRollupUsingMeasure(e))return;const t=e.rollupRules,i=t.rules.filter(e=>e.action===Nt.COMPLETED),s=t.rules.filter(e=>e.action===Nt.INCOMPLETE);for(const t of i)if(this.ruleEvaluator.evaluateRollupRule(e,t))return e.completionStatus=k,void this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e);for(const t of s)if(this.ruleEvaluator.evaluateRollupRule(e,t))return e.completionStatus=V,void this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e);const r=e.getAvailableChildren().filter(e=>this.childFilter.checkChildForRollupSubprocess(e,"progress","completed")&&this.childFilter.checkChildForRollupSubprocess(e,"progress","incomplete"));return 0===r.length||r.some(e=>!this.childFilter.isChildCompletedForRollup(e))?(e.completionStatus=V,void this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e)):(e.completionStatus=k,void this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e))}activityProgressRollupUsingMeasure(e){return!!e.completedByMeasure&&(e.attemptCompletionAmountStatus?(e.completionStatus=e.minProgressMeasure>e.attemptCompletionAmount?V:k,this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e),!0):(e.completionStatus=H,this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e),!0))}}var Zt=Object.defineProperty;class ei{constructor(e){var t;((e,t,i)=>{t in e?Zt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i})(this,"eventCallback"+"",t),this.eventCallback=e||null}durationRollupProcess(e){if(0===e.children.length)return;const t=e.getAvailableChildren();if(0===t.length)return;let s=null,n=null,o=null,a=null,c=0,l=0;for(const i of t){i.activityStartTimestampUtc&&(s&&i.activityStartTimestampUtc>=s||(s=i.activityStartTimestampUtc)),i.activityEndedDate&&(o&&o>=i.activityEndedDate||(o=i.activityEndedDate));const t="PT0H0M0S"!==i.activityExperiencedDurationValue?i.activityExperiencedDurationValue:i.activityExperiencedDuration;if(t&&"PT0H0M0S"!==t&&(c+=r(t,ne)),!e.attemptStartTimestampUtc||i.attemptStartTimestampUtc&&i.attemptStartTimestampUtc>=e.attemptStartTimestampUtc){i.attemptStartTimestampUtc&&(n&&i.attemptStartTimestampUtc>=n||(n=i.attemptStartTimestampUtc)),i.activityEndedDate&&(a&&a>=i.activityEndedDate||(a=i.activityEndedDate));const e="PT0H0M0S"!==i.attemptExperiencedDurationValue?i.attemptExperiencedDurationValue:i.attemptExperiencedDuration;e&&"PT0H0M0S"!==e&&(l+=r(e,ne))}}if(null!==s){if(e.activityStartTimestampUtc=s,!e.attemptStartTimestampUtc&&n&&(e.attemptStartTimestampUtc=n),e.activityEndedDate=o,o&&e.activityStartTimestampUtc){const t=new Date(e.activityStartTimestampUtc),s=o.getTime()-t.getTime();e.activityAbsoluteDurationValue=i(Math.max(0,s/1e3))}if(a&&e.attemptStartTimestampUtc){const t=new Date(e.attemptStartTimestampUtc),s=a.getTime()-t.getTime();e.attemptAbsoluteDurationValue=i(Math.max(0,s/1e3))}e.activityExperiencedDurationValue=i(c),e.attemptExperiencedDurationValue=i(l),this.eventCallback?.("duration_rollup_completed",{activityId:e.id,activityAbsoluteDuration:e.activityAbsoluteDurationValue,attemptAbsoluteDuration:e.attemptAbsoluteDurationValue,activityExperiencedDuration:e.activityExperiencedDurationValue,attemptExperiencedDuration:e.attemptExperiencedDurationValue,childCount:t.length})}}}var ti=Object.defineProperty,ii=(e,t,i)=>((e,t,i)=>t in e?ti(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class si{constructor(e,t,i,s){ii(this,"measureProcessor"),ii(this,"objectiveProcessor"),ii(this,"progressProcessor"),ii(this,"eventCallback"),ii(this,"processingClusters",new Set),this.measureProcessor=e,this.objectiveProcessor=t,this.progressProcessor=i,this.eventCallback=s||null}processCrossClusterDependencies(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(10>i)if(this.processingClusters.has(e.id))this.eventCallback?.("cross_cluster_skip_reentrant",{activityId:e.id});else try{this.processingClusters.add(e.id),this.eventCallback?.("cross_cluster_processing_started",{activityId:e.id,clusterCount:t.length,depth:i});const s=new Map;for(const e of t)this.analyzeCrossClusterDependencies(e,s);const r=this.resolveDependencyOrder(s);for(const e of r){const s=t.find(t=>t.id===e);s&&this.processClusterRollup(s,i)}this.eventCallback?.("cross_cluster_processing_completed",{activityId:e.id,processedClusters:r.length,dependencyMap:Array.from(s.entries())})}catch(t){this.eventCallback?.("cross_cluster_processing_error",{activityId:e.id,error:t instanceof Error?t.message:t+""})}finally{this.processingClusters.delete(e.id)}else this.eventCallback?.("cross_cluster_max_depth_reached",{activityId:e.id,depth:i,maxDepth:10})}identifyActivityClusters(e){const t=[];for(const i of e)i.children.length>0&&i.sequencingControls.flow&&t.push(i);return t}analyzeCrossClusterDependencies(e,t){t.set(e.id,[])}resolveDependencyOrder(e){const t=[],i=new Set,s=id=>{if(t.includes(id))return;if(i.has(id))return void this.eventCallback?.("circular_dependency_detected",{activityId:id});i.add(id);const r=e.get(id)||[];for(const e of r)s(e);i.delete(id),t.push(id)};for(const id of Array.from(e.keys()))s(id);return t}processClusterRollup(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;const i=this.measureProcessor.measureRollupProcess(e);e.sequencingControls.rollupObjectiveSatisfied&&this.objectiveProcessor.objectiveRollupProcess(e),e.sequencingControls.rollupProgressCompletion&&this.progressProcessor.activityProgressRollupProcess(e),i.length>1&&this.processCrossClusterDependencies(e,i,t+1)}}var ri=Object.defineProperty;class ni{constructor(e){var t;((e,t,i)=>{t in e?ri(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i})(this,"eventCallback"+"",t),this.eventCallback=e||null}processGlobalObjectiveMapping(e,t){try{this.eventCallback?.("global_objective_processing_started",{activityId:e.id,globalObjectiveCount:t.size});const i=[];this.collectActivitiesRecursive(e,i);for(const e of i)this.syncGlobalObjectivesWritePhase(e,t);for(const e of i)this.syncGlobalObjectivesReadPhase(e,t);this.eventCallback?.("global_objective_processing_completed",{activityId:e.id,processedObjectives:t.size})}catch(t){this.eventCallback?.("global_objective_processing_error",{activityId:e.id,error:t instanceof Error?t.message:t+""})}}collectActivitiesRecursive(e,result){result.push(e);for(const t of e.children)this.collectActivitiesRecursive(t,result)}syncGlobalObjectivesWritePhase(e,t){const objectives=e.getAllObjectives();for(const i of objectives){const s=i.mapInfo.length>0?i.mapInfo:[this.createDefaultMapInfo(i)];for(const r of s){const s=this.ensureGlobalObjectiveEntry(t,r.targetObjectiveID||i.id,i);r.writeSatisfiedStatus&&i.measureStatus&&i.isDirty("satisfiedStatus")&&(s.satisfiedStatus=i.satisfiedStatus,s.satisfiedStatusKnown=!0,i.clearDirty("satisfiedStatus")),r.writeNormalizedMeasure&&i.measureStatus&&i.isDirty("normalizedMeasure")&&(s.normalizedMeasure=i.normalizedMeasure,s.normalizedMeasureKnown=!0,i.clearDirty("normalizedMeasure"),s.satisfiedByMeasure||i.satisfiedByMeasure)&&(s.satisfiedStatus=i.normalizedMeasure>=(i.minNormalizedMeasure??e.scaledPassingScore??.7),s.satisfiedStatusKnown=!0,i.clearDirty("satisfiedStatus")),r.writeCompletionStatus&&i.completionStatus!==H&&i.isDirty("completionStatus")&&(s.completionStatus=i.completionStatus,s.completionStatusKnown=!0,i.clearDirty("completionStatus")),r.writeProgressMeasure&&i.progressMeasureStatus&&i.isDirty("progressMeasure")&&(s.progressMeasure=i.progressMeasure,s.progressMeasureKnown=!0,i.clearDirty("progressMeasure")),r.updateAttemptData&&this.updateActivityAttemptData(e,s,i)}}}syncGlobalObjectivesReadPhase(e,t){const objectives=e.getAllObjectives();for(const i of objectives){const s=i.mapInfo.length>0?i.mapInfo:[this.createDefaultMapInfo(i)];for(const r of s){const s=t.get(r.targetObjectiveID||i.id);if(!s)continue;const n=i.isPrimary;r.readSatisfiedStatus&&s.satisfiedStatusKnown&&(i.satisfiedStatus=s.satisfiedStatus,i.measureStatus=!0),r.readNormalizedMeasure&&s.normalizedMeasureKnown&&(i.normalizedMeasure=s.normalizedMeasure,i.measureStatus=!0,s.satisfiedByMeasure||i.satisfiedByMeasure)&&(i.satisfiedStatus=s.normalizedMeasure>=(i.minNormalizedMeasure??e.scaledPassingScore??.7)),r.readProgressMeasure&&s.progressMeasureKnown&&(i.progressMeasure=s.progressMeasure,i.progressMeasureStatus=!0),r.readCompletionStatus&&s.completionStatusKnown&&(i.completionStatus=s.completionStatus),n&&i.applyToActivity(e),this.eventCallback?.("objective_synchronized",{activityId:e.id,objectiveId:i.id,globalState:s,synchronizationTime:(new Date).toISOString()})}}}synchronizeGlobalObjectives(e,t){const objectives=e.getAllObjectives();for(const i of objectives){const s=i.mapInfo.length>0?i.mapInfo:[this.createDefaultMapInfo(i)];for(const r of s){const s=this.ensureGlobalObjectiveEntry(t,r.targetObjectiveID||i.id,i);this.syncObjectiveState(e,i,r,s)}}}syncObjectiveState(e,t,i,s){try{const r=this.getLocalObjectiveState(e,t,t.isPrimary);i.readSatisfiedStatus&&s.satisfiedStatusKnown&&(t.satisfiedStatus=s.satisfiedStatus,t.measureStatus=!0),i.readNormalizedMeasure&&s.normalizedMeasureKnown&&(t.normalizedMeasure=s.normalizedMeasure,t.measureStatus=!0,s.satisfiedByMeasure||t.satisfiedByMeasure)&&(t.satisfiedStatus=s.normalizedMeasure>=(t.minNormalizedMeasure??e.scaledPassingScore??.7)),i.readProgressMeasure&&s.progressMeasureKnown&&(t.progressMeasure=s.progressMeasure,t.progressMeasureStatus=!0),i.readCompletionStatus&&s.completionStatusKnown&&(t.completionStatus=s.completionStatus),t.isPrimary&&t.applyToActivity(e),i.writeSatisfiedStatus&&t.measureStatus&&(s.satisfiedStatus=t.satisfiedStatus,s.satisfiedStatusKnown=!0),i.writeNormalizedMeasure&&t.measureStatus&&(s.normalizedMeasure=t.normalizedMeasure,s.normalizedMeasureKnown=!0,s.satisfiedByMeasure||t.satisfiedByMeasure)&&(s.satisfiedStatus=t.normalizedMeasure>=(t.minNormalizedMeasure??e.scaledPassingScore??.7),s.satisfiedStatusKnown=!0),i.writeCompletionStatus&&t.completionStatus!==H&&(s.completionStatus=t.completionStatus,s.completionStatusKnown=!0),i.writeProgressMeasure&&t.progressMeasureStatus&&(s.progressMeasure=t.progressMeasure,s.progressMeasureKnown=!0),i.updateAttemptData&&this.updateActivityAttemptData(e,s,t),this.eventCallback?.("objective_synchronized",{activityId:e.id,objectiveId:t.id,localState:r,globalState:s,synchronizationTime:(new Date).toISOString()})}catch(i){this.eventCallback?.("objective_sync_error",{activityId:e.id,objectiveId:t.id,error:i instanceof Error?i.message:i+"",timestamp:(new Date).toISOString()})}}ensureGlobalObjectiveEntry(e,t,i){return e.has(t)||e.set(t,{id:t,satisfiedStatus:i.satisfiedStatus,satisfiedStatusKnown:i.satisfiedStatusKnown,normalizedMeasure:i.normalizedMeasure,normalizedMeasureKnown:i.measureStatus,progressMeasure:i.progressMeasure,progressMeasureKnown:i.progressMeasureStatus,completionStatus:i.completionStatus,completionStatusKnown:i.completionStatus!==H,satisfiedByMeasure:i.satisfiedByMeasure,minNormalizedMeasure:i.minNormalizedMeasure}),e.get(t)}createDefaultMapInfo(e){return{targetObjectiveID:e.id,readSatisfiedStatus:!1,writeSatisfiedStatus:!0,readNormalizedMeasure:!1,writeNormalizedMeasure:!0,readCompletionStatus:!1,writeCompletionStatus:!0,readProgressMeasure:!1,writeProgressMeasure:!0,updateAttemptData:e.isPrimary}}getLocalObjectiveState(e,t,i){return i?{id:t.id,satisfiedStatus:e.objectiveSatisfiedStatus,measureStatus:e.objectiveMeasureStatus,normalizedMeasure:e.objectiveNormalizedMeasure,progressMeasure:e.progressMeasure,progressMeasureStatus:e.progressMeasureStatus,completionStatus:e.completionStatus,scaledPassingScore:e.scaledPassingScore}:{id:t.id,satisfiedStatus:t.satisfiedStatus,measureStatus:t.measureStatus,normalizedMeasure:t.normalizedMeasure,progressMeasure:t.progressMeasure,progressMeasureStatus:t.progressMeasureStatus,completionStatus:t.completionStatus,scaledPassingScore:t.minNormalizedMeasure}}updateActivityAttemptData(e,t,i){try{if(!i.isPrimary&&!t.updateAttemptData)return;const s=e.rollupRules.rules.some(e=>"completed"===e.action||"incomplete"===e.action);t.satisfiedStatusKnown&&t.satisfiedStatus&&(s||e.completionStatus!==H&&e.completionStatus!==V||(e.completionStatus=k),"unknown"===e.successStatus&&(e.successStatus="passed")),t.attemptCount&&t.attemptCount>e.attemptCount&&(e.attemptCount=t.attemptCount),t.progressMeasureKnown&&void 0!==t.progressMeasure&&(e.attemptCompletionAmount=t.progressMeasure),t.attemptAbsoluteDuration&&(e.attemptAbsoluteDuration=t.attemptAbsoluteDuration),t.attemptExperiencedDuration&&(e.attemptExperiencedDuration=t.attemptExperiencedDuration),t.activityAbsoluteDuration&&(e.activityAbsoluteDuration=t.activityAbsoluteDuration),t.activityExperiencedDuration&&(e.activityExperiencedDuration=t.activityExperiencedDuration),void 0!==t.location&&(e.location=t.location),void 0!==t.suspendData&&(e.isSuspended=t.suspendData.length>0)}catch(t){this.eventCallback?.("attempt_data_update_error",{activityId:e.id,error:t instanceof Error?t.message:t+"",timestamp:(new Date).toISOString()})}}}var oi=Object.defineProperty,ai=(e,t,i)=>((e,t,i)=>t in e?oi(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class ci{constructor(e,t){ai(this,"rollupStateLog",[]),ai(this,"childFilter"),ai(this,"eventCallback"),this.childFilter=e,this.eventCallback=t||null}validateRollupStateConsistency(e){try{this.eventCallback?.("rollup_validation_started",{activityId:e.id,timestamp:(new Date).toISOString()});const t=[];return this.validateActivityRollupState(e,t),t.length>0?(this.eventCallback?.("rollup_state_inconsistencies",{activityId:e.id,inconsistencies:t,count:t.length}),!1):(this.eventCallback?.("rollup_validation_completed",{activityId:e.id,result:"consistent"}),!0)}catch(t){return this.eventCallback?.("rollup_validation_error",{activityId:e.id,error:t instanceof Error?t.message:t+""}),!1}}validateActivityRollupState(e,t){const i=e.id;e.objectiveMeasureStatus&&null===e.objectiveNormalizedMeasure&&t.push(`Activity ${i}: measure status true but normalized measure is null`),e.objectiveMeasureStatus&&null!==e.scaledPassingScore&&"unknown"!==e.successStatus&&e.objectiveSatisfiedStatus!==e.objectiveNormalizedMeasure>=e.scaledPassingScore&&t.push(`Activity ${i}: satisfaction status inconsistent with measure`);const s=e.sequencingControls,r=e.getAvailableChildren();if(r.length>0&&s.rollupObjectiveSatisfied){const s=r.filter(e=>this.childFilter.checkChildForRollupSubprocess(e,"objective","satisfied")&&this.childFilter.isChildSatisfiedForRollup(e)),n=r.filter(e=>this.childFilter.checkChildForRollupSubprocess(e,"objective","notSatisfied")&&!this.childFilter.isChildSatisfiedForRollup(e));s.length>0&&0===n.length&&!1===e.objectiveSatisfiedStatus&&0===e.rollupRules.rules.length&&t.push(`Activity ${i}: all children satisfied but parent is not satisfied (no rollup rules to override)`)}if(r.length>0&&s.rollupProgressCompletion){const s=r.filter(e=>this.childFilter.checkChildForRollupSubprocess(e,"progress","completed")&&this.childFilter.isChildCompletedForRollup(e)),n=r.filter(e=>this.childFilter.checkChildForRollupSubprocess(e,"progress","incomplete")&&!this.childFilter.isChildCompletedForRollup(e));s.length>0&&0===n.length&&"completed"!==e.completionStatus&&0===e.rollupRules.rules.length&&t.push(`Activity ${i}: all children completed but parent is incomplete (no rollup rules to override)`)}for(const e of r)this.validateActivityRollupState(e,t);this.rollupStateLog.push({activity:i,timestamp:(new Date).toISOString(),state:{measureStatus:e.objectiveMeasureStatus,measure:e.objectiveNormalizedMeasure,satisfiedStatus:e.objectiveSatisfiedStatus,completionStatus:e.completionStatus}})}getRollupStateLog(){return[...this.rollupStateLog]}clearRollupStateLog(){this.rollupStateLog=[]}}var li=Object.defineProperty,ui=(e,t,i)=>((e,t,i)=>t in e?li(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class hi{constructor(e){ui(this,"childFilter"),ui(this,"ruleEvaluator"),ui(this,"measureProcessor"),ui(this,"objectiveProcessor"),ui(this,"progressProcessor"),ui(this,"durationProcessor"),ui(this,"globalObjectiveSynchronizer"),ui(this,"stateValidator"),ui(this,"crossClusterProcessor"),ui(this,"eventCallback"),this.eventCallback=e||null,this.childFilter=new Vt,this.ruleEvaluator=new Bt(this.childFilter),this.measureProcessor=new Gt(this.childFilter,e),this.objectiveProcessor=new Jt(this.childFilter,this.ruleEvaluator,e),this.progressProcessor=new Qt(this.childFilter,this.ruleEvaluator,this.objectiveProcessor,e),this.durationProcessor=new ei(e),this.globalObjectiveSynchronizer=new ni(e),this.stateValidator=new ci(this.childFilter,e),this.crossClusterProcessor=new si(this.measureProcessor,this.objectiveProcessor,this.progressProcessor,e)}overallRollupProcess(e){const t=[];let i=e.parent,s=!1,r=!0;for(;i;){if(i.children.length>0&&this.durationProcessor.durationRollupProcess(i),!s){const e=i.captureRollupStatus();if(i.sequencingControls.rollupObjectiveSatisfied||i.sequencingControls.rollupProgressCompletion){if(i.children.length>0){const e=this.measureProcessor.measureRollupProcess(i);this.measureProcessor.completionMeasureRollupProcess(i),e.length>1&&this.crossClusterProcessor.processCrossClusterDependencies(i,e)}i.sequencingControls.rollupObjectiveSatisfied&&this.objectiveProcessor.objectiveRollupProcess(i),i.sequencingControls.rollupProgressCompletion&&this.progressProcessor.activityProgressRollupProcess(i)}const n=i.captureRollupStatus();r||!kt.compareRollupStatus(e,n)||(this.eventCallback?.("rollup_optimization_activated",{activityId:i.id,depth:t.length}),s=!0),!r&&kt.compareRollupStatus(e,n)||t.push(i)}i=i.parent,r=!1}return t}validateRollupStateConsistency(e){return this.stateValidator.validateRollupStateConsistency(e)}processGlobalObjectiveMapping(e,t){this.globalObjectiveSynchronizer.processGlobalObjectiveMapping(e,t)}calculateComplexWeightedMeasure(e,t,i){return this.measureProcessor.calculateComplexWeightedMeasure(e,t,i)}processCrossClusterDependencies(e,t){this.crossClusterProcessor.processCrossClusterDependencies(e,t)}getChildFilter(){return this.childFilter}getRuleEvaluator(){return this.ruleEvaluator}getMeasureProcessor(){return this.measureProcessor}getObjectiveProcessor(){return this.objectiveProcessor}getProgressProcessor(){return this.progressProcessor}getDurationProcessor(){return this.durationProcessor}getGlobalObjectiveSynchronizer(){return this.globalObjectiveSynchronizer}getStateValidator(){return this.stateValidator}getCrossClusterProcessor(){return this.crossClusterProcessor}}var di=Object.defineProperty;const mi=[k,V,H],pi=[P,z,F];function _i(e){return e&&mi.includes(e)?e:null}function gi(e){return e&&pi.includes(e)?e:null}class vi{constructor(e){var t;((e,t,i)=>{t in e?di(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i})(this,"context"+"",t),this.context=e}transferRteData(e){if(!this.context.getCMIData)return;const t=this.context.getCMIData();t&&(this.transferPrimaryObjective(e,t),this.transferNonPrimaryObjectives(e,t),this.context.fireEvent("onRteDataTransfer",{activityId:e.id,timestamp:(new Date).toISOString()}))}transferPrimaryObjective(e,t){const i=_i(t.completion_status);i&&i!==H&&(e.completionStatus=i,e.attemptProgressStatus=!0);let s=!1,r=!1,n=!1,o=0;const a=gi(t.success_status);if(a&&a!==F&&(r=a===P,s=!0,e.objectiveSatisfiedStatus=r,e.objectiveSatisfiedStatusKnown=!0,e.successStatus=a,e.objectiveMeasureStatus=!0),t.score){const i=this.normalizeScore(t.score);null!==i&&(o=i,n=!0,e.objectiveNormalizedMeasure=o,e.objectiveMeasureStatus=!0)}if(e.primaryObjective&&(s||n)&&(e.primaryObjective.initializeFromCMI(s?r:e.primaryObjective.satisfiedStatus,n?o:e.primaryObjective.normalizedMeasure,s||n),s&&(e.primaryObjective.satisfiedStatusKnown=!0,e.primaryObjective.progressStatus=!0)),t.progress_measure&&""!==t.progress_measure){const i=parseFloat(t.progress_measure);isNaN(i)||(e.progressMeasure=i,e.progressMeasureStatus=!0,e.primaryObjective&&(e.primaryObjective.progressMeasure=i,e.primaryObjective.progressMeasureStatus=!0))}}transferNonPrimaryObjectives(e,t){if(t.objectives&&0!==t.objectives.length)for(const i of t.objectives){if(!i.id)continue;const t=e.getObjectiveById(i.id);if(!t||t.isPrimary)continue;const s=t.objective;let r=!1,n=!1,o=!1,a=0;const c=gi(i.success_status);c&&c!==F&&(n=c===P,r=!0,s.progressStatus=!0);const l=_i(i.completion_status);if(l&&l!==H&&(s.completionStatus=l),i.score){const e=this.normalizeScore(i.score);null!==e&&(a=e,o=!0)}if((r||o)&&s.initializeFromCMI(r?n:s.satisfiedStatus,o?a:s.normalizedMeasure,o),i.progress_measure&&""!==i.progress_measure){const e=parseFloat(i.progress_measure);isNaN(e)||(s.progressMeasure=e,s.progressMeasureStatus=!0)}}}normalizeScore(score){if(score.scaled&&""!==score.scaled){const e=parseFloat(score.scaled);if(!isNaN(e))return e}if(score.raw&&""!==score.raw&&score.min&&""!==score.min&&score.max&&""!==score.max){const e=parseFloat(score.raw),t=parseFloat(score.min),i=parseFloat(score.max);if(!isNaN(e)&&!isNaN(t)&&!isNaN(i)&&i>t)return Math.max(-1,Math.min(1,(e-t)/(i-t)))}return null}}var fi=Object.defineProperty,Si=(e,t,i)=>((e,t,i)=>t in e?fi(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class bi{constructor(e,t,i,s){let r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,n=arguments.length>5?arguments[5]:void 0;Si(this,"activityTree"),Si(this,"sequencingProcess"),Si(this,"rollupProcess"),Si(this,"globalObjectiveMap"),Si(this,"eventCallback"),Si(this,"getCMIData"),Si(this,"is4thEdition"),Si(this,"invalidateCacheCallback",null),Si(this,"_rteDataTransferService"),this.activityTree=e,this.sequencingProcess=t,this.rollupProcess=i,this.globalObjectiveMap=s,this.eventCallback=r,this.getCMIData=n?.getCMIData||null,this.is4thEdition=n?.is4thEdition||!1,this._rteDataTransferService=new vi({getCMIData:this.getCMIData,fireEvent:(e,t)=>this.fireEvent(e,t)})}setInvalidateCacheCallback(e){this.invalidateCacheCallback=e}processTerminationRequest(request){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],t=arguments.length>2?arguments[2]:void 0;const i=this.activityTree.currentActivity;if(!i)return{terminationRequest:request,sequencingRequest:null,exception:"TB.2.3-1",valid:!1};if((request===xe.EXIT||request===xe.ABANDON)&&!i.isActive)return{terminationRequest:request,sequencingRequest:null,exception:"TB.2.3-2",valid:!1};if(this.fireEvent("onTerminationRequestProcessing",{request:request,hasSequencingRequest:e,currentActivity:i.id,exitType:t}),"logout"===t)return this.fireEvent("onSequencingDebug",{message:"cmi.exit='logout' detected, treating as EXIT_ALL",activityId:i.id}),this.handleExitAll(i);switch(request){case xe.EXIT:return this.handleExit(i,e);case xe.EXIT_ALL:return this.handleExitAll(i);case xe.ABANDON:return this.handleAbandon(i,e);case xe.ABANDON_ALL:return this.handleAbandonAll(i);case xe.SUSPEND_ALL:return this.handleSuspendAll(i);default:return{terminationRequest:request,sequencingRequest:null,exception:"TB.2.3-7",valid:!1}}}handleExitTermination(e,t){return this.handleExit(e,t)}handleExit(e,t){e.children.length>0&&this.terminateDescendants(e),this.endAttempt(e);const i=this.evaluateExitRules(e);if("EXIT_ALL"===i.action)return this.handleExitAll(e);let s,r;"EXIT_PARENT"===i.action&&e.parent&&(this.activityTree.currentActivity=e.parent,this.endAttempt(this.activityTree.currentActivity));do{if(s=!1,r=this.evaluatePostConditions(this.activityTree.currentActivity||e),r.terminationRequest===xe.EXIT_ALL)return this.fireEvent("onPostConditionExitAll",{activity:(this.activityTree.currentActivity||e).id}),this.handleExitAll(this.activityTree.root);if(r.terminationRequest===xe.EXIT_PARENT){const t=this.activityTree.currentActivity||e;if(!t.parent)return{terminationRequest:xe.EXIT_PARENT,sequencingRequest:null,exception:"TB.2.3-4",valid:!1};this.activityTree.currentActivity=t.parent,this.endAttempt(this.activityTree.currentActivity),s=!0,this.fireEvent("onPostConditionExitParent",{fromActivity:t.id,toActivity:this.activityTree.currentActivity.id})}if(!s&&(this.activityTree.currentActivity||e)===this.activityTree.root&&r.sequencingRequest!==xe.RETRY)return{terminationRequest:xe.EXIT,sequencingRequest:xe.EXIT,exception:null,valid:!0}}while(s);if(!t&&!r.sequencingRequest){const t=this.activityTree.currentActivity||e;t.parent&&this.activityTree.setCurrentActivityWithoutActivation(t.parent)}return{terminationRequest:xe.EXIT,sequencingRequest:r.sequencingRequest,exception:null,valid:!0}}handleExitAll(e){return this.activityTree.root&&this.handleMultiLevelExit(this.activityTree.root),this.activityTree.root&&this.endAttempt(this.activityTree.root),this.activityTree.currentActivity=null,this.cleanupSuspendedActivity(),{terminationRequest:xe.EXIT_ALL,sequencingRequest:xe.EXIT,exception:null,valid:!0}}handleAbandon(e,t){return e.isActive=!1,t||(this.activityTree.currentActivity=e.parent),{terminationRequest:xe.ABANDON,sequencingRequest:null,exception:null,valid:!0}}handleAbandonAll(e){const t=[];let i=e;for(;null!==i;)t.push(i),i=i.parent;if(0===t.length)return{terminationRequest:xe.ABANDON_ALL,sequencingRequest:null,exception:"TB.2.3-6",valid:!1};for(const e of t)e.isActive=!1;return this.activityTree.currentActivity=null,this.cleanupSuspendedActivity(),{terminationRequest:xe.ABANDON_ALL,sequencingRequest:null,exception:null,valid:!0}}handleSuspendAll(e){const t=this.processSuspendAllRequest(e);return t.valid?{terminationRequest:xe.SUSPEND_ALL,sequencingRequest:xe.EXIT,exception:null,valid:!0}:t}processSuspendAllRequest(e){const t=this.activityTree.root;if(!e||!t)return this.fireEvent("onSuspendError",{exception:"TB.2.3-1",message:"No current activity to suspend",activity:e?.id}),{terminationRequest:xe.SUSPEND_ALL,sequencingRequest:null,exception:"TB.2.3-1",valid:!1};if(e===t&&!e.isActive&&!e.isSuspended)return this.fireEvent("onSuspendError",{exception:"TB.2.3-3",message:"Nothing to suspend (root activity)",activity:e.id}),{terminationRequest:xe.SUSPEND_ALL,sequencingRequest:null,exception:"TB.2.3-3",valid:!1};this.activityTree.suspendedActivity=e;const i=e,s=[];let r=i;for(;null!==r;)s.push(r),r=r.parent;if(0===s.length)return this.fireEvent("onSuspendError",{exception:"TB.2.3-5",message:"Activity path is empty",activity:i?.id}),{terminationRequest:xe.SUSPEND_ALL,sequencingRequest:null,exception:"TB.2.3-5",valid:!1};for(const e of s)e.isActive=!1,e.isSuspended=!0;return this.activityTree.currentActivity=t,t.isActive=!1,this.fireEvent("onActivitySuspended",{activity:i?.id,suspendedPath:s.map(e=>e.id),pathLength:s.length,timestamp:(new Date).toISOString()}),{terminationRequest:xe.SUSPEND_ALL,sequencingRequest:null,exception:null,valid:!0}}evaluateExitRules(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;t++;const i=e.sequencingRules.exitConditionRules;for(const s of i){let i;if(i="all"===s.conditionCombination?s.conditions.every(t=>t.evaluate(e)):s.conditions.some(t=>t.evaluate(e)),i){if(s.action===Ee.EXIT_PARENT)return{action:"EXIT_PARENT",recursionDepth:t};if(s.action===Ee.EXIT_ALL)return{action:"EXIT_ALL",recursionDepth:t}}}return{action:null,recursionDepth:t}}evaluatePostConditions(e){const t=this.sequencingProcess.evaluatePostConditionRules(e);return(t.sequencingRequest||t.terminationRequest)&&this.fireEvent("onPostConditionEvaluated",{activity:e.id,sequencingRequest:t.sequencingRequest,terminationRequest:t.terminationRequest,timestamp:(new Date).toISOString()}),t}handleMultiLevelExit(e){this.processExitAtLevel(e,0),this.terminateAll(e)}processExitAtLevel(e,t){const i=this.evaluateExitRules(e,0);i.action&&this.fireEvent("onMultiLevelExitAction",{activity:e.id,level:t,action:i.action});for(const i of e.children)this.processExitAtLevel(i,t+1)}cleanupSuspendedActivity(){const e=this.activityTree.suspendedActivity;if(e){let t=e;const i=[];for(;t;)t.isSuspended&&(t.isSuspended=!1,i.push(t.id)),t=t.parent;this.activityTree.suspendedActivity=null,this.fireEvent("onSuspendedActivityCleanup",{cleanedActivities:i,originalSuspendedActivity:e.id})}}terminateAll(e){for(const t of e.children)this.terminateAll(t);e.isActive&&this.endAttempt(e)}terminateDescendants(e){for(const t of e.children){t.children.length>0&&this.terminateDescendants(t);const e=this.exitActionRulesSubprocess(t);t.isActive&&("EXIT_ALL"===e&&this.terminateDescendants(t),this.endAttempt(t))}}exitActionRulesSubprocess(e){const t=e.sequencingRules.exitConditionRules;for(const i of t){let t;if(t="all"===i.conditionCombination?i.conditions.every(t=>t.evaluate(e)):i.conditions.some(t=>t.evaluate(e)),t){if(i.action===Ee.EXIT_PARENT)return"EXIT_PARENT";if(i.action===Ee.EXIT_ALL)return"EXIT_ALL"}}return null}clearSuspendedActivity(){if(this.activityTree.suspendedActivity){let e=this.activityTree.suspendedActivity;for(;e;)e.isSuspended=!1,e=e.parent;this.activityTree.suspendedActivity=null}}endAttempt(e){if(e.isActive){if(this._rteDataTransferService.transferRteData(e),e.isActive=!1,e.activityAttemptActive=!1,0===e.children.length){if(!e.isSuspended&&(e.sequencingControls.completionSetByContent||e.attemptProgressStatus||(e.attemptProgressStatus=!0,e.completionStatus="completed",e.wasAutoCompleted=!0,this.fireEvent("onAutoCompletion",{activityId:e.id,timestamp:(new Date).toISOString()})),!e.sequencingControls.objectiveSetByContent)){const t=e.primaryObjective;t&&(t.progressStatus||(t.progressStatus=!0,t.satisfiedStatus=!0,e.objectiveSatisfiedStatus=!0,e.successStatus="passed",e.wasAutoSatisfied=!0,this.fireEvent("onAutoSatisfaction",{activityId:e.id,timestamp:(new Date).toISOString()})))}}else{const t=e.children.some(e=>e.isSuspended);e.isSuspended=t}"unknown"===e.completionStatus&&(e.completionStatus="incomplete"),"unknown"===e.successStatus&&e.objectiveSatisfiedStatus&&(e.successStatus=e.objectiveSatisfiedStatus?"passed":"failed"),this.rollupProcess.processGlobalObjectiveMapping(this.activityTree.root||e,this.globalObjectiveMap),this.rollupProcess.overallRollupProcess(e),this.invalidateCacheCallback&&this.invalidateCacheCallback(),this.activityTree.root&&this.rollupProcess.validateRollupStateConsistency(this.activityTree.root),Ye.applySelectionAndRandomization(e,!1)}}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire sequencing event ${e}: ${t}`)}}}var yi=Object.defineProperty,Ci=(e,t,i)=>((e,t,i)=>t in e?yi(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Ai{constructor(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;Ci(this,"valid"),Ci(this,"targetActivity"),Ci(this,"exception"),this.valid=e,this.targetActivity=t,this.exception=i}}const Ei=class e{constructor(e,t,i){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,n=arguments.length>5?arguments[5]:void 0;Ci(this,"activityTree"),Ci(this,"rollupProcess"),Ci(this,"globalObjectiveMap"),Ci(this,"adlNav"),Ci(this,"eventCallback"),Ci(this,"now"),Ci(this,"defaultHideLmsUi"),Ci(this,"defaultAuxiliaryResources"),Ci(this,"_deliveryInProgress",!1),Ci(this,"contentDelivered",!1),Ci(this,"checkActivityCallback",null),Ci(this,"invalidateCacheCallback",null),Ci(this,"updateNavigationValidityCallback",null),Ci(this,"clearSuspendedActivityCallback",null),this.activityTree=e,this.rollupProcess=t,this.globalObjectiveMap=i,this.adlNav=s,this.eventCallback=r,this.now=n?.now||(()=>new Date),this.defaultHideLmsUi=n?.defaultHideLmsUi?[...n.defaultHideLmsUi]:[],this.defaultAuxiliaryResources=n?.defaultAuxiliaryResources?n.defaultAuxiliaryResources.map(e=>({...e})):[]}setCheckActivityCallback(e){this.checkActivityCallback=e}setInvalidateCacheCallback(e){this.invalidateCacheCallback=e}setUpdateNavigationValidityCallback(e){this.updateNavigationValidityCallback=e}setClearSuspendedActivityCallback(e){this.clearSuspendedActivityCallback=e}isDeliveryInProgress(){return this._deliveryInProgress}hasContentBeenDelivered(){return this.contentDelivered}resetContentDelivered(){this.contentDelivered=!1}setContentDelivered(e){this.contentDelivered=e}processDeliveryRequest(e){if(this.fireEvent("onDeliveryRequestProcessing",{activity:e.id,timestamp:(new Date).toISOString()}),e.children.length>0)return new Ai(!1,null,"DB.1.1-1");const t=this.getActivityPath(e,!0);if(0===t.length)return new Ai(!1,null,"DB.1.1-2");for(const e of t)if(this.checkActivityCallback&&!this.checkActivityCallback(e))return new Ai(!1,null,"DB.1.1-3");return new Ai(!0,e)}contentDeliveryEnvironmentProcess(e){this._deliveryInProgress=!0;try{const t=e.isSuspended;this.activityTree.suspendedActivity&&this.clearSuspendedActivityCallback&&this.clearSuspendedActivityCallback();const i=this.getActivityPath(e,!0);for(const e of i)e.isActive||(t||e.isSuspended?e.isSuspended=!1:e.incrementAttemptCount(),e.isActive=!0,Ye.applySelectionAndRandomization(e,1>=e.attemptCount));this.activityTree.currentActivity=e,this.initializeForDelivery(e),this.setupAttemptTracking(e),this.contentDelivered=!0,this.adlNav&&this.updateNavigationValidityCallback&&this.updateNavigationValidityCallback(),this.fireDeliveryEvent(e)}finally{this._deliveryInProgress=!1}}initializeForDelivery(e){"unknown"===e.completionStatus&&0===e.children.length&&(e.completionStatus="not attempted"),null===e.objectiveSatisfiedStatus&&(e.objectiveSatisfiedStatus=!1),null===e.progressMeasure&&(e.progressMeasure=0,e.progressMeasureStatus=!1),null===e.objectiveNormalizedMeasure&&(e.objectiveNormalizedMeasure=0,e.objectiveMeasureStatus=!1),e.attemptAbsoluteDuration="PT0H0M0S",e.attemptExperiencedDuration="PT0H0M0S",e.isAvailable=!0}setupAttemptTracking(e){e.wasSkipped=!1,e.attemptAbsoluteStartTime=this.now().toISOString(),e.location||(e.location=""),e.activityAttemptActive=!0,e.learnerPrefs||(e.learnerPrefs={audioCaptioning:"0",audioLevel:"1",deliverySpeed:"1",language:""})}fireDeliveryEvent(e){try{this.eventCallback&&this.eventCallback("onActivityDelivery",e),console.debug(`Activity delivered: ${e.id} - ${e.title}`)}catch(e){console.warn("Failed to fire activity delivery event: "+e)}}getEffectiveHideLmsUi(t){const i=new Set;for(const e of this.defaultHideLmsUi)i.add(e);let s=t;for(;s;){for(const e of s.hideLmsUi)i.add(e);s=s.parent}return e.HIDE_LMS_UI_ORDER.filter(e=>i.has(e))}getEffectiveAuxiliaryResources(e){const t=new Map;for(const e of this.defaultAuxiliaryResources)e.resourceId&&t.set(e.resourceId,{...e});const i=[];let s=e;for(;s;)i.push(s),s=s.parent;for(const e of i.reverse())for(const i of e.auxiliaryResources)i.resourceId&&t.set(i.resourceId,{...i});return Array.from(t.values())}getContentActivityData(e){return{hideLmsUi:this.getEffectiveHideLmsUi(e),auxiliaryResources:this.getEffectiveAuxiliaryResources(e),location:e.location||"",credit:e.credit||"credit",launchData:e.launchData||"",maxTimeAllowed:e.attemptAbsoluteDurationLimit||"",completionThreshold:e.completionThreshold?.toString()||"",timeLimitAction:e.timeLimitAction||"continue,no message"}}getActivityPath(e){let t=1>=arguments.length||void 0===arguments[1]||arguments[1];const i=[];let s=e;for(;null!==s;)i.unshift(s),s=s.parent;return!t&&i.length>0&&i.pop(),i}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire sequencing event ${e}: ${t}`)}}};Ci(Ei,"HIDE_LMS_UI_ORDER",[...be]);let wi=Ei;var Mi=Object.defineProperty,Oi=(e,t,i)=>((e,t,i)=>t in e?Mi(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Ri{constructor(e,t){Oi(this,"activityTree"),Oi(this,"sequencingProcess"),Oi(this,"cache",null),Oi(this,"isDirty",!0),this.activityTree=e,this.sequencingProcess=t}predictContinueEnabled(){return this.ensureCacheValid(),this.cache?.continueEnabled??!1}predictPreviousEnabled(){return this.ensureCacheValid(),this.cache?.previousEnabled??!1}predictChoiceEnabled(e){return this.ensureCacheValid(),this.cache?.choiceEnabledMap.get(e)??!1}getAvailableChoices(){return this.ensureCacheValid(),Array.from(this.cache?.availableChoices??[])}getAllPredictions(){return this.ensureCacheValid(),{continueEnabled:this.cache?.continueEnabled??!1,previousEnabled:this.cache?.previousEnabled??!1,availableChoices:Array.from(this.cache?.availableChoices??[])}}invalidateCache(){this.isDirty=!0}updateCache(){this.isDirty=!0,this.ensureCacheValid()}ensureCacheValid(){const e=this.calculateTreeStateHash();!this.isDirty&&this.cache&&this.cache.treeStateHash===e||(this.recalculateCache(e),this.isDirty=!1)}recalculateCache(e){const t=this.activityTree.currentActivity;this.cache={continueEnabled:!1,previousEnabled:!1,availableChoices:new Set,choiceEnabledMap:new Map,treeStateHash:e},t?(this.cache.continueEnabled=this.predictContinueInternal(t),this.cache.previousEnabled=this.predictPreviousInternal(t),this.calculateAvailableChoices()):this.calculateAvailableChoicesFromRoot()}predictContinueInternal(e){return!!e.parent&&!!e.parent.sequencingControls.flow&&this.hasAvailableNextActivity(e)}hasAvailableNextActivity(e){const t=e.parent;if(!t)return!1;const i=t.children,s=i.indexOf(e);if(-1===s)return!1;if(i.length-1>s)for(let e=s+1;i.length>e;e++){const t=i[e];if(t&&this.isActivityPotentiallyDeliverableForward(t))return!0}return!(!t.parent||!t.sequencingControls.flow)&&this.hasAvailableNextActivity(t)}predictPreviousInternal(e){return!!e.parent&&!!e.parent.sequencingControls.flow&&!e.parent.sequencingControls.forwardOnly&&this.hasAvailablePreviousActivity(e)}hasAvailablePreviousActivity(e){const t=e.parent;if(!t)return!1;const i=t.children,s=i.indexOf(e);if(-1===s)return!1;if(s>0)for(let e=s-1;e>=0;e--){const t=i[e];if(t&&this.isActivityPotentiallyDeliverableBackward(t))return!0}return!(!t.parent||!t.sequencingControls.flow||t.sequencingControls.forwardOnly)&&this.hasAvailablePreviousActivity(t)}calculateAvailableChoicesFromRoot(){}calculateAvailableChoices(){this.cache&&this.activityTree.root&&this.recursivelyCheckChoiceAvailability(this.activityTree.root)}recursivelyCheckChoiceAvailability(e){if(!this.cache)return;const t=this.sequencingProcess.validateNavigationRequest(xe.CHOICE,e.id,this.activityTree.currentActivity).valid;if(this.cache.choiceEnabledMap.set(e.id,t),t&&this.cache.availableChoices.add(e.id),e.children)for(const t of e.children)this.recursivelyCheckChoiceAvailability(t)}isActivityPotentiallyDeliverableForward(e){if(e.isHiddenFromChoice||!e.isAvailable)return!1;if(0===e.children.length)return!!e.isVisible&&this.sequencingProcess.canActivityBeDelivered(e);for(const t of e.children)if(this.isActivityPotentiallyDeliverableForward(t))return!0;return!1}isActivityPotentiallyDeliverableBackward(e){if(e.isHiddenFromChoice||!e.isAvailable)return!1;if(0===e.children.length)return e.isVisible;for(const t of e.children)if(this.isActivityPotentiallyDeliverableBackward(t))return!0;return!1}calculateTreeStateHash(){const e=this.activityTree.currentActivity,t=this.activityTree.suspendedActivity;return[e?.id??"none",t?.id??"none",this.getActivityTreeStateSignature()].join("|")}getActivityTreeStateSignature(){if(!this.activityTree.root)return"empty";const e=[];return this.collectActivitySignatures(this.activityTree.root,e),e.join(":")}collectActivitySignatures(e,t){if(t.push(e.id+(e.isActive?"A":"-")+(e.isSuspended?"S":"-")+e.completionStatus+e.successStatus+e.attemptCount),e.children)for(const i of e.children)this.collectActivitySignatures(i,t)}}var Ti=Object.defineProperty,ji=(e,t,i)=>((e,t,i)=>t in e?Ti(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i),Ii=(e=>(e.START="start",e.RESUME_ALL="resumeAll",e.CONTINUE="continue",e.PREVIOUS="previous",e.CHOICE="choice",e.JUMP="jump",e.EXIT="exit",e.EXIT_ALL="exitAll",e.ABANDON="abandon",e.ABANDON_ALL="abandonAll",e.SUSPEND_ALL="suspendAll",e.NOT_VALID="_none_",e))(Ii||{});class Ni{constructor(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;ji(this,"valid"),ji(this,"terminationRequest"),ji(this,"sequencingRequest"),ji(this,"targetActivityId"),ji(this,"exception"),this.valid=e,this.terminationRequest=t,this.sequencingRequest=i,this.targetActivityId=s,this.exception=r}}class xi{constructor(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;ji(this,"activityTree"),ji(this,"sequencingProcess"),ji(this,"adlNav"),ji(this,"eventCallback"),ji(this,"navigationLookAhead"),ji(this,"getEffectiveHideLmsUiCallback",null),this.activityTree=e,this.sequencingProcess=t,this.adlNav=i,this.eventCallback=s,this.navigationLookAhead=new Ri(e,t)}setGetEffectiveHideLmsUiCallback(e){this.getEffectiveHideLmsUiCallback=e}getNavigationLookAhead(){return this.navigationLookAhead}validateRequest(request){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.fireEvent("onNavigationRequestProcessing",{request:request,targetActivityId:e});const t=this.activityTree.currentActivity;switch(request){case"start":return this.validateStartRequest(t);case"resumeAll":return this.validateResumeRequest(t);case"continue":return this.validateContinueRequest(t);case"previous":return this.validatePreviousRequest(t);case"choice":return this.validateChoiceRequest(t,e);case"jump":return this.validateJumpRequest(e);case"exit":return this.validateExitRequest(t);case"exitAll":return this.validateExitAllRequest(t);case"abandon":return this.validateAbandonRequest(t);case"abandonAll":return this.validateAbandonAllRequest(t);case"suspendAll":return this.validateSuspendAllRequest(t);default:return new Ni(!1,null,null,null,"NB.2.1-18")}}validateStartRequest(e){return null!==e?new Ni(!1,null,null,null,"NB.2.1-1"):new Ni(!0,null,xe.START,null)}validateResumeRequest(e){return null!==e?new Ni(!1,null,null,null,"NB.2.1-2"):null===this.activityTree.suspendedActivity?new Ni(!1,null,null,null,"NB.2.1-3"):new Ni(!0,null,xe.RESUME_ALL,null)}validateContinueRequest(e){return e?e.parent&&e.parent.sequencingControls.flow?new Ni(!0,e.isActive?xe.EXIT:null,xe.CONTINUE,null):new Ni(!1,null,null,null,"NB.2.1-5"):new Ni(!1,null,null,null,"NB.2.1-4")}validatePreviousRequest(e){if(!e)return new Ni(!1,null,null,null,"NB.2.1-6");if(!e.parent||!e.parent.sequencingControls.flow)return new Ni(!1,null,null,null,"NB.2.1-7");const t=this.validateForwardOnlyConstraints(e);return t.valid?new Ni(!0,e.isActive?xe.EXIT:null,xe.PREVIOUS,null):new Ni(!1,null,null,null,t.exception)}validateChoiceRequest(e,t){if(!t)return new Ni(!1,null,null,null,"NB.2.1-9");const i=this.activityTree.getActivity(t);if(!i)return new Ni(!1,null,null,null,"NB.2.1-10");const s=this.validateChoicePath(e,i);return s.valid?new Ni(!0,e?.isActive?xe.EXIT:null,xe.CHOICE,t):new Ni(!1,null,null,null,s.exception)}validateJumpRequest(e){return e?new Ni(!0,null,xe.JUMP,e):new Ni(!1,null,null,null,"NB.2.1-12")}validateExitRequest(e){return e?new Ni(!0,e===this.activityTree.root?xe.EXIT_ALL:xe.EXIT,null,null):new Ni(!1,null,null,null,"NB.2.1-13")}validateExitAllRequest(e){return e?new Ni(!0,xe.EXIT_ALL,null,null):new Ni(!1,null,null,null,"NB.2.1-14")}validateAbandonRequest(e){return e?new Ni(!0,xe.ABANDON,null,null):new Ni(!1,null,null,null,"NB.2.1-15")}validateAbandonAllRequest(e){return e?new Ni(!0,xe.ABANDON_ALL,null,null):new Ni(!1,null,null,null,"NB.2.1-16")}validateSuspendAllRequest(e){return e?new Ni(!0,xe.SUSPEND_ALL,null,null):new Ni(!1,null,null,null,"NB.2.1-17")}validateChoicePath(e,t){if(t.isHiddenFromChoice)return{valid:!1,exception:"NB.2.1-11"};if(!t.isAvailable)return{valid:!1,exception:"NB.2.1-11"};if(this.isActivityDisabled(t))return{valid:!1,exception:"NB.2.1-11"};if(e){const i=this.findCommonAncestor(e,t);if(!i)return{valid:!1,exception:"NB.2.1-11"};let s=e;for(;s&&s!==i;){if(!0===s.isActive&&s.sequencingControls&&!1===s.sequencingControls.choiceExit&&t!==s&&!this.activityContains(s,t))return{valid:!1,exception:"NB.2.1-11"};s=s.parent}const r=this.validateConstrainChoice(e,t,i);if(!r.valid)return r;const n=this.validateChoiceSet(e,t,i);if(!n.valid)return n}let i=t;for(;i;){if(i.parent&&!i.parent.sequencingControls.choice)return{valid:!1,exception:"NB.2.1-11"};i=i.parent}return{valid:!0,exception:null}}validateForwardOnlyConstraints(e){if(e.parent?.sequencingControls.forwardOnly)return{valid:!1,exception:"NB.2.1-8"};let t=e.parent?.parent;for(;t;){if(t.sequencingControls.forwardOnly)return{valid:!1,exception:"NB.2.1-8"};t=t.parent}return{valid:!0,exception:null}}validateConstrainChoice(e,t,i){let s=i;for(;s;){if(s.sequencingControls?.constrainChoice||s.sequencingControls?.preventActivation){const i=this.findChildContaining(s,e);if(!i)return{valid:!1,exception:"NB.2.1-11"};if(t===s)return{valid:!1,exception:"NB.2.1-11"};const r=this.findChildContaining(s,t);if(!r)return{valid:!1,exception:"NB.2.1-11"};if(s.sequencingControls?.constrainChoice&&r!==i)return{valid:!1,exception:"NB.2.1-11"};if(s.sequencingControls?.preventActivation&&r!==i&&this.requiresNewActivation(r,t))return{valid:!1,exception:"NB.2.1-11"}}s=s.parent}return this.validateAncestors(i,e,t)}validateChoiceSet(e,t,i){if(!this.activityContains(i,t)&&t!==i)return{valid:!1,exception:"NB.2.1-11"};let s=t;for(;s&&s!==i;){if(!s.isAvailable||s.isHiddenFromChoice||this.isActivityDisabled(s))return{valid:!1,exception:"NB.2.1-11"};s=s.parent}return{valid:!0,exception:null}}isActivityDisabled(e){if(!e.isAvailable)return!0;if(e.isHiddenFromChoice)return!0;const t=this.evaluatePreConditionRulesForChoice(e);return!!t&&(t===Ee.DISABLED||t===Ee.HIDE_FROM_CHOICE||t===Ee.STOP_FORWARD_TRAVERSAL)}findChildContaining(e,t){for(const i of e.children){if(i===t)return i;if(this.activityContains(i,t))return i}return null}activityContains(e,t){let i=t;for(;i;){if(i===e)return!0;i=i.parent}return!1}findCommonAncestor(e,t){const i=[];let s=e;for(;s;)i.push(s),s=s.parent;for(s=t;s;){if(i.includes(s))return s;s=s.parent}return null}validateAncestors(e,t,i){const s=e.children;if(!s||0===s.length)return{valid:!0,exception:null};const r=this.findChildContaining(e,t),n=this.findChildContaining(e,i);if(!r||!n)return{valid:!1,exception:"NB.2.1-11"};const o=s.indexOf(r),a=s.indexOf(n);if(e.sequencingControls.forwardOnly&&o>a)return{valid:!1,exception:"NB.2.1-8"};const c=s.findIndex(e=>e?.sequencingControls.stopForwardTraversal);if(r.sequencingControls.stopForwardTraversal&&a>o)return{valid:!1,exception:"NB.2.1-11"};if(-1!==c&&a>c)return{valid:!1,exception:"NB.2.1-11"};if(a>o&&e.sequencingControls.forwardOnly)for(let e=o+1;a>e;e++){const t=s[e];if(t){if(t.sequencingControls.stopForwardTraversal)return{valid:!1,exception:"NB.2.1-11"};if(this.isActivityMandatory(t)&&!this.isActivityCompleted(t))return{valid:!1,exception:"NB.2.1-11"}}}return{valid:!0,exception:null}}requiresNewActivation(e,t){return!this.branchHasActiveAttempt(e)&&!t.activityAttemptActive&&!t.isActive}branchHasActiveAttempt(e){if(e.activityAttemptActive||e.isActive)return!0;for(const t of e.children)if(this.branchHasActiveAttempt(t))return!0;return!1}isActivityMandatory(e){if(!e.isAvailable||e.isHiddenFromChoice)return!1;const t=this.evaluatePreConditionRulesForChoice(e);return t!==Ee.SKIP&&t!==Ee.DISABLED&&t!==Ee.HIDE_FROM_CHOICE&&t!==Ee.STOP_FORWARD_TRAVERSAL&&!this.isActivityDisabled(e)&&!1!==e.mandatory}isActivityCompleted(e){if(!e.isAvailable||e.isHiddenFromChoice)return!0;const t=this.evaluatePreConditionRulesForChoice(e);return t===Ee.SKIP||t===Ee.DISABLED||t===Ee.HIDE_FROM_CHOICE||t===Ee.STOP_FORWARD_TRAVERSAL||!!this.isActivityDisabled(e)||"completed"===e.completionStatus||"passed"===e.successStatus||"passed"===e.successStatus}evaluatePreConditionRulesForChoice(e){if(!e.sequencingRules)return null;return e.sequencingRules.evaluatePreConditionRules(e)||null}updateNavigationValidity(){if(!this.adlNav||!this.activityTree.currentActivity)return;this.navigationLookAhead.invalidateCache();const e=this.navigationLookAhead.predictContinueEnabled();try{this.adlNav.request_valid.continue=e?"true":"false"}catch(e){}const t=this.navigationLookAhead.predictPreviousEnabled();try{this.adlNav.request_valid.previous=t?"true":"false"}catch(e){}const i=this.activityTree.getAllActivities(),s={},r={};for(const e of i){const t=this.validateRequest("choice",e.id);s[e.id]=t.valid?"true":"false";const i=this.validateRequest("jump",e.id);r[e.id]=i.valid?"true":"false"}try{this.adlNav.request_valid.choice=s}catch(e){}try{this.adlNav.request_valid.jump=r}catch(e){}const n=this.getEffectiveHideLmsUiCallback?this.getEffectiveHideLmsUiCallback(this.activityTree.currentActivity):[];this.fireEvent("onNavigationValidityUpdate",{continue:e,previous:t,choice:s,jump:r,hideLmsUi:n})}getAllPredictions(){return this.navigationLookAhead.getAllPredictions()}predictContinueEnabled(){return this.navigationLookAhead.predictContinueEnabled()}predictPreviousEnabled(){return this.navigationLookAhead.predictPreviousEnabled()}predictChoiceEnabled(e){return this.navigationLookAhead.predictChoiceEnabled(e)}getAvailableChoices(){return this.navigationLookAhead.getAvailableChoices()}invalidateCache(){this.navigationLookAhead.invalidateCache()}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire sequencing event ${e}: ${t}`)}}}var qi=Object.defineProperty,Di=(e,t,i)=>((e,t,i)=>t in e?qi(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Li{constructor(e){Di(this,"globalObjectiveMap",new Map),Di(this,"eventCallback",null),this.eventCallback=e||null}initialize(e){try{this.globalObjectiveMap.clear(),e&&this.collectObjectives(e),this.fireEvent("onGlobalObjectiveMapInitialized",{objectiveCount:this.globalObjectiveMap.size,timestamp:(new Date).toISOString()})}catch(e){this.fireEvent("onGlobalObjectiveMapError",{error:e instanceof Error?e.message:e+"",timestamp:(new Date).toISOString()})}}collectObjectives(e){const objectives=e.getAllObjectives();if(0===objectives.length){const t=e.id+"_default_objective";this.globalObjectiveMap.has(t)||this.globalObjectiveMap.set(t,{id:t,satisfiedStatus:e.objectiveSatisfiedStatus,satisfiedStatusKnown:e.objectiveMeasureStatus,normalizedMeasure:e.objectiveNormalizedMeasure,normalizedMeasureKnown:e.objectiveMeasureStatus,progressMeasure:e.progressMeasure,progressMeasureKnown:e.progressMeasureStatus,completionStatus:e.completionStatus,completionStatusKnown:e.completionStatus!==H,readSatisfiedStatus:!0,writeSatisfiedStatus:!0,readNormalizedMeasure:!0,writeNormalizedMeasure:!0,readCompletionStatus:!0,writeCompletionStatus:!0,readProgressMeasure:!0,writeProgressMeasure:!0,satisfiedByMeasure:null!==e.scaledPassingScore,minNormalizedMeasure:e.scaledPassingScore,updateAttemptData:!0})}for(const e of objectives){const t=e.mapInfo.length>0?e.mapInfo:[{targetObjectiveID:e.id,readSatisfiedStatus:!0,writeSatisfiedStatus:!0,readNormalizedMeasure:!0,writeNormalizedMeasure:!0,readProgressMeasure:!0,writeProgressMeasure:!0,readCompletionStatus:!0,writeCompletionStatus:!0,updateAttemptData:e.isPrimary}];for(const i of t){const t=i.targetObjectiveID||e.id;this.globalObjectiveMap.has(t)||this.globalObjectiveMap.set(t,{id:t,satisfiedStatus:e.satisfiedStatus,satisfiedStatusKnown:e.measureStatus,normalizedMeasure:e.normalizedMeasure,normalizedMeasureKnown:e.measureStatus,progressMeasure:e.progressMeasure,progressMeasureKnown:e.progressMeasureStatus,completionStatus:e.completionStatus,completionStatusKnown:e.completionStatus!==H,readSatisfiedStatus:i.readSatisfiedStatus??!1,writeSatisfiedStatus:i.writeSatisfiedStatus??!1,readNormalizedMeasure:i.readNormalizedMeasure??!1,writeNormalizedMeasure:i.writeNormalizedMeasure??!1,readProgressMeasure:i.readProgressMeasure??!1,writeProgressMeasure:i.writeProgressMeasure??!1,readCompletionStatus:i.readCompletionStatus??!1,writeCompletionStatus:i.writeCompletionStatus??!1,readRawScore:i.readRawScore??!1,writeRawScore:i.writeRawScore??!1,readMinScore:i.readMinScore??!1,writeMinScore:i.writeMinScore??!1,readMaxScore:i.readMaxScore??!1,writeMaxScore:i.writeMaxScore??!1,satisfiedByMeasure:e.satisfiedByMeasure,minNormalizedMeasure:e.minNormalizedMeasure,updateAttemptData:i.updateAttemptData??e.isPrimary})}}for(const t of e.children)this.collectObjectives(t)}getMap(){return this.globalObjectiveMap}getSnapshot(){return this.serialize()}restoreSnapshot(e){this.restore(e)}updateObjective(e,t){try{this.globalObjectiveMap.set(e,{...this.globalObjectiveMap.get(e),...t,lastUpdated:(new Date).toISOString()}),this.fireEvent("onGlobalObjectiveUpdated",{objectiveId:e,data:t,timestamp:(new Date).toISOString()})}catch(t){this.fireEvent("onGlobalObjectiveUpdateError",{objectiveId:e,error:t instanceof Error?t.message:t+"",timestamp:(new Date).toISOString()})}}synchronize(e,t){e&&t.processGlobalObjectiveMapping(e,this.globalObjectiveMap)}getObjective(e){return this.globalObjectiveMap.get(e)}hasObjective(e){return this.globalObjectiveMap.has(e)}getObjectiveIds(){return Array.from(this.globalObjectiveMap.keys())}getObjectiveCount(){return this.globalObjectiveMap.size}clear(){this.globalObjectiveMap.clear(),this.fireEvent("onGlobalObjectiveMapCleared",{timestamp:(new Date).toISOString()})}serialize(){const e={};return this.globalObjectiveMap.forEach((t,id)=>{e[id]={...t}}),e}restore(e){if(this.globalObjectiveMap.clear(),e){for(const[id,t]of Object.entries(e))this.globalObjectiveMap.set(id,{...t});this.fireEvent("onGlobalObjectiveMapRestored",{objectiveCount:this.globalObjectiveMap.size,timestamp:(new Date).toISOString()})}}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire global objective event ${e}: ${t}`)}}}var Pi=Object.defineProperty,zi=(e,t,i)=>((e,t,i)=>t in e?Pi(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Fi{constructor(e,t,i){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;zi(this,"activityTree"),zi(this,"globalObjectiveService"),zi(this,"rollupProcess"),zi(this,"adlNav"),zi(this,"eventCallback"),zi(this,"getEffectiveHideLmsUiCallback",null),zi(this,"getEffectiveAuxiliaryResourcesCallback",null),zi(this,"contentDeliveredGetter",null),zi(this,"contentDeliveredSetter",null),this.activityTree=e,this.globalObjectiveService=t,this.rollupProcess=i,this.adlNav=s,this.eventCallback=r}setGetEffectiveHideLmsUiCallback(e){this.getEffectiveHideLmsUiCallback=e}setGetEffectiveAuxiliaryResourcesCallback(e){this.getEffectiveAuxiliaryResourcesCallback=e}setContentDeliveredAccessors(e,t){this.contentDeliveredGetter=e,this.contentDeliveredSetter=t}getState(){return{version:"1.0",timestamp:(new Date).toISOString(),contentDelivered:!!this.contentDeliveredGetter&&this.contentDeliveredGetter(),currentActivity:this.activityTree.currentActivity?.id||null,suspendedActivity:this.activityTree.suspendedActivity?.id||null,activityStates:this.serializeActivities(),navigationState:this.getNavigationState(),globalObjectiveMap:this.globalObjectiveService.getSnapshot()}}restoreState(e){try{if(!e||"1.0"!==e.version)return console.warn("Incompatible sequencing state version"),!1;if(this.contentDeliveredSetter&&this.contentDeliveredSetter(e.contentDelivered||!1),e.globalObjectiveMap&&this.globalObjectiveService.restoreSnapshot(e.globalObjectiveMap),e.activityStates&&this.deserializeActivities(e.activityStates),e.currentActivity){const t=this.activityTree.getActivity(e.currentActivity);t&&(this.activityTree.currentActivity=t,t.isActive=!0)}if(e.suspendedActivity){const t=this.activityTree.getActivity(e.suspendedActivity);t&&(this.activityTree.suspendedActivity=t,t.isSuspended=!0)}return e.navigationState&&this.restoreNavigationState(e.navigationState),this.activityTree.root&&this.globalObjectiveService.synchronize(this.activityTree.root,this.rollupProcess),console.debug("Sequencing state restored successfully"),!0}catch(e){return console.error("Failed to restore sequencing state: "+e),!1}}serializeActivities(){const e={},t=i=>{e[i.id]={id:i.id,title:i.title,isActive:i.isActive,isSuspended:i.isSuspended,isCompleted:i.isCompleted,completionStatus:i.completionStatus,successStatus:i.successStatus,attemptCount:i.attemptCount,attemptCompletionAmount:i.attemptCompletionAmount,attemptAbsoluteDuration:i.attemptAbsoluteDuration,attemptExperiencedDuration:i.attemptExperiencedDuration,activityAbsoluteDuration:i.activityAbsoluteDuration,activityExperiencedDuration:i.activityExperiencedDuration,objectiveSatisfiedStatus:i.objectiveSatisfiedStatus,objectiveMeasureStatus:i.objectiveMeasureStatus,objectiveNormalizedMeasure:i.objectiveNormalizedMeasure,progressMeasure:i.progressMeasure,progressMeasureStatus:i.progressMeasureStatus,isAvailable:i.isAvailable,isHiddenFromChoice:i.isHiddenFromChoice,location:i.location,attemptAbsoluteStartTime:i.attemptAbsoluteStartTime,objectives:i.getObjectiveStateSnapshot(),auxiliaryResources:i.auxiliaryResources,selectionRandomizationState:{selectionCountStatus:i.sequencingControls.selectionCountStatus,reorderChildren:i.sequencingControls.reorderChildren,childOrder:i.children.map(e=>e.id),selectedChildIds:i.children.filter(e=>e.isAvailable).map(e=>e.id),hiddenFromChoiceChildIds:i.children.filter(e=>e.isHiddenFromChoice).map(e=>e.id)}};for(const e of i.children)t(e)};return this.activityTree.root&&t(this.activityTree.root),e}deserializeActivities(e){const t=i=>{const s=e[i.id];s&&(i.isActive=s.isActive||!1,i.isSuspended=s.isSuspended||!1,i.isCompleted=s.isCompleted||!1,i.completionStatus=s.completionStatus||"unknown",i.successStatus=s.successStatus||"unknown",i.attemptCount=s.attemptCount||0,i.attemptCompletionAmount=s.attemptCompletionAmount||0,i.attemptAbsoluteDuration=s.attemptAbsoluteDuration||"PT0H0M0S",i.attemptExperiencedDuration=s.attemptExperiencedDuration||"PT0H0M0S",i.activityAbsoluteDuration=s.activityAbsoluteDuration||"PT0H0M0S",i.activityExperiencedDuration=s.activityExperiencedDuration||"PT0H0M0S",i.objectiveSatisfiedStatus=s.objectiveSatisfiedStatus||!1,i.objectiveMeasureStatus=s.objectiveMeasureStatus||!1,i.objectiveNormalizedMeasure=s.objectiveNormalizedMeasure||0,i.progressMeasure=s.progressMeasure??0,i.progressMeasureStatus=s.progressMeasureStatus||!1,i.isAvailable=!1!==s.isAvailable,i.isHiddenFromChoice=!0===s.isHiddenFromChoice,i.location=s.location||"",i.attemptAbsoluteStartTime=s.attemptAbsoluteStartTime||"",Array.isArray(s.auxiliaryResources)&&(i.auxiliaryResources=s.auxiliaryResources),s.objectives&&i.applyObjectiveStateSnapshot(s.objectives));for(const e of i.children)t(e);if(s?.selectionRandomizationState){const e=s.selectionRandomizationState,t=i.sequencingControls;void 0!==e.selectionCountStatus&&(t.selectionCountStatus=e.selectionCountStatus),void 0!==e.reorderChildren&&(t.reorderChildren=e.reorderChildren),e.childOrder&&e.childOrder.length>0&&i.setChildOrder(e.childOrder);const r=Array.isArray(e.selectedChildIds)?new Set(e.selectedChildIds):null,n=Array.isArray(e.hiddenFromChoiceChildIds)?new Set(e.hiddenFromChoiceChildIds):null;if(r||n)for(const e of i.children){if(r){const t=r.has(e.id);e.isAvailable=t,n||(e.isHiddenFromChoice=!t)}n&&(e.isHiddenFromChoice=n.has(e.id))}i.setProcessedChildren(i.children.filter(e=>e.isAvailable))}else i.resetProcessedChildren()};this.activityTree.root&&t(this.activityTree.root)}getNavigationState(){if(!this.adlNav)return null;const e=this.getEffectiveHideLmsUiCallback?this.getEffectiveHideLmsUiCallback(this.activityTree.currentActivity):[],t=this.getEffectiveAuxiliaryResourcesCallback?this.getEffectiveAuxiliaryResourcesCallback(this.activityTree.currentActivity):[];return{request:this.adlNav.request||"_none_",requestValid:{continue:this.adlNav.request_valid?.continue||"false",previous:this.adlNav.request_valid?.previous||"false",choice:"unknown",jump:"unknown",exit:this.adlNav.request_valid?.exit||"false",exitAll:this.adlNav.request_valid?.exitAll||"false",abandon:this.adlNav.request_valid?.abandon||"false",abandonAll:this.adlNav.request_valid?.abandonAll||"false",suspendAll:this.adlNav.request_valid?.suspendAll||"false"},hideLmsUi:e,auxiliaryResources:t}}restoreNavigationState(e){if(this.adlNav&&e)try{if(e.requestValid){const t=e.requestValid;this.adlNav.request_valid.continue=t.continue||"false",this.adlNav.request_valid.previous=t.previous||"false",this.adlNav.request_valid.exit=t.exit||"false",this.adlNav.request_valid.exitAll=t.exitAll||"false",this.adlNav.request_valid.abandon=t.abandon||"false",this.adlNav.request_valid.abandonAll=t.abandonAll||"false",this.adlNav.request_valid.suspendAll=t.suspendAll||"false"}}catch(e){console.warn("Could not fully restore navigation state: "+e)}}getSuspensionState(){const e={activityTree:this.activityTree.root?this.activityTree.root.getSuspensionState():null,currentActivityId:this.activityTree.currentActivity?.id||null,suspendedActivityId:this.activityTree.suspendedActivity?.id||null,globalObjectives:this.globalObjectiveService.getSnapshot(),timestamp:(new Date).toISOString()};return this.fireEvent("onSuspensionStateCaptured",{hasActivityTree:!!e.activityTree,currentActivityId:e.currentActivityId,suspendedActivityId:e.suspendedActivityId,globalObjectiveCount:Object.keys(e.globalObjectives).length,timestamp:e.timestamp}),e}restoreSuspensionState(e){if(e)try{if(e.globalObjectives&&this.globalObjectiveService.restoreSnapshot(e.globalObjectives),e.activityTree&&this.activityTree.root&&this.activityTree.root.restoreSuspensionState(e.activityTree),e.currentActivityId){const t=this.activityTree.getActivity(e.currentActivityId);t&&(this.activityTree.currentActivity=t)}if(e.suspendedActivityId){const t=this.activityTree.getActivity(e.suspendedActivityId);t&&(this.activityTree.suspendedActivity=t)}this.fireEvent("onSuspensionStateRestored",{currentActivityId:e.currentActivityId,suspendedActivityId:e.suspendedActivityId,globalObjectiveCount:e.globalObjectives?Object.keys(e.globalObjectives).length:0,originalTimestamp:e.timestamp,restoreTimestamp:(new Date).toISOString()})}catch(e){throw this.fireEvent("onSuspensionStateRestoreError",{error:e instanceof Error?e.message:e+"",timestamp:(new Date).toISOString()}),e}else this.fireEvent("onSuspensionStateRestoreError",{error:"No suspension state provided",timestamp:(new Date).toISOString()})}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire state manager event ${e}: ${t}`)}}}var ki=Object.defineProperty,Vi=(e,t,i)=>((e,t,i)=>t in e?ki(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Hi{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2?arguments[2]:void 0;Vi(this,"activityTree"),Vi(this,"eventCallback"),Vi(this,"now"),Vi(this,"contentDeliveredGetter",null),this.activityTree=e,this.eventCallback=t,this.now=i?.now||(()=>new Date)}setContentDeliveredGetter(e){this.contentDeliveredGetter=e}validateTreeConsistency(e){if(!this.activityTree.root)return{consistent:!1,exception:"DB.1.1-4"};if(!this.isActivityPartOfTree(e,this.activityTree.root))return{consistent:!1,exception:"DB.1.1-5"};const t=this.getActiveActivities();if(t.length>1)return this.fireEvent("onStateInconsistency",{activeActivities:t.map(e=>e.id),targetActivity:e.id}),{consistent:!1,exception:"DB.1.1-6"};let i=e;for(;i?.parent;){if(!i.parent.children.includes(i))return{consistent:!1,exception:"DB.1.1-7"};i=i.parent}return{consistent:!0,exception:null}}validateResources(e){const t=this.getRequiredResources(e);for(const e of t)if(!this.isResourceAvailable(e))return{available:!1,exception:"DB.1.1-8"};return this.checkSystemLimits().adequate?{available:!0,exception:null}:{available:!1,exception:"DB.1.1-9"}}validateConcurrentDelivery(e){return this.contentDeliveredGetter&&this.contentDeliveredGetter()&&this.activityTree.currentActivity&&this.activityTree.currentActivity!==e?{allowed:!1,exception:"DB.1.1-10"}:this.hasPendingDeliveryRequests()?{allowed:!1,exception:"DB.1.1-11"}:this.isDeliveryLocked()?{allowed:!1,exception:"DB.1.1-12"}:{allowed:!0,exception:null}}validateDependencies(e){const t=this.getPrerequisites(e);for(const i of t)if(!this.isPrerequisiteSatisfied(i,e))return{satisfied:!1,exception:"DB.1.1-13"};const i=this.getObjectiveDependencies(e);for(const e of i)if(!this.isObjectiveDependencySatisfied(e))return{satisfied:!1,exception:"DB.1.1-14"};return this.getSequencingRuleDependencies(e).satisfied?{satisfied:!0,exception:null}:{satisfied:!1,exception:"DB.1.1-15"}}checkActivity(e){return!!e.isAvailable&&!!this.checkLimitConditions(e)}checkLimitConditions(e){let result=!0,t="";if(null!==e.attemptLimit&&e.attemptLimit>0&&(e.attemptLimit>e.attemptCount||(result=!1,t="Attempt limit exceeded")),result&&e.attemptAbsoluteDurationLimit){const i=r(e.attemptAbsoluteDurationLimit,ne);i>0&&(i>r(e.attemptAbsoluteDuration||"PT0H0M0S",ne)||(result=!1,t="Attempt duration limit exceeded"))}if(result&&e.activityAbsoluteDurationLimit){const i=r(e.activityAbsoluteDurationLimit,ne);i>0&&(i>r(e.activityAbsoluteDuration||"PT0H0M0S",ne)||(result=!1,t="Activity duration limit exceeded"))}if(result&&e.beginTimeLimit){const i=this.now();new Date(e.beginTimeLimit)>i&&(result=!1,t="Not yet time to begin")}return result&&e.endTimeLimit&&this.now()>new Date(e.endTimeLimit)&&(result=!1,t="Time limit expired"),this.fireEvent("onLimitConditionCheck",{activity:e,result:result,failureReason:t,checks:{attemptLimit:e.attemptLimit,attemptCount:e.attemptCount,attemptDurationLimit:e.attemptAbsoluteDurationLimit,activityDurationLimit:e.activityAbsoluteDurationLimit,beginTimeLimit:e.beginTimeLimit,endTimeLimit:e.endTimeLimit}}),result}isActivityPartOfTree(e,t){if(e===t)return!0;for(const i of t.children)if(this.isActivityPartOfTree(e,i))return!0;return!1}getActiveActivities(){const e=[];return this.activityTree.root&&this.collectActiveActivities(this.activityTree.root,e),e}collectActiveActivities(e,t){e.isActive&&t.push(e);for(const i of e.children)this.collectActiveActivities(i,t)}getRequiredResources(e){const t=[],i=(e.title+" "+e.location).toLowerCase();return(i.includes("video")||i.includes("multimedia"))&&t.push("video-codec"),(i.includes("audio")||i.includes("sound"))&&t.push("audio-codec"),(i.includes("flash")||i.includes(".swf"))&&t.push("flash-plugin"),(i.includes("java")||i.includes("applet"))&&t.push("java-runtime"),e.children&&e.children.length>0&&t.push("high-bandwidth"),e.attemptAbsoluteDurationLimit&&this.parseDurationToMinutes(e.attemptAbsoluteDurationLimit)>60&&t.push("extended-storage"),e.attemptLimit&&e.attemptLimit>1&&t.push("persistent-storage"),t}isResourceAvailable(e){try{switch(e){case"video-codec":return!!document.createElement("video").canPlayType;case"audio-codec":return!!document.createElement("audio").canPlayType;case"flash-plugin":return navigator.plugins&&Array.from(navigator.plugins).some(e=>"Shockwave Flash"===e.name);case"java-runtime":return navigator.plugins&&Array.from(navigator.plugins).some(e=>"Java"===e.name);case"high-bandwidth":if("connection"in navigator){const e=navigator.connection;return"4g"===e.effectiveType||e.downlink>5}return!0;case"extended-storage":default:return!0;case"persistent-storage":return"localStorage"in window&&"sessionStorage"in window}}catch(e){return!1}}checkSystemLimits(){try{let e=!0;if("memory"in performance){const t=performance.memory;t.usedJSHeapSize/t.jsHeapSizeLimit>.8&&(e=!1)}if("deviceMemory"in navigator&&2>navigator.deviceMemory&&(e=!1),"hardwareConcurrency"in navigator&&2>navigator.hardwareConcurrency&&(e=!1),"connection"in navigator){const t=navigator.connection;(t.saveData||"slow-2g"===t.effectiveType)&&(e=!1)}return{adequate:e}}catch(e){return{adequate:!0}}}hasPendingDeliveryRequests(){return this.activityTree&&this.activityTree.pendingRequests?this.activityTree.pendingRequests.length>0:!("undefined"==typeof window||!window.pendingScormRequests)&&window.pendingScormRequests>0}isDeliveryLocked(){return!(!this.activityTree||!this.activityTree.navigationLocked)||(!(!this.activityTree||!this.activityTree.terminationInProgress)||(!this.checkSystemLimits().adequate||!("undefined"==typeof window||!window.scormMaintenanceMode)))}getPrerequisites(e){const t=[];if(e.sequencingRules&&e.sequencingRules.preConditionRules)for(const i of e.sequencingRules.preConditionRules)if(i.conditions&&i.conditions.length>0)for(const s of i.conditions)s.referencedObjectiveID&&s.referencedObjectiveID!==e.id&&t.push(s.referencedObjectiveID);if(e.parent&&e.sequencingControls&&!e.sequencingControls.choiceExit){const i=e.parent.children;if(i){const s=i.indexOf(e);for(let e=0;s>e;e++){const s=i[e];s&&t.push(s.id)}}}return e.prerequisiteActivities&&t.push(...e.prerequisiteActivities),Array.from(new Set(t))}isPrerequisiteSatisfied(e,t){const i=this.activityTree.getActivity(e);return!!i&&"completed"===i.completionStatus}getObjectiveDependencies(e){const t=[],objectives=e.objectives;if(objectives&&objectives.length>0)for(const e of objectives)e.globalObjectiveID&&t.push(e.globalObjectiveID),!e.satisfiedByMeasure&&e.readNormalizedMeasure&&t.push(e.id+"_measure");if(e.sequencingRules){const i=[...e.sequencingRules.preConditionRules||[],...e.sequencingRules.exitConditionRules||[],...e.sequencingRules.postConditionRules||[]];for(const s of i)if(s.conditions&&s.conditions.length>0)for(const i of s.conditions)i.objectiveReference&&i.objectiveReference!==e.id&&t.push(i.objectiveReference)}return Array.from(new Set(t))}isObjectiveDependencySatisfied(e){if(this.activityTree&&this.activityTree.globalObjectives){const t=this.activityTree.globalObjectives[e];if(t)return!0===t.satisfied&&!0===t.statusKnown}if(e.endsWith("_measure")){const t=e.replace("_measure","");if(this.activityTree&&this.activityTree.globalObjectives){const e=this.activityTree.globalObjectives[t];if(e)return!0===e.measureKnown&&e.normalizedMeasure>=0}}const t=this.activityTree.getActivity(e);return!!t&&t.objectiveSatisfiedStatus&&t.objectiveMeasureStatus}getSequencingRuleDependencies(e){let t=!0;try{if(e.sequencingRules&&e.sequencingRules.preConditionRules)for(const i of e.sequencingRules.preConditionRules)if(i.conditions&&i.conditions.length>0)for(const s of i.conditions)switch(s.conditionType||s.condition){case"activityProgressKnown":e.progressMeasureStatus||(t=!1);break;case"objectiveStatusKnown":case"objectiveSatisfied":this.isObjectiveDependencySatisfied(s.referencedObjectiveID||e.id)||(t=!1);break;case"attemptLimitExceeded":null===e.attemptLimit&&(t=!1);break;case"timeLimitExceeded":e.attemptAbsoluteDurationLimit||e.activityAbsoluteDurationLimit||(t=!1);break;case"always":case"never":break;default:t=!1}if(e.sequencingRules&&e.sequencingRules.exitConditionRules)for(const i of e.sequencingRules.exitConditionRules)if(i.conditions&&i.conditions.length>0)for(const s of i.conditions)["objectiveStatusKnown","objectiveSatisfied"].includes(s.conditionType||s.condition)&&(this.isObjectiveDependencySatisfied(s.referencedObjectiveID||e.id)||(t=!1));if(e.rollupRules&&e.rollupRules.rules)for(const i of e.rollupRules.rules)if(i.conditions&&i.conditions.length>0&&e.children&&e.children.length>0)for(const i of e.children)if(!i.isCompleted){t=!1;break}}catch(e){t=!1}return{satisfied:t}}parseDurationToMinutes(e){return r(e,ne)/60}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire delivery validator event ${e}: ${t}`)}}}var Bi=Object.defineProperty,Ui=(e,t,i)=>((e,t,i)=>t in e?Bi(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class $i{constructor(e,t,i){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,n=arguments.length>5?arguments[5]:void 0;Ui(this,"activityTree"),Ui(this,"sequencingProcess"),Ui(this,"rollupProcess"),Ui(this,"adlNav"),Ui(this,"eventCallback",null),Ui(this,"terminationHandler"),Ui(this,"deliveryHandler"),Ui(this,"navigationValidityService"),Ui(this,"globalObjectiveService"),Ui(this,"stateManager"),Ui(this,"deliveryValidator"),Ui(this,"navigationLookAhead"),Ui(this,"enhancedDeliveryValidation"),Ui(this,"is4thEdition"),this.activityTree=e,this.sequencingProcess=t,this.rollupProcess=i,this.adlNav=s,this.eventCallback=r,this.enhancedDeliveryValidation=!0===n?.enhancedDeliveryValidation,this.is4thEdition=n?.is4thEdition||!1,this.globalObjectiveService=new Li(r||void 0),this.globalObjectiveService.initialize(e.root);const o={};n?.now&&(o.now=n.now),this.deliveryValidator=new Hi(e,r,o);const a={};n?.getCMIData&&(a.getCMIData=n.getCMIData),void 0!==n?.is4thEdition&&(a.is4thEdition=n.is4thEdition),this.terminationHandler=new bi(e,t,i,this.globalObjectiveService.getMap(),r,a);const c={};n?.now&&(c.now=n.now),n?.defaultHideLmsUi&&(c.defaultHideLmsUi=n.defaultHideLmsUi),n?.defaultAuxiliaryResources&&(c.defaultAuxiliaryResources=n.defaultAuxiliaryResources),this.deliveryHandler=new wi(e,i,this.globalObjectiveService.getMap(),s,r,c),this.navigationValidityService=new xi(e,t,s,r),this.stateManager=new Fi(e,this.globalObjectiveService,i,s,r),this.navigationLookAhead=this.navigationValidityService.getNavigationLookAhead(),this.setupCallbacks()}setupCallbacks(){this.terminationHandler.setInvalidateCacheCallback(()=>{this.navigationLookAhead.invalidateCache()}),this.deliveryHandler.setCheckActivityCallback(e=>this.deliveryValidator.checkActivity(e)),this.deliveryHandler.setInvalidateCacheCallback(()=>{this.navigationLookAhead.invalidateCache()}),this.deliveryHandler.setUpdateNavigationValidityCallback(()=>{this.navigationValidityService.updateNavigationValidity()}),this.deliveryHandler.setClearSuspendedActivityCallback(()=>{this.terminationHandler.clearSuspendedActivity()}),this.deliveryValidator.setContentDeliveredGetter(()=>this.deliveryHandler.hasContentBeenDelivered()),this.navigationValidityService.setGetEffectiveHideLmsUiCallback(e=>this.deliveryHandler.getEffectiveHideLmsUi(e)),this.stateManager.setGetEffectiveHideLmsUiCallback(e=>this.deliveryHandler.getEffectiveHideLmsUi(e)),this.stateManager.setGetEffectiveAuxiliaryResourcesCallback(e=>this.deliveryHandler.getEffectiveAuxiliaryResources(e)),this.stateManager.setContentDeliveredAccessors(()=>this.deliveryHandler.hasContentBeenDelivered(),e=>this.deliveryHandler.setContentDelivered(e))}processNavigationRequest(e){let t=arguments.length>2?arguments[2]:void 0;const i=this.navigationValidityService.validateRequest(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:null);if(!i.valid)return new Ai(!1,null,i.exception);if(i.terminationRequest){const s=!!i.sequencingRequest,r=this.terminationHandler.processTerminationRequest(i.terminationRequest,s,t);if(!r.valid)return new Ai(!1,null,r.exception||"TB.2.3-1");if(null!==r.sequencingRequest&&(s||r.sequencingRequest!==xe.EXIT)&&(i.sequencingRequest=r.sequencingRequest),!i.sequencingRequest)return i.terminationRequest!==xe.EXIT_ALL&&i.terminationRequest!==xe.ABANDON_ALL||this.fireEvent("onSequencingSessionEnd",{reason:i.terminationRequest===xe.EXIT_ALL?"exit_all":"abandon_all",navigationRequest:e}),new Ai(!0,null)}if(i.sequencingRequest){const t=this.sequencingProcess.sequencingRequestProcess(i.sequencingRequest,i.targetActivityId);if(t.endSequencingSession)return this.fireEvent("onSequencingSessionEnd",{reason:"end_of_content",exception:t.exception,navigationRequest:e}),new Ai(!1,null,t.exception||"SESSION_ENDED");if(t.exception)return new Ai(!1,null,t.exception);if(t.deliveryRequest===qe.DELIVER&&t.targetActivity)return this.activityTree.root&&(this.rollupProcess.validateRollupStateConsistency(this.activityTree.root)||this.fireEvent("onSequencingDebug",{message:"Rollup state inconsistency detected before delivery",activityId:this.activityTree.root.id})),this.rollupProcess.processGlobalObjectiveMapping(t.targetActivity,this.globalObjectiveService.getMap()),this.processDelivery(t.targetActivity)}return new Ai(!1,null,"OP.1-1")}processDelivery(e){if(this.enhancedDeliveryValidation){const t=this.deliveryValidator.validateTreeConsistency(e);if(!t.consistent)return new Ai(!1,null,t.exception);const i=this.deliveryValidator.validateResources(e);if(!i.available)return new Ai(!1,null,i.exception);const s=this.deliveryValidator.validateConcurrentDelivery(e);if(!s.allowed)return new Ai(!1,null,s.exception);const r=this.deliveryValidator.validateDependencies(e);if(!r.satisfied)return new Ai(!1,null,r.exception)}const t=this.deliveryHandler.processDeliveryRequest(e);return t.valid&&(this.deliveryHandler.contentDeliveryEnvironmentProcess(t.targetActivity),this.navigationLookAhead.invalidateCache(),this.activityTree.root&&this.rollupProcess.validateRollupStateConsistency(this.activityTree.root)),t}hasContentBeenDelivered(){return this.deliveryHandler.hasContentBeenDelivered()}isDeliveryInProgress(){return this.deliveryHandler.isDeliveryInProgress()}resetContentDelivered(){this.deliveryHandler.resetContentDelivered()}setContentDelivered(e){this.deliveryHandler.setContentDelivered(e)}updateNavigationValidity(){this.navigationValidityService.updateNavigationValidity()}synchronizeGlobalObjectives(){this.globalObjectiveService.synchronize(this.activityTree.root,this.rollupProcess)}getGlobalObjectiveMap(){return this.globalObjectiveService.getMap()}getGlobalObjectiveMapSnapshot(){return this.globalObjectiveService.getSnapshot()}restoreGlobalObjectiveMapSnapshot(e){this.globalObjectiveService.restoreSnapshot(e)}updateGlobalObjective(e,t){this.globalObjectiveService.updateObjective(e,t)}getSequencingState(){return this.stateManager.getState()}restoreSequencingState(e){return this.stateManager.restoreState(e)}getSuspensionState(){return this.stateManager.getSuspensionState()}restoreSuspensionState(e){this.stateManager.restoreSuspensionState(e)}getNavigationLookAhead(){return this.navigationValidityService.getAllPredictions()}predictContinueEnabled(){return this.navigationValidityService.predictContinueEnabled()}predictPreviousEnabled(){return this.navigationValidityService.predictPreviousEnabled()}predictChoiceEnabled(e){return this.navigationValidityService.predictChoiceEnabled(e)}getAvailableChoices(){return this.navigationValidityService.getAvailableChoices()}invalidateNavigationCache(){this.navigationValidityService.invalidateCache()}applyDeliveryControls(e){e.sequencingControls.completionSetByContent||e.completionStatus===H&&(e.completionStatus=k,e.wasAutoCompleted=!0),e.sequencingControls.objectiveSetByContent||e.successStatus===F&&(e.successStatus=P,e.wasAutoSatisfied=!0)}getEffectiveHideLmsUi(e){return this.deliveryHandler.getEffectiveHideLmsUi(e)}getEffectiveAuxiliaryResources(e){return this.deliveryHandler.getEffectiveAuxiliaryResources(e)}getContentActivityData(e){return this.deliveryHandler.getContentActivityData(e)}terminationRequestProcess(request,e,t){return this.terminationHandler.processTerminationRequest(request,e,t)}contentDeliveryEnvironmentProcess(e){this.deliveryHandler.contentDeliveryEnvironmentProcess(e)}endAttemptProcess(e){this.terminationHandler.endAttempt(e)}handleExitTermination(e,t){return this.terminationHandler.handleExitTermination(e,t)}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire sequencing event ${e}: ${t}`)}}}var Gi=Object.defineProperty,Yi=(e,t,i)=>((e,t,i)=>t in e?Gi(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Wi{constructor(e,cmi,adl,t,i){let s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};Yi(this,"sequencing"),Yi(this,"cmi"),Yi(this,"adl"),Yi(this,"eventService"),Yi(this,"loggingService"),Yi(this,"activityDeliveryService"),Yi(this,"rollupProcess"),Yi(this,"overallSequencingProcess",null),Yi(this,"sequencingProcess",null),Yi(this,"eventListeners",{}),Yi(this,"configuration"),Yi(this,"isInitialized",!1),Yi(this,"isSequencingActive",!1),Yi(this,"lastCMIValues",new Map),Yi(this,"lastSequencingResult",null),this.sequencing=e,this.cmi=cmi,this.adl=adl,this.eventService=t,this.loggingService=i,this.configuration={autoRollupOnCMIChange:!0,autoProgressOnCompletion:!1,validateNavigationRequests:!0,enableEventSystem:!0,logLevel:"info",now:()=>new Date,...s},this.activityDeliveryService=new rt(t,i,{onDeliverActivity:e=>this.handleActivityDelivery(e),onUnloadActivity:e=>this.handleActivityUnload(e),onSequencingComplete:result=>this.handleSequencingComplete(result),onSequencingError:e=>this.handleSequencingError(e)}),this.rollupProcess=new hi,this.configuration.now&&Me.setNowProvider(this.configuration.now),this.setupCMIChangeWatchers(),this.createSequencingProcesses()}createSequencingProcesses(){try{if(this.sequencing.initialized||this.sequencing.initialize(),this.sequencing.adlNav=this.adl.nav,this.sequencing.activityTree.root){const e={};this.configuration.now&&(e.now=this.configuration.now),this.configuration.getAttemptElapsedSeconds&&(e.getAttemptElapsedSeconds=this.configuration.getAttemptElapsedSeconds),this.configuration.getActivityElapsedSeconds&&(e.getActivityElapsedSeconds=this.configuration.getActivityElapsedSeconds),this.sequencingProcess=new tt(this.sequencing.activityTree,this.sequencing.sequencingRules,this.sequencing.sequencingControls,this.adl.nav,e);const t={};this.configuration.now&&(t.now=this.configuration.now),t.defaultHideLmsUi=[...this.sequencing.hideLmsUi],this.sequencing.auxiliaryResources.length>0&&(t.defaultAuxiliaryResources=this.sequencing.auxiliaryResources.map(e=>({resourceId:e.resourceId,purpose:e.purpose}))),t.getCMIData=()=>this.getCMIDataForTransfer(),this.overallSequencingProcess=new $i(this.sequencing.activityTree,this.sequencingProcess,this.rollupProcess,this.adl.nav,(e,t)=>this.handleSequencingProcessEvent(e,t),t),this.sequencing.overallSequencingProcess=this.overallSequencingProcess,this.isInitialized=!0,this.log("info","Sequencing processes created and ready for navigation")}}catch(e){this.log("error","Failed to create sequencing processes: "+e)}}initialize(){try{return this.log("info","Initializing sequencing service for SCO session"),this.isInitialized||this.createSequencingProcesses(),this.shouldAutoStartSequencing()&&!this.isSequencingActive&&this.startSequencing(),this.initializeCMITracking(),this.fireEvent("onSequencingStart",this.sequencing.getCurrentActivity()),this.log("info","Sequencing service initialized successfully"),f}catch(e){const t="Failed to initialize sequencing service: "+e;return this.log("error",t),this.fireEvent("onSequencingError",t,"initialization"),S}}terminate(){try{return this.log("info","Terminating sequencing service"),this.triggerFinalRollup(),this.endSequencing(),this.isInitialized=!1,this.fireEvent("onSequencingEnd"),this.log("info","Sequencing service terminated successfully"),f}catch(e){const t="Failed to terminate sequencing service: "+e;return this.log("error",t),this.fireEvent("onSequencingError",t,"termination"),S}}processNavigationRequest(request,e,t){if(!this.isInitialized||!this.overallSequencingProcess)return this.log("warn",`Navigation request '${request}' ignored - sequencing not initialized`),!1;try{this.log("info",`Processing navigation request: ${request}${e?` (target: ${e})`:""}${t?` (exit: ${t})`:""}`),this.fireEvent("onNavigationRequest",request,e);const i=this.parseNavigationRequest(request);if(null===i)return this.log("warn","Invalid navigation request: "+request),!1;const s=this.overallSequencingProcess.processNavigationRequest(i,e||null,t),r={deliveryRequest:s.valid?qe.DELIVER:qe.DO_NOT_DELIVER,targetActivity:s.targetActivity,exception:s.exception||null,endSequencingSession:!1};return this.lastSequencingResult=r,s.valid&&s.targetActivity?(this.activityDeliveryService.processSequencingResult(r),this.overallSequencingProcess.updateNavigationValidity(),this.log("info",`Navigation request '${request}' resulted in activity delivery: ${s.targetActivity.id}`),!0):(s.exception?(this.log("warn",`Navigation request '${request}' failed: ${s.exception}`),this.fireEvent("onSequencingError",s.exception,"navigation")):this.log("info",`Navigation request '${request}' completed with no activity delivery`),s.valid)}catch(e){const t=`Error processing navigation request '${request}': ${e}`;return this.log("error",t),this.fireEvent("onSequencingError",t,"navigation"),!1}}triggerRollupOnCMIChange(e,t,i){if(this.configuration.autoRollupOnCMIChange&&this.isInitialized&&["cmi.completion_status","cmi.success_status","cmi.score.scaled","cmi.score.raw","cmi.score.min","cmi.score.max","cmi.progress_measure","cmi.objectives.n.success_status","cmi.objectives.n.completion_status","cmi.objectives.n.score.scaled"].some(t=>e.startsWith(t)))try{this.log("debug",`Triggering rollup due to CMI change: ${e} = ${i} (was ${t})`);const s=this.sequencing.getCurrentActivity();if(!s)return void this.log("debug","No current activity for rollup");this.updateActivityFromCMI(s),this.rollupProcess.overallRollupProcess(s),this.overallSequencingProcess&&this.overallSequencingProcess.synchronizeGlobalObjectives(),this.overallSequencingProcess&&this.overallSequencingProcess.updateNavigationValidity(),this.fireEvent("onRollupComplete",s),this.log("debug","Rollup completed for activity: "+s.id)}catch(e){const t="Error during rollup on CMI change: "+e;this.log("error",t),this.fireEvent("onSequencingError",t,"rollup")}}setEventListeners(e){this.eventListeners={...this.eventListeners,...e},this.log("debug","Sequencing event listeners updated")}updateConfiguration(e){this.configuration={...this.configuration,...e},this.log("debug","Sequencing configuration updated")}getSequencingState(){return{isInitialized:this.isInitialized,isActive:this.isSequencingActive,currentActivity:this.sequencing.getCurrentActivity(),rootActivity:this.sequencing.getRootActivity(),lastSequencingResult:this.lastSequencingResult}}getOverallSequencingProcess(){return this.overallSequencingProcess}isDeliveryInProgress(){return this.overallSequencingProcess?.isDeliveryInProgress()??!1}setupCMIChangeWatchers(){}initializeCMITracking(){this.lastCMIValues.set("cmi.completion_status",this.cmi.completion_status),this.lastCMIValues.set("cmi.success_status",this.cmi.success_status),this.lastCMIValues.set("cmi.progress_measure",this.cmi.progress_measure),this.cmi.score&&(this.lastCMIValues.set("cmi.score.scaled",this.cmi.score.scaled),this.lastCMIValues.set("cmi.score.raw",this.cmi.score.raw))}shouldAutoStartSequencing(){return!(!this.sequencing.activityTree.root||this.sequencing.getCurrentActivity())}startSequencing(){if(this.overallSequencingProcess)try{this.processNavigationRequest("start")&&(this.isSequencingActive=!0,this.log("info","Automatic sequencing started"))}catch(e){this.log("error","Failed to start automatic sequencing: "+e)}}endSequencing(){this.isSequencingActive=!1,this.activityDeliveryService.reset()}triggerFinalRollup(){try{const e=this.sequencing.getCurrentActivity();e&&(this.updateActivityFromCMI(e),this.rollupProcess.overallRollupProcess(e),this.overallSequencingProcess&&this.overallSequencingProcess.synchronizeGlobalObjectives(),this.log("info","Final rollup completed"))}catch(e){this.log("error","Error during final rollup: "+e)}}updateActivityFromCMI(e){if("unknown"!==this.cmi.completion_status&&(e.completionStatus=this.cmi.completion_status,e.attemptProgressStatus=!0),"unknown"!==this.cmi.success_status&&(e.successStatus=this.cmi.success_status,e.objectiveSatisfiedStatus="passed"===this.cmi.success_status,e.objectiveMeasureStatus=!0,e.primaryObjective&&(e.primaryObjective.progressStatus=!0)),""!==this.cmi.progress_measure){const t=parseFloat(this.cmi.progress_measure);isNaN(t)||(e.progressMeasure=t,e.progressMeasureStatus=!0)}if(this.cmi.score&&""!==this.cmi.score.scaled){const t=parseFloat(this.cmi.score.scaled);isNaN(t)||(e.objectiveNormalizedMeasure=t,e.objectiveMeasureStatus=!0,e.primaryObjective&&(e.primaryObjective.progressStatus=!0))}e.primaryObjective&&e.primaryObjective.updateFromActivity(e)}getCMIDataForTransfer(){const e={completion_status:this.cmi.completion_status,success_status:this.cmi.success_status,progress_measure:this.cmi.progress_measure,score:{scaled:this.cmi.score?.scaled||"",raw:this.cmi.score?.raw||"",min:this.cmi.score?.min||"",max:this.cmi.score?.max||""},objectives:[]};if(this.cmi.objectives&&this.cmi.objectives.childArray)for(const t of this.cmi.objectives.childArray){const i=t;i.id&&e.objectives.push({id:i.id,success_status:i.success_status,completion_status:i.completion_status,progress_measure:i.progress_measure,score:{scaled:i.score?.scaled||"",raw:i.score?.raw||"",min:i.score?.min||"",max:i.score?.max||""}})}return e}parseNavigationRequest(request){let e=request;if(e.startsWith("_")&&"_none_"!==e&&(e=e.substring(1)),request.includes("choice"))return Ii.CHOICE;if(request.includes("jump"))return Ii.JUMP;switch(e){case"start":return Ii.START;case"resumeAll":return Ii.RESUME_ALL;case"continue":return Ii.CONTINUE;case"previous":return Ii.PREVIOUS;case"exit":return Ii.EXIT;case"exitAll":return Ii.EXIT_ALL;case"abandon":return Ii.ABANDON;case"abandonAll":return Ii.ABANDON_ALL;case"suspendAll":return Ii.SUSPEND_ALL;case"_none_":return Ii.NOT_VALID;default:return null}}handleActivityDelivery(e){this.log("info",`Activity delivered: ${e.id} - ${e.title}`),this.fireEvent("onActivityDelivery",e)}handleActivityUnload(e){this.log("info",`Activity unloaded: ${e.id} - ${e.title}`),this.fireEvent("onActivityUnload",e)}handleSequencingComplete(result){this.log("debug","Sequencing completed",result)}handleSequencingError(e){this.log("error","Sequencing error: "+e),this.fireEvent("onSequencingError",e,"sequencing")}fireEvent(e){if(this.configuration.enableEventSystem){for(var t=arguments.length,i=Array(t>1?t-1:0),s=1;t>s;s++)i[s-1]=arguments[s];"onSequencingDebug"!==e&&this.fireDebugEvent(e+" fired",{eventType:e,argsLength:i.length});try{const t=this.eventListeners[e];if(t&&"function"==typeof t)try{t(...i),this.log("debug",`Internal listener for ${e} executed successfully`)}catch(t){this.log("error",`Internal listener for ${e} failed: ${t}`)}try{this.eventService.processListeners("Sequencing."+e,i[0],...i.slice(1)),this.log("debug",`Event service listeners for ${e} processed`)}catch(t){this.log("warn",`Event service failed for ${e}: ${t}`)}try{if("undefined"!=typeof window&&window.scormSequencingEvents){const t=window.scormSequencingEvents;t[e]&&"function"==typeof t[e]&&(t[e](...i),this.log("debug",`Global listener for ${e} executed`))}}catch(t){this.log("warn",`Global listener for ${e} failed: ${t}`)}}catch(t){this.log("error",`Critical error firing event ${e}: ${t}`)}}}fireDebugEvent(e,t){try{const i=this.eventListeners.onSequencingDebug;i&&"function"==typeof i&&i(e,{timestamp:(new Date).toISOString(),...t});try{this.eventService.processListeners("Sequencing.onSequencingDebug",e,{timestamp:(new Date).toISOString(),...t})}catch(e){}}catch(e){console.debug("Debug event failed: "+e)}}fireActivityAttemptStart(e){this.fireEvent("onActivityAttemptStart",e),this.fireDebugEvent("Activity attempt started",{activityId:e.id,title:e.title,attemptCount:e.attemptCount})}fireActivityAttemptEnd(e){this.fireEvent("onActivityAttemptEnd",e),this.fireDebugEvent("Activity attempt ended",{activityId:e.id,title:e.title,completionStatus:e.completionStatus,successStatus:e.successStatus})}fireLimitConditionCheck(e,result){this.fireEvent("onLimitConditionCheck",e,result),this.fireDebugEvent("Limit condition check",{activityId:e.id,result:result,attemptCount:e.attemptCount,attemptLimit:e.attemptLimit})}fireNavigationValidityUpdate(e){this.fireEvent("onNavigationValidityUpdate",e),this.fireDebugEvent("Navigation validity updated",{validity:e})}fireSequencingStateChange(e){this.fireEvent("onSequencingStateChange",e),this.fireDebugEvent("Sequencing state changed",{stateKeys:Object.keys(e)})}handleSequencingProcessEvent(e,t){try{switch(e){case"onActivityDelivery":this.fireEvent("onActivityDelivery",t);break;case"onLimitConditionCheck":this.fireLimitConditionCheck(t.activity,t.result);break;case"onActivityAttemptStart":this.fireActivityAttemptStart(t);break;case"onActivityAttemptEnd":this.fireActivityAttemptEnd(t);break;case"onNavigationValidityUpdate":this.fireNavigationValidityUpdate(t);break;case"onSequencingSessionEnd":this.fireEvent("onSequencingSessionEnd",t);break;default:this.fireDebugEvent("Sequencing process event: "+e,t)}}catch(t){this.log("error",`Error handling sequencing process event ${e}: ${t}`)}}log(e,t,i){const s=["debug","info","warn","error"],r=this.configuration.logLevel||"info";if(s.indexOf(e)>=s.indexOf(r))switch(e){case"debug":this.loggingService.debug(`[Sequencing] ${t}${i?" - "+JSON.stringify(i):""}`);break;case"info":this.loggingService.info(`[Sequencing] ${t}${i?" - "+JSON.stringify(i):""}`);break;case"warn":this.loggingService.warn(`[Sequencing] ${t}${i?" - "+JSON.stringify(i):""}`);break;case"error":this.loggingService.error(`[Sequencing] ${t}${i?" - "+JSON.stringify(i):""}`)}}}class Ji{loadFromFlattenedJSON(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2?arguments[2]:void 0,s=arguments.length>3?arguments[3]:void 0,r=arguments.length>4?arguments[4]:void 0;if(!s())return void console.error("loadFromFlattenedJSON can only be called before the call to lmsInitialize.");const n=/^(cmi\.interactions\.)(\d+)\.(.*)$/,o=/^(cmi\.objectives\.)(\d+)\.(.*)$/,interactions=[],objectives=[],a=[];for(const t in e)if({}.hasOwnProperty.call(e,t)){const i=t.match(n);if(i){interactions.push({key:t,value:e[t],index:+i[2],field:i[3]||""});continue}const s=t.match(o);if(s){objectives.push({key:t,value:e[t],index:+s[2],field:s[3]||""});continue}a.push({key:t,value:e[t]})}interactions.sort((e,t)=>e.index!==t.index?e.index-t.index:"id"===e.field?-1:"id"===t.field?1:"type"===e.field?-1:"type"===t.field?1:e.field.localeCompare(t.field)),objectives.sort((e,t)=>e.index!==t.index?e.index-t.index:"id"===e.field?-1:"id"===t.field?1:e.field.localeCompare(t.field)),a.sort((e,t)=>e.key.localeCompare(t.key));const c=e=>{e.forEach(e=>{const n={};n[e.key]=e.value,this.loadFromJSON(function(e){if(Object(e)!==e||Array.isArray(e))return e;const result={},pattern=/\.?([^.[\]]+)|\[(\d+)]/g;return Object.keys(e).filter(t=>({}.hasOwnProperty.call(e,t))).forEach(t=>{let i=result,s="";const r=RegExp(pattern);Array.from({length:t.match(RegExp(pattern,"g"))?.length??0},()=>r.exec(t)).forEach(e=>{e&&(i=i[s]??(i[s]=e[2]?[]:{}),s=e[2]||e[1]||"")}),i[s]=e[t]}),result[""]??result}(n),t,i,s,r)})};c(interactions),c(objectives),c(a)}loadFromJSON(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2?arguments[2]:void 0,s=arguments.length>3?arguments[3]:void 0,r=arguments.length>4?arguments[4]:void 0;if(s()){t=void 0!==t?t:"cmi",r(e);for(const n in e)if({}.hasOwnProperty.call(e,n)&&e[n]){const o=(t?t+".":"")+n,a=e[n];if(a.constructor===Array){for(let e=0;a.length>e;e++)if(a[e]){const t=a[e],n=`${o}.${e}`;t.constructor===Object?this.loadFromJSON(t,n,i,s,r):i(n,t)}}else a.constructor===Object?this.loadFromJSON(a,o,i,s,r):i(o,a)}}else console.error("loadFromJSON can only be called before the call to lmsInitialize.")}renderCMIToJSONString(cmi,e){return e?JSON.stringify({cmi:cmi}):JSON.stringify({cmi:cmi},(e,t)=>void 0===t?null:t,2)}renderCMIToJSONObject(cmi,e){return JSON.parse(this.renderCMIToJSONString(cmi,e))}getCommitObject(e,t,i,s,r,n){const o=t||e,a=i?s(e,o):r(e,o);return[B.DEBUG,"1",1,"DEBUG"].includes(n)&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(a)),a}}var Ki=Object.defineProperty,Xi=(e,t,i)=>((e,t,i)=>t in e?Ki(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Qi{constructor(e,t){Xi(this,"settings"),Xi(this,"error_codes"),this.settings=e,this.error_codes=t}processHttpRequest(e,t){return arguments.length>2&&void 0!==arguments[2]&&arguments[2]?this._handleImmediateRequest(e,t):this._performSyncXHR(e,t)}_handleImmediateRequest(e,t){const i=this.settings.requestHandler(t)??t,{body:s}=this._prepareRequestBody(i),r=navigator.sendBeacon(e,new Blob([s],{type:"text/plain;charset=UTF-8"}));return{result:r?"true":"false",errorCode:r?0:this.error_codes.GENERAL_COMMIT_FAILURE||391}}_performSyncXHR(e,t){const i=this.settings.requestHandler(t)??t,{body:s,contentType:r}=this._prepareRequestBody(i),n=new XMLHttpRequest;n.open("POST",e,!1),n.setRequestHeader("Content-Type",r),Object.entries(this.settings.xhrHeaders).forEach(e=>{let[t,i]=e;n.setRequestHeader(t,i+"")}),this.settings.xhrWithCredentials&&(n.withCredentials=!0);try{return n.send(s),this.settings.xhrResponseHandler(n)}catch(e){return{result:S,errorCode:this.error_codes.GENERAL_COMMIT_FAILURE||391,errorMessage:e instanceof Error?e.message:e+""}}}_prepareRequestBody(e){return{body:e instanceof Array?e.join("&"):JSON.stringify(e),contentType:e instanceof Array?"application/x-www-form-urlencoded":this.settings.commitRequestDataType}}updateSettings(e){this.settings=e}}function Zi(e,t,i,s){return Mt(e,t,i,T.TYPE_MISMATCH,w,s)}function es(e,t,i,s){if(""===t)throw new w(e,T.VALUE_OUT_OF_RANGE);return Ot(e,t,i,T.VALUE_OUT_OF_RANGE,w)}const ts=new class{validateScore(e,t,i,s,r,n,o){return Mt(e,t,i,r,o)&&(!s||Ot(e,t,s,n,o))}validateScorm12Audio(e,t){return Zi(e,t,W)&&es(e,t,"-1#100")}validateScorm12Language(e,t){return Zi(e,t,G)}validateScorm12Speed(e,t){return Zi(e,t,W)&&es(e,t,"-100#100")}validateScorm12Text(e,t){return Zi(e,t,W)&&es(e,t,"-1#1")}validateReadOnly(e,t){if(t)throw new w(e,T.READ_ONLY_ELEMENT)}};var is=Object.defineProperty,ss=(e,t,i)=>((e,t,i)=>t in e?is(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class rs{constructor(e,t,i,s,r,n,o,a,c){if(ss(this,"_timeout"),ss(this,"_error_codes"),ss(this,"_settings",U),ss(this,"_httpService"),ss(this,"_eventService"),ss(this,"_serializationService"),ss(this,"_errorHandlingService"),ss(this,"_loggingService"),ss(this,"_offlineStorageService"),ss(this,"_cmiValueAccessService"),ss(this,"_courseId",""),ss(this,"startingData"),ss(this,"currentState"),new.target===rs)throw new TypeError("Cannot construct BaseAPI instances directly");this.currentState=0,this._error_codes=e,t&&(this.settings={...U,...t}),void 0!==t?.asyncCommit&&void 0===t.useAsynchronousCommits&&void 0===t.throttleCommits&&(console.warn("DEPRECATED: 'asyncCommit' setting is deprecated and will be removed in a future version. Use 'useAsynchronousCommits: true' and 'throttleCommits: true' instead."),t.asyncCommit&&(this.settings.useAsynchronousCommits=!0,this.settings.throttleCommits=!0)),!this.settings.useAsynchronousCommits&&this.settings.throttleCommits&&(console.warn("throttleCommits cannot be used with synchronous commits. Setting throttleCommits to false."),this.settings.throttleCommits=!1),this._loggingService=a||gt(),this._loggingService.setLogLevel(this.settings.logLevel),this._loggingService.setLogHandler(this.settings.onLogMessage?this.settings.onLogMessage:$),i?this._httpService=i:this.settings.httpService?this._httpService=this.settings.httpService:this.settings.useAsynchronousCommits?(console.warn("WARNING: useAsynchronousCommits=true is not SCORM compliant. Commit failures will not be reported to the SCO, which may cause data loss. This setting should only be used for specific legacy compatibility cases."),this._httpService=new at(this.settings,this._error_codes)):this._httpService=new Qi(this.settings,this._error_codes),this._eventService=s||new Ct((e,t,i,s)=>this.apiLog(e,t,i,s)),this._serializationService=r||new Ji,this._errorHandlingService=o||new St(this._error_codes,(e,t,i,s)=>this.apiLog(e,t,i||B.ERROR,s),(e,t)=>this.getLmsErrorMessageDetails(e,t),void 0),this.settings.enableOfflineSupport&&(this._offlineStorageService=c||new wt(this.settings,this._error_codes,(e,t,i,s)=>this.apiLog(e,t,i,s)),this.settings.courseId&&(this._courseId=this.settings.courseId),this.settings.syncOnTerminate&&this._eventService.on("BeforeTerminate",()=>{this._offlineStorageService?.isDeviceOnline()&&this._courseId&&this._offlineStorageService.hasPendingOfflineData(this._courseId).then(e=>{if(e)return this.apiLog("BeforeTerminate","Syncing pending offline data before termination",B.INFO),this._offlineStorageService?.syncOfflineData()}).then(e=>{e?this.processListeners("OfflineDataSynced"):!1===e&&this.processListeners("OfflineDataSyncFailed")}).catch(e=>{this.apiLog("BeforeTerminate","Error syncing offline data: "+e,B.ERROR),this.processListeners("OfflineDataSyncFailed")})}),this._offlineStorageService&&this._courseId&&this._offlineStorageService.getOfflineData(this._courseId).then(e=>{e&&(this.apiLog("constructor","Found offline data to restore",B.INFO),this.loadFromJSON(e.runtimeData))}).catch(e=>{this.apiLog("constructor","Error retrieving offline data: "+e,B.ERROR)})),this._cmiValueAccessService=new ht({errorCodes:this._error_codes,getLastErrorCode:()=>this.lastErrorCode,setLastErrorCode:e=>{this.lastErrorCode=e},throwSCORMError:(e,t,i)=>this.throwSCORMError(e,t,i),isInitialized:()=>this.isInitialized(),validateCorrectResponse:(e,t)=>this.validateCorrectResponse(e,t),checkForDuplicateId:(e,t)=>this._checkForDuplicateId(e,t),getChildElement:(e,t,i)=>this.getChildElement(e,t,i),apiLog:(e,t,i)=>this.apiLog(e,t,i),checkObjectHasProperty:(e,t)=>this._checkObjectHasProperty(e,t),getDataModel:()=>this})}get lastErrorCode(){return this._errorHandlingService?.lastErrorCode??"0"}set lastErrorCode(e){this._errorHandlingService&&(this._errorHandlingService.lastErrorCode=e)}get eventService(){return this._eventService}get loggingService(){return this._loggingService}commonReset(e){this.apiLog("reset","Called",B.INFO),this.settings={...this.settings,...e},this.clearScheduledCommit(),this.currentState=0,this.lastErrorCode="0",this._eventService.reset(),this.startingData={},this._offlineStorageService&&(this._offlineStorageService.updateSettings(this.settings),e?.courseId&&(this._courseId=e.courseId))}initialize(e,t,i){let s=S;return this.isInitialized()?this.throwSCORMError("api",this._error_codes.INITIALIZED,t):this.isTerminated()?this.throwSCORMError("api",this._error_codes.TERMINATED,i):(this.settings.selfReportSessionTime&&this.cmi.setStartTime(),this.currentState=1,this.lastErrorCode="0",s=f,this.processListeners(e),this.settings.enableOfflineSupport&&this._offlineStorageService&&this._courseId&&this.settings.syncOnInitialize&&this._offlineStorageService.isDeviceOnline()&&this._offlineStorageService.hasPendingOfflineData(this._courseId).then(t=>{t&&(this.apiLog(e,"Syncing pending offline data on initialization",B.INFO),this._offlineStorageService?.syncOfflineData().then(t=>{t&&(this.apiLog(e,"Successfully synced offline data",B.INFO),this.processListeners("OfflineDataSynced"))}))})),this.apiLog(e,"returned: "+s,B.INFO),this.clearSCORMError(s),s}apiLog(e,t,i,s){t=function(e,t,i){let s=e?(e+"").padEnd(20)+": ":"";return i&&(s+=i,s=s.padEnd(70)),s+=t??"",s}(e,t,s),this._loggingService.log(i,t)}get settings(){return this._settings}set settings(e){const t=this._settings;this._settings={...this._settings,...e},this._httpService?.updateSettings(this._settings),void 0!==e.logLevel&&e.logLevel!==t.logLevel&&this._loggingService?.setLogLevel(e.logLevel),void 0!==e.onLogMessage&&e.onLogMessage!==t.onLogMessage&&this._loggingService?.setLogHandler(e.onLogMessage)}terminate(e,t){let i=f,s=!1;if(this.isNotInitialized()){const e=this._error_codes.TERMINATION_BEFORE_INIT??0;this.throwSCORMError("api",e),112===e&&(i=S)}else if(t&&this.isTerminated()){const e=this._error_codes.MULTIPLE_TERMINATION??0;this.throwSCORMError("api",e),113===e&&(i=S)}else{s=!0,this.processListeners("BeforeTerminate");const result=this.storeData(!0);if((result.errorCode??0)>0)result.errorMessage&&this.apiLog("terminate","Terminate failed with error: "+result.errorMessage,B.ERROR),result.errorDetails&&this.apiLog("terminate","Error details: "+JSON.stringify(result.errorDetails),B.DEBUG),this.throwSCORMError("api",result.errorCode??0),i=S;else{this.currentState=2,t&&(this.lastErrorCode="0");const e=result?.result??f;i="boolean"==typeof e?e+"":e}this.processListeners(e)}return this.apiLog(e,"returned: "+i,B.INFO),s&&this.clearSCORMError(i),i}getValue(e,t,i){let s="";if(this.checkState(t,this._error_codes.RETRIEVE_BEFORE_INIT??0,this._error_codes.RETRIEVE_AFTER_TERM??0)){try{s=this.getCMIValue(i)}catch(e){s=this.handleValueAccessException(i,e,s)}this.processListeners(e,i)}return this.apiLog(e,": returned: "+s,B.INFO,i),void 0===s?"":("0"===this.lastErrorCode&&this.clearSCORMError(s),s)}setValue(e,t,i,s,r){void 0!==r&&(r+="");let n=S;if(this.checkState(i,this._error_codes.STORE_BEFORE_INIT??0,this._error_codes.STORE_AFTER_TERM??0)){try{n=this.setCMIValue(s,r)}catch(e){n=this.handleValueAccessException(s,e,n)}this.processListeners(e,s,r)}return void 0===n&&(n=S),this.lastErrorCode+""=="0"&&this.settings.autocommit&&this.scheduleCommit(1e3*this.settings.autocommitSeconds,t),this.apiLog(e,": "+r+": result: "+n,B.INFO,s),"0"===this.lastErrorCode&&this.clearSCORMError(n),n}commit(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.clearScheduledCommit();let i=f;if(this.isNotInitialized()){const e=this._error_codes.COMMIT_BEFORE_INIT??0;this.throwSCORMError("api",e),142===e&&(i=S)}else if(t&&this.isTerminated()){const e=this._error_codes.COMMIT_AFTER_TERM??0;this.throwSCORMError("api",e),143===e&&(i=S)}else{const result=this.storeData(!1);(result.errorCode??0)>0&&(result.errorMessage&&this.apiLog("commit","Commit failed with error: "+result.errorMessage,B.ERROR),result.errorDetails&&this.apiLog("commit","Error details: "+JSON.stringify(result.errorDetails),B.DEBUG),this.throwSCORMError("api",result.errorCode));const s=result?.result??S;i="boolean"==typeof s?s+"":s,this.apiLog(e," Result: "+i,B.DEBUG,"HttpRequest"),t&&(this.lastErrorCode="0"),this.processListeners(e),this.settings.enableOfflineSupport&&this._offlineStorageService&&this._offlineStorageService.isDeviceOnline()&&this._courseId&&this._offlineStorageService.hasPendingOfflineData(this._courseId).then(t=>{t&&(this.apiLog(e,"Syncing pending offline data",B.INFO),this._offlineStorageService?.syncOfflineData().then(t=>{t?(this.apiLog(e,"Successfully synced offline data",B.INFO),this.processListeners("OfflineDataSynced")):this.apiLog(e,"Failed to sync some offline data",B.WARN)}))})}return this.apiLog(e,"returned: "+i,B.INFO),this.isNotInitialized()||t&&this.isTerminated()||this.clearSCORMError(i),i}getLastError(e){const t=this.lastErrorCode+"";return this.processListeners(e),this.apiLog(e,"returned: "+t,B.INFO),t}getErrorString(e,t){let i="";return null!==t&&""!==t&&(i=this.getLmsErrorMessageDetails(t),this.processListeners(e)),i.length>255&&(i=i.substring(0,255)),this.apiLog(e,"returned: "+i,B.INFO),i}getDiagnostic(e,t){let i="";const s=""===t?this.lastErrorCode+"":t;if(null!==s&&""!==s){const t=this._errorHandlingService.lastDiagnostic;i=t&&s+""==this.lastErrorCode+""?t:this.getLmsErrorMessageDetails(s,!0),this.processListeners(e)}return i.length>255&&(i=i.substring(0,255)),this.apiLog(e,"returned: "+i,B.INFO),i}checkState(e,t,i){return this.isNotInitialized()?(this.throwSCORMError("api",t),!1):!e||!this.isTerminated()||(this.throwSCORMError("api",i),!1)}_checkForDuplicateId(e,t){const i=(e,t)=>{if(e&&"object"==typeof e&&t in e){const i=e[t];return i instanceof x?i:void 0}},s=(e,t,i)=>{for(let s=0;e.childArray.length>s;s++)if(s!==t){const t=e.childArray[s];if(t&&"object"==typeof t&&"id"in t&&t.id===i)return!0}return!1},r=e.match(/^cmi\.objectives\.(\d+)\.id$/);if(r&&r[1]){const e=parseInt(r[1],10),objectives=i(this.cmi,"objectives");return!!objectives&&s(objectives,e,t)}const n=e.match(/^cmi\.interactions\.(\d+)\.id$/);if(n&&n[1]){const e=parseInt(n[1],10),interactions=i(this.cmi,"interactions");return!!interactions&&s(interactions,e,t)}const o=e.match(/^cmi\.interactions\.(\d+)\.objectives\.(\d+)\.id$/);if(o&&o[1]&&o[2]){const e=parseInt(o[1],10),r=parseInt(o[2],10),interactions=i(this.cmi,"interactions");if(interactions){const n=interactions.childArray[e];if(n){const objectives=i(n,"objectives");if(objectives)return s(objectives,r,t)}}return!1}return!1}getLmsErrorMessageDetails(e){throw Error("The getLmsErrorMessageDetails method has not been implemented")}getCMIValue(e){throw Error("The getCMIValue method has not been implemented")}setCMIValue(e,t){throw Error("The setCMIValue method has not been implemented")}_commonSetCMIValue(e,t,i,s){return this._cmiValueAccessService.setCMIValue(e,t,i,s)}_commonGetCMIValue(e,t,i){return this._cmiValueAccessService.getCMIValue(e,t,i)}isInitialized(){return 1===this.currentState}isNotInitialized(){return 0===this.currentState}isTerminated(){return 2===this.currentState}on(e,t){this._eventService.on(e,t)}off(e,t){this._eventService.off(e,t)}clear(e){this._eventService.clear(e)}processListeners(e,t,i){this._eventService.processListeners(e,t,i)}throwSCORMError(e,t,i){this._errorHandlingService.throwSCORMError(e,t??0,i)}clearSCORMError(e){this._errorHandlingService.clearSCORMError(e)}loadFromFlattenedJSON(e,t){t||(t=""),this._serializationService.loadFromFlattenedJSON(e,t,(e,t)=>this.setCMIValue(e,t),()=>this.isNotInitialized(),e=>{this.startingData=e})}getFlattenedCMI(){return o(this.renderCMIToJSONObject())}loadFromJSON(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";t&&""!==t||Object.hasOwnProperty.call(e,"cmi")||Object.hasOwnProperty.call(e,"adl")||(t="cmi"),this._serializationService.loadFromJSON(e,t,(e,t)=>this.setCMIValue(e,t),()=>this.isNotInitialized(),e=>{this.startingData=e})}renderCMIToJSONString(){return this._serializationService.renderCMIToJSONString(this.cmi,this.settings.sendFullCommit)}renderCMIToJSONObject(){return this._serializationService.renderCMIToJSONObject(this.cmi,this.settings.sendFullCommit)}processHttpRequest(e,t){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this.settings.enableOfflineSupport&&this._offlineStorageService&&!this._offlineStorageService.isDeviceOnline()&&this._courseId?(this.apiLog("processHttpRequest","Device is offline, storing data locally",B.INFO),t&&"object"==typeof t&&"cmi"in t?this._offlineStorageService.storeOffline(this._courseId,t):(this.apiLog("processHttpRequest","Invalid commit data format for offline storage",B.ERROR),{result:S,errorCode:this._error_codes.GENERAL??101})):this._httpService.processHttpRequest(e,t,i,(e,t,i,s)=>this.apiLog(e,t,i,s),(e,t,i)=>this.processListeners(e,t,i))}scheduleCommit(e,t){this._timeout||(this._timeout=new Se(this,e,t),this.apiLog("scheduleCommit","scheduled",B.DEBUG,""))}clearScheduledCommit(){this._timeout&&(this._timeout.cancel(),this._timeout=void 0,this.apiLog("clearScheduledCommit","cleared",B.DEBUG,""))}_checkObjectHasProperty(e,t){return null!=e&&"object"==typeof e&&(Object.hasOwnProperty.call(e,t)||null!=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),t)||t in e)}handleValueAccessException(e,t,i){return t instanceof v?(this.lastErrorCode=t.errorCode+"",""!==i&&(i=S),this.throwSCORMError(e,t.errorCode,t.errorMessage)):this.throwSCORMError(e,this._error_codes.GENERAL,t instanceof Error&&t.message?t.message:"Unknown error"),i}getCommitObject(e){return this._serializationService.getCommitObject(e,this.settings.alwaysSendTotalTime,this.settings.renderCommonCommitFields,(e,t)=>this.renderCommitObject(e,t),(e,t)=>this.renderCommitCMI(e,t),this.settings.logLevel)}}var ns=Object.defineProperty,os=(e,t,i)=>((e,t,i)=>t in e?ns(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class as extends d{constructor(e){super(e.CMIElement),os(this,"__children"),os(this,"__score_range"),os(this,"__invalid_error_code"),os(this,"__invalid_type_code"),os(this,"__invalid_range_code"),os(this,"__decimal_regex"),os(this,"__error_class"),os(this,"_raw",""),os(this,"_min",""),os(this,"_max"),this.__children=e.score_children||b,this.__score_range=!!e.score_range&&Z,this._max=e.max||""===e.max?e.max:"100",this.__invalid_error_code=e.invalidErrorCode||T.INVALID_SET_VALUE,this.__invalid_type_code=e.invalidTypeCode||T.TYPE_MISMATCH,this.__invalid_range_code=e.invalidRangeCode||T.VALUE_OUT_OF_RANGE,this.__decimal_regex=e.decimalRegex||J,this.__error_class=e.errorClass}reset(){this._initialized=!1,this._raw="",this._min=""}get _children(){return this.__children}set _children(_children){throw new this.__error_class(this._cmi_element+"._children",this.__invalid_error_code)}get raw(){return this._raw}set raw(e){ts.validateScore(this._cmi_element+".raw",e,this.__decimal_regex,this.__score_range,this.__invalid_type_code,this.__invalid_range_code,this.__error_class)&&(this._raw=e)}get min(){return this._min}set min(e){ts.validateScore(this._cmi_element+".min",e,this.__decimal_regex,this.__score_range,this.__invalid_type_code,this.__invalid_range_code,this.__error_class)&&(this._min=e)}get max(){return this._max}set max(e){ts.validateScore(this._cmi_element+".max",e,this.__decimal_regex,this.__score_range,this.__invalid_type_code,this.__invalid_range_code,this.__error_class)&&(this._max=e)}getScoreObject(){const e={};return Number.isNaN(Number.parseFloat(this.raw))||(e.raw=Number.parseFloat(this.raw)),Number.isNaN(Number.parseFloat(this.min))||(e.min=Number.parseFloat(this.min)),Number.isNaN(Number.parseFloat(this.max))||(e.max=Number.parseFloat(this.max)),e}toJSON(){this.jsonString=!0;const result={raw:this.raw,min:this.min,max:this.max};return this.jsonString=!1,result}}var cs=Object.defineProperty,ls=(e,t,i)=>((e,t,i)=>t in e?cs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class us extends d{constructor(){super("cmi.core"),ls(this,"score"),ls(this,"__children","student_id,student_name,lesson_location,credit,lesson_status,entry,score,total_time,lesson_mode,exit,session_time"),ls(this,"_student_id",""),ls(this,"_student_name",""),ls(this,"_lesson_location",""),ls(this,"_credit",""),ls(this,"_lesson_status","not attempted"),ls(this,"_entry",""),ls(this,"_total_time",""),ls(this,"_lesson_mode","normal"),ls(this,"_exit",""),ls(this,"_session_time","00:00:00"),ls(this,"_suspend_data",""),this.score=new as({CMIElement:"cmi.core.score",score_children:b,score_range:Z,invalidErrorCode:T.INVALID_SET_VALUE,invalidTypeCode:T.TYPE_MISMATCH,invalidRangeCode:T.VALUE_OUT_OF_RANGE,errorClass:w})}initialize(){super.initialize(),this.score?.initialize()}reset(){this._initialized=!1,this._exit="",this._entry="",this._session_time="00:00:00",this.score?.reset()}get _children(){return this.__children}set _children(_children){throw new w(this._cmi_element+"._children",T.INVALID_SET_VALUE)}get student_id(){return this._student_id}set student_id(student_id){if(this.initialized)throw new w(this._cmi_element+".student_id",T.READ_ONLY_ELEMENT);this._student_id=student_id}get student_name(){return this._student_name}set student_name(student_name){if(this.initialized)throw new w(this._cmi_element+".student_name",T.READ_ONLY_ELEMENT);this._student_name=student_name}get lesson_location(){return this._lesson_location}set lesson_location(lesson_location){Zi(this._cmi_element+".lesson_location",lesson_location,G,!0)&&(this._lesson_location=lesson_location)}get credit(){return this._credit}set credit(credit){if(this.initialized)throw new w(this._cmi_element+".credit",T.READ_ONLY_ELEMENT);Zi(this._cmi_element+".credit",credit,"^(credit|no-credit)$",!0)&&(this._credit=credit)}get lesson_status(){return this._lesson_status}set lesson_status(lesson_status){this.initialized?Zi(this._cmi_element+".lesson_status",lesson_status,"^(passed|completed|failed|incomplete|browsed)$")&&(this._lesson_status=lesson_status):Zi(this._cmi_element+".lesson_status",lesson_status,Q)&&(this._lesson_status=lesson_status)}get entry(){return this._entry}set entry(entry){if(this.initialized)throw new w(this._cmi_element+".entry",T.READ_ONLY_ELEMENT);Zi(this._cmi_element+".entry",entry,"^(ab-initio|resume|)$",!0)&&(this._entry=entry)}get total_time(){return this._total_time}set total_time(total_time){if(this.initialized)throw new w(this._cmi_element+".total_time",T.READ_ONLY_ELEMENT);if(Zi(this._cmi_element+".total_time",total_time,Y,!0))if(total_time){const e=s(total_time,Y);this._total_time=t(e)}else this._total_time=total_time}get lesson_mode(){return this._lesson_mode}set lesson_mode(lesson_mode){if(this.initialized)throw new w(this._cmi_element+".lesson_mode",T.READ_ONLY_ELEMENT);Zi(this._cmi_element+".lesson_mode",lesson_mode,"^(normal|browse|review)$")&&(this._lesson_mode=lesson_mode)}get exit(){if(!this.jsonString)throw new w(this._cmi_element+".exit",T.WRITE_ONLY_ELEMENT);return this._exit}set exit(exit){"normal"===exit&&(console.warn("SCORM 1.2: Received non-standard value 'normal' for cmi.core.exit; normalizing to empty string."),exit=""),Zi(this._cmi_element+".exit",exit,"^(time-out|suspend|logout|)$",!0)&&(this._exit=exit)}get session_time(){if(!this.jsonString)throw new w(this._cmi_element+".session_time",T.WRITE_ONLY_ELEMENT);return this._session_time}set session_time(session_time){if(Zi(this._cmi_element+".session_time",session_time,Y)){const e=s(session_time,Y);this._session_time=t(e)}}get suspend_data(){return this._suspend_data}set suspend_data(suspend_data){Zi(this._cmi_element+".suspend_data",suspend_data,"^[\\s\\S]{0,64000}$",!0)&&(this._suspend_data=suspend_data)}getCurrentTotalTime(e){let i=this._session_time;if(void 0!==e){const s=(new Date).getTime()-e;i=t(s/1e3)}return r=this._total_time,n=i,"string"==typeof(o=RegExp(Y))&&(o=RegExp(o)),t(s(r,o)+s(n,o));var r,n,o}toJSON(){this.jsonString=!0;const result={student_id:this.student_id,student_name:this.student_name,lesson_location:this.lesson_location,credit:this.credit,lesson_status:this.lesson_status,entry:this.entry,lesson_mode:this.lesson_mode,exit:this.exit,session_time:this.session_time,score:this.score};return this.jsonString=!1,result}}var hs=Object.defineProperty,ds=(e,t,i)=>((e,t,i)=>t in e?hs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);let ms=class extends x{constructor(){super({CMIElement:"cmi.objectives",children:y,errorCode:T.INVALID_SET_VALUE,errorClass:w})}},ps=class extends d{constructor(){super("cmi.objectives.n"),ds(this,"score"),ds(this,"_id",""),ds(this,"_status",""),this.score=new as({CMIElement:"cmi.objectives.n.score",score_children:b,score_range:Z,invalidErrorCode:T.INVALID_SET_VALUE,invalidTypeCode:T.TYPE_MISMATCH,invalidRangeCode:T.VALUE_OUT_OF_RANGE,errorClass:w})}reset(){this._initialized=!1,this._id="",this._status="",this.score?.reset()}get id(){return this._id}set id(id){Zi(this._cmi_element+".id",id,K)&&(this._id=id)}get status(){return this._status}set status(status){Zi(this._cmi_element+".status",status,Q)&&(this._status=status)}toJSON(){this.jsonString=!0;const result={id:this.id,status:this.status,score:this.score};return this.jsonString=!1,result}};var _s=Object.defineProperty,gs=(e,t,i)=>((e,t,i)=>t in e?_s(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class vs extends d{constructor(e){super("cmi.student_data"),gs(this,"__children"),gs(this,"_mastery_score",""),gs(this,"_max_time_allowed",""),gs(this,"_time_limit_action",""),this.__children=e||"mastery_score,max_time_allowed,time_limit_action"}reset(){this._initialized=!1}get _children(){return this.__children}set _children(_children){throw new w(this._cmi_element+"._children",T.INVALID_SET_VALUE)}get mastery_score(){return this._mastery_score}set mastery_score(mastery_score){if(ts.validateReadOnly(this._cmi_element+".mastery_score",this.initialized),null==mastery_score)return;let e=mastery_score;"string"!=typeof e&&(e+=""),""!==e?Zi(this._cmi_element+".mastery_score",e,J)&&es(this._cmi_element+".mastery_score",e,Z)&&(this._mastery_score=e):this._mastery_score=mastery_score}get max_time_allowed(){return this._max_time_allowed}set max_time_allowed(max_time_allowed){if(ts.validateReadOnly(this._cmi_element+".max_time_allowed",this.initialized),null==max_time_allowed)return;const e="string"==typeof max_time_allowed?max_time_allowed:max_time_allowed+"";this._max_time_allowed=""!==e?function(e,i){try{Zi(i,e,Y,!0);const r=s(e,Y);return t(r)}catch(e){}try{Zi(i,e,ne,!0);const s=r(e,ne);return t(s)}catch(e){}throw new w(i,T.TYPE_MISMATCH)}(e,this._cmi_element+".max_time_allowed"):""}get time_limit_action(){return this._time_limit_action}set time_limit_action(time_limit_action){if(ts.validateReadOnly(this._cmi_element+".time_limit_action",this.initialized),null==time_limit_action)return;const e="string"==typeof time_limit_action?time_limit_action:time_limit_action+"";Zi(this._cmi_element+".time_limit_action",e,"^(exit,message|exit,no message|continue,message|continue,no message)$",!0)&&(this._time_limit_action=e)}toJSON(){this.jsonString=!0;const result={mastery_score:this.mastery_score,max_time_allowed:this.max_time_allowed,time_limit_action:this.time_limit_action};return this.jsonString=!1,result}}var fs=Object.defineProperty,Ss=(e,t,i)=>((e,t,i)=>t in e?fs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class bs extends d{constructor(e){super("cmi.student_preference"),Ss(this,"__children"),Ss(this,"_audio",""),Ss(this,"_language",""),Ss(this,"_speed",""),Ss(this,"_text",""),this.__children=e||"audio,language,speed,text"}reset(){this._initialized=!1}get _children(){return this.__children}set _children(_children){throw new w(this._cmi_element+"._children",T.INVALID_SET_VALUE)}get audio(){return this._audio}set audio(audio){ts.validateScorm12Audio(this._cmi_element+".audio",audio)&&(this._audio=audio)}get language(){return this._language}set language(language){ts.validateScorm12Language(this._cmi_element+".language",language)&&(this._language=language)}get speed(){return this._speed}set speed(speed){ts.validateScorm12Speed(this._cmi_element+".speed",speed)&&(this._speed=speed)}get text(){return this._text}set text(text){ts.validateScorm12Text(this._cmi_element+".text",text)&&(this._text=text)}toJSON(){this.jsonString=!0;const result={audio:this.audio,language:this.language,speed:this.speed,text:this.text};return this.jsonString=!1,result}}var ys=Object.defineProperty,Cs=(e,t,i)=>((e,t,i)=>t in e?ys(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);let As=class extends x{constructor(){super({CMIElement:"cmi.interactions",children:"id,objectives,time,type,correct_responses,weighting,student_response,result,latency",errorCode:T.INVALID_SET_VALUE,errorClass:w})}},Es=class extends d{constructor(){super("cmi.interactions.n"),Cs(this,"objectives"),Cs(this,"correct_responses"),Cs(this,"_id",""),Cs(this,"_time",""),Cs(this,"_type",""),Cs(this,"_weighting",""),Cs(this,"_student_response",""),Cs(this,"_result",""),Cs(this,"_latency",""),this.objectives=new x({CMIElement:"cmi.interactions.n.objectives",errorCode:T.INVALID_SET_VALUE,errorClass:w,children:y}),this.correct_responses=new x({CMIElement:"cmi.interactions.correct_responses",errorCode:T.INVALID_SET_VALUE,errorClass:w,children:"pattern"})}initialize(){super.initialize(),this.objectives?.initialize(),this.correct_responses?.initialize()}reset(){this._initialized=!1,this._id="",this._time="",this._type="",this._weighting="",this._student_response="",this._result="",this._latency="",this.objectives?.reset(),this.correct_responses?.reset()}get id(){if(!this.jsonString)throw new w(this._cmi_element+".id",T.WRITE_ONLY_ELEMENT);return this._id}set id(id){Zi(this._cmi_element+".id",id,K)&&(this._id=id)}get time(){if(!this.jsonString)throw new w(this._cmi_element+".time",T.WRITE_ONLY_ELEMENT);return this._time}set time(time){Zi(this._cmi_element+".time",time,"^(?:[01]\\d|2[0123]):(?:[012345]\\d):(?:[012345]\\d)(\\.\\d{1,2})?$")&&(this._time=time)}get type(){if(!this.jsonString)throw new w(this._cmi_element+".type",T.WRITE_ONLY_ELEMENT);return this._type}set type(type){Zi(this._cmi_element+".type",type,"^(true-false|choice|fill-in|matching|performance|sequencing|likert|numeric)$")&&(this._type=type)}get weighting(){if(!this.jsonString)throw new w(this._cmi_element+".weighting",T.WRITE_ONLY_ELEMENT);return this._weighting}set weighting(weighting){Zi(this._cmi_element+".weighting",weighting,J)&&es(this._cmi_element+".weighting",weighting,"-100#100")&&(this._weighting=weighting)}get student_response(){if(!this.jsonString)throw new w(this._cmi_element+".student_response",T.WRITE_ONLY_ELEMENT);return this._student_response}set student_response(student_response){Zi(this._cmi_element+".student_response",student_response,X,!0)&&(this._student_response=student_response)}get result(){if(!this.jsonString)throw new w(this._cmi_element+".result",T.WRITE_ONLY_ELEMENT);return this._result}set result(result){let e=result;"incorrect"===result&&(e="wrong",console.warn("SCORM 1.2: Received non-standard value 'incorrect' for cmi.interactions.n.result; normalizing to 'wrong'.")),Zi(this._cmi_element+".result",e,"^(correct|wrong|unanticipated|neutral|([0-9]{0,3})?(\\.[0-9]*)?)$")&&(this._result=e)}get latency(){if(!this.jsonString)throw new w(this._cmi_element+".latency",T.WRITE_ONLY_ELEMENT);return this._latency}set latency(latency){if(Zi(this._cmi_element+".latency",latency,Y)){const e=s(latency,Y);this._latency=t(e)}}toJSON(){this.jsonString=!0;const result={id:this.id,time:this.time,type:this.type,weighting:this.weighting,student_response:this.student_response,result:this.result,latency:this.latency,objectives:this.objectives,correct_responses:this.correct_responses};return this.jsonString=!1,result}},ws=class extends d{constructor(){super("cmi.interactions.n.objectives.n"),Cs(this,"_id","")}reset(){this._initialized=!1,this._id=""}get id(){if(!this.jsonString)throw new w(this._cmi_element+".id",T.WRITE_ONLY_ELEMENT);return this._id}set id(id){Zi(this._cmi_element+".id",id,K)&&(this._id=id)}toJSON(){this.jsonString=!0;const result={id:this.id};return this.jsonString=!1,result}},Ms=class extends d{constructor(){super("cmi.interactions.correct_responses.n"),Cs(this,"_pattern","")}reset(){this._initialized=!1,this._pattern=""}get pattern(){if(!this.jsonString)throw new w(this._cmi_element+".pattern",T.WRITE_ONLY_ELEMENT);return this._pattern}set pattern(pattern){Zi(this._cmi_element+".pattern",pattern,X,!0)&&(this._pattern=pattern)}toJSON(){this.jsonString=!0;const result={pattern:this._pattern};return this.jsonString=!1,result}};var Os=Object.defineProperty,Rs=(e,t,i)=>((e,t,i)=>t in e?Os(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);let Ts=class extends m{constructor(e,student_data,t){super("cmi"),Rs(this,"__children",""),Rs(this,"__version","3.4"),Rs(this,"_launch_data",""),Rs(this,"_comments",""),Rs(this,"_comments_from_lms",""),Rs(this,"core"),Rs(this,"objectives"),Rs(this,"student_data"),Rs(this,"student_preference"),Rs(this,"interactions"),t&&this.initialize(),this.__children=e||"core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions",this.core=new us,this.objectives=new ms,this.student_data=student_data||new vs,this.student_preference=new bs,this.interactions=new As}reset(){this._initialized=!1,this._launch_data="",this._comments="",this.core?.reset(),this.objectives?.reset(!0),this.interactions?.reset(!0),this.student_data?.reset(),this.student_preference?.reset()}initialize(){super.initialize(),this.core?.initialize(),this.objectives?.initialize(),this.student_data?.initialize(),this.student_preference?.initialize(),this.interactions?.initialize()}toJSON(){this.jsonString=!0;const result={suspend_data:this.suspend_data,launch_data:this.launch_data,comments:this.comments,comments_from_lms:this.comments_from_lms,core:this.core,objectives:this.objectives,student_data:this.student_data,student_preference:this.student_preference,interactions:this.interactions};return this.jsonString=!1,result}get _version(){return this.__version}set _version(_version){throw new w(this._cmi_element+"._version",T.INVALID_SET_VALUE)}get _children(){return this.__children}set _children(_children){throw new w(this._cmi_element+"._children",T.INVALID_SET_VALUE)}get suspend_data(){return this.core?.suspend_data}set suspend_data(suspend_data){this.core&&(this.core.suspend_data=suspend_data)}get launch_data(){return this._launch_data}set launch_data(launch_data){if(this.initialized)throw new w(this._cmi_element+".launch_data",T.READ_ONLY_ELEMENT);this._launch_data=launch_data}get comments(){return this._comments}set comments(comments){Zi(this._cmi_element+".comments",comments,"^[\\s\\S]{0,4096}$",!0)&&(this._comments=comments)}get comments_from_lms(){return this._comments_from_lms}set comments_from_lms(comments_from_lms){if(this.initialized)throw new w(this._cmi_element+".comments_from_lms",T.READ_ONLY_ELEMENT);this._comments_from_lms=comments_from_lms}getCurrentTotalTime(){return this.core.getCurrentTotalTime(this.start_time)}};var js=Object.defineProperty;class Is extends d{constructor(){super("cmi.nav"),((e,t,i)=>{t in e?js(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i})(this,"_event"+"","")}reset(){this._event="",this._initialized=!1}get event(){return this._event}set event(e){(""===e||Zi(this._cmi_element+".event",e,"^(_?(previous|continue|start|resumeAll|exit|exitAll|abandon|abandonAll|suspendAll|retry|retryAll)|choice|jump|_none_)$"))&&(this._event=e)}toJSON(){this.jsonString=!0;const result={event:this.event};return this.jsonString=!1,result}}var Ns=Object.defineProperty,xs=(e,t,i)=>((e,t,i)=>t in e?Ns(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);const qs=class e extends rs{constructor(t,i){const s=t?{...t}:void 0;s&&void 0===s.mastery_override&&(s.mastery_override=!0),super(T,s,i),xs(this,"statusSetByModule",!1),xs(this,"cmi"),xs(this,"nav"),xs(this,"LMSInitialize"),xs(this,"LMSFinish"),xs(this,"LMSGetValue"),xs(this,"LMSSetValue"),xs(this,"LMSCommit"),xs(this,"LMSGetLastError"),xs(this,"LMSGetErrorString"),xs(this,"LMSGetDiagnostic"),this.cmi=new Ts,this.nav=new Is,this.settings.globalStudentPreferences&&e._globalLearnerPrefs&&(""!==e._globalLearnerPrefs.audio&&(this.cmi.student_preference.audio=e._globalLearnerPrefs.audio),""!==e._globalLearnerPrefs.language&&(this.cmi.student_preference.language=e._globalLearnerPrefs.language),""!==e._globalLearnerPrefs.speed&&(this.cmi.student_preference.speed=e._globalLearnerPrefs.speed),""!==e._globalLearnerPrefs.text&&(this.cmi.student_preference.text=e._globalLearnerPrefs.text)),this.LMSInitialize=this.lmsInitialize,this.LMSFinish=this.lmsFinish,this.LMSGetValue=this.lmsGetValue,this.LMSSetValue=this.lmsSetValue,this.LMSCommit=this.lmsCommit,this.LMSGetLastError=this.lmsGetLastError,this.LMSGetErrorString=this.lmsGetErrorString,this.LMSGetDiagnostic=this.lmsGetDiagnostic}static clearGlobalPreferences(){e._globalLearnerPrefs=null}reset(e){this.commonReset(e),this.cmi?.reset(),this.nav?.reset(),this.statusSetByModule=!1}lmsInitialize(){return""!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"")?(this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),S):(this.cmi.initialize(),this.cmi.core.lesson_status?this.statusSetByModule=!0:this.cmi.core.lesson_status="not attempted",this.initialize("LMSInitialize","LMS was already initialized!","LMS is already finished!"))}lmsFinish(){if(""!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:""))return this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),S;const result=this.terminate("LMSFinish",!0);return result===f&&(""!==this.nav.event?this.processListeners("continue"===this.nav.event?"SequenceNext":"SequencePrevious"):this.settings.autoProgress&&this.processListeners("SequenceNext")),result}lmsGetValue(e){return this.getValue("LMSGetValue",!1,e)}lmsSetValue(e,t){return"cmi.core.lesson_status"===e&&(this.statusSetByModule=!0),this.setValue("LMSSetValue","LMSCommit",!1,e,t)}lmsCommit(){return""!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"")?(this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),S):this.settings.throttleCommits?(this.scheduleCommit(500,"LMSCommit"),f):this.commit("LMSCommit",!1)}lmsGetLastError(){return this.getLastError("LMSGetLastError")}lmsGetErrorString(e){return this.getErrorString("LMSGetErrorString",e)}lmsGetDiagnostic(e){return this.getDiagnostic("LMSGetDiagnostic",e)}setCMIValue(e,t){const result=this._commonSetCMIValue("LMSSetValue",!1,e,t);return result===f&&this.settings.globalStudentPreferences&&("cmi.student_preference.audio"===e?this._updateGlobalPreference("audio",t):"cmi.student_preference.language"===e?this._updateGlobalPreference("language",t):"cmi.student_preference.speed"===e?this._updateGlobalPreference("speed",t):"cmi.student_preference.text"===e&&this._updateGlobalPreference("text",t)),result}_updateGlobalPreference(t,i){e._globalLearnerPrefs||(e._globalLearnerPrefs={audio:"",language:"",speed:"",text:""}),e._globalLearnerPrefs[t]=i}getCMIValue(e){return this._commonGetCMIValue("getCMIValue",!1,e)}getChildElement(e,t,i){return c(e,"cmi\\.objectives\\.\\d+")?new ps:i&&c(e,"cmi\\.interactions\\.\\d+\\.correct_responses\\.\\d+")?new Ms:i&&c(e,"cmi\\.interactions\\.\\d+\\.objectives\\.\\d+")?new ws:!i&&c(e,"cmi\\.interactions\\.\\d+")?new Es:null}validateCorrectResponse(e,t){}getLmsErrorMessageDetails(e,t){let i="No Error",s="No Error";return C[e+=""]&&(i=C[e]?.basicMessage||i,s=C[e]?.detailMessage||s),t?s:i}replaceWithAnotherScormAPI(e){this.cmi=e.cmi}renderCommitCMI(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.renderCMIToJSONObject();(e||t)&&(i.cmi.core.total_time=this.cmi.getCurrentTotalTime());const result=[],s=o(i);switch(this.settings.dataCommitFormat){case"flattened":return s;case"params":for(const e in s)({}).hasOwnProperty.call(s,e)&&result.push(`${e}=${s[e]}`);return result;default:return i}}renderCommitObject(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.renderCommitCMI(e,t),r=e||t?this.cmi.getCurrentTotalTime():"",n=s(r,Y),o=this.cmi.core.lesson_status;let a=H,c=F;o&&(a="completed"===o||"passed"===o?k:V,"passed"===o?c=P:"failed"===o&&(c=z));const l=this.cmi?.core?.score?.getScoreObject()||{},u={successStatus:c,completionStatus:a,runtimeData:i,totalTimeSeconds:n};return l&&(u.score=l),this.settings.autoPopulateCommitMetadata&&(this.settings.courseId&&(u.courseId=this.settings.courseId),this.settings.scoId&&(u.scoId=this.settings.scoId),this.cmi.core.student_id&&(u.learnerId=this.cmi.core.student_id),this.cmi.core.student_name&&(u.learnerName=this.cmi.core.student_name)),u}storeData(e){if(e){const t=this.cmi.core.lesson_status;if("browse"===this.cmi.core.lesson_mode&&""===(this.startingData?.cmi?.core?.lesson_status||"")&&"not attempted"===t)return this.cmi.core.lesson_status="browsed",this.processCommitData(e);if(this.cmi.core.lesson_status&&(this.statusSetByModule||"not attempted"!==this.cmi.core.lesson_status)||(this.cmi.core.lesson_status=this.settings.autoCompleteLessonStatus?"completed":"incomplete"),"normal"===this.cmi.core.lesson_mode&&"credit"===this.cmi.core.credit&&this.settings.mastery_override&&""!==this.cmi.student_data.mastery_score&&""!==this.cmi.core.score.raw){const e=parseFloat(this.cmi.core.score.raw),t=parseFloat(this.cmi.student_data.mastery_score);isNaN(e)||isNaN(t)||(this.cmi.core.lesson_status=t>e?"failed":"passed")}if(this.settings.score_overrides_status&&this.statusSetByModule&&"normal"===this.cmi.core.lesson_mode&&"credit"===this.cmi.core.credit&&""!==this.cmi.student_data.mastery_score&&""!==this.cmi.core.score.raw){const e=parseFloat(this.cmi.core.score.raw),t=parseFloat(this.cmi.student_data.mastery_score);isNaN(e)||isNaN(t)||(this.cmi.core.lesson_status=t>e?"failed":"passed")}}return this.processCommitData(e)}processCommitData(e){const t=this.getCommitObject(e);return"string"==typeof this.settings.lmsCommitUrl?this.processHttpRequest(this.settings.lmsCommitUrl,t,e):{result:f,errorCode:0}}};xs(qs,"_globalLearnerPrefs",null);let Scorm12API=qs;var Ds=Object.defineProperty,Ls=(e,t,i)=>((e,t,i)=>t in e?Ds(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Ps extends d{constructor(){super("cmi.learner_preference"),Ls(this,"__children",A.student_preference_children),Ls(this,"_audio_level","1"),Ls(this,"_language",""),Ls(this,"_delivery_speed","1"),Ls(this,"_audio_captioning","0")}reset(){this._initialized=!1}get _children(){return this.__children}set _children(_children){throw new O(this._cmi_element+"._children",j.READ_ONLY_ELEMENT)}get audio_level(){return this._audio_level}set audio_level(audio_level){Rt(this._cmi_element+".audio_level",audio_level,oe)&&Tt(this._cmi_element+".audio_level",audio_level,"0#999.9999999")&&(this._audio_level=audio_level)}get language(){return this._language}set language(language){Rt(this._cmi_element+".language",language,"^([a-zA-Z]{1,8}|i|x)(-[a-zA-Z0-9-]{2,8})?$|^$")&&(this._language=language)}get delivery_speed(){return this._delivery_speed}set delivery_speed(delivery_speed){if(Rt(this._cmi_element+".delivery_speed",delivery_speed,oe)&&Tt(this._cmi_element+".delivery_speed",delivery_speed,"0#999.9999999")){if(0===parseFloat(delivery_speed))throw new O(this._cmi_element+".delivery_speed",j.VALUE_OUT_OF_RANGE);this._delivery_speed=delivery_speed}}get audio_captioning(){return this._audio_captioning}set audio_captioning(audio_captioning){Rt(this._cmi_element+".audio_captioning",audio_captioning,"^-?([0-9]+)$")&&Tt(this._cmi_element+".audio_captioning",audio_captioning,"-1#1")&&(this._audio_captioning=audio_captioning)}toJSON(){this.jsonString=!0;const result={audio_level:this.audio_level,language:this.language,delivery_speed:this.delivery_speed,audio_captioning:this.audio_captioning};return this.jsonString=!1,result}}var zs=Object.defineProperty,Fs=(e,t,i)=>((e,t,i)=>t in e?zs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class ks extends x{constructor(){super({CMIElement:"cmi.interactions",children:A.interactions_children,errorCode:j.READ_ONLY_ELEMENT,errorClass:O})}}class Vs extends d{constructor(){super("cmi.interactions.n"),Fs(this,"_id",""),Fs(this,"_idIsSet",!1),Fs(this,"_type",""),Fs(this,"_timestamp",""),Fs(this,"_weighting",""),Fs(this,"_learner_response",""),Fs(this,"_result",""),Fs(this,"_latency",""),Fs(this,"_description",""),Fs(this,"objectives"),Fs(this,"correct_responses"),this.objectives=new x({CMIElement:"cmi.interactions.n.objectives",errorCode:j.READ_ONLY_ELEMENT,errorClass:O,children:A.objectives_children}),this.correct_responses=new x({CMIElement:"cmi.interactions.n.correct_responses",errorCode:j.READ_ONLY_ELEMENT,errorClass:O,children:A.correct_responses_children})}initialize(){super.initialize(),this.objectives?.initialize(),this.correct_responses?.initialize()}reset(){this._initialized=!1,this._id="",this._idIsSet=!1,this._type="",this._timestamp="",this._weighting="",this._learner_response="",this._result="",this._latency="",this._description="",this.objectives=new x({CMIElement:"cmi.interactions.n.objectives",errorCode:j.READ_ONLY_ELEMENT,errorClass:O,children:A.objectives_children}),this.correct_responses=new x({CMIElement:"cmi.interactions.n.correct_responses",errorCode:j.READ_ONLY_ELEMENT,errorClass:O,children:A.correct_responses_children})}get id(){return this._id}set id(id){if(""===id||""===id.trim())throw new O(this._cmi_element+".id",j.TYPE_MISMATCH);if(this._idIsSet&&this._id!==id)throw new O(this._cmi_element+".id",j.GENERAL_SET_FAILURE);Rt(this._cmi_element+".id",id,ce)&&(this._id=id,this._idIsSet=!0)}get type(){return this._type}set type(type){if(this.initialized&&""===this._id)throw new O(this._cmi_element+".type",j.DEPENDENCY_NOT_ESTABLISHED);Rt(this._cmi_element+".type",type,"^(true-false|choice|fill-in|long-fill-in|matching|performance|sequencing|likert|numeric|other)$")&&(this._type=type)}get timestamp(){return this._timestamp}set timestamp(timestamp){if(this.initialized&&""===this._id)throw new O(this._cmi_element+".timestamp",j.DEPENDENCY_NOT_ESTABLISHED);Rt(this._cmi_element+".timestamp",timestamp,re)&&(this._timestamp=timestamp)}get weighting(){return this._weighting}set weighting(weighting){if(this.initialized&&""===this._id)throw new O(this._cmi_element+".weighting",j.DEPENDENCY_NOT_ESTABLISHED);Rt(this._cmi_element+".weighting",weighting,oe)&&(this._weighting=weighting)}get learner_response(){return this._learner_response}set learner_response(learner_response){if(this.initialized&&(""===this._type||""===this._id))throw new O(this._cmi_element+".learner_response",j.DEPENDENCY_NOT_ESTABLISHED);{let e=[];const t=pe[this.type];if(!t)throw new O(this._cmi_element+".learner_response",j.TYPE_MISMATCH);if(t?.delimiter?e=learner_response.split("[,]"===t.delimiter?",":t.delimiter):e[0]=learner_response,0>=e.length||e.length>t.max)throw new O(this._cmi_element+".learner_response",j.GENERAL_SET_FAILURE);{const i=RegExp(t.format);for(let s=0;e.length>s;s++)if(t?.delimiter2){const r="[.]"===t.delimiter2?".":t.delimiter2,n=e[s]?.split(r);if(2!==n?.length)throw new O(this._cmi_element+".learner_response",j.TYPE_MISMATCH);if("performance"===this.type&&(""===n[0]||""===n[1]))throw new O(this._cmi_element+".learner_response",j.TYPE_MISMATCH);if(!n[0]?.match(i))throw new O(this._cmi_element+".learner_response",j.TYPE_MISMATCH);if(!t.format2||!n[1]?.match(RegExp(t.format2)))throw new O(this._cmi_element+".learner_response",j.TYPE_MISMATCH)}else{if(!e[s]?.match(i))throw new O(this._cmi_element+".learner_response",j.TYPE_MISMATCH);if(""!==e[s]&&t.unique)for(let t=0;s>t;t++)if(e[s]===e[t])throw new O(this._cmi_element+".learner_response",j.TYPE_MISMATCH)}}this._learner_response=learner_response}}get result(){return this._result}set result(result){Rt(this._cmi_element+".result",result,"^(correct|incorrect|unanticipated|neutral|-?([0-9]{1,4})(\\.[0-9]{1,18})?)$")&&(this._result=result)}get latency(){return this._latency}set latency(latency){if(this.initialized&&""===this._id)throw new O(this._cmi_element+".latency",j.DEPENDENCY_NOT_ESTABLISHED);Rt(this._cmi_element+".latency",latency,ne)&&(this._latency=latency)}get description(){return this._description}set description(description){if(this.initialized&&""===this._id)throw new O(this._cmi_element+".description",j.DEPENDENCY_NOT_ESTABLISHED);Rt(this._cmi_element+".description",description,ie,!0)&&(this._description=description)}toJSON(){this.jsonString=!0;const result={id:this.id,type:this.type,objectives:this.objectives,timestamp:this.timestamp,weighting:this.weighting,learner_response:this.learner_response,result:this.result,latency:this.latency,description:this.description,correct_responses:this.correct_responses};return this.jsonString=!1,result}}class Hs extends d{constructor(){super("cmi.interactions.n.objectives.n"),Fs(this,"_id","")}reset(){this._initialized=!1,this._id=""}get id(){return this._id}set id(id){if(""===id||""===id.trim())throw new O(this._cmi_element+".id",j.TYPE_MISMATCH);Rt(this._cmi_element+".id",id,ce)&&(this._id=id)}toJSON(){this.jsonString=!0;const result={id:this.id};return this.jsonString=!1,result}}function Bs(e){return e.replace(/[[\]]/g,"")}function Us(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function $s(text,e){const t=Us(e),i=RegExp("(?<!\\\\)"+t,"g"),s=RegExp("\\\\"+t,"g");return text.split(i).map(t=>t.replace(s,e))}function Gs(text,e){const t=Us(e),i=RegExp("(?<!\\\\)"+t),s=RegExp("\\\\"+t,"g"),r=text.split(i),n=r[0]??"";return 1===r.length?[n.replace(s,e)]:[n.replace(s,e),r.slice(1).join(e).replace(s,e)]}class Ys extends d{constructor(e){super("cmi.interactions.n.correct_responses.n"),Fs(this,"_pattern",""),Fs(this,"_interactionType"),this._interactionType=e}reset(){this._initialized=!1,this._pattern=""}get pattern(){return this._pattern}set pattern(pattern){if("fill-in"!==this._interactionType||""!==pattern){if(Rt(this._cmi_element+".pattern",pattern,"^.*$")){if(this._interactionType){const e=_e[this._interactionType];e&&("matching"===this._interactionType&&/\\[.,]/.test(pattern)||function(type,pattern,e){if(pattern.trim()!==pattern)throw new O("cmi.interactions.n.correct_responses.n.pattern",j.TYPE_MISMATCH);const t=e.delimiter?Bs(e.delimiter):null,i=t?$s(pattern,t):[pattern];for(const e of i)if(e.trim()!==e)throw new O("cmi.interactions.n.correct_responses.n.pattern",j.TYPE_MISMATCH);if("fill-in"===type&&""===pattern)return;const s=e.delimiter?Bs(e.delimiter):null;let r;if(r=s?$s(pattern,s):[pattern],!e.delimiter&&pattern.includes(","))throw new O("cmi.interactions.n.correct_responses.n.pattern",j.TYPE_MISMATCH);if((e.unique||!1===e.duplicate)&&new Set(r).size!==r.length)throw new O("cmi.interactions.n.correct_responses.n.pattern",j.TYPE_MISMATCH);if(0===r.length||r.length>e.max)throw new O("cmi.interactions.n.correct_responses.n.pattern",j.GENERAL_SET_FAILURE);const n=RegExp(e.format),o=e.format2?RegExp(e.format2):null,a=e=>{if(!n.test(e))throw new O("cmi.interactions.n.correct_responses.n.pattern",j.TYPE_MISMATCH)},c=(e,t)=>{if(!t)throw new O("cmi.interactions.n.correct_responses.n.pattern",j.TYPE_MISMATCH);const i=Bs(t),s=e.split(RegExp("(?<!\\\\)"+Us(i),"g")).map(e=>e.replace(RegExp("\\\\"+Us(i),"g"),i));if(2!==s.length||""===s[0]||""===s[1])throw new O("cmi.interactions.n.correct_responses.n.pattern",j.TYPE_MISMATCH);if(void 0!==s[0]&&!n.test(s[0])||o&&void 0!==s[1]&&!o.test(s[1]))throw new O("cmi.interactions.n.correct_responses.n.pattern",j.TYPE_MISMATCH)};for(const t of r)switch(type){case"numeric":{const i=e.delimiter?Bs(e.delimiter):":",s=t.split(i);if(1>s.length||s.length>2)throw new O("cmi.interactions.n.correct_responses.n.pattern",j.TYPE_MISMATCH);s.forEach(a);break}case"performance":{const i=e.delimiter2;if(!i)throw new O("cmi.interactions.n.correct_responses.n.pattern",j.TYPE_MISMATCH);const s=Gs(t,Bs(i));if(2!==s.length)throw new O("cmi.interactions.n.correct_responses.n.pattern",j.TYPE_MISMATCH);const[r,a]=s;if(""===r||""===a||r===a)throw new O("cmi.interactions.n.correct_responses.n.pattern",j.TYPE_MISMATCH);if(void 0===r||!n.test(r))throw new O("cmi.interactions.n.correct_responses.n.pattern",j.TYPE_MISMATCH);if(o&&void 0!==a&&!o.test(a))throw new O("cmi.interactions.n.correct_responses.n.pattern",j.TYPE_MISMATCH);break}default:e.delimiter2?c(t,e.delimiter2):a(t)}}(this._interactionType,pattern,e))}this._pattern=pattern}}else this._pattern=""}toJSON(){this.jsonString=!0;const result={pattern:this.pattern};return this.jsonString=!1,result}}var Ws=Object.defineProperty;class Js extends as{constructor(){super({CMIElement:"cmi.score",score_children:A.score_children,max:"",invalidErrorCode:j.READ_ONLY_ELEMENT,invalidTypeCode:j.TYPE_MISMATCH,invalidRangeCode:j.VALUE_OUT_OF_RANGE,decimalRegex:oe,errorClass:O}),((e,t,i)=>{t in e?Ws(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i})(this,"_scaled"+"","")}reset(){this._initialized=!1,this._scaled="",this._raw="",this._min="",this._max=""}get scaled(){return this._scaled}set scaled(e){Rt(this._cmi_element+".scaled",e,oe)&&Tt(this._cmi_element+".scaled",e,"-1#1")&&(this._scaled=e)}getScoreObject(){const e=super.getScoreObject();return Number.isNaN(Number.parseFloat(this.scaled))||(e.scaled=Number.parseFloat(this.scaled)),e}toJSON(){this.jsonString=!0;const result={scaled:this.scaled,raw:this.raw,min:this.min,max:this.max};return this.jsonString=!1,result}}var Ks=Object.defineProperty,Xs=(e,t,i)=>((e,t,i)=>t in e?Ks(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Qs extends x{constructor(){super({CMIElement:"cmi.comments_from_lms",children:A.comments_children,errorCode:j.READ_ONLY_ELEMENT,errorClass:O})}}class Zs extends x{constructor(){super({CMIElement:"cmi.comments_from_learner",children:A.comments_children,errorCode:j.READ_ONLY_ELEMENT,errorClass:O})}}class er extends d{constructor(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];super("cmi.comments_from_learner.n"),Xs(this,"_comment",""),Xs(this,"_location",""),Xs(this,"_timestamp",""),Xs(this,"_readOnlyAfterInit"),this._comment="",this._location="",this._timestamp="",this._readOnlyAfterInit=e}reset(){this._initialized=!1}get comment(){return this._comment}set comment(comment){if(this.initialized&&this._readOnlyAfterInit)throw new O(this._cmi_element+".comment",j.READ_ONLY_ELEMENT);Rt(this._cmi_element+".comment",comment,se,!0)&&(this._comment=comment)}get location(){return this._location}set location(location){if(this.initialized&&this._readOnlyAfterInit)throw new O(this._cmi_element+".location",j.READ_ONLY_ELEMENT);Rt(this._cmi_element+".location",location,"^[\\u0000-\\uFFFF]{0,250}$")&&(this._location=location)}get timestamp(){return this._timestamp}set timestamp(timestamp){if(this.initialized&&this._readOnlyAfterInit)throw new O(this._cmi_element+".timestamp",j.READ_ONLY_ELEMENT);Rt(this._cmi_element+".timestamp",timestamp,re)&&(this._timestamp=timestamp)}toJSON(){this.jsonString=!0;const result={comment:this.comment,location:this.location,timestamp:this.timestamp};return this.jsonString=!1,result}}var tr=Object.defineProperty,ir=(e,t,i)=>((e,t,i)=>t in e?tr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class sr extends x{constructor(){super({CMIElement:"cmi.objectives",children:A.objectives_children,errorCode:j.READ_ONLY_ELEMENT,errorClass:O})}findObjectiveById(id){return this.childArray.find(e=>e.id===id)}findObjectiveByIndex(e){return this.childArray[e]}setObjectiveByIndex(e,t){this.childArray[e]=t}}class rr extends d{constructor(){super("cmi.objectives.n"),ir(this,"_id",""),ir(this,"_idIsSet",!1),ir(this,"_success_status","unknown"),ir(this,"_completion_status","unknown"),ir(this,"_progress_measure",""),ir(this,"_description",""),ir(this,"score"),this.score=new Js}reset(){this._initialized=!1,this._id="",this._idIsSet=!1,this._success_status="unknown",this._completion_status="unknown",this._progress_measure="",this._description="",this.score?.reset()}initialize(){super.initialize(),this.score?.initialize()}get id(){return this._id}set id(id){if(""===id||""===id.trim())throw new O(this._cmi_element+".id",j.TYPE_MISMATCH);if(this._idIsSet&&this._id!==id)throw new O(this._cmi_element+".id",j.GENERAL_SET_FAILURE);Rt(this._cmi_element+".id",id,ce)&&(this._id=id,this._idIsSet=!0)}get success_status(){return this._success_status}set success_status(success_status){if(this.initialized&&""===this._id)throw new O(this._cmi_element+".success_status",j.DEPENDENCY_NOT_ESTABLISHED);Rt(this._cmi_element+".success_status",success_status,ue)&&(this._success_status=success_status)}get completion_status(){return this._completion_status}set completion_status(completion_status){if(this.initialized&&""===this._id)throw new O(this._cmi_element+".completion_status",j.DEPENDENCY_NOT_ESTABLISHED);Rt(this._cmi_element+".completion_status",completion_status,le)&&(this._completion_status=completion_status)}get progress_measure(){return this._progress_measure}set progress_measure(progress_measure){if(this.initialized&&""===this._id)throw new O(this._cmi_element+".progress_measure",j.DEPENDENCY_NOT_ESTABLISHED);Rt(this._cmi_element+".progress_measure",progress_measure,oe)&&Tt(this._cmi_element+".progress_measure",progress_measure,"0#1")&&(this._progress_measure=progress_measure)}get description(){return this._description}set description(description){if(this.initialized&&""===this._id)throw new O(this._cmi_element+".description",j.DEPENDENCY_NOT_ESTABLISHED);Rt(this._cmi_element+".description",description,ie,!0)&&(this._description=description)}toJSON(){this.jsonString=!0;const result={id:this.id,success_status:this.success_status,completion_status:this.completion_status,progress_measure:this.progress_measure,description:this.description,score:this.score};return this.jsonString=!1,result}fromJSON(e){e&&"object"==typeof e&&("string"==typeof e.id&&(this.id=e.id),"string"==typeof e.success_status&&(this.success_status=e.success_status),"string"==typeof e.completion_status&&(this.completion_status=e.completion_status),void 0!==e.progress_measure&&(this.progress_measure=e.progress_measure+""),"string"==typeof e.description&&(this.description=e.description),e.score&&"object"==typeof e.score&&(void 0!==e.score.scaled&&(this.score.scaled=e.score.scaled+""),void 0!==e.score.raw&&(this.score.raw=e.score.raw+""),void 0!==e.score.min&&(this.score.min=e.score.min+""),void 0!==e.score.max&&(this.score.max=e.score.max+"")))}}var nr=Object.defineProperty,or=(e,t,i)=>((e,t,i)=>t in e?nr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class ar extends d{constructor(){super("cmi"),or(this,"__version","1.0"),or(this,"__children",A.cmi_children)}get _version(){return this.__version}set _version(_version){throw new O(this._cmi_element+"._version",j.READ_ONLY_ELEMENT)}get _children(){return this.__children}set _children(_children){throw new O(this._cmi_element+"._children",j.READ_ONLY_ELEMENT)}reset(){this._initialized=!1}}var cr=Object.defineProperty,lr=(e,t,i)=>((e,t,i)=>t in e?cr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class ur extends d{constructor(){super("cmi"),lr(this,"_learner_id",""),lr(this,"_learner_name","")}get learner_id(){return this._learner_id}set learner_id(learner_id){if(this.initialized)throw new O(this._cmi_element+".learner_id",j.READ_ONLY_ELEMENT);this._learner_id=learner_id}get learner_name(){return this._learner_name}set learner_name(learner_name){if(this.initialized)throw new O(this._cmi_element+".learner_name",j.READ_ONLY_ELEMENT);this._learner_name=learner_name}reset(){this._initialized=!1}}var hr=Object.defineProperty,dr=(e,t,i)=>((e,t,i)=>t in e?hr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class mr extends d{constructor(){super("cmi"),dr(this,"_completion_status","unknown"),dr(this,"_success_status","unknown"),dr(this,"_progress_measure","")}get completion_status(){return this._completion_status}set completion_status(completion_status){Rt(this._cmi_element+".completion_status",completion_status,le)&&(this._completion_status=completion_status)}get success_status(){return this._success_status}set success_status(success_status){Rt(this._cmi_element+".success_status",success_status,ue)&&(this._success_status=success_status)}get progress_measure(){return this._progress_measure}set progress_measure(progress_measure){Rt(this._cmi_element+".progress_measure",progress_measure,oe)&&Tt(this._cmi_element+".progress_measure",progress_measure,"0#1")&&(this._progress_measure=progress_measure)}reset(){this._initialized=!1,this._completion_status="unknown",this._success_status="unknown",this._progress_measure=""}}var pr=Object.defineProperty,_r=(e,t,i)=>((e,t,i)=>t in e?pr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class gr extends d{constructor(){super("cmi"),_r(this,"_entry",""),_r(this,"_exit",""),_r(this,"_session_time","PT0H0M0S"),_r(this,"_total_time","PT0S")}get entry(){return this._entry}set entry(entry){if(this.initialized)throw new O(this._cmi_element+".entry",j.READ_ONLY_ELEMENT);this._entry=entry}get exit(){if(!this.jsonString)throw new O(this._cmi_element+".exit",j.WRITE_ONLY_ELEMENT);return this._exit}getExitValueInternal(){return this._exit}set exit(exit){"logout"===exit&&console.warn('SCORM 2004: cmi.exit value "logout" is deprecated per 4th Edition. Consider using "normal" or "suspend" instead.'),Rt(this._cmi_element+".exit",exit,"^(time-out|suspend|logout|normal)$",!0)&&(this._exit=exit)}get session_time(){if(!this.jsonString)throw new O(this._cmi_element+".session_time",j.WRITE_ONLY_ELEMENT);return this._session_time}set session_time(session_time){Rt(this._cmi_element+".session_time",session_time,ne)&&(this._session_time=session_time)}get total_time(){return this._total_time}set total_time(total_time){if(this.initialized)throw new O(this._cmi_element+".total_time",j.READ_ONLY_ELEMENT);this._total_time=total_time}getCurrentTotalTime(e){let t=this._session_time;if(void 0!==e){const s=(new Date).getTime()-e;t=i(s/1e3)}return function(e,t,s){const n=RegExp(s);return i(r(e,n)+r(t,n))}(this._total_time,t,ne)}reset(){this._initialized=!1,this._entry="ab-initio",this._exit="",this._session_time="PT0H0M0S"}}var vr=Object.defineProperty,fr=(e,t,i)=>((e,t,i)=>t in e?vr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Sr extends d{constructor(){super("cmi"),fr(this,"_location",""),fr(this,"_launch_data",""),fr(this,"_suspend_data","")}get location(){return this._location}set location(location){Rt(this._cmi_element+".location",location,"^[\\u0000-\\uFFFF]{0,1000}$")&&(this._location=location)}get launch_data(){return this._launch_data}set launch_data(launch_data){if(this.initialized)throw new O(this._cmi_element+".launch_data",j.READ_ONLY_ELEMENT);this._launch_data=launch_data}get suspend_data(){return this._suspend_data}set suspend_data(suspend_data){Rt(this._cmi_element+".suspend_data",suspend_data,te,!0)&&(this._suspend_data=suspend_data)}reset(){this._initialized=!1,this._location="",this._suspend_data=""}}var br=Object.defineProperty,yr=(e,t,i)=>((e,t,i)=>t in e?br(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Cr extends d{constructor(){super("cmi"),yr(this,"_credit","credit"),yr(this,"_mode","normal"),yr(this,"_time_limit_action","continue,no message"),yr(this,"_max_time_allowed","")}get credit(){return this._credit}set credit(credit){if(this.initialized)throw new O(this._cmi_element+".credit",j.READ_ONLY_ELEMENT);if(!/^(credit|no-credit)$/.test(credit))throw new O(this._cmi_element+".credit",j.TYPE_MISMATCH);this._credit=credit}get mode(){return this._mode}set mode(mode){if(this.initialized)throw new O(this._cmi_element+".mode",j.READ_ONLY_ELEMENT);if(!/^(browse|normal|review)$/.test(mode))throw new O(this._cmi_element+".mode",j.TYPE_MISMATCH);this._mode=mode}get time_limit_action(){return this._time_limit_action}set time_limit_action(time_limit_action){if(this.initialized)throw new O(this._cmi_element+".time_limit_action",j.READ_ONLY_ELEMENT);if(!/^(exit,message|exit,no message|continue,message|continue,no message)$/.test(time_limit_action))throw new O(this._cmi_element+".time_limit_action",j.TYPE_MISMATCH);this._time_limit_action=time_limit_action}get max_time_allowed(){return this._max_time_allowed}set max_time_allowed(max_time_allowed){if(this.initialized)throw new O(this._cmi_element+".max_time_allowed",j.READ_ONLY_ELEMENT);if(""!==max_time_allowed){if(!RegExp(ne).test(max_time_allowed))throw new O(this._cmi_element+".max_time_allowed",j.TYPE_MISMATCH);this._max_time_allowed=max_time_allowed}else this._max_time_allowed=max_time_allowed}reset(){this._initialized=!1}}var Ar=Object.defineProperty,Er=(e,t,i)=>((e,t,i)=>t in e?Ar(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class wr extends d{constructor(){super("cmi"),Er(this,"_scaled_passing_score",""),Er(this,"_completion_threshold","")}get scaled_passing_score(){return this._scaled_passing_score}set scaled_passing_score(scaled_passing_score){if(this.initialized)throw new O(this._cmi_element+".scaled_passing_score",j.READ_ONLY_ELEMENT??404);if(""===scaled_passing_score)return void(this._scaled_passing_score=scaled_passing_score);if(!RegExp(oe).test(scaled_passing_score))throw new O(this._cmi_element+".scaled_passing_score",j.TYPE_MISMATCH??406);const e=parseFloat(scaled_passing_score);if(-1>e||e>1)throw new O(this._cmi_element+".scaled_passing_score",j.VALUE_OUT_OF_RANGE??407);this._scaled_passing_score=scaled_passing_score}get completion_threshold(){return this._completion_threshold}set completion_threshold(e){if(this.initialized)throw new O(this._cmi_element+".completion_threshold",j.READ_ONLY_ELEMENT??404);if(""===e)return void(this._completion_threshold=e);if(!RegExp(oe).test(e))throw new O(this._cmi_element+".completion_threshold",j.TYPE_MISMATCH??406);const t=parseFloat(e);if(0>t||t>1)throw new O(this._cmi_element+".completion_threshold",j.VALUE_OUT_OF_RANGE??407);this._completion_threshold=e}reset(){this._initialized=!1}}var Mr=Object.defineProperty,Or=(e,t,i)=>((e,t,i)=>t in e?Mr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Rr extends m{constructor(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];super("cmi"),Or(this,"metadata"),Or(this,"learner"),Or(this,"status"),Or(this,"session"),Or(this,"content"),Or(this,"settings"),Or(this,"thresholds"),Or(this,"learner_preference"),Or(this,"score"),Or(this,"comments_from_learner"),Or(this,"comments_from_lms"),Or(this,"interactions"),Or(this,"objectives"),this.metadata=new ar,this.learner=new ur,this.status=new mr,this.session=new gr,this.content=new Sr,this.settings=new Cr,this.thresholds=new wr,this.learner_preference=new Ps,this.score=new Js,this.comments_from_learner=new Zs,this.comments_from_lms=new Qs,this.interactions=new ks,this.objectives=new sr,e&&this.initialize()}initialize(){super.initialize(),this.metadata?.initialize(),this.learner?.initialize(),this.status?.initialize(),this.session?.initialize(),this.content?.initialize(),this.settings?.initialize(),this.thresholds?.initialize(),this.learner_preference?.initialize(),this.score?.initialize(),this.comments_from_learner?.initialize(),this.comments_from_lms?.initialize(),this.interactions?.initialize(),this.objectives?.initialize()}reset(){this._initialized=!1,this.metadata?.reset(),this.learner?.reset(),this.status?.reset(),this.session?.reset(),this.content?.reset(),this.settings?.reset(),this.thresholds?.reset(),this.objectives?.reset(!0),this.interactions?.reset(!0),this.score?.reset(),this.comments_from_learner?.reset(),this.comments_from_lms?.reset(),this.learner_preference?.reset()}get _version(){return this.metadata._version}set _version(_version){this.metadata._version=_version}get _children(){return this.metadata._children}set _children(_children){this.metadata._children=_children}get completion_status(){return this.status.completion_status}set completion_status(completion_status){this.status.completion_status=completion_status}get completion_threshold(){return this.thresholds.completion_threshold}set completion_threshold(e){this.thresholds.completion_threshold=e}get credit(){return this.settings.credit}set credit(credit){this.settings.credit=credit}get entry(){return this.session.entry}set entry(entry){this.session.entry=entry}get exit(){return this.session.jsonString=this.jsonString,this.session.exit}set exit(exit){this.session.exit=exit}getExitValueInternal(){return this.session.getExitValueInternal()}get launch_data(){return this.content.launch_data}set launch_data(launch_data){this.content.launch_data=launch_data}get learner_id(){return this.learner.learner_id}set learner_id(learner_id){this.learner.learner_id=learner_id}get learner_name(){return this.learner.learner_name}set learner_name(learner_name){this.learner.learner_name=learner_name}get location(){return this.content.location}set location(location){this.content.location=location}get max_time_allowed(){return this.settings.max_time_allowed}set max_time_allowed(max_time_allowed){this.settings.max_time_allowed=max_time_allowed}get mode(){return this.settings.mode}set mode(mode){this.settings.mode=mode}get progress_measure(){return this.status.progress_measure}set progress_measure(progress_measure){this.status.progress_measure=progress_measure}get scaled_passing_score(){return this.thresholds.scaled_passing_score}set scaled_passing_score(scaled_passing_score){this.thresholds.scaled_passing_score=scaled_passing_score}get session_time(){return this.session.jsonString=this.jsonString,this.session.session_time}set session_time(session_time){this.session.session_time=session_time}get success_status(){return this.status.success_status}set success_status(success_status){this.status.success_status=success_status}get suspend_data(){return this.content.suspend_data}set suspend_data(suspend_data){this.content.suspend_data=suspend_data}get time_limit_action(){return this.settings.time_limit_action}set time_limit_action(time_limit_action){this.settings.time_limit_action=time_limit_action}get total_time(){return this.session.total_time}set total_time(total_time){this.session.total_time=total_time}getCurrentTotalTime(){return this.session.getCurrentTotalTime(this.start_time)}toJSON(){this.jsonString=!0,this.session.jsonString=!0;const result={comments_from_learner:this.comments_from_learner,comments_from_lms:this.comments_from_lms,completion_status:this.completion_status,completion_threshold:this.completion_threshold,credit:this.credit,entry:this.entry,exit:this.exit,interactions:this.interactions,launch_data:this.launch_data,learner_id:this.learner_id,learner_name:this.learner_name,learner_preference:this.learner_preference,location:this.location,max_time_allowed:this.max_time_allowed,mode:this.mode,objectives:this.objectives,progress_measure:this.progress_measure,scaled_passing_score:this.scaled_passing_score,score:this.score,session_time:this.session_time,success_status:this.success_status,suspend_data:this.suspend_data,time_limit_action:this.time_limit_action,total_time:this.total_time};return this.jsonString=!1,this.session.jsonString=!1,result}}var Tr=Object.defineProperty,jr=(e,t,i)=>((e,t,i)=>t in e?Tr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Ir extends d{constructor(){super("adl"),jr(this,"nav"),jr(this,"data",new xr),jr(this,"_sequencing",null),this.nav=new Nr,this.data=new xr}initialize(){super.initialize(),this.nav?.initialize()}reset(){this._initialized=!1,this.nav?.reset()}get sequencing(){return this._sequencing}set sequencing(e){this._sequencing=e,e&&(e.adlNav=this.nav,this.nav.sequencing=e)}toJSON(){this.jsonString=!0;const result={nav:this.nav,data:this.data};return this.jsonString=!1,result}}class Nr extends d{constructor(){super("adl.nav"),jr(this,"_request","_none_"),jr(this,"_sequencing",null),jr(this,"request_valid"),this.request_valid=new Pr,this.request_valid.setParentNav(this)}get sequencing(){return this._sequencing}set sequencing(e){this._sequencing=e}initialize(){super.initialize(),this.request_valid?.initialize()}reset(){this._initialized=!1,this._request="_none_",this._sequencing&&(this._sequencing.adlNav=null),this._sequencing=null,this.request_valid?.reset()}get request(){return this._request}set request(request){Rt(this._cmi_element+".request",request,he)&&(this._request=request)}toJSON(){this.jsonString=!0;const result={request:this.request};return this.jsonString=!1,result}}class xr extends x{constructor(){super({CMIElement:"adl.data",children:A.adl_data_children,errorCode:j.READ_ONLY_ELEMENT,errorClass:O})}}class qr extends d{constructor(){super("adl.data.n"),jr(this,"_id",""),jr(this,"_store",""),jr(this,"_idIsSet",!1),jr(this,"_storeIsSet",!1)}reset(){this._initialized=!1,this._idIsSet=!1,this._storeIsSet=!1}get id(){return this._id}set id(id){if(this.initialized)throw new O(this._cmi_element+".id",j.READ_ONLY_ELEMENT);Rt(this._cmi_element+".id",id,ce)&&(this._id=id,this._idIsSet=!0)}get store(){if(this.initialized&&!this._storeIsSet)throw new O(this._cmi_element+".store",j.VALUE_NOT_INITIALIZED);return this._store}set store(e){if(this.initialized&&!this._idIsSet)throw new O(this._cmi_element+".store",j.DEPENDENCY_NOT_ESTABLISHED);Rt(this._cmi_element+".store",e,te)&&(this._store=e,this._storeIsSet=!0)}toJSON(){this.jsonString=!0;const result={id:this._id,store:this._store};return this.jsonString=!1,result}}class Dr{constructor(){jr(this,"_parentNav",null),jr(this,"_staticValues",{})}setParentNav(nav){this._parentNav=nav}_isTargetValid(e){if(this._parentNav?.sequencing?.overallSequencingProcess){const t=this._parentNav.sequencing.overallSequencingProcess;if(t.predictChoiceEnabled)return t.predictChoiceEnabled(e)?"true":"false"}const t=this._staticValues[e];return t===D?"true":t===L?"false":"unknown"}getAll(){return{...this._staticValues}}setAll(e){this._staticValues={...e}}}class Lr{constructor(){jr(this,"_parentNav",null),jr(this,"_staticValues",{})}setParentNav(nav){this._parentNav=nav}_isTargetValid(e){if(this._parentNav?.sequencing?.activityTree)return this._parentNav.sequencing.activityTree.getActivity(e)?"true":"false";const t=this._staticValues[e];return t===D?"true":t===L?"false":"unknown"}getAll(){return{...this._staticValues}}setAll(e){this._staticValues={...e}}}class Pr extends d{constructor(){super("adl.nav.request_valid"),jr(this,"_continue","unknown"),jr(this,"_previous","unknown"),jr(this,"_choice"),jr(this,"_jump"),jr(this,"_exit","unknown"),jr(this,"_exitAll","unknown"),jr(this,"_abandon","unknown"),jr(this,"_abandonAll","unknown"),jr(this,"_suspendAll","unknown"),jr(this,"_parentNav",null),this._choice=new Dr,this._jump=new Lr}setParentNav(nav){this._parentNav=nav,this._choice.setParentNav(nav),this._jump.setParentNav(nav)}reset(){this._initialized=!1,this._continue="unknown",this._previous="unknown",this._choice.setAll({}),this._jump.setAll({}),this._exit="unknown",this._exitAll="unknown",this._abandon="unknown",this._abandonAll="unknown",this._suspendAll="unknown"}get continue(){if(this._parentNav?.sequencing?.overallSequencingProcess){const e=this._parentNav.sequencing.overallSequencingProcess;if(e.predictContinueEnabled)return e.predictContinueEnabled()?"true":"false"}return this._continue}set continue(e){if(this.initialized)throw new O(this._cmi_element+".continue",j.READ_ONLY_ELEMENT);Rt(this._cmi_element+".continue",e,de)&&(this._continue=e)}get previous(){if(this._parentNav?.sequencing?.overallSequencingProcess){const e=this._parentNav.sequencing.overallSequencingProcess;if(e.predictPreviousEnabled)return e.predictPreviousEnabled()?"true":"false"}return this._previous}set previous(e){if(this.initialized)throw new O(this._cmi_element+".previous",j.READ_ONLY_ELEMENT);Rt(this._cmi_element+".previous",e,de)&&(this._previous=e)}get choice(){return this._choice}set choice(e){if(this.initialized)throw new O(this._cmi_element+".choice",j.READ_ONLY_ELEMENT);if("object"!=typeof e)throw new O(this._cmi_element+".choice",j.TYPE_MISMATCH);const t={};for(const i in e)if({}.hasOwnProperty.call(e,i)&&Rt(this._cmi_element+".choice."+i,e[i]||"",de)&&Rt(this._cmi_element+".choice."+i,i,me)){const s=e[i];"true"===s?t[i]=D:"false"===s?t[i]=L:"unknown"===s&&(t[i]=q)}this._choice.setAll(t)}get jump(){return this._jump}set jump(e){if(this.initialized)throw new O(this._cmi_element+".jump",j.READ_ONLY_ELEMENT);if("object"!=typeof e)throw new O(this._cmi_element+".jump",j.TYPE_MISMATCH);const t={};for(const i in e)if({}.hasOwnProperty.call(e,i)&&Rt(this._cmi_element+".jump."+i,e[i]||"",de)&&Rt(this._cmi_element+".jump."+i,i,me)){const s=e[i];"true"===s?t[i]=D:"false"===s?t[i]=L:"unknown"===s&&(t[i]=q)}this._jump.setAll(t)}get exit(){return this._exit}set exit(e){if(this.initialized)throw new O(this._cmi_element+".exit",j.READ_ONLY_ELEMENT);Rt(this._cmi_element+".exit",e,de)&&(this._exit=e)}get exitAll(){return this._exitAll}set exitAll(e){if(this.initialized)throw new O(this._cmi_element+".exitAll",j.READ_ONLY_ELEMENT);Rt(this._cmi_element+".exitAll",e,de)&&(this._exitAll=e)}get abandon(){return this._abandon}set abandon(e){if(this.initialized)throw new O(this._cmi_element+".abandon",j.READ_ONLY_ELEMENT);Rt(this._cmi_element+".abandon",e,de)&&(this._abandon=e)}get abandonAll(){return this._abandonAll}set abandonAll(e){if(this.initialized)throw new O(this._cmi_element+".abandonAll",j.READ_ONLY_ELEMENT);Rt(this._cmi_element+".abandonAll",e,de)&&(this._abandonAll=e)}get suspendAll(){return this._suspendAll}set suspendAll(e){if(this.initialized)throw new O(this._cmi_element+".suspendAll",j.READ_ONLY_ELEMENT);Rt(this._cmi_element+".suspendAll",e,de)&&(this._suspendAll=e)}toJSON(){this.jsonString=!0;const result={previous:this.previous,continue:this.continue,choice:this._choice.getAll(),jump:this._jump.getAll(),exit:this.exit,exitAll:this.exitAll,abandon:this.abandon,abandonAll:this.abandonAll,suspendAll:this.suspendAll};return this.jsonString=!1,result}}var zr=Object.defineProperty,Fr=(e,t,i)=>((e,t,i)=>t in e?zr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class kr extends d{constructor(e){super("activityTree"),Fr(this,"_root",null),Fr(this,"_currentActivity",null),Fr(this,"_suspendedActivity",null),Fr(this,"_activities",new Map),e&&(this.root=e)}initialize(){super.initialize(),this._root&&this._root.initialize()}reset(){this._initialized=!1,this._currentActivity=null,this._suspendedActivity=null,this._activities.clear(),this._root&&(this._root.reset(),this._activities.set(this._root.id,this._root),this._addActivitiesToMap(this._root))}get root(){return this._root}set root(e){if(null!==e&&!(e instanceof kt))throw new O(this._cmi_element+".root",j.TYPE_MISMATCH);this._activities.clear(),this._root=e,e&&(this._activities.set(e.id,e),this._addActivitiesToMap(e))}_addActivitiesToMap(e){for(const t of e.children)this._activities.set(t.id,t),this._addActivitiesToMap(t)}get currentActivity(){return this._currentActivity}set currentActivity(e){if(null!==e&&!(e instanceof kt))throw new O(this._cmi_element+".currentActivity",j.TYPE_MISMATCH);if(this._currentActivity){this._currentActivity.isActive=!1;let e=this._currentActivity.parent;for(;e;)e.isActive=!1,e=e.parent}if(this._currentActivity=e,e){e.isActive=!0;let t=e.parent;for(;t;)t.isActive=!0,t=t.parent}}setCurrentActivityWithoutActivation(e){if(null!==e&&!(e instanceof kt))throw new O(this._cmi_element+".currentActivity",j.TYPE_MISMATCH);if(this._currentActivity){const t=new Set;if(e){t.add(e);let i=e.parent;for(;i;)t.add(i),i=i.parent}this._currentActivity.isActive=!1;let i=this._currentActivity.parent;for(;i;)t.has(i)||(i.isActive=!1),i=i.parent}this._currentActivity=e}get suspendedActivity(){return this._suspendedActivity}set suspendedActivity(e){if(null!==e&&!(e instanceof kt))throw new O(this._cmi_element+".suspendedActivity",j.TYPE_MISMATCH);if(this._suspendedActivity){this._suspendedActivity.isSuspended=!1;let e=this._suspendedActivity.parent;for(;e;)e.isSuspended=!1,e=e.parent}if(this._suspendedActivity=e,e){e.isSuspended=!0;let t=e.parent;for(;t;)t.isSuspended=!0,t=t.parent}}getActivity(id){return this._activities.get(id)||null}getAllActivities(){return Array.from(this._activities.values())}getParent(e){return e.parent}getChildren(e){return 1>=arguments.length||void 0===arguments[1]||arguments[1]?e.getAvailableChildren():e.children}getSiblings(e){return e.parent?e.parent.children.filter(t=>t!==e):[]}getNextSibling(e){let t=1>=arguments.length||void 0===arguments[1]||arguments[1];if(!e.parent)return null;let i=t?e.parent.getAvailableChildren():e.parent.children,s=i.indexOf(e);return-1===s&&t&&(i=e.parent.children,s=i.indexOf(e)),-1===s||s===i.length-1?null:i[s+1]??null}getPreviousSibling(e){let t=1>=arguments.length||void 0===arguments[1]||arguments[1];if(!e.parent)return null;let i=t?e.parent.getAvailableChildren():e.parent.children,s=i.indexOf(e);return-1===s&&t&&(i=e.parent.children,s=i.indexOf(e)),s>0?i[s-1]??null:null}getFirstChild(e){const t=1>=arguments.length||void 0===arguments[1]||arguments[1]?e.getAvailableChildren():e.children;return 0===t.length?null:t[0]??null}getLastChild(e){const t=1>=arguments.length||void 0===arguments[1]||arguments[1]?e.getAvailableChildren():e.children;return 0===t.length?null:t[t.length-1]??null}getCommonAncestor(e,t){const i=[];let s=e;for(;s;)i.unshift(s),s=s.parent;for(s=t;s;){if(i.includes(s))return s;s=s.parent}return null}toJSON(){this.jsonString=!0;const result={root:this._root,currentActivity:this._currentActivity?this._currentActivity.id:null,suspendedActivity:this._suspendedActivity?this._suspendedActivity.id:null};return this.jsonString=!1,result}}var Vr=Object.defineProperty,Hr=(e,t,i)=>((e,t,i)=>t in e?Vr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Br extends d{constructor(){super("sequencing"),Hr(this,"_activityTree"),Hr(this,"_sequencingRules"),Hr(this,"_sequencingControls"),Hr(this,"_rollupRules"),Hr(this,"_adlNav",null),Hr(this,"_hideLmsUi",[]),Hr(this,"_auxiliaryResources",[]),Hr(this,"_overallSequencingProcess",null),this._activityTree=new kr,this._sequencingRules=new Re,this._sequencingControls=new Ge,this._rollupRules=new Lt}initialize(){super.initialize(),this._activityTree.initialize(),this._sequencingRules.initialize(),this._sequencingControls.initialize(),this._rollupRules.initialize()}reset(){this._initialized=!1,this._activityTree.reset(),this._sequencingRules.reset(),this._sequencingControls.reset(),this._rollupRules.reset(),this._hideLmsUi=[],this._auxiliaryResources=[]}get activityTree(){return this._activityTree}set activityTree(e){if(!(e instanceof kr))throw new O(this._cmi_element+".activityTree",j.TYPE_MISMATCH);this._activityTree=e}get sequencingRules(){return this._sequencingRules}set sequencingRules(e){if(!(e instanceof Re))throw new O(this._cmi_element+".sequencingRules",j.TYPE_MISMATCH);this._sequencingRules=e}get sequencingControls(){return this._sequencingControls}set sequencingControls(e){if(!(e instanceof Ge))throw new O(this._cmi_element+".sequencingControls",j.TYPE_MISMATCH);this._sequencingControls=e}get hideLmsUi(){return[...this._hideLmsUi]}set hideLmsUi(e){this._hideLmsUi=[...e]}get auxiliaryResources(){return this._auxiliaryResources.map(e=>({...e}))}set auxiliaryResources(e){this._auxiliaryResources=e.map(e=>({...e}))}get rollupRules(){return this._rollupRules}set rollupRules(e){if(!(e instanceof Lt))throw new O(this._cmi_element+".rollupRules",j.TYPE_MISMATCH);this._rollupRules=e}get adlNav(){return this._adlNav}set adlNav(e){this._adlNav=e}get overallSequencingProcess(){return this._overallSequencingProcess}set overallSequencingProcess(e){this._overallSequencingProcess=e}processRollup(){const e=this._activityTree.root;e&&this._processRollupRecursive(e)}_processRollupRecursive(e){for(const t of e.children)this._processRollupRecursive(t);this._rollupRules.processRollup(e)}getCurrentActivity(){return this._activityTree.currentActivity}getRootActivity(){return this._activityTree.root}toJSON(){this.jsonString=!0;const result={activityTree:this._activityTree,sequencingRules:this._sequencingRules,sequencingControls:this._sequencingControls,rollupRules:this._rollupRules,adlNav:this._adlNav};return this.jsonString=!1,result}}var Ur=Object.defineProperty;class $r{constructor(e){var t;((e,t,i)=>{t in e?Ur(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i})(this,"context"+"",t),this.context=e}checkValidResponseType(e,t,i,s){let r=[];t?.delimiter?r=(i+"").split(t.delimiter):r[0]=i,r.length>0&&t.max>=r.length?this.context.checkCorrectResponseValue?this.context.checkCorrectResponseValue(e,s,r,i):this.checkCorrectResponseValue(e,s,r,i):r.length>t.max&&this.context.throwSCORMError(e,j.GENERAL_SET_FAILURE,"Data Model Element Pattern Too Long: "+i)}checkDuplicateChoiceResponse(e,t,i){const s=t.correct_responses._count;if("choice"===t.type)for(let r=0;s>r&&"0"===this.context.getLastErrorCode();r++){const s=t.correct_responses.childArray[r];s?.pattern===i&&this.context.throwSCORMError(e,j.GENERAL_SET_FAILURE,""+i)}}validateCorrectResponse(e,t,i){const s=+e.split(".")[4];if(!t)return void this.context.throwSCORMError(e,j.DEPENDENCY_NOT_ESTABLISHED,e);const r=t.correct_responses._count;this.checkDuplicateChoiceResponse(e,t,i);const n=_e[t.type];n&&(void 0===n.limit||n.limit>r)?(this.checkValidResponseType(e,n,i,t.type),"0"===this.context.getLastErrorCode()&&(!n.duplicate||!this.checkDuplicatedPattern(t.correct_responses,s,i))||"0"===this.context.getLastErrorCode()&&""===i||"0"===this.context.getLastErrorCode()&&this.context.throwSCORMError(e,j.GENERAL_SET_FAILURE,`Data Model Element Pattern Already Exists: ${e} - ${i}`)):this.context.throwSCORMError(e,j.GENERAL_SET_FAILURE,`Data Model Element Collection Limit Reached: ${e} - ${i}`)}checkDuplicatedPattern(e,t,i){let s=!1;const r=e._count;for(let n=0;r>n&&!s;n++)if(n!==t){const t=e.childArray[n],r=t?.pattern;r===i&&(s=!0)}return s}checkCorrectResponseValue(e,t,i,s){const r=_e[t];if(!r)return void this.context.throwSCORMError(e,j.TYPE_MISMATCH,"Incorrect Response Type: "+t);const n=RegExp(r.format);for(let o=0;i.length>o&&"0"===this.context.getLastErrorCode();o++)if(t.match("^(fill-in|long-fill-in|matching|performance|sequencing)$")&&(i[o]=this.removeCorrectResponsePrefixes(e,i[o])),r?.delimiter2){const a=i[o].split(r.delimiter2);2===a.length&&a[0].match(n)&&r.format2&&a[1].match(RegExp(r.format2))||this.context.throwSCORMError(e,j.TYPE_MISMATCH,`${t}: ${s}`)}else{const a=i[o].match(n);if(!a&&""!==s||!a&&"true-false"===t)this.context.throwSCORMError(e,j.TYPE_MISMATCH,`${t}: ${s}`);else if("numeric"===t&&i.length>1)+i[0]>+i[1]&&this.context.throwSCORMError(e,j.TYPE_MISMATCH,`${t}: ${s}`);else if(""!==i[o]&&r.unique)for(let r=0;o>r&&"0"===this.context.getLastErrorCode();r++)i[o]===i[r]&&this.context.throwSCORMError(e,j.TYPE_MISMATCH,`${t}: ${s}`)}}removeCorrectResponsePrefixes(e,t){let i=!1,s=!1,r=!1;const n=RegExp("^({(lang|case_matters|order_matters)=([^}]+)})");let o,a=t.match(n);for(;a;){switch(a[2]){case"lang":if(o=t.match("^(({lang=([a-zA-Z]{1,8}|i|x)?(-[a-zA-Z0-9-]{2,8})?}))(.*?)$"),o){const i=o[3];void 0!==i&&i.length>0&&(ge.includes(i.toLowerCase())||this.context.throwSCORMError(e,j.TYPE_MISMATCH,""+t))}r=!0;break;case"case_matters":r||i||s||"true"!==a[3]&&"false"!==a[3]&&this.context.throwSCORMError(e,j.TYPE_MISMATCH,""+t),s=!0;break;case"order_matters":s||r||i||"true"!==a[3]&&"false"!==a[3]&&this.context.throwSCORMError(e,j.TYPE_MISMATCH,""+t),i=!0}a=(t=t.substring(a[1]?.length||0)).match(n)}return t}}var Gr=Object.defineProperty,Yr=(e,t,i)=>((e,t,i)=>t in e?Gr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Wr{constructor(e,t){Yr(this,"context"),Yr(this,"responseValidator"),this.context=e,this.responseValidator=t}getChildElement(e,t,i){if(c(e,"cmi\\.objectives\\.\\d+"))return new rr;if(i){if(c(e,"cmi\\.interactions\\.\\d+\\.correct_responses\\.\\d+"))return this.createCorrectResponsesObject(e,t);if(c(e,"cmi\\.interactions\\.\\d+\\.objectives\\.\\d+"))return new Hs}else if(c(e,"cmi\\.interactions\\.\\d+"))return new Vs;return c(e,"cmi\\.comments_from_learner\\.\\d+")?new er:c(e,"cmi\\.comments_from_lms\\.\\d+")?new er(!0):c(e,"adl\\.data\\.\\d+")?new qr:null}createCorrectResponsesObject(e,t){const i=e.split("."),s=this.context.cmi.interactions.childArray[+i[2]];if(this.context.isInitialized()){if(void 0===s||!s.type)return this.context.throwSCORMError(e,j.DEPENDENCY_NOT_ESTABLISHED,e),null;{const i=_e[s.type];if(i&&void 0!==i.limit&&s.correct_responses._count>=i.limit)return this.context.throwSCORMError(e,j.GENERAL_SET_FAILURE,"Data Model Element Collection Limit Reached: "+e),null;if(this.responseValidator.checkDuplicateChoiceResponse(e,s,t),!i)return this.context.throwSCORMError(e,j.GENERAL_SET_FAILURE,"Incorrect Response Type: "+s.type),null;this.responseValidator.checkValidResponseType(e,i,t,s.type)}}return"0"===this.context.getLastErrorCode()?new Ys(s?.type):null}evaluateCompletionStatus(){const e=this.context.cmi.completion_threshold,t=this.context.cmi.progress_measure,i=this.context.cmi.completion_status;if(""!==e&&null!=e){const i=parseFloat(e+"");if(!isNaN(i)){if(""!==t&&null!=t){const e=parseFloat(t+"");if(!isNaN(e))return i>e?V:k}return H}}return i||H}evaluateSuccessStatus(){const e=this.context.cmi.scaled_passing_score,t=this.context.cmi.score.scaled,i=this.context.cmi.success_status;if(""!==e&&null!=e){const i=parseFloat(e+"");if(!isNaN(i)){if(""!==t&&null!=t){const e=parseFloat(t+"");if(!isNaN(e))return i>e?z:P}return F}}return i||F}}class Jr{applySequencingControlsSettings(e,t){void 0!==t.enabled&&(e.enabled=t.enabled),void 0!==t.choice&&(e.choice=t.choice),void 0!==t.choiceExit&&(e.choiceExit=t.choiceExit),void 0!==t.flow&&(e.flow=t.flow),void 0!==t.forwardOnly&&(e.forwardOnly=t.forwardOnly),void 0!==t.useCurrentAttemptObjectiveInfo&&(e.useCurrentAttemptObjectiveInfo=t.useCurrentAttemptObjectiveInfo),void 0!==t.useCurrentAttemptProgressInfo&&(e.useCurrentAttemptProgressInfo=t.useCurrentAttemptProgressInfo),void 0!==t.preventActivation&&(e.preventActivation=t.preventActivation),void 0!==t.constrainChoice&&(e.constrainChoice=t.constrainChoice),void 0!==t.stopForwardTraversal&&(e.stopForwardTraversal=t.stopForwardTraversal),void 0!==t.rollupObjectiveSatisfied&&(e.rollupObjectiveSatisfied=t.rollupObjectiveSatisfied),void 0!==t.rollupProgressCompletion&&(e.rollupProgressCompletion=t.rollupProgressCompletion),void 0!==t.objectiveMeasureWeight&&(e.objectiveMeasureWeight=t.objectiveMeasureWeight),void 0!==t.selectionTiming&&(e.selectionTiming=t.selectionTiming),void 0!==t.selectCount&&(e.selectCount=t.selectCount),void 0!==t.randomizeChildren&&(e.randomizeChildren=t.randomizeChildren),void 0!==t.randomizationTiming&&(e.randomizationTiming=t.randomizationTiming),void 0!==t.selectionCountStatus&&(e.selectionCountStatus=t.selectionCountStatus),void 0!==t.reorderChildren&&(e.reorderChildren=t.reorderChildren),void 0!==t.completionSetByContent&&(e.completionSetByContent=t.completionSetByContent),void 0!==t.objectiveSetByContent&&(e.objectiveSetByContent=t.objectiveSetByContent)}applySequencingRulesSettings(e,t){if(t){if(t.preConditionRules)for(const i of t.preConditionRules){const t=this.createSequencingRule(i);e.addPreConditionRule(t)}if(t.exitConditionRules)for(const i of t.exitConditionRules){const t=this.createSequencingRule(i);e.addExitConditionRule(t)}if(t.postConditionRules)for(const i of t.postConditionRules){const t=this.createSequencingRule(i);e.addPostConditionRule(t)}}}createSequencingRule(e){const t=new Oe(e.action,e.conditionCombination);for(const i of e.conditions){const e=new Me(i.condition,i.operator,new Map(Object.entries(i.parameters||{})));i.referencedObjective&&(e.referencedObjective=i.referencedObjective),t.addCondition(e)}return t}applyRollupRulesSettings(e,t){if(t?.rules)for(const i of t.rules){const t=this.createRollupRule(i);e.addRule(t)}}createRollupRule(e){const t=new Dt(e.action,e.consideration,e.minimumCount,e.minimumPercent);for(const i of e.conditions){const e=new qt(i.condition,new Map(Object.entries(i.parameters||{})));t.addCondition(e)}return t}sanitizeSequencingCollections(e){if(!e)return{};const t={};for(const[id,i]of Object.entries(e)){const e=id.trim();if(!e)continue;const s={};if(i.sequencingControls&&(s.sequencingControls={...i.sequencingControls}),i.sequencingRules){const e=e=>{const t={action:e.action,conditions:e.conditions.map(e=>{const t={condition:e.condition};return void 0!==e.operator&&(t.operator=e.operator),e.parameters&&(t.parameters={...e.parameters}),void 0!==e.referencedObjective&&(t.referencedObjective=e.referencedObjective),t})};return void 0!==e.conditionCombination&&(t.conditionCombination=e.conditionCombination),t};s.sequencingRules={},i.sequencingRules.preConditionRules&&(s.sequencingRules.preConditionRules=i.sequencingRules.preConditionRules.map(e)),i.sequencingRules.exitConditionRules&&(s.sequencingRules.exitConditionRules=i.sequencingRules.exitConditionRules.map(e)),i.sequencingRules.postConditionRules&&(s.sequencingRules.postConditionRules=i.sequencingRules.postConditionRules.map(e))}i.rollupRules&&(s.rollupRules={rules:i.rollupRules.rules?.map(e=>{const t={action:e.action,conditions:e.conditions.map(e=>{const t={condition:e.condition};return e.parameters&&(t.parameters={...e.parameters}),t})};return void 0!==e.consideration&&(t.consideration=e.consideration),void 0!==e.minimumCount&&(t.minimumCount=e.minimumCount),void 0!==e.minimumPercent&&(t.minimumPercent=e.minimumPercent),t})}),i.rollupConsiderations&&(s.rollupConsiderations={...i.rollupConsiderations}),i.selectionRandomizationState&&(s.selectionRandomizationState=this.cloneSelectionRandomizationState(i.selectionRandomizationState)),i.hideLmsUi&&(s.hideLmsUi=this.sanitizeHideLmsUi(i.hideLmsUi)),i.auxiliaryResources&&(s.auxiliaryResources=this.sanitizeAuxiliaryResources(i.auxiliaryResources)),t[e]=s}return t}normalizeCollectionRefs(e){if(!e)return[];const t=Array.isArray(e)?e:[e],i=new Set,result=[];for(const e of t){const t=e.trim();t&&!i.has(t)&&(i.add(t),result.push(t))}return result}applySequencingCollection(e,t,i){if(t){if(t.sequencingControls&&this.applySequencingControlsSettings(e.sequencingControls,t.sequencingControls),t.sequencingRules&&this.applySequencingRulesSettings(e.sequencingRules,t.sequencingRules),t.rollupRules&&this.applyRollupRulesSettings(e.rollupRules,t.rollupRules),t.rollupConsiderations&&e.applyRollupConsiderations(t.rollupConsiderations),t.hideLmsUi){const i=this.mergeHideLmsUi(e.hideLmsUi,t.hideLmsUi);i.length>0&&(e.hideLmsUi=i)}if(t.auxiliaryResources){const i=this.sanitizeAuxiliaryResources(t.auxiliaryResources);i.length>0&&(e.auxiliaryResources=this.mergeAuxiliaryResources(e.auxiliaryResources,i))}t.selectionRandomizationState&&i.push(this.cloneSelectionRandomizationState(t.selectionRandomizationState))}}sanitizeHideLmsUi(e){if(!e)return[];const t=new Set(be),i=new Set,s=[];for(const r of e)t.has(r)&&!i.has(r)&&(i.add(r),s.push(r));return s}mergeHideLmsUi(e,t){return t&&0!==t.length?this.sanitizeHideLmsUi([...e,...t]):e}sanitizeAuxiliaryResources(e){if(!e)return[];const t=new Set,i=[];for(const s of e){if(!s)continue;if(!s.resourceId||"string"!=typeof s.resourceId)continue;if(!s.purpose||"string"!=typeof s.purpose)continue;const e=s.resourceId.trim(),r=s.purpose.trim();if(!e||!r)continue;const n=`${e}::${r}`;t.has(n)||(t.add(n),i.push({resourceId:e,purpose:r}))}return i}mergeAuxiliaryResources(e,t){const i=[],s=new Set;for(const r of[...e??[],...t??[]]){if(!r)continue;const e=r.resourceId;e&&!s.has(e)&&(s.add(e),i.push({resourceId:e,purpose:r.purpose}))}return i}cloneSelectionRandomizationState(e){const t={};return e.childOrder&&(t.childOrder=[...e.childOrder]),e.selectedChildIds&&(t.selectedChildIds=[...e.selectedChildIds]),e.hiddenFromChoiceChildIds&&(t.hiddenFromChoiceChildIds=[...e.hiddenFromChoiceChildIds]),void 0!==e.selectionCountStatus&&(t.selectionCountStatus=e.selectionCountStatus),void 0!==e.reorderChildren&&(t.reorderChildren=e.reorderChildren),t}applySelectionRandomizationState(e,t){const i=e.sequencingControls;void 0!==t.selectionCountStatus&&(i.selectionCountStatus=t.selectionCountStatus),void 0!==t.reorderChildren&&(i.reorderChildren=t.reorderChildren);const s=t.selectedChildIds?new Set(t.selectedChildIds):null,r=t.hiddenFromChoiceChildIds?new Set(t.hiddenFromChoiceChildIds):null;t.childOrder&&t.childOrder.length>0&&e.setChildOrder(t.childOrder);let n=!1;if(s||r)for(const t of e.children){if(s){const e=s.has(t.id);t.isAvailable=e,r||(t.isHiddenFromChoice=!e),n=!0}r&&(t.isHiddenFromChoice=r.has(t.id),n=!0)}(n||s||void 0!==t.selectionCountStatus||void 0!==t.reorderChildren||t.childOrder&&t.childOrder.length>0)&&e.setProcessedChildren(e.children.filter(e=>e.isAvailable))}}var Kr=Object.defineProperty,Xr=(e,t,i)=>((e,t,i)=>t in e?Kr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Qr{constructor(e,t){Xr(this,"sequencingCollections"),Xr(this,"sequencingConfigBuilder"),this.sequencingCollections=e||{},this.sequencingConfigBuilder=t||new Jr}setSequencingCollections(e){this.sequencingCollections=e}createActivity(e){const t=new kt(e.id,e.title),i=[],s=this.sequencingConfigBuilder.normalizeCollectionRefs(e.sequencingCollectionRefs);for(const e of s){const s=this.sequencingCollections[e];s&&this.sequencingConfigBuilder.applySequencingCollection(t,s,i)}if(void 0!==e.isVisible&&(t.isVisible=e.isVisible),void 0!==e.isActive&&(t.isActive=e.isActive),void 0!==e.isSuspended&&(t.isSuspended=e.isSuspended),void 0!==e.isCompleted&&(t.isCompleted=e.isCompleted),void 0!==e.isHiddenFromChoice&&(t.isHiddenFromChoice=e.isHiddenFromChoice),void 0!==e.isAvailable&&(t.isAvailable=e.isAvailable),void 0!==e.attemptLimit&&(t.attemptLimit=e.attemptLimit),void 0!==e.attemptAbsoluteDurationLimit&&(t.attemptAbsoluteDurationLimit=e.attemptAbsoluteDurationLimit),void 0!==e.activityAbsoluteDurationLimit&&(t.activityAbsoluteDurationLimit=e.activityAbsoluteDurationLimit),void 0!==e.timeLimitAction&&(t.timeLimitAction=e.timeLimitAction),void 0!==e.timeLimitDuration&&(t.timeLimitDuration=e.timeLimitDuration),void 0!==e.beginTimeLimit&&(t.beginTimeLimit=e.beginTimeLimit),void 0!==e.endTimeLimit&&(t.endTimeLimit=e.endTimeLimit),e.primaryObjective){const i=this.createActivityObjectiveFromSettings(e.primaryObjective,!0);t.primaryObjective=i,null!==i.minNormalizedMeasure&&(t.scaledPassingScore=i.minNormalizedMeasure)}if(e.objectives)for(const i of e.objectives){const e=!0===i.isPrimary,s=this.createActivityObjectiveFromSettings(i,e);e?t.primaryObjective=s:t.addObjective(s)}if(e.sequencingControls&&this.sequencingConfigBuilder.applySequencingControlsSettings(t.sequencingControls,e.sequencingControls),e.sequencingRules&&this.sequencingConfigBuilder.applySequencingRulesSettings(t.sequencingRules,e.sequencingRules),e.rollupRules&&this.sequencingConfigBuilder.applyRollupRulesSettings(t.rollupRules,e.rollupRules),e.rollupConsiderations&&t.applyRollupConsiderations(e.rollupConsiderations),e.hideLmsUi){const i=this.sequencingConfigBuilder.mergeHideLmsUi(t.hideLmsUi,e.hideLmsUi);i.length>0&&(t.hideLmsUi=i)}if(e.auxiliaryResources){const i=this.sequencingConfigBuilder.sanitizeAuxiliaryResources(e.auxiliaryResources);i.length>0&&(t.auxiliaryResources=this.sequencingConfigBuilder.mergeAuxiliaryResources(t.auxiliaryResources,i))}if(e.children)for(const i of e.children){const e=this.createActivity(i);t.addChild(e)}e.selectionRandomizationState&&i.push(this.sequencingConfigBuilder.cloneSelectionRandomizationState(e.selectionRandomizationState));for(const e of i)this.sequencingConfigBuilder.applySelectionRandomizationState(t,e);return t}extractActivityIds(e){const t=[e.id];for(const i of e.children)t.push(...this.extractActivityIds(i));return t}createActivityObjectiveFromSettings(e,t){const i=(e.mapInfo||[]).map(e=>({targetObjectiveID:e.targetObjectiveID,readSatisfiedStatus:e.readSatisfiedStatus??!1,readNormalizedMeasure:e.readNormalizedMeasure??!1,writeSatisfiedStatus:e.writeSatisfiedStatus??!1,writeNormalizedMeasure:e.writeNormalizedMeasure??!1,readCompletionStatus:e.readCompletionStatus??!1,writeCompletionStatus:e.writeCompletionStatus??!1,readProgressMeasure:e.readProgressMeasure??!1,writeProgressMeasure:e.writeProgressMeasure??!1,readRawScore:e.readRawScore??!1,writeRawScore:e.writeRawScore??!1,readMinScore:e.readMinScore??!1,writeMinScore:e.writeMinScore??!1,readMaxScore:e.readMaxScore??!1,writeMaxScore:e.writeMaxScore??!1,updateAttemptData:e.updateAttemptData??!1}));return new Ft(e.objectiveID,{description:e.description??null,satisfiedByMeasure:e.satisfiedByMeasure??!1,minNormalizedMeasure:e.minNormalizedMeasure??null,mapInfo:i,isPrimary:t})}}var Zr=Object.defineProperty,en=(e,t,i)=>((e,t,i)=>t in e?Zr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class tn{constructor(e){en(this,"_globalObjectives",[]),en(this,"context"),this.context=e}get globalObjectives(){return this._globalObjectives}set globalObjectives(objectives){this._globalObjectives=objectives}updateSequencingService(e){this.context.sequencingService=e}syncGlobalObjectiveIdsFromSequencing(){if(!this.context.sequencingService)return;const e=this.context.sequencingService.getOverallSequencingProcess();if(!e)return;const t=e.getGlobalObjectiveMap();if(!t||0===t.size)return;const i=Array.from(t.keys()),s=this.context.getSettings(),r=Array.from(new Set((s.globalObjectiveIds||[]).concat(i)));s.globalObjectiveIds=r}restoreGlobalObjectivesToCMI(){if(0!==this._globalObjectives.length)for(let e=0;this._globalObjectives.length>e;e++){const t=this._globalObjectives[e];if(!t||!t.id)continue;if(this.context.cmi.objectives.findObjectiveById(t.id))continue;const i=this.context.cmi.objectives.childArray.length;this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.id`,t.id),t.success_status&&"unknown"!==t.success_status&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.success_status`,t.success_status),t.completion_status&&"unknown"!==t.completion_status&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.completion_status`,t.completion_status),""!==t.score.scaled&&null!==t.score.scaled&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.score.scaled`,t.score.scaled),""!==t.score.raw&&null!==t.score.raw&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.score.raw`,t.score.raw),""!==t.score.min&&null!==t.score.min&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.score.min`,t.score.min),""!==t.score.max&&null!==t.score.max&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.score.max`,t.score.max),""!==t.progress_measure&&null!==t.progress_measure&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.progress_measure`,t.progress_measure),""!==t.description&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.description`,t.description)}}updateGlobalObjectiveFromCMI(e,t){if(!e||!this.context.sequencingService)return;const i=this.context.sequencingService.getOverallSequencingProcess();if(!i)return;if(!i.getGlobalObjectiveMap().has(e)){const s=this.buildObjectiveMapEntryFromCMI(t);return void i.updateGlobalObjective(e,s)}const s={};t.success_status&&t.success_status!==F&&(s.satisfiedStatus=t.success_status===P,s.satisfiedStatusKnown=!0);const r=this.parseObjectiveNumber(t.score?.scaled);null!==r&&(s.normalizedMeasure=r,s.normalizedMeasureKnown=!0);const n=this.parseObjectiveNumber(t.progress_measure);null!==n&&(s.progressMeasure=n,s.progressMeasureKnown=!0),t.completion_status&&t.completion_status!==H&&(s.completionStatus=t.completion_status,s.completionStatusKnown=!0),0!==Object.keys(s).length&&i.updateGlobalObjective(e,s)}buildObjectiveMapEntryFromCMI(e){const entry={id:e.id,satisfiedStatusKnown:!1,normalizedMeasureKnown:!1,progressMeasureKnown:!1,completionStatusKnown:!1,readSatisfiedStatus:!0,writeSatisfiedStatus:!0,readNormalizedMeasure:!0,writeNormalizedMeasure:!0,readCompletionStatus:!0,writeCompletionStatus:!0,readProgressMeasure:!0,writeProgressMeasure:!0};e.success_status&&e.success_status!==F&&(entry.satisfiedStatus=e.success_status===P,entry.satisfiedStatusKnown=!0);const t=this.parseObjectiveNumber(e.score?.scaled);null!==t&&(entry.normalizedMeasure=t,entry.normalizedMeasureKnown=!0);const i=this.parseObjectiveNumber(e.progress_measure);return null!==i&&(entry.progressMeasure=i,entry.progressMeasureKnown=!0),e.completion_status&&e.completion_status!==H&&(entry.completionStatus=e.completion_status,entry.completionStatusKnown=!0),entry}buildCMIObjectivesFromMap(e){const objectives=[];if(!e||"object"!=typeof e)return objectives;for(const[t,entry]of Object.entries(e)){if(!entry||"object"!=typeof entry)continue;const e=new rr;e.id=entry.id??t,!0===entry.satisfiedStatusKnown&&(e.success_status=entry.satisfiedStatus?P:z);const i=this.parseObjectiveNumber(entry.normalizedMeasure);!0===entry.normalizedMeasureKnown&&null!==i&&(e.score.scaled=i+"");const s=this.parseObjectiveNumber(entry.progressMeasure);!0===entry.progressMeasureKnown&&null!==s&&(e.progress_measure=s+""),!0===entry.completionStatusKnown&&"string"==typeof entry.completionStatus&&(e.completion_status=entry.completionStatus),objectives.push(e)}return objectives}buildCMIObjectiveFromJSON(e){const t=new rr;if(!e||"object"!=typeof e)return t;"string"==typeof e.id&&(t.id=e.id),"string"==typeof e.success_status&&(t.success_status=e.success_status),"string"==typeof e.completion_status&&(t.completion_status=e.completion_status),"string"==typeof e.progress_measure&&""!==e.progress_measure&&(t.progress_measure=e.progress_measure),"string"==typeof e.description&&(t.description=e.description);const score=e.score;return score&&"object"==typeof score&&("string"==typeof score.scaled&&""!==score.scaled?t.score.scaled=score.scaled:"number"==typeof score.scaled&&Number.isFinite(score.scaled)&&(t.score.scaled=score.scaled+""),"string"==typeof score.raw&&""!==score.raw?t.score.raw=score.raw:"number"==typeof score.raw&&Number.isFinite(score.raw)&&(t.score.raw=score.raw+""),"string"==typeof score.min&&""!==score.min?t.score.min=score.min:"number"==typeof score.min&&Number.isFinite(score.min)&&(t.score.min=score.min+""),"string"==typeof score.max&&""!==score.max?t.score.max=score.max:"number"==typeof score.max&&Number.isFinite(score.max)&&(t.score.max=score.max+"")),t}captureGlobalObjectiveSnapshot(e){const t={},i=e??this.context.sequencingService?.getOverallSequencingProcess()??null;if(i){const e=i.getGlobalObjectiveMapSnapshot();for(const[id,i]of Object.entries(e))t[id]={...i}}for(const e of this._globalObjectives)e.id&&!t[e.id]&&(t[e.id]=this.buildObjectiveMapEntryFromCMI(e));return t}parseObjectiveNumber(e){if(null==e)return null;if("number"==typeof e&&Number.isFinite(e))return e;const t=parseFloat(e+"");return Number.isFinite(t)?t:null}syncCmiToSequencingActivity(e,t,i){if(!this.context.sequencing)return;const s=this.context.sequencing.getCurrentActivity();if(!s||!s.primaryObjective)return;const r=s.primaryObjective;t!==F&&(r.satisfiedStatus=t===P,r.satisfiedStatusKnown=!0,r.measureStatus=!0,s.objectiveMeasureStatus=!0,s.objectiveSatisfiedStatus=t===P,s.objectiveSatisfiedStatusKnown=!0),e!==H&&(r.completionStatus=e),void 0!==i?.scaled&&null!==i.scaled&&(r.normalizedMeasure=i.scaled,r.measureStatus=!0)}findOrCreateGlobalObjective(e){let t=this._globalObjectives.findIndex(t=>t.id===e);if(-1===t){t=this._globalObjectives.length;const i=new rr;i.id=e,this._globalObjectives.push(i)}return{index:t,objective:this._globalObjectives[t]}}}var sn=Object.defineProperty,rn=(e,t,i)=>((e,t,i)=>t in e?sn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class nn{constructor(e,t){rn(this,"context"),rn(this,"globalObjectiveManager"),this.context=e,this.globalObjectiveManager=t}async saveSequencingState(e){const t=this.context.getSettings();if(!t.sequencingStatePersistence)return this.context.apiLog("saveSequencingState","No persistence configuration provided",B.WARN),!1;try{const i=this.serializeSequencingState(),s={learnerId:this.context.learnerId||"unknown",courseId:t.courseId||"unknown",attemptNumber:1,lastUpdated:(new Date).toISOString(),version:t.sequencingStatePersistence.stateVersion||"1.0",...e},r=t.sequencingStatePersistence;let n=i;if(!1!==r.compress&&(n=this.compressStateData(i)),r.maxStateSize&&n.length>r.maxStateSize)throw Error(`State size ${n.length} exceeds limit ${r.maxStateSize}`);const o=await r.persistence.saveState(n,s);return r.debugPersistence&&this.context.apiLog("saveSequencingState",`State save ${o?"succeeded":"failed"}: size=${n.length}`,o?B.INFO:B.WARN),o}catch(e){return this.context.apiLog("saveSequencingState","Error saving sequencing state: "+(e instanceof Error?e.message:e+""),B.ERROR),!1}}async loadSequencingState(e){const t=this.context.getSettings();if(!t.sequencingStatePersistence)return this.context.apiLog("loadSequencingState","No persistence configuration provided",B.WARN),!1;try{const i={learnerId:this.context.learnerId||"unknown",courseId:t.courseId||"unknown",attemptNumber:1,version:t.sequencingStatePersistence.stateVersion||"1.0",...e},s=t.sequencingStatePersistence,r=await s.persistence.loadState(i);if(!r)return s.debugPersistence&&this.context.apiLog("loadSequencingState","No sequencing state found to load",B.INFO),!1;let n=r;!1!==s.compress&&(n=this.decompressStateData(r));const o=this.deserializeSequencingState(n);return s.debugPersistence&&this.context.apiLog("loadSequencingState",`State load ${o?"succeeded":"failed"}: size=${r.length}`,o?B.INFO:B.WARN),o}catch(e){return this.context.apiLog("loadSequencingState","Error loading sequencing state: "+(e instanceof Error?e.message:e+""),B.ERROR),!1}}serializeSequencingState(){const e=this.context.getSettings(),t={version:e.sequencingStatePersistence?.stateVersion||"1.0",timestamp:(new Date).toISOString(),sequencing:null,currentActivityId:null,globalObjectives:this.globalObjectiveManager.globalObjectives.map(e=>e.toJSON()),globalObjectiveMap:{},adlNavState:{request:this.context.adl.nav.request,request_valid:this.context.adl.nav.request_valid},contentDelivered:!1};if(this.context.sequencingService){const e=this.context.sequencingService.getOverallSequencingProcess();if(e){const i=e.getSequencingState();t.sequencing=i,t.contentDelivered=e.hasContentBeenDelivered(),t.globalObjectiveMap=this.globalObjectiveManager.captureGlobalObjectiveSnapshot(e)}const i=this.context.sequencing.getCurrentActivity();i&&(t.currentActivityId=i.id)}return t.globalObjectiveMap&&0!==Object.keys(t.globalObjectiveMap).length||(t.globalObjectiveMap=this.globalObjectiveManager.captureGlobalObjectiveSnapshot()),JSON.stringify(t)}deserializeSequencingState(e){try{const t=JSON.parse(e),i=this.context.getSettings(),s=i.sequencingStatePersistence?.stateVersion||"1.0";if(t.version!==s&&this.context.apiLog("deserializeSequencingState",`State version mismatch: ${t.version} vs expected ${s}`,B.WARN),t.globalObjectiveMap&&t.sequencing&&!t.sequencing.globalObjectiveMap&&(t.sequencing.globalObjectiveMap=t.globalObjectiveMap),t.sequencing&&this.context.sequencingService){const e=this.context.sequencingService.getOverallSequencingProcess();e&&(e.restoreSequencingState(t.sequencing),t.contentDelivered&&e.setContentDelivered(!0))}const r=new Map;if(Array.isArray(t.globalObjectives))for(const e of t.globalObjectives){const t=this.globalObjectiveManager.buildCMIObjectiveFromJSON(e);t.id&&r.set(t.id,t)}if(t.globalObjectiveMap&&"object"==typeof t.globalObjectiveMap){const e=this.globalObjectiveManager.buildCMIObjectivesFromMap(t.globalObjectiveMap);for(const t of e)t.id&&(r.has(t.id)||r.set(t.id,t))}return r.size>0&&(this.globalObjectiveManager.globalObjectives=Array.from(r.values()),this.globalObjectiveManager.globalObjectives.forEach(e=>{e.id&&this.globalObjectiveManager.updateGlobalObjectiveFromCMI(e.id,e)})),t.adlNavState&&(this.context.adl.nav.request=t.adlNavState.request||"_none_",this.context.adl.nav.request_valid=t.adlNavState.request_valid||{}),!0}catch(e){return this.context.apiLog("deserializeSequencingState","Error deserializing sequencing state: "+(e instanceof Error?e.message:e+""),B.ERROR),!1}}compressStateData(e){return"undefined"!=typeof btoa?btoa(encodeURIComponent(e)):e}decompressStateData(e){if("undefined"!=typeof atob)try{return decodeURIComponent(atob(e))}catch{return e}return e}}var an=Object.defineProperty,cn=(e,t,i)=>((e,t,i)=>t in e?an(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class ln{constructor(e,t){cn(this,"context"),cn(this,"globalObjectiveManager"),this.context=e,this.globalObjectiveManager=t||null}setGlobalObjectiveManager(e){this.globalObjectiveManager=e}updateSequencingService(e){this.context.sequencingService=e}renderCommitCMI(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.context.renderCMIToJSONObject();e||t?i.cmi.total_time=this.context.cmi.getCurrentTotalTime():delete i.cmi.total_time;const result=[],s=o(i);switch(this.context.getSettings().dataCommitFormat){case"flattened":return o(i);case"params":for(const e in s)({}).hasOwnProperty.call(s,e)&&result.push(`${e}=${s[e]}`);return result;default:return i}}renderCommitObject(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.renderCommitCMI(e,t),s=e||t?this.context.cmi.getCurrentTotalTime():"",n=r(s,ne);let o=H,a=F;this.context.cmi.completion_status&&("completed"===this.context.cmi.completion_status?o=k:"incomplete"===this.context.cmi.completion_status&&(o=V)),this.context.cmi.success_status&&("passed"===this.context.cmi.success_status?a=P:"failed"===this.context.cmi.success_status&&(a=z));const c=this.context.cmi?.score?.getScoreObject()||{},l={completionStatus:o,successStatus:a,totalTimeSeconds:n,runtimeData:i};c&&(l.score=c);const u=this.context.getSettings();if(u.autoPopulateCommitMetadata){u.courseId&&(l.courseId=u.courseId),u.scoId&&(l.scoId=u.scoId),this.context.cmi.learner_id&&(l.learnerId=this.context.cmi.learner_id),this.context.cmi.learner_name&&(l.learnerName=this.context.cmi.learner_name);const e=this.context.sequencingService?.getSequencingState();e?.currentActivity?.id&&(l.activityId=e.currentActivity.id)}return this.globalObjectiveManager&&this.globalObjectiveManager.syncCmiToSequencingActivity(o,a,c),l}determineEntryValue(e,t){const i=e?.trim();return""===e||null==e||""===i?"ab-initio":"suspend"===e?"resume":"logout"===e||"normal"===e?"":"time-out"===e&&t?"resume":""}}var un=Object.defineProperty,hn=(e,t,i)=>((e,t,i)=>t in e?un(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);"undefined"!=typeof window&&(window.Scorm12API=Scorm12API,window.Scorm2004API=class extends rs{constructor(e,t){const i=e?{...e}:void 0;i&&void 0===i.mastery_override&&(i.mastery_override=!1),super(j,i,t),hn(this,"_version","1.0"),hn(this,"_sequencing"),hn(this,"_sequencingService",null),hn(this,"_extractedScoItemIds",[]),hn(this,"_sequencingCollections",{}),hn(this,"_responseValidator"),hn(this,"_cmiHandler"),hn(this,"_activityTreeBuilder"),hn(this,"_sequencingConfigBuilder"),hn(this,"_globalObjectiveManager"),hn(this,"_statePersistence",null),hn(this,"_dataSerializer"),hn(this,"cmi"),hn(this,"adl"),hn(this,"Initialize"),hn(this,"Terminate"),hn(this,"GetValue"),hn(this,"SetValue"),hn(this,"Commit"),hn(this,"GetLastError"),hn(this,"GetErrorString"),hn(this,"GetDiagnostic"),this.cmi=new Rr,this.adl=new Ir,this._sequencing=new Br,this.adl.sequencing=this._sequencing,this._sequencingConfigBuilder=new Jr,this._activityTreeBuilder=new Qr({},this._sequencingConfigBuilder),this._responseValidator=new $r({throwSCORMError:(e,t,i)=>this.throwSCORMError(e,t,i),getLastErrorCode:()=>this.lastErrorCode,checkCorrectResponseValue:(e,t,i,s)=>this._responseValidator.checkCorrectResponseValue(e,t,i,s)}),this._cmiHandler=new Wr({cmi:this.cmi,isInitialized:()=>this.isInitialized(),throwSCORMError:(e,t,i)=>this.throwSCORMError(e,t,i),getLastErrorCode:()=>this.lastErrorCode},this._responseValidator);const s={getSettings:()=>this.settings,cmi:this.cmi,sequencing:this._sequencing,sequencingService:this._sequencingService,commonSetCMIValue:this._commonSetCMIValue.bind(this)};this._globalObjectiveManager=new tn(s);const r={getSettings:()=>this.settings,cmi:this.cmi,sequencingService:this._sequencingService,renderCMIToJSONObject:this.renderCMIToJSONObject.bind(this)};this._dataSerializer=new ln(r,this._globalObjectiveManager),i?.sequencing&&this.configureSequencing(i.sequencing),this.initializeSequencingService(i),this.Initialize=this.lmsInitialize,this.Terminate=this.lmsFinish,this.GetValue=this.lmsGetValue,this.SetValue=this.lmsSetValue,this.Commit=this.lmsCommit,this.GetLastError=this.lmsGetLastError,this.GetErrorString=this.lmsGetErrorString,this.GetDiagnostic=this.lmsGetDiagnostic}reset(e){this.commonReset(e),this.cmi?.reset(),this.adl?.reset()}get version(){return this._version}get globalObjectives(){return this._globalObjectiveManager.globalObjectives}set _globalObjectives(objectives){this._globalObjectiveManager.globalObjectives=objectives}get _globalObjectives(){return this._globalObjectiveManager.globalObjectives}compressStateData(e){return this._statePersistence?this._statePersistence.compressStateData(e):"undefined"!=typeof btoa?btoa(encodeURIComponent(e)):e}decompressStateData(e){if(this._statePersistence)return this._statePersistence.decompressStateData(e);if("undefined"!=typeof atob)try{return decodeURIComponent(atob(e))}catch{return e}return e}lmsInitialize(){if(""!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:""))return this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),S;this.cmi.initialize();const result=this.initialize("Initialize","LMS was already initialized!","LMS is already finished!");return result===f&&this._sequencingService&&this._sequencingService.initialize(),result===f&&this._globalObjectiveManager.restoreGlobalObjectivesToCMI(),result===f&&this.settings.sequencingStatePersistence&&this.loadSequencingState().catch(()=>{this.apiLog("lmsInitialize","Failed to auto-load sequencing state",B.WARN)}),result}lmsFinish(){if(""!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:""))return this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),S;const e=this.adl?.nav?.request||"_none_",t=this.cmi?.getExitValueInternal()||"",i=this.isTerminated(),s=this._sequencingService?.isDeliveryInProgress()??!1,result=this.terminate("Terminate",!0);if(result===f&&!i&&!s){let i=!1,s=null,r=e,n="";const o=RegExp(he);if("_none_"!==e){const t=e.match(o);t&&(t.groups?.choice_target?(n=t.groups?.choice_target,r="choice"):t.groups?.jump_target&&(n=t.groups?.jump_target,r="jump"))}if(this._sequencingService)try{let e,o=null;"_none_"!==r?(o=r,e=n||void 0):this._sequencing.getCurrentActivity()&&(o="exit"),o&&(i=this._sequencingService.processNavigationRequest(o,e,t),s=o)}catch(e){this.apiLog("lmsFinish","Sequencing navigation failed, falling back to event-based navigation: "+e,B.WARN),i=!1}if(!i)if("_none_"!==e){const e={continue:"SequenceNext",previous:"SequencePrevious",choice:"SequenceChoice",jump:"SequenceJump",exit:"SequenceExit",exitAll:"SequenceExitAll",abandon:"SequenceAbandon",abandonAll:"SequenceAbandonAll"}[r];e&&this.processListeners(e,"adl.nav.request",n)}else this.settings.autoProgress&&this.processListeners("SequenceNext",void 0,"next");this._sequencingService&&s&&["exitAll","abandonAll","suspendAll"].includes(s)&&this._sequencingService.terminate(),this.adl.nav.request="_none_"}return result}lmsGetValue(e){if(this.isTerminated())return this.lastErrorCode=j.RETRIEVE_AFTER_TERM+"","";if(!this.isInitialized())return this.lastErrorCode=j.RETRIEVE_BEFORE_INIT+"","";if("adl.nav.request"===e)return this.throwSCORMError(e,j.WRITE_ONLY_ELEMENT,"adl.nav.request is write-only"),"";const t="^adl\\.nav\\.request_valid\\.(choice|jump)\\.{target=([a-zA-Z0-9-_]+)}$";if(c(e,t)){const i=e.match(t);if(i){const request=i[1],e=i[2]?.replace(/{target=/g,"").replace(/}/g,"")||"";if("choice"===request||"jump"===request){const t=this._sequencing?.overallSequencingProcess;return this.settings.scoItemIdValidator?this.settings.scoItemIdValidator(e)+"":t?.predictChoiceEnabled&&"choice"===request?t.predictChoiceEnabled(e)?"true":"false":t?.predictJumpEnabled&&"jump"===request?t.predictJumpEnabled(e)?"true":"false":this._extractedScoItemIds.length>0?this._extractedScoItemIds.includes(e)+"":this.settings?.scoItemIds?.includes(e)+""}}}return"cmi.completion_status"===e?this._cmiHandler.evaluateCompletionStatus():"cmi.success_status"===e?this._cmiHandler.evaluateSuccessStatus():this.getValue("GetValue",!0,e)}lmsSetValue(e,t){const i=this._peekCMIValue(e),result=this.setValue("SetValue","Commit",!0,e,t);if(result===f&&this._sequencingService)try{this._sequencingService.triggerRollupOnCMIChange(e,i,t)}catch(t){console.warn(`Sequencing rollup failed for ${e}: ${t}`)}return result===f&&"setValue"===this.settings.sequencingStatePersistence?.autoSaveOn&&["cmi.completion_status","cmi.success_status","cmi.score.scaled","cmi.objectives","adl.nav.request"].some(t=>e.startsWith(t))&&this.saveSequencingState().catch(()=>{this.apiLog("lmsSetValue","Failed to auto-save sequencing state",B.WARN)}),result}lmsCommit(){if(""!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:""))return this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),S;if(this.settings.throttleCommits)return this.scheduleCommit(500,"Commit"),f;{const result=this.commit("Commit",!0);return result===f&&"commit"===this.settings.sequencingStatePersistence?.autoSaveOn&&this.saveSequencingState().catch(()=>{this.apiLog("lmsCommit","Failed to auto-save sequencing state",B.WARN)}),result}}lmsGetLastError(){return this.getLastError("GetLastError")}lmsGetErrorString(e){return this.getErrorString("GetErrorString",e)}lmsGetDiagnostic(e){return this.getDiagnostic("GetDiagnostic",e)}setCMIValue(e,t){if(c(e,"cmi\\.objectives\\.\\d+")){const i=+e.split(".")[2],s="cmi.objectives."+i;let r;if(c(e,"cmi\\.objectives\\.\\d+\\.id"))r=t;else{const e=this.cmi.objectives.findObjectiveByIndex(i);r=e?e.id:void 0}if(r&&this.settings.globalObjectiveIds?.includes(r)){const{index:i}=this._globalObjectiveManager.findOrCreateGlobalObjective(r),n=e.replace(s,"_globalObjectives."+i);this._commonSetCMIValue("SetGlobalObjectiveValue",!0,n,t);const o=this._globalObjectiveManager.globalObjectives[i];r&&o&&this._globalObjectiveManager.updateGlobalObjectiveFromCMI(r,o)}}return this._commonSetCMIValue("SetValue",!0,e,t)}getChildElement(e,t,i){return this._cmiHandler.getChildElement(e,t,i)}validateCorrectResponse(e,t){const i=e.split("."),s=this.cmi.interactions.childArray[+i[2]];s?this._responseValidator.validateCorrectResponse(e,s,t):this.throwSCORMError(e,j.DEPENDENCY_NOT_ESTABLISHED,e)}_peekCMIValue(e){if(!e||"string"!=typeof e)return null;const t=e.split(".");let i=this;for(let e=0;t.length>e;e++){const s=t[e];if(null==i)return null;try{i=i[s]}catch{return null}if(i instanceof x){const s=e+1;if(s>=t.length)return i;const r=+t[s];if(!Number.isNaN(r)&&Number.isInteger(r)&&r>=0){if(r>=i.childArray.length)return null;i=i.childArray[r],e++}}}return i??null}getCMIValue(e){return this._commonGetCMIValue("GetValue",!0,e)}getLmsErrorMessageDetails(e,t){let i="",s="";const r=A.error_descriptions[e+=""];return r&&(i=r.basicMessage,s=r.detailMessage),t?s:i}replaceWithAnotherScormAPI(e){this.cmi=e.cmi,this.adl=e.adl}renderCommitCMI(e){return this._dataSerializer.renderCommitCMI(e,arguments.length>1&&void 0!==arguments[1]&&arguments[1])}renderCommitObject(e){return this._dataSerializer.renderCommitObject(e,arguments.length>1&&void 0!==arguments[1]&&arguments[1])}storeData(e){e&&"normal"===this.cmi.mode&&"credit"===this.cmi.credit&&(this.cmi.completion_threshold&&this.cmi.progress_measure&&(this.cmi.completion_status=this.cmi.completion_threshold>this.cmi.progress_measure?"incomplete":"completed"),this.cmi.scaled_passing_score&&this.cmi.score.scaled&&(this.cmi.success_status=this.cmi.scaled_passing_score>this.cmi.score.scaled?"failed":"passed"));let t=!1;this.adl.nav.request!==this.startingData?.adl?.nav?.request&&"_none_"!==this.adl.nav.request&&(t=!0);const i=this.getCommitObject(e),s=this.cmi?.score?.getScoreObject()||{};let r=H;"completed"===this.cmi.completion_status?r=k:"incomplete"===this.cmi.completion_status&&(r=V);let n=F;if("passed"===this.cmi.success_status?n=P:"failed"===this.cmi.success_status&&(n=z),this._globalObjectiveManager.syncCmiToSequencingActivity(r,n,s),"string"==typeof this.settings.lmsCommitUrl){const result=this.processHttpRequest(this.settings.lmsCommitUrl,i,e);if(t&&void 0!==result.navRequest&&""!==result.navRequest&&"string"==typeof result.navRequest){const e=function(e){const t=new Set(["start","resumeAll","continue","previous","choice","jump","exit","exitAll","abandon","abandonAll","suspendAll","_none_"]),i=e.trim();if(!i)return{command:"_none_",targetActivityId:null,valid:!1,error:"Empty navigation request"};if(t.has(i))return{command:i,targetActivityId:null,valid:!0};const s=i.indexOf(".");if(s>0){const e=i.substring(0,s),t=i.substring(s+1);if(("choice"===e||"jump"===e)&&t)return/^[a-zA-Z0-9._-]+$/.test(t)?{command:e,targetActivityId:t,valid:!0}:{command:"_none_",targetActivityId:null,valid:!1,error:"Invalid target activity ID: contains disallowed characters"}}return{command:"_none_",targetActivityId:null,valid:!1,error:`Unrecognized navigation command: "${i}"`}}(result.navRequest);if(e.valid){const t={start:"SequenceStart",resumeAll:"SequenceResumeAll",continue:"SequenceNext",previous:"SequencePrevious",choice:"SequenceChoice",jump:"SequenceJump",exit:"SequenceExit",exitAll:"SequenceExitAll",abandon:"SequenceAbandon",abandonAll:"SequenceAbandonAll",suspendAll:"SequenceSuspendAll"}[e.command];t&&this.processListeners(t,"adl.nav.request",e.targetActivityId)}else this.apiLog("storeData","Invalid navigation request from LMS: "+e.error,B.WARN)}else result?.navRequest&&!t&&"object"==typeof result.navRequest&&Object.hasOwnProperty.call(result.navRequest,"name")&&result.navRequest.name&&this.processListeners(result.navRequest.name,result.navRequest.data);return result}return{result:f,errorCode:0}}configureSequencing(e){this._sequencingCollections=this._sequencingConfigBuilder.sanitizeSequencingCollections(e.collections),this._activityTreeBuilder.setSequencingCollections(this._sequencingCollections),e.activityTree&&this.configureActivityTree(e.activityTree),e.sequencingRules&&this.configureSequencingRules(e.sequencingRules),e.sequencingControls&&this.configureSequencingControls(e.sequencingControls),e.rollupRules&&this.configureRollupRules(e.rollupRules),this._sequencing.hideLmsUi=e.hideLmsUi?this._sequencingConfigBuilder.sanitizeHideLmsUi(e.hideLmsUi):[],this._sequencing.auxiliaryResources=e.auxiliaryResources?this._sequencingConfigBuilder.sanitizeAuxiliaryResources(e.auxiliaryResources):[]}configureActivityTree(e){const t=this._activityTreeBuilder.createActivity(e);this._sequencing.activityTree.root=t,this._extractedScoItemIds=this._activityTreeBuilder.extractActivityIds(t)}configureSequencingRules(e){this._sequencingConfigBuilder.applySequencingRulesSettings(this._sequencing.sequencingRules,e)}configureSequencingControls(e){this._sequencingConfigBuilder.applySequencingControlsSettings(this._sequencing.sequencingControls,e)}configureRollupRules(e){this._sequencingConfigBuilder.applyRollupRulesSettings(this._sequencing.rollupRules,e)}initializeSequencingService(e){try{if(this._sequencingService=new Wi(this._sequencing,this.cmi,this.adl,this.eventService||this,this.loggingService,{autoRollupOnCMIChange:e?.sequencing?.autoRollupOnCMIChange??!0,autoProgressOnCompletion:e?.sequencing?.autoProgressOnCompletion??!1,validateNavigationRequests:e?.sequencing?.validateNavigationRequests??!0,enableEventSystem:e?.sequencing?.enableEventSystem??!0,logLevel:e?.sequencing?.logLevel??"info"}),e?.sequencing?.eventListeners&&this._sequencingService.setEventListeners(e.sequencing.eventListeners),this._globalObjectiveManager.updateSequencingService(this._sequencingService),this._dataSerializer.updateSequencingService(this._sequencingService),e?.sequencingStatePersistence){const e={getSettings:()=>this.settings,apiLog:this.apiLog.bind(this),adl:this.adl,sequencing:this._sequencing,sequencingService:this._sequencingService,learnerId:this.cmi.learner_id};this._statePersistence=new nn(e,this._globalObjectiveManager)}this._globalObjectiveManager.syncGlobalObjectiveIdsFromSequencing()}catch(e){console.warn("Failed to initialize sequencing service:",e),this._sequencingService=null}}getSequencingService(){return this._sequencingService}setSequencingEventListeners(e){this._sequencingService&&this._sequencingService.setEventListeners(e)}updateSequencingConfiguration(e){this._sequencingService&&this._sequencingService.updateConfiguration(e)}getSequencingState(){return this._sequencingService?this._sequencingService.getSequencingState():{isInitialized:!1,isActive:!1,currentActivity:null,rootActivity:this._sequencing.getRootActivity(),lastSequencingResult:null}}processNavigationRequest(request,e){return!!this._sequencingService&&this._sequencingService.processNavigationRequest(request,e)}resetSequencingState(){this._sequencing?.reset(),this._sequencingService?.setEventListeners({})}getActivityTrackingData(e){if(!this._sequencing?.activityTree)return null;const t=this._sequencing.activityTree.getActivity(e);return t?{completionStatus:t.completionStatus||"unknown",successStatus:t.successStatus||"unknown",progressMeasure:t.progressMeasure??null,score:t.objectiveMeasureStatus?t.objectiveNormalizedMeasure:null}:null}async saveSequencingState(e){if(this._statePersistence)return this._statePersistence.saveSequencingState(e);if(!this.settings.sequencingStatePersistence)return this.apiLog("saveSequencingState","No persistence configuration provided",B.WARN),!1;const t={getSettings:()=>this.settings,apiLog:this.apiLog.bind(this),adl:this.adl,sequencing:this._sequencing,sequencingService:this._sequencingService,learnerId:this.cmi.learner_id};return new nn(t,this._globalObjectiveManager).saveSequencingState(e)}async loadSequencingState(e){if(this._statePersistence)return this._statePersistence.loadSequencingState(e);if(!this.settings.sequencingStatePersistence)return this.apiLog("loadSequencingState","No persistence configuration provided",B.WARN),!1;const t={getSettings:()=>this.settings,apiLog:this.apiLog.bind(this),adl:this.adl,sequencing:this._sequencing,sequencingService:this._sequencingService,learnerId:this.cmi.learner_id};return new nn(t,this._globalObjectiveManager).loadSequencingState(e)}serializeSequencingState(){if(this._statePersistence)return this._statePersistence.serializeSequencingState();const e={getSettings:()=>this.settings,apiLog:this.apiLog.bind(this),adl:this.adl,sequencing:this._sequencing,sequencingService:this._sequencingService,learnerId:this.cmi.learner_id};return new nn(e,this._globalObjectiveManager).serializeSequencingState()}deserializeSequencingState(e){if(this._statePersistence)return this._statePersistence.deserializeSequencingState(e);const t={getSettings:()=>this.settings,apiLog:this.apiLog.bind(this),adl:this.adl,sequencing:this._sequencing,sequencingService:this._sequencingService,learnerId:this.cmi.learner_id};return new nn(t,this._globalObjectiveManager).deserializeSequencingState(e)}determineEntryValue(e,t){return this._dataSerializer.determineEntryValue(e,t)}})}();
2
2
  //# sourceMappingURL=scorm-again.min.js.map