narrat 3.12.3 → 3.12.4

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.
@@ -35,7 +35,7 @@ This will fail in production.`);a=ad,a._s.has(r)||(o?oy(r,e,i,a):dx(r,i,a),proce
35
35
  *
36
36
  * MIT License
37
37
  */(function(){HowlerGlobal.prototype._pos=[0,0,0],HowlerGlobal.prototype._orientation=[0,0,-1,0,1,0],HowlerGlobal.prototype.stereo=function(n){var r=this;if(!r.ctx||!r.ctx.listener)return r;for(var i=r._howls.length-1;i>=0;i--)r._howls[i].stereo(n);return r},HowlerGlobal.prototype.pos=function(n,r,i){var o=this;if(!o.ctx||!o.ctx.listener)return o;if(r=typeof r!="number"?o._pos[1]:r,i=typeof i!="number"?o._pos[2]:i,typeof n=="number")o._pos=[n,r,i],typeof o.ctx.listener.positionX<"u"?(o.ctx.listener.positionX.setTargetAtTime(o._pos[0],Howler.ctx.currentTime,.1),o.ctx.listener.positionY.setTargetAtTime(o._pos[1],Howler.ctx.currentTime,.1),o.ctx.listener.positionZ.setTargetAtTime(o._pos[2],Howler.ctx.currentTime,.1)):o.ctx.listener.setPosition(o._pos[0],o._pos[1],o._pos[2]);else return o._pos;return o},HowlerGlobal.prototype.orientation=function(n,r,i,o,s,a){var l=this;if(!l.ctx||!l.ctx.listener)return l;var c=l._orientation;if(r=typeof r!="number"?c[1]:r,i=typeof i!="number"?c[2]:i,o=typeof o!="number"?c[3]:o,s=typeof s!="number"?c[4]:s,a=typeof a!="number"?c[5]:a,typeof n=="number")l._orientation=[n,r,i,o,s,a],typeof l.ctx.listener.forwardX<"u"?(l.ctx.listener.forwardX.setTargetAtTime(n,Howler.ctx.currentTime,.1),l.ctx.listener.forwardY.setTargetAtTime(r,Howler.ctx.currentTime,.1),l.ctx.listener.forwardZ.setTargetAtTime(i,Howler.ctx.currentTime,.1),l.ctx.listener.upX.setTargetAtTime(o,Howler.ctx.currentTime,.1),l.ctx.listener.upY.setTargetAtTime(s,Howler.ctx.currentTime,.1),l.ctx.listener.upZ.setTargetAtTime(a,Howler.ctx.currentTime,.1)):l.ctx.listener.setOrientation(n,r,i,o,s,a);else return c;return l},Howl.prototype.init=function(n){return function(r){var i=this;return i._orientation=r.orientation||[1,0,0],i._stereo=r.stereo||null,i._pos=r.pos||null,i._pannerAttr={coneInnerAngle:typeof r.coneInnerAngle<"u"?r.coneInnerAngle:360,coneOuterAngle:typeof r.coneOuterAngle<"u"?r.coneOuterAngle:360,coneOuterGain:typeof r.coneOuterGain<"u"?r.coneOuterGain:0,distanceModel:typeof r.distanceModel<"u"?r.distanceModel:"inverse",maxDistance:typeof r.maxDistance<"u"?r.maxDistance:1e4,panningModel:typeof r.panningModel<"u"?r.panningModel:"HRTF",refDistance:typeof r.refDistance<"u"?r.refDistance:1,rolloffFactor:typeof r.rolloffFactor<"u"?r.rolloffFactor:1},i._onstereo=r.onstereo?[{fn:r.onstereo}]:[],i._onpos=r.onpos?[{fn:r.onpos}]:[],i._onorientation=r.onorientation?[{fn:r.onorientation}]:[],n.call(this,r)}}(Howl.prototype.init),Howl.prototype.stereo=function(n,r){var i=this;if(!i._webAudio)return i;if(i._state!=="loaded")return i._queue.push({event:"stereo",action:function(){i.stereo(n,r)}}),i;var o=typeof Howler.ctx.createStereoPanner>"u"?"spatial":"stereo";if(typeof r>"u")if(typeof n=="number")i._stereo=n,i._pos=[n,0,0];else return i._stereo;for(var s=i._getSoundIds(r),a=0;a<s.length;a++){var l=i._soundById(s[a]);if(l)if(typeof n=="number")l._stereo=n,l._pos=[n,0,0],l._node&&(l._pannerAttr.panningModel="equalpower",(!l._panner||!l._panner.pan)&&e(l,o),o==="spatial"?typeof l._panner.positionX<"u"?(l._panner.positionX.setValueAtTime(n,Howler.ctx.currentTime),l._panner.positionY.setValueAtTime(0,Howler.ctx.currentTime),l._panner.positionZ.setValueAtTime(0,Howler.ctx.currentTime)):l._panner.setPosition(n,0,0):l._panner.pan.setValueAtTime(n,Howler.ctx.currentTime)),i._emit("stereo",l._id);else return l._stereo}return i},Howl.prototype.pos=function(n,r,i,o){var s=this;if(!s._webAudio)return s;if(s._state!=="loaded")return s._queue.push({event:"pos",action:function(){s.pos(n,r,i,o)}}),s;if(r=typeof r!="number"?0:r,i=typeof i!="number"?-.5:i,typeof o>"u")if(typeof n=="number")s._pos=[n,r,i];else return s._pos;for(var a=s._getSoundIds(o),l=0;l<a.length;l++){var c=s._soundById(a[l]);if(c)if(typeof n=="number")c._pos=[n,r,i],c._node&&((!c._panner||c._panner.pan)&&e(c,"spatial"),typeof c._panner.positionX<"u"?(c._panner.positionX.setValueAtTime(n,Howler.ctx.currentTime),c._panner.positionY.setValueAtTime(r,Howler.ctx.currentTime),c._panner.positionZ.setValueAtTime(i,Howler.ctx.currentTime)):c._panner.setPosition(n,r,i)),s._emit("pos",c._id);else return c._pos}return s},Howl.prototype.orientation=function(n,r,i,o){var s=this;if(!s._webAudio)return s;if(s._state!=="loaded")return s._queue.push({event:"orientation",action:function(){s.orientation(n,r,i,o)}}),s;if(r=typeof r!="number"?s._orientation[1]:r,i=typeof i!="number"?s._orientation[2]:i,typeof o>"u")if(typeof n=="number")s._orientation=[n,r,i];else return s._orientation;for(var a=s._getSoundIds(o),l=0;l<a.length;l++){var c=s._soundById(a[l]);if(c)if(typeof n=="number")c._orientation=[n,r,i],c._node&&(c._panner||(c._pos||(c._pos=s._pos||[0,0,-.5]),e(c,"spatial")),typeof c._panner.orientationX<"u"?(c._panner.orientationX.setValueAtTime(n,Howler.ctx.currentTime),c._panner.orientationY.setValueAtTime(r,Howler.ctx.currentTime),c._panner.orientationZ.setValueAtTime(i,Howler.ctx.currentTime)):c._panner.setOrientation(n,r,i)),s._emit("orientation",c._id);else return c._orientation}return s},Howl.prototype.pannerAttr=function(){var n=this,r=arguments,i,o,s;if(!n._webAudio)return n;if(r.length===0)return n._pannerAttr;if(r.length===1)if(typeof r[0]=="object")i=r[0],typeof o>"u"&&(i.pannerAttr||(i.pannerAttr={coneInnerAngle:i.coneInnerAngle,coneOuterAngle:i.coneOuterAngle,coneOuterGain:i.coneOuterGain,distanceModel:i.distanceModel,maxDistance:i.maxDistance,refDistance:i.refDistance,rolloffFactor:i.rolloffFactor,panningModel:i.panningModel}),n._pannerAttr={coneInnerAngle:typeof i.pannerAttr.coneInnerAngle<"u"?i.pannerAttr.coneInnerAngle:n._coneInnerAngle,coneOuterAngle:typeof i.pannerAttr.coneOuterAngle<"u"?i.pannerAttr.coneOuterAngle:n._coneOuterAngle,coneOuterGain:typeof i.pannerAttr.coneOuterGain<"u"?i.pannerAttr.coneOuterGain:n._coneOuterGain,distanceModel:typeof i.pannerAttr.distanceModel<"u"?i.pannerAttr.distanceModel:n._distanceModel,maxDistance:typeof i.pannerAttr.maxDistance<"u"?i.pannerAttr.maxDistance:n._maxDistance,refDistance:typeof i.pannerAttr.refDistance<"u"?i.pannerAttr.refDistance:n._refDistance,rolloffFactor:typeof i.pannerAttr.rolloffFactor<"u"?i.pannerAttr.rolloffFactor:n._rolloffFactor,panningModel:typeof i.pannerAttr.panningModel<"u"?i.pannerAttr.panningModel:n._panningModel});else return s=n._soundById(parseInt(r[0],10)),s?s._pannerAttr:n._pannerAttr;else r.length===2&&(i=r[0],o=parseInt(r[1],10));for(var a=n._getSoundIds(o),l=0;l<a.length;l++)if(s=n._soundById(a[l]),s){var c=s._pannerAttr;c={coneInnerAngle:typeof i.coneInnerAngle<"u"?i.coneInnerAngle:c.coneInnerAngle,coneOuterAngle:typeof i.coneOuterAngle<"u"?i.coneOuterAngle:c.coneOuterAngle,coneOuterGain:typeof i.coneOuterGain<"u"?i.coneOuterGain:c.coneOuterGain,distanceModel:typeof i.distanceModel<"u"?i.distanceModel:c.distanceModel,maxDistance:typeof i.maxDistance<"u"?i.maxDistance:c.maxDistance,refDistance:typeof i.refDistance<"u"?i.refDistance:c.refDistance,rolloffFactor:typeof i.rolloffFactor<"u"?i.rolloffFactor:c.rolloffFactor,panningModel:typeof i.panningModel<"u"?i.panningModel:c.panningModel};var f=s._panner;f||(s._pos||(s._pos=n._pos||[0,0,-.5]),e(s,"spatial"),f=s._panner),f.coneInnerAngle=c.coneInnerAngle,f.coneOuterAngle=c.coneOuterAngle,f.coneOuterGain=c.coneOuterGain,f.distanceModel=c.distanceModel,f.maxDistance=c.maxDistance,f.refDistance=c.refDistance,f.rolloffFactor=c.rolloffFactor,f.panningModel=c.panningModel}return n},Sound.prototype.init=function(n){return function(){var r=this,i=r._parent;r._orientation=i._orientation,r._stereo=i._stereo,r._pos=i._pos,r._pannerAttr=i._pannerAttr,n.call(this),r._stereo?i.stereo(r._stereo):r._pos&&i.pos(r._pos[0],r._pos[1],r._pos[2],r._id)}}(Sound.prototype.init),Sound.prototype.reset=function(n){return function(){var r=this,i=r._parent;return r._orientation=i._orientation,r._stereo=i._stereo,r._pos=i._pos,r._pannerAttr=i._pannerAttr,r._stereo?i.stereo(r._stereo):r._pos?i.pos(r._pos[0],r._pos[1],r._pos[2],r._id):r._panner&&(r._panner.disconnect(0),r._panner=void 0,i._refreshBuffer(r)),n.call(this)}}(Sound.prototype.reset);var e=function(n,r){r=r||"spatial",r==="spatial"?(n._panner=Howler.ctx.createPanner(),n._panner.coneInnerAngle=n._pannerAttr.coneInnerAngle,n._panner.coneOuterAngle=n._pannerAttr.coneOuterAngle,n._panner.coneOuterGain=n._pannerAttr.coneOuterGain,n._panner.distanceModel=n._pannerAttr.distanceModel,n._panner.maxDistance=n._pannerAttr.maxDistance,n._panner.refDistance=n._pannerAttr.refDistance,n._panner.rolloffFactor=n._pannerAttr.rolloffFactor,n._panner.panningModel=n._pannerAttr.panningModel,typeof n._panner.positionX<"u"?(n._panner.positionX.setValueAtTime(n._pos[0],Howler.ctx.currentTime),n._panner.positionY.setValueAtTime(n._pos[1],Howler.ctx.currentTime),n._panner.positionZ.setValueAtTime(n._pos[2],Howler.ctx.currentTime)):n._panner.setPosition(n._pos[0],n._pos[1],n._pos[2]),typeof n._panner.orientationX<"u"?(n._panner.orientationX.setValueAtTime(n._orientation[0],Howler.ctx.currentTime),n._panner.orientationY.setValueAtTime(n._orientation[1],Howler.ctx.currentTime),n._panner.orientationZ.setValueAtTime(n._orientation[2],Howler.ctx.currentTime)):n._panner.setOrientation(n._orientation[0],n._orientation[1],n._orientation[2])):(n._panner=Howler.ctx.createStereoPanner(),n._panner.pan.setValueAtTime(n._stereo,Howler.ctx.currentTime)),n._panner.connect(n._node),n._paused||n._parent.pause(n._id,!0).play(n._id,!0)}})()})(Rs);function Hi(t){return new Promise((e,n)=>{setTimeout(e,t)})}const ay=t=>t.reduce((e,n)=>({...e,[n]:n}),{}),ly=t=>t!==null&&typeof t=="object"&&typeof t.then=="function"&&typeof t.catch=="function",mx=["music","ambiant","sound"],gx=ay(mx),ui=Lr("audio",{state:()=>{const t=new Map;for(const e in gx)t.set(e,{channels:[],options:{volume:1}});return{modes:t,masterVolume:1}},actions:{stopAll(){this.modes.forEach(t=>{t.channels.forEach((e,n)=>{e&&(this.actuallyStopChannel(e),t.channels[n]=null)})})},async stopChannel(t,e){const n=this.getAudioChannel(t,e);if(!n)return;const{fadeOutTime:r}=mm(n.audio);if(this.setAudioChannel(t,e,null),yo().options.musicFadeOutTime){const i=ss(n.audio);i&&i.fade(i.volume(n.howlerId),0,r,n.howlerId),await Hi(r)}this.actuallyStopChannel(n)},async pauseChannel(t,e){const n=this.getAudioChannel(t,e);if(!n)return;const r=ss(n.audio);if(!r){vt(`Could not find audio ${n.audio}`);return}r.pause(n.howlerId)},async playChannel(t,e,n){Rs.Howler.ctx.state==="suspended"&&(console.warn("Audio context is suspended :o"),Rs.Howler.ctx.resume());const r=this.getAudioChannel(t,n);if(t==="sound")return this.actuallyPlayChannel(t,n,e);r&&r.audio!==e?await this.changeChannel(t,e,n):r&&r.audio===e?await this.resumeChannel(t,n):await this.actuallyPlayChannel(t,n,e)},async resumeChannel(t,e){const n=this.getAudioChannel(t,e);if(!n)return;const r=ss(n.audio);if(!r){vt(`Could not find audio ${n.audio}`);return}r.play(n.howlerId)},async changeChannel(t,e,n){this.getAudioChannel(t,n)&&t!=="sound"&&await this.stopChannel(t,n),await this.actuallyPlayChannel(t,n,e)},actuallyStopChannel(t){FL(t.audio,t.howlerId)},getAudioChannel(t,e){return this.modes.get(t).channels[e]||null},setAudioChannel(t,e,n){this.modes.get(t).channels[e]=n},async actuallyPlayChannel(t,e,n){const r=ss(n);if(!r){vt(`Could not find audio ${n}`);return}const{fadeInTime:i,fadeInDelay:o}=mm(n),s=this.audioVolume(t,n);if(t!=="sound"){const a=r.play();r.volume(0,a),r.pause(a),this.setAudioChannel(t,e,{audio:n,howlerId:a}),await Hi(o);const l=this.getAudioChannel(t,e);l!==null&&l.audio===n&&(r.play(a),r.fade(0,s,i,a))}else if(t==="sound"){const a=r.play();r.volume(s,a),this.setAudioChannel(t,e,{audio:n,howlerId:a})}},reloadAudio(t){for(const e in t.modes){if(e==="sound")continue;const n=e;this.modes.get(n).options=yn(t.modes[n].options);for(const r in t.modes[n].channels){const i=t.modes[n].channels[r];i&&i.audio&&this.actuallyPlayChannel(n,Number(r),i.audio)}}},stopSound(t){const e=ss(t);e&&e.stop()},generateSaveData(){const t={};for(const e in gx){const n=this.modes.get(e);t[e]={options:yn(n.options),channels:yn(n.channels).map(r=>r?{audio:r.audio}:{audio:null})}}return{modes:t,masterVolume:this.masterVolume}},loadSaveData(t){this.masterVolume=t.masterVolume},reset(){this.stopAll()},setModeVolume(t,e){const n=this.modes.get(t);n.options.volume=e;for(const r in n.channels){const i=n.channels[r];if(i){const o=ss(i.audio);o&&o.volume(this.modeVolume(t),i.howlerId)}}},setMasterVolume(t){this.masterVolume=t,Rs.Howler.volume(t)},modeVolume(t){return this.masterVolume*this.modes.get(t).options.volume},audioVolume(t,e){var n;return this.modeVolume(t)*(((n=aT(e))==null?void 0:n.volume)??1)}}}),vx={};Rs.Howler.volume(.5);let cy={};async function LL(t){Ao.log("Loading audio");const e=[];Rs.Howler.volume(t.options.volume);for(const n in t.files){const r=t.files[n];r.src||(r.src=r.path,r.path||console.error(`Audio config for ${n} doesn't have any \`src\` value to find the file`),console.warn("Using `path` for audio and musics is deprecated. Please replace `path` with `src` in your config file!")),e.push(BL(n,t.files[n]))}return t.audioTriggers&&(cy=t.audioTriggers),Promise.all(e)}function nc(t){cy[t]&&ui().playChannel("sound",cy[t],0)}async function BL(t,e){return new Promise((n,r)=>{const i=new Rs.Howl({...e,src:Gi(e.src)});i.load(),vx[t]=i,n()})}function FL(t,e){const n=ss(t);if(!n){sc(`Could not find music ${t}`);return}n.stop(e)}function ss(t){return vx[t]}function VL(t){const e=ss(t),{fadeInTime:n}=mm(t),r=e.play(),o=ui().audioVolume("music",t);return e.fade(0,o,n,r),r}async function zL(t,e){const n=ss(t),{fadeOutTime:r}=mm(t);n.fade(n.volume(e),0,r,e),await Hi(r),n.stop(e)}function qL(t,e){return t-e*Nd().options.extraPointsPerLevel}function yx(t,e){const{options:n}=Nd();let r=t;n.showDifficultyWithoutModifiers||(r=qL(t,e));const i=Nd().options;let o=!1,s=0,a=i.difficultyText[0][1];for(;!o;)i.difficultyText.length>s&&r>=i.difficultyText[s][0]?a=i.difficultyText[s][1]:o=!0,s++;let l="";return n.showDifficultyText&&n.showDifficultyNumber?l=`${a} (${r})`:n.showDifficultyText?l=a:n.showDifficultyNumber&&(l=r.toString()),l}function UL({skill:t,skillCheckId:e,value:n}){const r=Rr(),i=r.getSkillCheck(e),o=Sm(t),s=r.skills[t].level,a=yx(n,s);let l=!0,c=`<span class='skill-check'>[<span class='skill-check-name'>${o.name}</span> - `;return i.happened?i.succeeded?c="":(l=!1,c+=` <span class='skill-check-difficulty'>${a}</span> - <span class='skill-check-failed'>FAILED</span>]</span>`):c+=` <span class='skill-check-difficulty'>${a}</span>]</span>`,{difficultyText:c,allowed:l}}function HL(t,e){const n=Rr(),r=Sm(e.skill),i=yx(e.difficulty,n.skills[e.skill].level);return`<span class='passive-skill-check skill-check'>[<span class='skill-check-name'>${r.name}</span> - <span class='skill-check-difficulty'>${i}</span> - ${t?'<span class="skill-check-success">Success</span>':'<span class="skill-check-failed">Failure</span>'}]</span>`}function WL(t){const{options:e}=Nd(),n=KL(e,t),o=Rr().skills[t].level*e.extraPointsPerLevel;let s=n.reduce((a,l)=>a+l.unmodified,o);return e.finalRollIsHighest?(s=n.reduce((a,l)=>l.modified>a?l.modified:a,0),Ao.log(`[SKILL CHECK] Keeping only highest roll: ${s}`)):e.finalRollIsLowest&&(s=n.reduce((a,l)=>l.modified<a?l.modified:a,n[0].modified),Ao.log(`[SKILL CHECK] Keeping only lowest roll: ${s}`)),{roll:s,rolls:n}}function KL(t,e){const r=Rr().skills[e],i=r.level*t.extraPointsPerLevel;let{diceRange:o,diceCount:s}=t;t.extraDicePerLevel&&(s+=t.extraDicePerLevel*r.level);const a=[];for(let l=0;l<s;l++){const c=GL(o),f=c+i;Ao.log(`[SKILL CHECK] Roll ${l+1}/${s}: ${f}. (Base roll: ${c}, modifier: ${i} - Skill level: ${r.level})`),a.push({unmodified:c,modified:f})}return a}function GL(t){return Math.floor(Math.random()*t[1])+t[0]}function JL(t){const{skills:e}=qs(),{roll:n,rolls:r}=WL(t.skill),i=e[t.skill];let o=!1;if(typeof t.winsNeeded=="number"){const s=r.reduce((a,l)=>(bx(l.modified,t.difficulty)&&a++,a),0);s>=t.winsNeeded&&(o=!0),Ao.log(`[SKILL CHECK ${i.name}] - Dice pool mode. ${t.winsNeeded} wins needed. Got ${s} successes.
38
- (${t.id} - ${s}/${t.winsNeeded} - rolls: ${JSON.stringify(r.map(a=>a.modified))})`)}else o=bx(n,t.difficulty),Ao.log(`[SKILL CHECK ${i.name}]: ${o?"✅":"❌"}`,`(${t.id}) - ${n}/${t.difficulty}`);return nc(o?"onSkillCheckSuccess":"onSkillCheckFailure"),o}function bx(t,e){const{options:n}=Nd();let r=t>=e;return n.successOnRollsBelowThreshold&&(r=t<=e),n.failOnRollsEqualToThreshold&&t===e&&(r=!1),r}var C={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.Type=t.JsonType=t.JavaScriptTypeBuilder=t.JsonTypeBuilder=t.TypeBuilder=t.TypeBuilderError=t.TransformEncodeBuilder=t.TransformDecodeBuilder=t.TemplateLiteralDslParser=t.TemplateLiteralGenerator=t.TemplateLiteralGeneratorError=t.TemplateLiteralFinite=t.TemplateLiteralFiniteError=t.TemplateLiteralParser=t.TemplateLiteralParserError=t.TemplateLiteralResolver=t.TemplateLiteralPattern=t.TemplateLiteralPatternError=t.UnionResolver=t.KeyArrayResolver=t.KeyArrayResolverError=t.KeyResolver=t.ObjectMap=t.Intrinsic=t.IndexedAccessor=t.TypeClone=t.TypeExtends=t.TypeExtendsResult=t.TypeExtendsError=t.ExtendsUndefined=t.TypeGuard=t.TypeGuardUnknownTypeError=t.ValueGuard=t.FormatRegistry=t.TypeBoxError=t.TypeRegistry=t.PatternStringExact=t.PatternNumberExact=t.PatternBooleanExact=t.PatternString=t.PatternNumber=t.PatternBoolean=t.Kind=t.Hint=t.Optional=t.Readonly=t.Transform=void 0,t.Transform=Symbol.for("TypeBox.Transform"),t.Readonly=Symbol.for("TypeBox.Readonly"),t.Optional=Symbol.for("TypeBox.Optional"),t.Hint=Symbol.for("TypeBox.Hint"),t.Kind=Symbol.for("TypeBox.Kind"),t.PatternBoolean="(true|false)",t.PatternNumber="(0|[1-9][0-9]*)",t.PatternString="(.*)",t.PatternBooleanExact=`^${t.PatternBoolean}$`,t.PatternNumberExact=`^${t.PatternNumber}$`,t.PatternStringExact=`^${t.PatternString}$`;var e;(function(A){const k=new Map;function M(){return new Map(k)}A.Entries=M;function _(){return k.clear()}A.Clear=_;function w(ie){return k.delete(ie)}A.Delete=w;function x(ie){return k.has(ie)}A.Has=x;function T(ie,me){k.set(ie,me)}A.Set=T;function R(ie){return k.get(ie)}A.Get=R})(e||(t.TypeRegistry=e={}));class n extends Error{constructor(k){super(k)}}t.TypeBoxError=n;var r;(function(A){const k=new Map;function M(){return new Map(k)}A.Entries=M;function _(){return k.clear()}A.Clear=_;function w(ie){return k.delete(ie)}A.Delete=w;function x(ie){return k.has(ie)}A.Has=x;function T(ie,me){k.set(ie,me)}A.Set=T;function R(ie){return k.get(ie)}A.Get=R})(r||(t.FormatRegistry=r={}));var i;(function(A){function k(ae){return Array.isArray(ae)}A.IsArray=k;function M(ae){return typeof ae=="bigint"}A.IsBigInt=M;function _(ae){return typeof ae=="boolean"}A.IsBoolean=_;function w(ae){return ae instanceof globalThis.Date}A.IsDate=w;function x(ae){return ae===null}A.IsNull=x;function T(ae){return typeof ae=="number"}A.IsNumber=T;function R(ae){return typeof ae=="object"&&ae!==null}A.IsObject=R;function ie(ae){return typeof ae=="string"}A.IsString=ie;function me(ae){return ae instanceof globalThis.Uint8Array}A.IsUint8Array=me;function le(ae){return ae===void 0}A.IsUndefined=le})(i||(t.ValueGuard=i={}));class o extends n{}t.TypeGuardUnknownTypeError=o;var s;(function(A){function k(J){try{return new RegExp(J),!0}catch{return!1}}function M(J){if(!i.IsString(J))return!1;for(let K=0;K<J.length;K++){const ne=J.charCodeAt(K);if(ne>=7&&ne<=13||ne===27||ne===127)return!1}return!0}function _(J){return T(J)||Qe(J)}function w(J){return i.IsUndefined(J)||i.IsBigInt(J)}function x(J){return i.IsUndefined(J)||i.IsNumber(J)}function T(J){return i.IsUndefined(J)||i.IsBoolean(J)}function R(J){return i.IsUndefined(J)||i.IsString(J)}function ie(J){return i.IsUndefined(J)||i.IsString(J)&&M(J)&&k(J)}function me(J){return i.IsUndefined(J)||i.IsString(J)&&M(J)}function le(J){return i.IsUndefined(J)||Qe(J)}function ae(J){return Je(J,"Any")&&R(J.$id)}A.TAny=ae;function Ue(J){return Je(J,"Array")&&J.type==="array"&&R(J.$id)&&Qe(J.items)&&x(J.minItems)&&x(J.maxItems)&&T(J.uniqueItems)&&le(J.contains)&&x(J.minContains)&&x(J.maxContains)}A.TArray=Ue;function he(J){return Je(J,"AsyncIterator")&&J.type==="AsyncIterator"&&R(J.$id)&&Qe(J.items)}A.TAsyncIterator=he;function _e(J){return Je(J,"BigInt")&&J.type==="bigint"&&R(J.$id)&&w(J.exclusiveMaximum)&&w(J.exclusiveMinimum)&&w(J.maximum)&&w(J.minimum)&&w(J.multipleOf)}A.TBigInt=_e;function Ze(J){return Je(J,"Boolean")&&J.type==="boolean"&&R(J.$id)}A.TBoolean=Ze;function ce(J){return Je(J,"Constructor")&&J.type==="Constructor"&&R(J.$id)&&i.IsArray(J.parameters)&&J.parameters.every(K=>Qe(K))&&Qe(J.returns)}A.TConstructor=ce;function He(J){return Je(J,"Date")&&J.type==="Date"&&R(J.$id)&&x(J.exclusiveMaximumTimestamp)&&x(J.exclusiveMinimumTimestamp)&&x(J.maximumTimestamp)&&x(J.minimumTimestamp)&&x(J.multipleOfTimestamp)}A.TDate=He;function ot(J){return Je(J,"Function")&&J.type==="Function"&&R(J.$id)&&i.IsArray(J.parameters)&&J.parameters.every(K=>Qe(K))&&Qe(J.returns)}A.TFunction=ot;function Ve(J){return Je(J,"Integer")&&J.type==="integer"&&R(J.$id)&&x(J.exclusiveMaximum)&&x(J.exclusiveMinimum)&&x(J.maximum)&&x(J.minimum)&&x(J.multipleOf)}A.TInteger=Ve;function Nt(J){return Je(J,"Intersect")&&!(i.IsString(J.type)&&J.type!=="object")&&i.IsArray(J.allOf)&&J.allOf.every(K=>Qe(K)&&!an(K))&&R(J.type)&&(T(J.unevaluatedProperties)||le(J.unevaluatedProperties))&&R(J.$id)}A.TIntersect=Nt;function tt(J){return Je(J,"Iterator")&&J.type==="Iterator"&&R(J.$id)&&Qe(J.items)}A.TIterator=tt;function Je(J,K){return je(J)&&J[t.Kind]===K}A.TKindOf=Je;function je(J){return i.IsObject(J)&&t.Kind in J&&i.IsString(J[t.Kind])}A.TKind=je;function ge(J){return oe(J)&&i.IsString(J.const)}A.TLiteralString=ge;function Ne(J){return oe(J)&&i.IsNumber(J.const)}A.TLiteralNumber=Ne;function z(J){return oe(J)&&i.IsBoolean(J.const)}A.TLiteralBoolean=z;function oe(J){return Je(J,"Literal")&&R(J.$id)&&(i.IsBoolean(J.const)||i.IsNumber(J.const)||i.IsString(J.const))}A.TLiteral=oe;function de(J){return Je(J,"Never")&&i.IsObject(J.not)&&Object.getOwnPropertyNames(J.not).length===0}A.TNever=de;function be(J){return Je(J,"Not")&&Qe(J.not)}A.TNot=be;function Ee(J){return Je(J,"Null")&&J.type==="null"&&R(J.$id)}A.TNull=Ee;function Be(J){return Je(J,"Number")&&J.type==="number"&&R(J.$id)&&x(J.exclusiveMaximum)&&x(J.exclusiveMinimum)&&x(J.maximum)&&x(J.minimum)&&x(J.multipleOf)}A.TNumber=Be;function pt(J){return Je(J,"Object")&&J.type==="object"&&R(J.$id)&&i.IsObject(J.properties)&&_(J.additionalProperties)&&x(J.minProperties)&&x(J.maxProperties)&&Object.entries(J.properties).every(([K,ne])=>M(K)&&Qe(ne))}A.TObject=pt;function ht(J){return Je(J,"Promise")&&J.type==="Promise"&&R(J.$id)&&Qe(J.item)}A.TPromise=ht;function sn(J){return Je(J,"Record")&&J.type==="object"&&R(J.$id)&&_(J.additionalProperties)&&i.IsObject(J.patternProperties)&&(K=>{const ne=Object.getOwnPropertyNames(K.patternProperties);return ne.length===1&&k(ne[0])&&i.IsObject(K.patternProperties)&&Qe(K.patternProperties[ne[0]])})(J)}A.TRecord=sn;function qn(J){return i.IsObject(J)&&t.Hint in J&&J[t.Hint]==="Recursive"}A.TRecursive=qn;function Ft(J){return Je(J,"Ref")&&R(J.$id)&&i.IsString(J.$ref)}A.TRef=Ft;function at(J){return Je(J,"String")&&J.type==="string"&&R(J.$id)&&x(J.minLength)&&x(J.maxLength)&&ie(J.pattern)&&me(J.format)}A.TString=at;function Vn(J){return Je(J,"Symbol")&&J.type==="symbol"&&R(J.$id)}A.TSymbol=Vn;function Jn(J){return Je(J,"TemplateLiteral")&&J.type==="string"&&i.IsString(J.pattern)&&J.pattern[0]==="^"&&J.pattern[J.pattern.length-1]==="$"}A.TTemplateLiteral=Jn;function pn(J){return Je(J,"This")&&R(J.$id)&&i.IsString(J.$ref)}A.TThis=pn;function an(J){return i.IsObject(J)&&t.Transform in J}A.TTransform=an;function tn(J){return Je(J,"Tuple")&&J.type==="array"&&R(J.$id)&&i.IsNumber(J.minItems)&&i.IsNumber(J.maxItems)&&J.minItems===J.maxItems&&(i.IsUndefined(J.items)&&i.IsUndefined(J.additionalItems)&&J.minItems===0||i.IsArray(J.items)&&J.items.every(K=>Qe(K)))}A.TTuple=tn;function or(J){return Je(J,"Undefined")&&J.type==="undefined"&&R(J.$id)}A.TUndefined=or;function Sn(J){return Qn(J)&&J.anyOf.every(K=>ge(K)||Ne(K))}A.TUnionLiteral=Sn;function Qn(J){return Je(J,"Union")&&R(J.$id)&&i.IsObject(J)&&i.IsArray(J.anyOf)&&J.anyOf.every(K=>Qe(K))}A.TUnion=Qn;function $e(J){return Je(J,"Uint8Array")&&J.type==="Uint8Array"&&R(J.$id)&&x(J.minByteLength)&&x(J.maxByteLength)}A.TUint8Array=$e;function Xe(J){return Je(J,"Unknown")&&R(J.$id)}A.TUnknown=Xe;function xt(J){return Je(J,"Unsafe")}A.TUnsafe=xt;function en(J){return Je(J,"Void")&&J.type==="void"&&R(J.$id)}A.TVoid=en;function qt(J){return i.IsObject(J)&&J[t.Readonly]==="Readonly"}A.TReadonly=qt;function xe(J){return i.IsObject(J)&&J[t.Optional]==="Optional"}A.TOptional=xe;function Qe(J){return i.IsObject(J)&&(ae(J)||Ue(J)||Ze(J)||_e(J)||he(J)||ce(J)||He(J)||ot(J)||Ve(J)||Nt(J)||tt(J)||oe(J)||de(J)||be(J)||Ee(J)||Be(J)||pt(J)||ht(J)||sn(J)||Ft(J)||at(J)||Vn(J)||Jn(J)||pn(J)||tn(J)||or(J)||Qn(J)||$e(J)||Xe(J)||xt(J)||en(J)||je(J)&&e.Has(J[t.Kind]))}A.TSchema=Qe})(s||(t.TypeGuard=s={}));var a;(function(A){function k(M){return M[t.Kind]==="Intersect"?M.allOf.every(_=>k(_)):M[t.Kind]==="Union"?M.anyOf.some(_=>k(_)):M[t.Kind]==="Undefined"?!0:M[t.Kind]==="Not"?!k(M.not):!1}A.Check=k})(a||(t.ExtendsUndefined=a={}));class l extends n{}t.TypeExtendsError=l;var c;(function(A){A[A.Union=0]="Union",A[A.True=1]="True",A[A.False=2]="False"})(c||(t.TypeExtendsResult=c={}));var f;(function(A){function k(Y){return Y===c.False?Y:c.True}function M(Y){throw new l(Y)}function _(Y){return s.TNever(Y)||s.TIntersect(Y)||s.TUnion(Y)||s.TUnknown(Y)||s.TAny(Y)}function w(Y,Q){return s.TNever(Q)?Je():s.TIntersect(Q)?ot(Y,Q):s.TUnion(Q)?Te(Y,Q):s.TUnknown(Q)?It():s.TAny(Q)?x():M("StructuralRight")}function x(Y,Q){return c.True}function T(Y,Q){return s.TIntersect(Q)?ot(Y,Q):s.TUnion(Q)&&Q.anyOf.some(Rt=>s.TAny(Rt)||s.TUnknown(Rt))?c.True:s.TUnion(Q)?c.Union:s.TUnknown(Q)||s.TAny(Q)?c.True:c.Union}function R(Y,Q){return s.TUnknown(Y)?c.False:s.TAny(Y)?c.Union:s.TNever(Y)?c.True:c.False}function ie(Y,Q){return s.TObject(Q)&&Jn(Q)?c.True:_(Q)?w(Y,Q):s.TArray(Q)?k(gt(Y.items,Q.items)):c.False}function me(Y,Q){return _(Q)?w(Y,Q):s.TAsyncIterator(Q)?k(gt(Y.items,Q.items)):c.False}function le(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TBigInt(Q)?c.True:c.False}function ae(Y,Q){return s.TLiteral(Y)&&i.IsBoolean(Y.const)||s.TBoolean(Y)?c.True:c.False}function Ue(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TBoolean(Q)?c.True:c.False}function he(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TConstructor(Q)?Y.parameters.length>Q.parameters.length?c.False:Y.parameters.every((Rt,vn)=>k(gt(Q.parameters[vn],Rt))===c.True)?k(gt(Y.returns,Q.returns)):c.False:c.False}function _e(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TDate(Q)?c.True:c.False}function Ze(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TFunction(Q)?Y.parameters.length>Q.parameters.length?c.False:Y.parameters.every((Rt,vn)=>k(gt(Q.parameters[vn],Rt))===c.True)?k(gt(Y.returns,Q.returns)):c.False:c.False}function ce(Y,Q){return s.TLiteral(Y)&&i.IsNumber(Y.const)||s.TNumber(Y)||s.TInteger(Y)?c.True:c.False}function He(Y,Q){return s.TInteger(Q)||s.TNumber(Q)?c.True:_(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):c.False}function ot(Y,Q){return Q.allOf.every(Rt=>gt(Y,Rt)===c.True)?c.True:c.False}function Ve(Y,Q){return Y.allOf.some(Rt=>gt(Rt,Q)===c.True)?c.True:c.False}function Nt(Y,Q){return _(Q)?w(Y,Q):s.TIterator(Q)?k(gt(Y.items,Q.items)):c.False}function tt(Y,Q){return s.TLiteral(Q)&&Q.const===Y.const?c.True:_(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TString(Q)?en(Y):s.TNumber(Q)?oe(Y):s.TInteger(Q)?ce(Y):s.TBoolean(Q)?ae(Y):c.False}function Je(Y,Q){return c.False}function je(Y,Q){return c.True}function ge(Y){let[Q,Rt]=[Y,0];for(;s.TNot(Q);)Q=Q.not,Rt+=1;return Rt%2===0?Q:t.Type.Unknown()}function Ne(Y,Q){return s.TNot(Y)?gt(ge(Y),Q):s.TNot(Q)?gt(Y,ge(Q)):M("Invalid fallthrough for Not")}function z(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TNull(Q)?c.True:c.False}function oe(Y,Q){return s.TLiteralNumber(Y)||s.TNumber(Y)||s.TInteger(Y)?c.True:c.False}function de(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TInteger(Q)||s.TNumber(Q)?c.True:c.False}function be(Y,Q){return Object.getOwnPropertyNames(Y.properties).length===Q}function Ee(Y){return Jn(Y)}function Be(Y){return be(Y,0)||be(Y,1)&&"description"in Y.properties&&s.TUnion(Y.properties.description)&&Y.properties.description.anyOf.length===2&&(s.TString(Y.properties.description.anyOf[0])&&s.TUndefined(Y.properties.description.anyOf[1])||s.TString(Y.properties.description.anyOf[1])&&s.TUndefined(Y.properties.description.anyOf[0]))}function pt(Y){return be(Y,0)}function ht(Y){return be(Y,0)}function sn(Y){return be(Y,0)}function qn(Y){return be(Y,0)}function Ft(Y){return Jn(Y)}function at(Y){const Q=t.Type.Number();return be(Y,0)||be(Y,1)&&"length"in Y.properties&&k(gt(Y.properties.length,Q))===c.True}function Vn(Y){return be(Y,0)}function Jn(Y){const Q=t.Type.Number();return be(Y,0)||be(Y,1)&&"length"in Y.properties&&k(gt(Y.properties.length,Q))===c.True}function pn(Y){const Q=t.Type.Function([t.Type.Any()],t.Type.Any());return be(Y,0)||be(Y,1)&&"then"in Y.properties&&k(gt(Y.properties.then,Q))===c.True}function an(Y,Q){return gt(Y,Q)===c.False||s.TOptional(Y)&&!s.TOptional(Q)?c.False:c.True}function tn(Y,Q){return s.TUnknown(Y)?c.False:s.TAny(Y)?c.Union:s.TNever(Y)||s.TLiteralString(Y)&&Ee(Q)||s.TLiteralNumber(Y)&&pt(Q)||s.TLiteralBoolean(Y)&&ht(Q)||s.TSymbol(Y)&&Be(Q)||s.TBigInt(Y)&&sn(Q)||s.TString(Y)&&Ee(Q)||s.TSymbol(Y)&&Be(Q)||s.TNumber(Y)&&pt(Q)||s.TInteger(Y)&&pt(Q)||s.TBoolean(Y)&&ht(Q)||s.TUint8Array(Y)&&Ft(Q)||s.TDate(Y)&&qn(Q)||s.TConstructor(Y)&&Vn(Q)||s.TFunction(Y)&&at(Q)?c.True:s.TRecord(Y)&&s.TString(Qn(Y))?Q[t.Hint]==="Record"?c.True:c.False:s.TRecord(Y)&&s.TNumber(Qn(Y))?be(Q,0)?c.True:c.False:c.False}function or(Y,Q){return _(Q)?w(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TObject(Q)?(()=>{for(const Rt of Object.getOwnPropertyNames(Q.properties)){if(!(Rt in Y.properties)&&!s.TOptional(Q.properties[Rt]))return c.False;if(s.TOptional(Q.properties[Rt]))return c.True;if(an(Y.properties[Rt],Q.properties[Rt])===c.False)return c.False}return c.True})():c.False}function Sn(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)&&pn(Q)?c.True:s.TPromise(Q)?k(gt(Y.item,Q.item)):c.False}function Qn(Y){return t.PatternNumberExact in Y.patternProperties?t.Type.Number():t.PatternStringExact in Y.patternProperties?t.Type.String():M("Unknown record key pattern")}function $e(Y){return t.PatternNumberExact in Y.patternProperties?Y.patternProperties[t.PatternNumberExact]:t.PatternStringExact in Y.patternProperties?Y.patternProperties[t.PatternStringExact]:M("Unable to get record value schema")}function Xe(Y,Q){const[Rt,vn]=[Qn(Q),$e(Q)];return s.TLiteralString(Y)&&s.TNumber(Rt)&&k(gt(Y,vn))===c.True?c.True:s.TUint8Array(Y)&&s.TNumber(Rt)||s.TString(Y)&&s.TNumber(Rt)||s.TArray(Y)&&s.TNumber(Rt)?gt(Y,vn):s.TObject(Y)?(()=>{for(const Ln of Object.getOwnPropertyNames(Y.properties))if(an(vn,Y.properties[Ln])===c.False)return c.False;return c.True})():c.False}function xt(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?gt($e(Y),$e(Q)):c.False}function en(Y,Q){return s.TLiteral(Y)&&i.IsString(Y.const)||s.TString(Y)?c.True:c.False}function qt(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TString(Q)?c.True:c.False}function xe(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TSymbol(Q)?c.True:c.False}function Qe(Y,Q){return s.TTemplateLiteral(Y)?gt($.Resolve(Y),Q):s.TTemplateLiteral(Q)?gt(Y,$.Resolve(Q)):M("Invalid fallthrough for TemplateLiteral")}function J(Y,Q){return s.TArray(Q)&&Y.items!==void 0&&Y.items.every(Rt=>gt(Rt,Q.items)===c.True)}function K(Y,Q){return s.TNever(Y)?c.True:s.TUnknown(Y)?c.False:s.TAny(Y)?c.Union:c.False}function ne(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)&&Jn(Q)||s.TArray(Q)&&J(Y,Q)?c.True:s.TTuple(Q)?i.IsUndefined(Y.items)&&!i.IsUndefined(Q.items)||!i.IsUndefined(Y.items)&&i.IsUndefined(Q.items)?c.False:i.IsUndefined(Y.items)&&!i.IsUndefined(Q.items)||Y.items.every((Rt,vn)=>gt(Rt,Q.items[vn])===c.True)?c.True:c.False:c.False}function pe(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TUint8Array(Q)?c.True:c.False}function Se(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TVoid(Q)?Dn(Y):s.TUndefined(Q)?c.True:c.False}function Te(Y,Q){return Q.anyOf.some(Rt=>gt(Y,Rt)===c.True)?c.True:c.False}function St(Y,Q){return Y.anyOf.every(Rt=>gt(Rt,Q)===c.True)?c.True:c.False}function It(Y,Q){return c.True}function nn(Y,Q){return s.TNever(Q)?Je():s.TIntersect(Q)?ot(Y,Q):s.TUnion(Q)?Te(Y,Q):s.TAny(Q)?x():s.TString(Q)?en(Y):s.TNumber(Q)?oe(Y):s.TInteger(Q)?ce(Y):s.TBoolean(Q)?ae(Y):s.TArray(Q)?R(Y):s.TTuple(Q)?K(Y):s.TObject(Q)?tn(Y,Q):s.TUnknown(Q)?c.True:c.False}function Dn(Y,Q){return s.TUndefined(Y)||s.TUndefined(Y)?c.True:c.False}function Un(Y,Q){return s.TIntersect(Q)?ot(Y,Q):s.TUnion(Q)?Te(Y,Q):s.TUnknown(Q)?It():s.TAny(Q)?x():s.TObject(Q)?tn(Y,Q):s.TVoid(Q)?c.True:c.False}function gt(Y,Q){return s.TTemplateLiteral(Y)||s.TTemplateLiteral(Q)?Qe(Y,Q):s.TNot(Y)||s.TNot(Q)?Ne(Y,Q):s.TAny(Y)?T(Y,Q):s.TArray(Y)?ie(Y,Q):s.TBigInt(Y)?le(Y,Q):s.TBoolean(Y)?Ue(Y,Q):s.TAsyncIterator(Y)?me(Y,Q):s.TConstructor(Y)?he(Y,Q):s.TDate(Y)?_e(Y,Q):s.TFunction(Y)?Ze(Y,Q):s.TInteger(Y)?He(Y,Q):s.TIntersect(Y)?Ve(Y,Q):s.TIterator(Y)?Nt(Y,Q):s.TLiteral(Y)?tt(Y,Q):s.TNever(Y)?je():s.TNull(Y)?z(Y,Q):s.TNumber(Y)?de(Y,Q):s.TObject(Y)?or(Y,Q):s.TRecord(Y)?xt(Y,Q):s.TString(Y)?qt(Y,Q):s.TSymbol(Y)?xe(Y,Q):s.TTuple(Y)?ne(Y,Q):s.TPromise(Y)?Sn(Y,Q):s.TUint8Array(Y)?pe(Y,Q):s.TUndefined(Y)?Se(Y,Q):s.TUnion(Y)?St(Y,Q):s.TUnknown(Y)?nn(Y,Q):s.TVoid(Y)?Un(Y,Q):M(`Unknown left type operand '${Y[t.Kind]}'`)}function Cn(Y,Q){return gt(Y,Q)}A.Extends=Cn})(f||(t.TypeExtends=f={}));var u;(function(A){function k(ie){return ie.map(me=>x(me))}function M(ie){return new Date(ie.getTime())}function _(ie){return new Uint8Array(ie)}function w(ie){const me=Object.getOwnPropertyNames(ie).reduce((ae,Ue)=>({...ae,[Ue]:x(ie[Ue])}),{}),le=Object.getOwnPropertySymbols(ie).reduce((ae,Ue)=>({...ae,[Ue]:x(ie[Ue])}),{});return{...me,...le}}function x(ie){return i.IsArray(ie)?k(ie):i.IsDate(ie)?M(ie):i.IsUint8Array(ie)?_(ie):i.IsObject(ie)?w(ie):ie}function T(ie){return ie.map(me=>R(me))}A.Rest=T;function R(ie,me={}){return{...x(ie),...me}}A.Type=R})(u||(t.TypeClone=u={}));var d;(function(A){function k(he){return he.map(_e=>{const{[t.Optional]:Ze,...ce}=u.Type(_e);return ce})}function M(he){return he.every(_e=>s.TOptional(_e))}function _(he){return he.some(_e=>s.TOptional(_e))}function w(he){return M(he.allOf)?t.Type.Optional(t.Type.Intersect(k(he.allOf))):he}function x(he){return _(he.anyOf)?t.Type.Optional(t.Type.Union(k(he.anyOf))):he}function T(he){return he[t.Kind]==="Intersect"?w(he):he[t.Kind]==="Union"?x(he):he}function R(he,_e){const Ze=he.allOf.reduce((ce,He)=>{const ot=ae(He,_e);return ot[t.Kind]==="Never"?ce:[...ce,ot]},[]);return T(t.Type.Intersect(Ze))}function ie(he,_e){const Ze=he.anyOf.map(ce=>ae(ce,_e));return T(t.Type.Union(Ze))}function me(he,_e){const Ze=he.properties[_e];return i.IsUndefined(Ze)?t.Type.Never():t.Type.Union([Ze])}function le(he,_e){const Ze=he.items;if(i.IsUndefined(Ze))return t.Type.Never();const ce=Ze[_e];return i.IsUndefined(ce)?t.Type.Never():ce}function ae(he,_e){return he[t.Kind]==="Intersect"?R(he,_e):he[t.Kind]==="Union"?ie(he,_e):he[t.Kind]==="Object"?me(he,_e):he[t.Kind]==="Tuple"?le(he,_e):t.Type.Never()}function Ue(he,_e,Ze={}){const ce=_e.map(He=>ae(he,He.toString()));return T(t.Type.Union(ce,Ze))}A.Resolve=Ue})(d||(t.IndexedAccessor=d={}));var h;(function(A){function k(le){const[ae,Ue]=[le.slice(0,1),le.slice(1)];return`${ae.toLowerCase()}${Ue}`}function M(le){const[ae,Ue]=[le.slice(0,1),le.slice(1)];return`${ae.toUpperCase()}${Ue}`}function _(le){return le.toUpperCase()}function w(le){return le.toLowerCase()}function x(le,ae){const Ue=E.ParseExact(le.pattern);if(!L.Check(Ue))return{...le,pattern:T(le.pattern,ae)};const Ze=[...F.Generate(Ue)].map(ot=>t.Type.Literal(ot)),ce=R(Ze,ae),He=t.Type.Union(ce);return t.Type.TemplateLiteral([He])}function T(le,ae){return typeof le=="string"?ae==="Uncapitalize"?k(le):ae==="Capitalize"?M(le):ae==="Uppercase"?_(le):ae==="Lowercase"?w(le):le:le.toString()}function R(le,ae){if(le.length===0)return[];const[Ue,...he]=le;return[me(Ue,ae),...R(he,ae)]}function ie(le,ae){return s.TTemplateLiteral(le)?x(le,ae):s.TUnion(le)?t.Type.Union(R(le.anyOf,ae)):s.TLiteral(le)?t.Type.Literal(T(le.const,ae)):le}function me(le,ae){return ie(le,ae)}A.Map=me})(h||(t.Intrinsic=h={}));var p;(function(A){function k(T,R){return t.Type.Intersect(T.allOf.map(ie=>w(ie,R)),{...T})}function M(T,R){return t.Type.Union(T.anyOf.map(ie=>w(ie,R)),{...T})}function _(T,R){return R(T)}function w(T,R){return T[t.Kind]==="Intersect"?k(T,R):T[t.Kind]==="Union"?M(T,R):T[t.Kind]==="Object"?_(T,R):T}function x(T,R,ie){return{...w(u.Type(T),R),...ie}}A.Map=x})(p||(t.ObjectMap=p={}));var m;(function(A){function k(me){return me[0]==="^"&&me[me.length-1]==="$"?me.slice(1,me.length-1):me}function M(me,le){return me.allOf.reduce((ae,Ue)=>[...ae,...T(Ue,le)],[])}function _(me,le){const ae=me.anyOf.map(Ue=>T(Ue,le));return[...ae.reduce((Ue,he)=>he.map(_e=>ae.every(Ze=>Ze.includes(_e))?Ue.add(_e):Ue)[0],new Set)]}function w(me,le){return Object.getOwnPropertyNames(me.properties)}function x(me,le){return le.includePatterns?Object.getOwnPropertyNames(me.patternProperties):[]}function T(me,le){return s.TIntersect(me)?M(me,le):s.TUnion(me)?_(me,le):s.TObject(me)?w(me):s.TRecord(me)?x(me,le):[]}function R(me,le){return[...new Set(T(me,le))]}A.ResolveKeys=R;function ie(me){return`^(${R(me,{includePatterns:!0}).map(Ue=>`(${k(Ue)})`).join("|")})$`}A.ResolvePattern=ie})(m||(t.KeyResolver=m={}));class y extends n{}t.KeyArrayResolverError=y;var g;(function(A){function k(M){return Array.isArray(M)?M:s.TUnionLiteral(M)?M.anyOf.map(_=>_.const.toString()):s.TLiteral(M)?[M.const]:s.TTemplateLiteral(M)?(()=>{const _=E.ParseExact(M.pattern);if(!L.Check(_))throw new y("Cannot resolve keys from infinite template expression");return[...F.Generate(_)]})():[]}A.Resolve=k})(g||(t.KeyArrayResolver=g={}));var b;(function(A){function*k(_){for(const w of _.anyOf)w[t.Kind]==="Union"?yield*k(w):yield w}function M(_){return t.Type.Union([...k(_)],{..._})}A.Resolve=M})(b||(t.UnionResolver=b={}));class S extends n{}t.TemplateLiteralPatternError=S;var j;(function(A){function k(x){throw new S(x)}function M(x){return x.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function _(x,T){return s.TTemplateLiteral(x)?x.pattern.slice(1,x.pattern.length-1):s.TUnion(x)?`(${x.anyOf.map(R=>_(R,T)).join("|")})`:s.TNumber(x)?`${T}${t.PatternNumber}`:s.TInteger(x)?`${T}${t.PatternNumber}`:s.TBigInt(x)?`${T}${t.PatternNumber}`:s.TString(x)?`${T}${t.PatternString}`:s.TLiteral(x)?`${T}${M(x.const.toString())}`:s.TBoolean(x)?`${T}${t.PatternBoolean}`:k(`Unexpected Kind '${x[t.Kind]}'`)}function w(x){return`^${x.map(T=>_(T,"")).join("")}$`}A.Create=w})(j||(t.TemplateLiteralPattern=j={}));var $;(function(A){function k(M){const _=E.ParseExact(M.pattern);if(!L.Check(_))return t.Type.String();const w=[...F.Generate(_)].map(x=>t.Type.Literal(x));return t.Type.Union(w)}A.Resolve=k})($||(t.TemplateLiteralResolver=$={}));class O extends n{}t.TemplateLiteralParserError=O;var E;(function(A){function k(he,_e,Ze){return he[_e]===Ze&&he.charCodeAt(_e-1)!==92}function M(he,_e){return k(he,_e,"(")}function _(he,_e){return k(he,_e,")")}function w(he,_e){return k(he,_e,"|")}function x(he){if(!(M(he,0)&&_(he,he.length-1)))return!1;let _e=0;for(let Ze=0;Ze<he.length;Ze++)if(M(he,Ze)&&(_e+=1),_(he,Ze)&&(_e-=1),_e===0&&Ze!==he.length-1)return!1;return!0}function T(he){return he.slice(1,he.length-1)}function R(he){let _e=0;for(let Ze=0;Ze<he.length;Ze++)if(M(he,Ze)&&(_e+=1),_(he,Ze)&&(_e-=1),w(he,Ze)&&_e===0)return!0;return!1}function ie(he){for(let _e=0;_e<he.length;_e++)if(M(he,_e))return!0;return!1}function me(he){let[_e,Ze]=[0,0];const ce=[];for(let ot=0;ot<he.length;ot++)if(M(he,ot)&&(_e+=1),_(he,ot)&&(_e-=1),w(he,ot)&&_e===0){const Ve=he.slice(Ze,ot);Ve.length>0&&ce.push(ae(Ve)),Ze=ot+1}const He=he.slice(Ze);return He.length>0&&ce.push(ae(He)),ce.length===0?{type:"const",const:""}:ce.length===1?ce[0]:{type:"or",expr:ce}}function le(he){function _e(He,ot){if(!M(He,ot))throw new O("TemplateLiteralParser: Index must point to open parens");let Ve=0;for(let Nt=ot;Nt<He.length;Nt++)if(M(He,Nt)&&(Ve+=1),_(He,Nt)&&(Ve-=1),Ve===0)return[ot,Nt];throw new O("TemplateLiteralParser: Unclosed group parens in expression")}function Ze(He,ot){for(let Ve=ot;Ve<He.length;Ve++)if(M(He,Ve))return[ot,Ve];return[ot,He.length]}const ce=[];for(let He=0;He<he.length;He++)if(M(he,He)){const[ot,Ve]=_e(he,He),Nt=he.slice(ot,Ve+1);ce.push(ae(Nt)),He=Ve}else{const[ot,Ve]=Ze(he,He),Nt=he.slice(ot,Ve);Nt.length>0&&ce.push(ae(Nt)),He=Ve-1}return ce.length===0?{type:"const",const:""}:ce.length===1?ce[0]:{type:"and",expr:ce}}function ae(he){return x(he)?ae(T(he)):R(he)?me(he):ie(he)?le(he):{type:"const",const:he}}A.Parse=ae;function Ue(he){return ae(he.slice(1,he.length-1))}A.ParseExact=Ue})(E||(t.TemplateLiteralParser=E={}));class V extends n{}t.TemplateLiteralFiniteError=V;var L;(function(A){function k(T){throw new V(T)}function M(T){return T.type==="or"&&T.expr.length===2&&T.expr[0].type==="const"&&T.expr[0].const==="0"&&T.expr[1].type==="const"&&T.expr[1].const==="[1-9][0-9]*"}function _(T){return T.type==="or"&&T.expr.length===2&&T.expr[0].type==="const"&&T.expr[0].const==="true"&&T.expr[1].type==="const"&&T.expr[1].const==="false"}function w(T){return T.type==="const"&&T.const===".*"}function x(T){return _(T)?!0:M(T)||w(T)?!1:T.type==="and"?T.expr.every(R=>x(R)):T.type==="or"?T.expr.every(R=>x(R)):T.type==="const"?!0:k("Unknown expression type")}A.Check=x})(L||(t.TemplateLiteralFinite=L={}));class D extends n{}t.TemplateLiteralGeneratorError=D;var F;(function(A){function*k(T){if(T.length===1)return yield*T[0];for(const R of T[0])for(const ie of k(T.slice(1)))yield`${R}${ie}`}function*M(T){return yield*k(T.expr.map(R=>[...x(R)]))}function*_(T){for(const R of T.expr)yield*x(R)}function*w(T){return yield T.const}function*x(T){return T.type==="and"?yield*M(T):T.type==="or"?yield*_(T):T.type==="const"?yield*w(T):(()=>{throw new D("Unknown expression")})()}A.Generate=x})(F||(t.TemplateLiteralGenerator=F={}));var I;(function(A){function*k(x){const T=x.trim().replace(/"|'/g,"");return T==="boolean"?yield t.Type.Boolean():T==="number"?yield t.Type.Number():T==="bigint"?yield t.Type.BigInt():T==="string"?yield t.Type.String():yield(()=>{const R=T.split("|").map(ie=>t.Type.Literal(ie.trim()));return R.length===0?t.Type.Never():R.length===1?R[0]:t.Type.Union(R)})()}function*M(x){if(x[1]!=="{"){const T=t.Type.Literal("$"),R=_(x.slice(1));return yield*[T,...R]}for(let T=2;T<x.length;T++)if(x[T]==="}"){const R=k(x.slice(2,T)),ie=_(x.slice(T+1));return yield*[...R,...ie]}yield t.Type.Literal(x)}function*_(x){for(let T=0;T<x.length;T++)if(x[T]==="$"){const R=t.Type.Literal(x.slice(0,T)),ie=M(x.slice(T));return yield*[R,...ie]}yield t.Type.Literal(x)}function w(x){return[..._(x)]}A.Parse=w})(I||(t.TemplateLiteralDslParser=I={}));class B{constructor(k){this.schema=k}Decode(k){return new q(this.schema,k)}}t.TransformDecodeBuilder=B;class q{constructor(k,M){this.schema=k,this.decode=M}Encode(k){const M=u.Type(this.schema);return s.TTransform(M)?(()=>{const x={Encode:T=>M[t.Transform].Encode(k(T)),Decode:T=>this.decode(M[t.Transform].Decode(T))};return{...M,[t.Transform]:x}})():(()=>{const _={Decode:this.decode,Encode:k};return{...M,[t.Transform]:_}})()}}t.TransformEncodeBuilder=q;let ee=0;class Z extends n{}t.TypeBuilderError=Z;class se{Create(k){return k}Throw(k){throw new Z(k)}Discard(k,M){return M.reduce((_,w)=>{const{[w]:x,...T}=_;return T},k)}Strict(k){return JSON.parse(JSON.stringify(k))}}t.TypeBuilder=se;class U extends se{ReadonlyOptional(k){return this.Readonly(this.Optional(k))}Readonly(k){return{...u.Type(k),[t.Readonly]:"Readonly"}}Optional(k){return{...u.Type(k),[t.Optional]:"Optional"}}Any(k={}){return this.Create({...k,[t.Kind]:"Any"})}Array(k,M={}){return this.Create({...M,[t.Kind]:"Array",type:"array",items:u.Type(k)})}Boolean(k={}){return this.Create({...k,[t.Kind]:"Boolean",type:"boolean"})}Capitalize(k,M={}){return{...h.Map(u.Type(k),"Capitalize"),...M}}Composite(k,M){const _=t.Type.Intersect(k,{}),x=m.ResolveKeys(_,{includePatterns:!1}).reduce((T,R)=>({...T,[R]:t.Type.Index(_,[R])}),{});return t.Type.Object(x,M)}Enum(k,M={}){if(i.IsUndefined(k))return this.Throw("Enum undefined or empty");const _=Object.getOwnPropertyNames(k).filter(T=>isNaN(T)).map(T=>k[T]),x=[...new Set(_)].map(T=>t.Type.Literal(T));return this.Union(x,{...M,[t.Hint]:"Enum"})}Extends(k,M,_,w,x={}){switch(f.Extends(k,M)){case c.Union:return this.Union([u.Type(_,x),u.Type(w,x)]);case c.True:return u.Type(_,x);case c.False:return u.Type(w,x)}}Exclude(k,M,_={}){return s.TTemplateLiteral(k)?this.Exclude($.Resolve(k),M,_):s.TTemplateLiteral(M)?this.Exclude(k,$.Resolve(M),_):s.TUnion(k)?(()=>{const w=k.anyOf.filter(x=>f.Extends(x,M)===c.False);return w.length===1?u.Type(w[0],_):this.Union(w,_)})():f.Extends(k,M)!==c.False?this.Never(_):u.Type(k,_)}Extract(k,M,_={}){return s.TTemplateLiteral(k)?this.Extract($.Resolve(k),M,_):s.TTemplateLiteral(M)?this.Extract(k,$.Resolve(M),_):s.TUnion(k)?(()=>{const w=k.anyOf.filter(x=>f.Extends(x,M)!==c.False);return w.length===1?u.Type(w[0],_):this.Union(w,_)})():f.Extends(k,M)!==c.False?u.Type(k,_):this.Never(_)}Index(k,M,_={}){return s.TArray(k)&&s.TNumber(M)?u.Type(k.items,_):s.TTuple(k)&&s.TNumber(M)?(()=>{const x=(i.IsUndefined(k.items)?[]:k.items).map(T=>u.Type(T));return this.Union(x,_)})():(()=>{const w=g.Resolve(M),x=u.Type(k);return d.Resolve(x,w,_)})()}Integer(k={}){return this.Create({...k,[t.Kind]:"Integer",type:"integer"})}Intersect(k,M={}){if(k.length===0)return t.Type.Never();if(k.length===1)return u.Type(k[0],M);k.some(T=>s.TTransform(T))&&this.Throw("Cannot intersect transform types");const _=k.every(T=>s.TObject(T)),w=u.Rest(k),x=s.TSchema(M.unevaluatedProperties)?{unevaluatedProperties:u.Type(M.unevaluatedProperties)}:{};return M.unevaluatedProperties===!1||s.TSchema(M.unevaluatedProperties)||_?this.Create({...M,...x,[t.Kind]:"Intersect",type:"object",allOf:w}):this.Create({...M,...x,[t.Kind]:"Intersect",allOf:w})}KeyOf(k,M={}){return s.TRecord(k)?(()=>{const _=Object.getOwnPropertyNames(k.patternProperties)[0];return _===t.PatternNumberExact?this.Number(M):_===t.PatternStringExact?this.String(M):this.Throw("Unable to resolve key type from Record key pattern")})():s.TTuple(k)?(()=>{const w=(i.IsUndefined(k.items)?[]:k.items).map((x,T)=>t.Type.Literal(T.toString()));return this.Union(w,M)})():s.TArray(k)?this.Number(M):(()=>{const _=m.ResolveKeys(k,{includePatterns:!1});if(_.length===0)return this.Never(M);const w=_.map(x=>this.Literal(x));return this.Union(w,M)})()}Literal(k,M={}){return this.Create({...M,[t.Kind]:"Literal",const:k,type:typeof k})}Lowercase(k,M={}){return{...h.Map(u.Type(k),"Lowercase"),...M}}Never(k={}){return this.Create({...k,[t.Kind]:"Never",not:{}})}Not(k,M){return this.Create({...M,[t.Kind]:"Not",not:u.Type(k)})}Null(k={}){return this.Create({...k,[t.Kind]:"Null",type:"null"})}Number(k={}){return this.Create({...k,[t.Kind]:"Number",type:"number"})}Object(k,M={}){const _=Object.getOwnPropertyNames(k),w=_.filter(ie=>s.TOptional(k[ie])),x=_.filter(ie=>!w.includes(ie)),T=s.TSchema(M.additionalProperties)?{additionalProperties:u.Type(M.additionalProperties)}:{},R=_.reduce((ie,me)=>({...ie,[me]:u.Type(k[me])}),{});return x.length>0?this.Create({...M,...T,[t.Kind]:"Object",type:"object",properties:R,required:x}):this.Create({...M,...T,[t.Kind]:"Object",type:"object",properties:R})}Omit(k,M,_={}){const w=g.Resolve(M);return p.Map(this.Discard(u.Type(k),["$id",t.Transform]),x=>{i.IsArray(x.required)&&(x.required=x.required.filter(T=>!w.includes(T)),x.required.length===0&&delete x.required);for(const T of Object.getOwnPropertyNames(x.properties))w.includes(T)&&delete x.properties[T];return this.Create(x)},_)}Partial(k,M={}){return p.Map(this.Discard(u.Type(k),["$id",t.Transform]),_=>{const w=Object.getOwnPropertyNames(_.properties).reduce((x,T)=>({...x,[T]:this.Optional(_.properties[T])}),{});return this.Object(w,this.Discard(_,["required"]))},M)}Pick(k,M,_={}){const w=g.Resolve(M);return p.Map(this.Discard(u.Type(k),["$id",t.Transform]),x=>{i.IsArray(x.required)&&(x.required=x.required.filter(T=>w.includes(T)),x.required.length===0&&delete x.required);for(const T of Object.getOwnPropertyNames(x.properties))w.includes(T)||delete x.properties[T];return this.Create(x)},_)}Record(k,M,_={}){return s.TTemplateLiteral(k)?(()=>{const w=E.ParseExact(k.pattern);return L.Check(w)?this.Object([...F.Generate(w)].reduce((x,T)=>({...x,[T]:u.Type(M)}),{}),_):this.Create({..._,[t.Kind]:"Record",type:"object",patternProperties:{[k.pattern]:u.Type(M)}})})():s.TUnion(k)?(()=>{const w=b.Resolve(k);if(s.TUnionLiteral(w)){const x=w.anyOf.reduce((T,R)=>({...T,[R.const]:u.Type(M)}),{});return this.Object(x,{..._,[t.Hint]:"Record"})}else this.Throw("Record key of type union contains non-literal types")})():s.TLiteral(k)?i.IsString(k.const)||i.IsNumber(k.const)?this.Object({[k.const]:u.Type(M)},_):this.Throw("Record key of type literal is not of type string or number"):s.TInteger(k)||s.TNumber(k)?this.Create({..._,[t.Kind]:"Record",type:"object",patternProperties:{[t.PatternNumberExact]:u.Type(M)}}):s.TString(k)?(()=>{const w=i.IsUndefined(k.pattern)?t.PatternStringExact:k.pattern;return this.Create({..._,[t.Kind]:"Record",type:"object",patternProperties:{[w]:u.Type(M)}})})():this.Never()}Recursive(k,M={}){i.IsUndefined(M.$id)&&(M.$id=`T${ee++}`);const _=k({[t.Kind]:"This",$ref:`${M.$id}`});return _.$id=M.$id,this.Create({...M,[t.Hint]:"Recursive",..._})}Ref(k,M={}){return i.IsString(k)?this.Create({...M,[t.Kind]:"Ref",$ref:k}):(i.IsUndefined(k.$id)&&this.Throw("Reference target type must specify an $id"),this.Create({...M,[t.Kind]:"Ref",$ref:k.$id}))}Required(k,M={}){return p.Map(this.Discard(u.Type(k),["$id",t.Transform]),_=>{const w=Object.getOwnPropertyNames(_.properties).reduce((x,T)=>({...x,[T]:this.Discard(_.properties[T],[t.Optional])}),{});return this.Object(w,_)},M)}Rest(k){return s.TTuple(k)&&!i.IsUndefined(k.items)?u.Rest(k.items):s.TIntersect(k)?u.Rest(k.allOf):s.TUnion(k)?u.Rest(k.anyOf):[]}String(k={}){return this.Create({...k,[t.Kind]:"String",type:"string"})}TemplateLiteral(k,M={}){const _=i.IsString(k)?j.Create(I.Parse(k)):j.Create(k);return this.Create({...M,[t.Kind]:"TemplateLiteral",type:"string",pattern:_})}Transform(k){return new B(k)}Tuple(k,M={}){const[_,w,x]=[!1,k.length,k.length],T=u.Rest(k),R=k.length>0?{...M,[t.Kind]:"Tuple",type:"array",items:T,additionalItems:_,minItems:w,maxItems:x}:{...M,[t.Kind]:"Tuple",type:"array",minItems:w,maxItems:x};return this.Create(R)}Uncapitalize(k,M={}){return{...h.Map(u.Type(k),"Uncapitalize"),...M}}Union(k,M={}){return s.TTemplateLiteral(k)?$.Resolve(k):(()=>{const _=k;if(_.length===0)return this.Never(M);if(_.length===1)return this.Create(u.Type(_[0],M));const w=u.Rest(_);return this.Create({...M,[t.Kind]:"Union",anyOf:w})})()}Unknown(k={}){return this.Create({...k,[t.Kind]:"Unknown"})}Unsafe(k={}){return this.Create({...k,[t.Kind]:k[t.Kind]||"Unsafe"})}Uppercase(k,M={}){return{...h.Map(u.Type(k),"Uppercase"),...M}}}t.JsonTypeBuilder=U;class G extends U{AsyncIterator(k,M={}){return this.Create({...M,[t.Kind]:"AsyncIterator",type:"AsyncIterator",items:u.Type(k)})}Awaited(k,M={}){const _=w=>w.length>0?(()=>{const[x,...T]=w;return[this.Awaited(x),..._(T)]})():w;return s.TIntersect(k)?t.Type.Intersect(_(k.allOf)):s.TUnion(k)?t.Type.Union(_(k.anyOf)):s.TPromise(k)?this.Awaited(k.item):u.Type(k,M)}BigInt(k={}){return this.Create({...k,[t.Kind]:"BigInt",type:"bigint"})}ConstructorParameters(k,M={}){return this.Tuple([...k.parameters],{...M})}Constructor(k,M,_){const[w,x]=[u.Rest(k),u.Type(M)];return this.Create({..._,[t.Kind]:"Constructor",type:"Constructor",parameters:w,returns:x})}Date(k={}){return this.Create({...k,[t.Kind]:"Date",type:"Date"})}Function(k,M,_){const[w,x]=[u.Rest(k),u.Type(M)];return this.Create({..._,[t.Kind]:"Function",type:"Function",parameters:w,returns:x})}InstanceType(k,M={}){return u.Type(k.returns,M)}Iterator(k,M={}){return this.Create({...M,[t.Kind]:"Iterator",type:"Iterator",items:u.Type(k)})}Parameters(k,M={}){return this.Tuple(k.parameters,{...M})}Promise(k,M={}){return this.Create({...M,[t.Kind]:"Promise",type:"Promise",item:u.Type(k)})}RegExp(k,M={}){const _=i.IsString(k)?k:k.source;return this.Create({...M,[t.Kind]:"String",type:"string",pattern:_})}RegEx(k,M={}){return this.RegExp(k,M)}ReturnType(k,M={}){return u.Type(k.returns,M)}Symbol(k){return this.Create({...k,[t.Kind]:"Symbol",type:"symbol"})}Undefined(k={}){return this.Create({...k,[t.Kind]:"Undefined",type:"undefined"})}Uint8Array(k={}){return this.Create({...k,[t.Kind]:"Uint8Array",type:"Uint8Array"})}Void(k={}){return this.Create({...k,[t.Kind]:"Void",type:"void"})}}t.JavaScriptTypeBuilder=G,t.JsonType=new U,t.Type=new G})(C);const QL=C.Type.Object({prefix:C.Type.Optional(C.Type.String()),suffix:C.Type.Optional(C.Type.String()),volume:C.Type.Optional(C.Type.Number())}),wx=C.Type.Object({soundOnNewLine:C.Type.Optional(C.Type.String()),soundPerLetter:C.Type.Optional(QL)}),YL=C.Type.Object({defaultAudio:C.Type.Optional(wx),characterAudio:C.Type.Optional(C.Type.Record(C.Type.String(),wx))}),XL=C.Type.Object({src:C.Type.String(),path:C.Type.Optional(C.Type.String()),volume:C.Type.Optional(C.Type.Number()),rate:C.Type.Optional(C.Type.Number()),html5:C.Type.Optional(C.Type.Boolean()),fadeInTime:C.Type.Optional(C.Type.Number()),fadeInDelay:C.Type.Optional(C.Type.Number()),fadeOutTime:C.Type.Optional(C.Type.Number()),loop:C.Type.Optional(C.Type.Boolean())}),ZL=C.Type.Record(C.Type.String(),XL),e7=C.Type.Object({volume:C.Type.Optional(C.Type.Number()),defaultMusic:C.Type.Optional(C.Type.String()),musicFadeInTime:C.Type.Optional(C.Type.Number()),musicFadeOutTime:C.Type.Optional(C.Type.Number()),musicFadeInDelay:C.Type.Optional(C.Type.Number())}),t7=C.Type.Record(C.Type.String(),C.Type.String()),Sx=C.Type.Object({files:ZL,audioTriggers:t7,options:e7,dialogAudio:C.Type.Optional(YL)}),kx={files:{},audioTriggers:{},options:{volume:1,musicFadeInTime:.5,musicFadeInDelay:.5,musicFadeOutTime:.5}},$x=C.Type.Object({backgrounds:C.Type.Object({width:C.Type.Number(),height:C.Type.Number()}),dialogBottomPadding:C.Type.Union([C.Type.Number(),C.Type.String()]),minTextWidth:C.Type.Optional(C.Type.Number()),verticalLayoutThreshold:C.Type.Number(),defaultFontSize:C.Type.Optional(C.Type.Number()),portraits:C.Type.Object({width:C.Type.Number(),height:C.Type.Number(),offset:C.Type.Optional(C.Type.Object({landscape:C.Type.Optional(C.Type.Object({right:C.Type.Number(),bottom:C.Type.Number()})),portrait:C.Type.Optional(C.Type.Object({right:C.Type.Number(),bottom:C.Type.Number()}))}))})}),n7={backgrounds:{width:880,height:720},dialogBottomPadding:70,verticalLayoutThreshold:600,defaultFontSize:16,portraits:{width:100,height:100}},Op=C.Type.Object({name:C.Type.String(),description:C.Type.Optional(C.Type.String())}),r7=C.Type.Intersect([Op,C.Type.Object({type:C.Type.Literal("number"),defaultValue:C.Type.Number(),step:C.Type.Number(),minValue:C.Type.Number(),maxValue:C.Type.Number()})]),i7=C.Type.Intersect([Op,C.Type.Object({type:C.Type.Literal("integer"),defaultValue:C.Type.Number(),step:C.Type.Number(),minValue:C.Type.Number(),maxValue:C.Type.Number()})]),o7=C.Type.Intersect([Op,C.Type.Object({type:C.Type.Literal("boolean"),defaultValue:C.Type.Boolean()})]),s7=C.Type.Intersect([Op,C.Type.Object({type:C.Type.Literal("string"),defaultValue:C.Type.String()})]),a7=C.Type.Union([r7,i7,o7,s7]);function l7(t){return t.type==="number"}function xx(t){return t.type==="integer"}function c7(t){return t.type==="boolean"}function u7(t){return t.type==="string"}const jx=C.Type.Object({customSettings:C.Type.Optional(C.Type.Record(C.Type.String(),a7))});var ul=(t=>(t[t.ERROR=3]="ERROR",t[t.WARN=2]="WARN",t[t.INFO=1]="INFO",t[t.DEBUG=0]="DEBUG",t[t.NONE=-1]="NONE",t))(ul||{});const Ep="###_--_~=:;_JUMP",uy="###_--_~=:;_RETURN",f7="###_--_~=:;_OK",Ap="###_--_~=:;_STOP";function d7(t){return t===Ep||t===uy||t===f7||t===Ap}const h7="3.12.3",p7=new Date("2024-08-18T15:35:39.861Z"),_x={branch:"main",commit:"4f1da78d1be17d5107252ed002c2f683ba62daf4"},m7=ul.WARN,g7=400,Pp=20,Mp="@empty",Cx={background:Mp},v7=C.Type.Optional(C.Type.Record(C.Type.String(),C.Type.Union([C.Type.String(),C.Type.Boolean()]))),Tx=C.Type.Optional(C.Type.Object({animateText:C.Type.Optional(C.Type.Boolean()),textSpeed:C.Type.Optional(C.Type.Number()),timeBetweenLines:C.Type.Optional(C.Type.Number()),overlayMode:C.Type.Optional(C.Type.Boolean()),rightOffset:C.Type.Optional(C.Type.Number()),bottomOffset:C.Type.Optional(C.Type.Number()),width:C.Type.Optional(C.Type.Number()),height:C.Type.Optional(C.Type.Number()),hideDuringTransition:C.Type.Optional(C.Type.Boolean()),showAfterScriptEnd:C.Type.Optional(C.Type.Boolean())})),Ox=C.Type.Object({engineSplashScreen:C.Type.Optional(C.Type.Object({skip:C.Type.Optional(C.Type.Boolean()),fadeDuration:C.Type.Optional(C.Type.Number()),timeBeforeFadeout:C.Type.Optional(C.Type.Number()),overrideText:C.Type.Optional(C.Type.String()),overrideLogo:C.Type.Optional(C.Type.String())})),gameSplashScreen:C.Type.Optional(C.Type.Object({startButtonText:C.Type.Optional(C.Type.String())}))}),Ex=C.Type.Object({timeOnScreen:C.Type.Number(),alsoPrintInDialogue:C.Type.Optional(C.Type.Boolean())}),y7=C.Type.Object({name:C.Type.String(),icon:C.Type.String(),startingValue:C.Type.Number(),maxValue:C.Type.Optional(C.Type.Number()),minValue:C.Type.Optional(C.Type.Number()),decimals:C.Type.Optional(C.Type.Number()),prefix:C.Type.Optional(C.Type.String()),suffix:C.Type.Optional(C.Type.String()),hideName:C.Type.Optional(C.Type.Boolean()),formatting:C.Type.Optional(C.Type.Object({style:C.Type.Union([C.Type.Literal("decimal"),C.Type.Literal("currency"),C.Type.Literal("percent"),C.Type.Literal("unit")]),currency:C.Type.Optional(C.Type.String()),unit:C.Type.Optional(C.Type.String())}))}),Ax=C.Type.Record(C.Type.String(),y7),Px=C.Type.Record(C.Type.String(),C.Type.Object({onlyInteractOutsideOfScripts:C.Type.Optional(C.Type.Boolean())})),b7=C.Type.Object({delay:C.Type.Optional(C.Type.Number()),duration:C.Type.Optional(C.Type.Number())}),Mx=C.Type.Record(C.Type.String(),b7),w7=C.Type.Object({text:C.Type.String(),cssClass:C.Type.Optional(C.Type.String())}),Nx=C.Type.Record(C.Type.String(),w7),Ix=C.Type.Object({showScriptFinishedMessage:C.Type.Optional(C.Type.Boolean())}),Rx=C.Type.Object({mode:C.Type.String(),slots:C.Type.Number(),runOnReload:C.Type.Optional(C.Type.String()),disabled:C.Type.Optional(C.Type.Boolean())}),Dx=C.Type.Array(C.Type.String()),S7=[],k7=C.Type.Object({startMenuScene:C.Type.Optional(C.Type.String()),gameScene:C.Type.Optional(C.Type.String()),gameSplashScene:C.Type.Optional(C.Type.String())}),Lx=C.Type.Object({baseAssetsPath:C.Type.Optional(C.Type.String()),baseDataPath:C.Type.Optional(C.Type.String()),gameTitle:C.Type.String(),saveFileName:C.Type.String(),images:C.Type.Optional(C.Type.Record(C.Type.String(),C.Type.String())),layout:$x,settings:C.Type.Optional(jx),gameFlow:C.Type.Optional(C.Type.Object({labelToJumpOnScriptEnd:C.Type.Optional(C.Type.String())})),dialogPanel:C.Type.Optional(Tx),splashScreens:C.Type.Optional(Ox),notifications:C.Type.Optional(Ex),hudStats:Ax,interactionTags:C.Type.Optional(Px),transitions:C.Type.Optional(Mx),menuButtons:C.Type.Optional(Nx),debugging:C.Type.Optional(Ix),saves:C.Type.Optional(Rx),hotkeys:v7,scenes:C.Type.Optional(k7)}),fy={baseAssetsPath:"",baseDataPath:"",gameTitle:"Narrat Game",saveFileName:"narrat save",images:{},layout:n7,settings:{},gameFlow:{},dialogPanel:{overlayMode:!0,rightOffset:100,bottomOffset:50,width:475,height:680,textSpeed:Pp,animateText:!0,timeBetweenLines:100,hideDuringTransition:!1,showAfterScriptEnd:!1},splashScreens:{},notifications:{timeOnScreen:2.5,alsoPrintInDialogue:!1},hudStats:{},interactionTags:{default:{onlyInteractOutsideOfScripts:!0}},transitions:{},menuButtons:{},debugging:{showScriptFinishedMessage:!1},saves:{mode:"manual",slots:10},hotkeys:{},scenes:{}},$7=C.Type.Object({name:C.Type.String(),description:C.Type.String(),icon:C.Type.String(),onUse:C.Type.Optional(C.Type.Object({action:C.Type.String(),label:C.Type.String()})),tag:C.Type.Optional(C.Type.String()),category:C.Type.Optional(C.Type.String()),showIfEmpty:C.Type.Optional(C.Type.Boolean())}),Bx=C.Type.Object({id:C.Type.String(),title:C.Type.String()}),Fx=C.Type.Record(C.Type.String(),$7);C.Type.Object({categories:C.Type.Array(Bx),items:Fx});const Vx=C.Type.Object({categories:C.Type.Optional(C.Type.Array(Bx)),items:C.Type.Optional(Fx)}),zx={categories:[{id:"default",title:"Items"}],items:{}},x7=C.Type.Object({description:C.Type.String(),succeededDescription:C.Type.Optional(C.Type.String()),failedDescription:C.Type.Optional(C.Type.String()),hidden:C.Type.Optional(C.Type.Boolean())}),j7=C.Type.Object({title:C.Type.String(),description:C.Type.String(),succeededDescription:C.Type.Optional(C.Type.String()),failedDescription:C.Type.Optional(C.Type.String()),endings:C.Type.Optional(C.Type.Record(C.Type.String(),C.Type.Object({success:C.Type.Boolean(),description:C.Type.String()}))),objectives:C.Type.Record(C.Type.String(),x7),category:C.Type.Optional(C.Type.String())}),_7=C.Type.Object({id:C.Type.String(),title:C.Type.String()}),C7=C.Type.Record(C.Type.String(),j7),qx=C.Type.Object({quests:C7,categories:C.Type.Array(_7)}),Ux={quests:{},categories:[{id:"default",title:"Quests"}]},Hx=C.Type.Object({enabled:C.Type.Boolean(),background:C.Type.Optional(C.Type.String()),text:C.Type.Optional(C.Type.String()),cssClass:C.Type.Optional(C.Type.String()),position:C.Type.Object({left:C.Type.Number(),top:C.Type.Number(),width:C.Type.Optional(C.Type.Number()),height:C.Type.Optional(C.Type.Number())}),anchor:C.Type.Optional(C.Type.Object({x:C.Type.Number(),y:C.Type.Number()})),action:C.Type.Optional(C.Type.String()),actionType:C.Type.Optional(C.Type.String()),scriptClickable:C.Type.Optional(C.Type.Boolean()),tag:C.Type.Optional(C.Type.String())}),T7=C.Type.Record(C.Type.String(),Hx),Wx=C.Type.Object({buttons:T7,clickableDuringScriptsByDefault:C.Type.Optional(C.Type.Boolean())}),Kx={buttons:{},clickableDuringScriptsByDefault:!1},O7=C.Type.Intersect([Hx,C.Type.Object({id:C.Type.String()})]),E7=C.Type.Object({muted:C.Type.Optional(C.Type.Boolean()),loop:C.Type.Optional(C.Type.Boolean())}),A7=C.Type.Object({background:C.Type.String(),video:C.Type.Optional(E7),buttons:C.Type.Optional(C.Type.Array(C.Type.Union([C.Type.String(),O7])))}),Gx=C.Type.Record(C.Type.String(),A7);C.Type.Object({screens:Gx});const Jx=C.Type.Object({screens:C.Type.Optional(Gx)}),Qx={screens:{}},P7=C.Type.Object({name:C.Type.String(),description:C.Type.String(),startingLevel:C.Type.Number(),hidden:C.Type.Optional(C.Type.Boolean()),icon:C.Type.String()}),Yx=C.Type.Record(C.Type.String(),P7),Xx=C.Type.Object({xpPerLevel:C.Type.Number(),notifyLevelUp:C.Type.Boolean()});C.Type.Object({skills:Yx,skillOptions:Xx});const Zx=C.Type.Object({skills:C.Type.Optional(Yx),skillOptions:C.Type.Optional(Xx)}),ej={skills:{},skillOptions:{xpPerLevel:10,notifyLevelUp:!0}},M7=C.Type.Object({portraitCssClass:C.Type.Optional(C.Type.String()),color:C.Type.Optional(C.Type.String()),boxCss:C.Type.Optional(C.Type.Record(C.Type.String(),C.Type.Any())),nameCss:C.Type.Optional(C.Type.Record(C.Type.String(),C.Type.Any())),textCss:C.Type.Optional(C.Type.Record(C.Type.String(),C.Type.Any()))}),N7=C.Type.Object({video:C.Type.String(),autoplay:C.Type.Optional(C.Type.Boolean()),loop:C.Type.Optional(C.Type.Boolean()),muted:C.Type.Optional(C.Type.Boolean()),width:C.Type.Optional(C.Type.Number()),height:C.Type.Optional(C.Type.Number())}),I7=C.Type.Object({image:C.Type.String(),width:C.Type.Optional(C.Type.Number()),height:C.Type.Optional(C.Type.Number())}),R7=C.Type.Union([C.Type.String(),N7,I7]),D7=C.Type.Object({sprites:C.Type.Optional(C.Type.Record(C.Type.String(),R7)),name:C.Type.String(),style:C.Type.Optional(M7)}),tj=C.Type.Object({config:C.Type.Object({imagesPath:C.Type.String(),playerCharacter:C.Type.Optional(C.Type.String()),gameCharacter:C.Type.Optional(C.Type.String())}),characters:C.Type.Record(C.Type.String(),D7)}),nj={config:{imagesPath:"",playerCharacter:"player",gameCharacter:"game"},characters:{}},rj=C.Type.Object({cssClass:C.Type.Optional(C.Type.String()),textCssClass:C.Type.Optional(C.Type.String()),titleCssClass:C.Type.Optional(C.Type.String())}),ij=C.Type.Object({options:C.Type.Object({delay:C.Type.Optional(C.Type.Number()),width:C.Type.Number(),keywordsPrefix:C.Type.String(),screenEdgesMinimumMargin:C.Type.Optional(C.Type.Number()),styling:C.Type.Optional(rj)}),tooltips:C.Type.Array(C.Type.Object({keywords:C.Type.Array(C.Type.String()),title:C.Type.String(),description:C.Type.String(),styling:C.Type.Optional(rj)}))}),oj={options:{delay:0,width:350,keywordsPrefix:"@@"},tooltips:[]},L7=C.Type.Object({name:C.Type.String(),description:C.Type.String(),icon:C.Type.Optional(C.Type.String()),lockedIcon:C.Type.Optional(C.Type.String()),secret:C.Type.Optional(C.Type.Boolean()),category:C.Type.Optional(C.Type.String())}),sj=C.Type.Object({id:C.Type.String(),title:C.Type.String()}),aj=C.Type.Record(C.Type.String(),L7);C.Type.Object({defaultAchievementIcon:C.Type.String(),categories:C.Type.Array(sj),achievements:aj,notifyNewAchievements:C.Type.Boolean(),secretAchievements:C.Type.Optional(C.Type.Object({censorDescription:C.Type.Optional(C.Type.Boolean()),censorName:C.Type.Optional(C.Type.Boolean()),hideUntilObtained:C.Type.Optional(C.Type.Boolean())}))});const lj=C.Type.Object({categories:C.Type.Optional(C.Type.Array(sj)),achievements:C.Type.Optional(aj)}),cj={categories:[{id:"default",title:"Achievements"}],achievements:{},notifyNewAchievements:!0,defaultAchievementIcon:"img/achievements/trophy.png"},B7=C.Type.Object({diceRange:C.Type.Tuple([C.Type.Number(),C.Type.Number()]),diceCount:C.Type.Number(),difficultyText:C.Type.Array(C.Type.Tuple([C.Type.Number(),C.Type.String()])),extraPointsPerLevel:C.Type.Number(),extraDicePerLevel:C.Type.Optional(C.Type.Number()),successOnRollsBelowThreshold:C.Type.Boolean(),showDifficultyText:C.Type.Boolean(),showDifficultyNumber:C.Type.Boolean(),showDifficultyWithoutModifiers:C.Type.Boolean(),finalRollIsHighest:C.Type.Optional(C.Type.Boolean()),finalRollIsLowest:C.Type.Optional(C.Type.Boolean()),failOnRollsEqualToThreshold:C.Type.Optional(C.Type.Boolean())}),F7=C.Type.Object({skill:C.Type.String(),difficulty:C.Type.Number(),winsNeeded:C.Type.Optional(C.Type.Number()),hideAfterRoll:C.Type.Optional(C.Type.Boolean()),repeatable:C.Type.Optional(C.Type.Boolean())}),uj=C.Type.Object({options:B7,skillChecks:C.Type.Record(C.Type.String(),F7)}),fj={options:{diceRange:[1,6],extraPointsPerLevel:1,extraDicePerLevel:0,diceCount:2,successOnRollsBelowThreshold:!1,showDifficultyText:!0,showDifficultyNumber:!1,showDifficultyWithoutModifiers:!1,finalRollIsHighest:!1,finalRollIsLowest:!1,difficultyText:[[2,"Very Easy"],[4,"Easy"],[6,"Medium"],[8,"Hard"],[10,"Very Hard"],[11,"Extremely Hard"],[12,"Near Impossible"]]},skillChecks:{}},V7=C.Type.Object({cssClass:C.Type.Optional(C.Type.String()),textTemplate:C.Type.Optional(C.Type.String())}),dj=C.Type.Record(C.Type.String(),V7);C.Type.Object({choiceTextTemplate:C.Type.String(),choicePrompts:dj});const hj=C.Type.Object({choiceTextTemplate:C.Type.Optional(C.Type.String()),choicePrompts:C.Type.Optional(dj)}),pj={choicePrompts:{},choiceTextTemplate:'<span class="choice-index">%{$index}. </span> <span class="choice-text">%{$choice}</span>'},mj=C.Type.Object({delay:C.Type.Optional(C.Type.Number()),direction:C.Type.Optional(C.Type.String()),duration:C.Type.Optional(C.Type.Number()),easing:C.Type.Optional(C.Type.String()),endDelay:C.Type.Optional(C.Type.Number()),fill:C.Type.Optional(C.Type.String()),iterationStart:C.Type.Optional(C.Type.Number()),iterations:C.Type.Optional(C.Type.Number()),keyframes:C.Type.Optional(C.Type.Any())}),dy=C.Type.Array(C.Type.Any()),z7=C.Type.Object({keyframes:C.Type.Union([C.Type.String(),dy]),options:C.Type.Optional(mj)});C.Type.Object({keyframes:dy,options:C.Type.Optional(mj)});const gj=C.Type.Object({animations:C.Type.Record(C.Type.String(),z7),keyframes:C.Type.Record(C.Type.String(),dy)}),vj={animations:{},keyframes:{}},q7=C.Type.Object({name:C.Type.String(),type:C.Type.String(),optional:C.Type.Optional(C.Type.Boolean())}),U7=C.Type.Object({keyword:C.Type.String(),label:C.Type.String(),options:C.Type.Optional(C.Type.Array(q7))}),yj=C.Type.Object({macros:C.Type.Array(U7)}),bj={macros:[]},hy=C.Type.Object({assets:C.Type.Record(C.Type.String(),C.Type.String())}),wj=C.Type.Object({images:C.Type.Optional(hy),audio:C.Type.Optional(hy),video:C.Type.Optional(hy)}),Sj={images:{assets:{}},audio:{assets:{}},video:{assets:{}}},pu={common:fy,screens:Qx,buttons:Kx,skills:ej,skillChecks:fj,scripts:[],audio:kx,tooltips:oj,achievements:cj,items:zx,quests:Ux,characters:nj,choices:pj,animations:vj,macros:bj,preload:Sj};var H7=function(e){return W7(e)&&!K7(e)};function W7(t){return!!t&&typeof t=="object"}function K7(t){var e=Object.prototype.toString.call(t);return e==="[object RegExp]"||e==="[object Date]"||Q7(t)}var G7=typeof Symbol=="function"&&Symbol.for,J7=G7?Symbol.for("react.element"):60103;function Q7(t){return t.$$typeof===J7}function Y7(t){return Array.isArray(t)?[]:{}}function fd(t,e){return e.clone!==!1&&e.isMergeableObject(t)?mu(Y7(t),t,e):t}function X7(t,e,n){return t.concat(e).map(function(r){return fd(r,n)})}function Z7(t,e){if(!e.customMerge)return mu;var n=e.customMerge(t);return typeof n=="function"?n:mu}function eB(t){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(t).filter(function(e){return Object.propertyIsEnumerable.call(t,e)}):[]}function kj(t){return Object.keys(t).concat(eB(t))}function $j(t,e){try{return e in t}catch{return!1}}function tB(t,e){return $j(t,e)&&!(Object.hasOwnProperty.call(t,e)&&Object.propertyIsEnumerable.call(t,e))}function nB(t,e,n){var r={};return n.isMergeableObject(t)&&kj(t).forEach(function(i){r[i]=fd(t[i],n)}),kj(e).forEach(function(i){tB(t,i)||($j(t,i)&&n.isMergeableObject(e[i])?r[i]=Z7(i,n)(t[i],e[i],n):r[i]=fd(e[i],n))}),r}function mu(t,e,n){n=n||{},n.arrayMerge=n.arrayMerge||X7,n.isMergeableObject=n.isMergeableObject||H7,n.cloneUnlessOtherwiseSpecified=fd;var r=Array.isArray(e),i=Array.isArray(t),o=r===i;return o?r?n.arrayMerge(t,e,n):nB(t,e,n):fd(e,n)}mu.all=function(e,n){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce(function(r,i){return mu(r,i,n)},{})};var rB=mu,iB=rB;const rc=bp(iB),Ur=Lr("config",{state:()=>({config:pu,configModules:{}}),actions:{async setConfig(t){this.config=t},extendConfig(t){this.config=rc(this.config,t)},generateSaveData(){return{playerCharacter:this.playerCharacter,gameCharacter:this.gameCharacter}},addConfigModule(t,e){this.configModules[t]=e},findConfigModuleKey(t){const e=Object.keys(this.configModules).find(n=>this.configModules[n].id===t.id);if(e)return e},reloadConfigModule(t,e){this.configModules[t].code=e,this.config[t]=e},loadSaveData(t){this.config.characters.config.playerCharacter=t.playerCharacter,this.config.characters.config.gameCharacter=t.gameCharacter}},getters:{playerCharacter(){return this.config.characters.config.playerCharacter??"player"},gameCharacter(){return this.config.characters.config.gameCharacter??"game"}}});function xj(t){const e=Rr(),n=e.getSkillCheck(t.id);if(n&&n.happened&&(n.succeeded||!t.repeatable))return n;const r=JL(t);return jj(HL(r,t)),r?e.passSkillCheck(t.id,t.hideAfterRoll):e.failSkillCheck(t.id,t.hideAfterRoll),e.getSkillCheck(t.id)}function oB(t,e=[]){const n=t.options,r=t.staticOptions,i=!!n.condition;if(i)return r.success;if(!i){for(const[o,s]of r.elseifs.entries())if(e[o]===!0)return s.branch}if(!i&&r.failure)return r.failure}function py(t){return typeof t=="object"}function my(t){return typeof t=="string"&&t.search(/\$/)===0}function jj(t){const e={speaker:Ur().gameCharacter,text:t,interactive:!1};er().addDialog(e)}async function Np(t){er().addDialog(t)}function sB(t,e){if(e<t.length)return t[e]}/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */function _j(t){return typeof t>"u"||t===null}function aB(t){return typeof t=="object"&&t!==null}function lB(t){return Array.isArray(t)?t:_j(t)?[]:[t]}function cB(t,e){var n,r,i,o;if(e)for(o=Object.keys(e),n=0,r=o.length;n<r;n+=1)i=o[n],t[i]=e[i];return t}function uB(t,e){var n="",r;for(r=0;r<e;r+=1)n+=t;return n}function fB(t){return t===0&&Number.NEGATIVE_INFINITY===1/t}var dB=_j,hB=aB,pB=lB,mB=uB,gB=fB,vB=cB,Jr={isNothing:dB,isObject:hB,toArray:pB,repeat:mB,isNegativeZero:gB,extend:vB};function Cj(t,e){var n="",r=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(n+='in "'+t.mark.name+'" '),n+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!e&&t.mark.snippet&&(n+=`
38
+ (${t.id} - ${s}/${t.winsNeeded} - rolls: ${JSON.stringify(r.map(a=>a.modified))})`)}else o=bx(n,t.difficulty),Ao.log(`[SKILL CHECK ${i.name}]: ${o?"✅":"❌"}`,`(${t.id}) - ${n}/${t.difficulty}`);return nc(o?"onSkillCheckSuccess":"onSkillCheckFailure"),o}function bx(t,e){const{options:n}=Nd();let r=t>=e;return n.successOnRollsBelowThreshold&&(r=t<=e),n.failOnRollsEqualToThreshold&&t===e&&(r=!1),r}var C={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.Type=t.JsonType=t.JavaScriptTypeBuilder=t.JsonTypeBuilder=t.TypeBuilder=t.TypeBuilderError=t.TransformEncodeBuilder=t.TransformDecodeBuilder=t.TemplateLiteralDslParser=t.TemplateLiteralGenerator=t.TemplateLiteralGeneratorError=t.TemplateLiteralFinite=t.TemplateLiteralFiniteError=t.TemplateLiteralParser=t.TemplateLiteralParserError=t.TemplateLiteralResolver=t.TemplateLiteralPattern=t.TemplateLiteralPatternError=t.UnionResolver=t.KeyArrayResolver=t.KeyArrayResolverError=t.KeyResolver=t.ObjectMap=t.Intrinsic=t.IndexedAccessor=t.TypeClone=t.TypeExtends=t.TypeExtendsResult=t.TypeExtendsError=t.ExtendsUndefined=t.TypeGuard=t.TypeGuardUnknownTypeError=t.ValueGuard=t.FormatRegistry=t.TypeBoxError=t.TypeRegistry=t.PatternStringExact=t.PatternNumberExact=t.PatternBooleanExact=t.PatternString=t.PatternNumber=t.PatternBoolean=t.Kind=t.Hint=t.Optional=t.Readonly=t.Transform=void 0,t.Transform=Symbol.for("TypeBox.Transform"),t.Readonly=Symbol.for("TypeBox.Readonly"),t.Optional=Symbol.for("TypeBox.Optional"),t.Hint=Symbol.for("TypeBox.Hint"),t.Kind=Symbol.for("TypeBox.Kind"),t.PatternBoolean="(true|false)",t.PatternNumber="(0|[1-9][0-9]*)",t.PatternString="(.*)",t.PatternBooleanExact=`^${t.PatternBoolean}$`,t.PatternNumberExact=`^${t.PatternNumber}$`,t.PatternStringExact=`^${t.PatternString}$`;var e;(function(A){const k=new Map;function M(){return new Map(k)}A.Entries=M;function _(){return k.clear()}A.Clear=_;function w(ie){return k.delete(ie)}A.Delete=w;function x(ie){return k.has(ie)}A.Has=x;function T(ie,me){k.set(ie,me)}A.Set=T;function R(ie){return k.get(ie)}A.Get=R})(e||(t.TypeRegistry=e={}));class n extends Error{constructor(k){super(k)}}t.TypeBoxError=n;var r;(function(A){const k=new Map;function M(){return new Map(k)}A.Entries=M;function _(){return k.clear()}A.Clear=_;function w(ie){return k.delete(ie)}A.Delete=w;function x(ie){return k.has(ie)}A.Has=x;function T(ie,me){k.set(ie,me)}A.Set=T;function R(ie){return k.get(ie)}A.Get=R})(r||(t.FormatRegistry=r={}));var i;(function(A){function k(ae){return Array.isArray(ae)}A.IsArray=k;function M(ae){return typeof ae=="bigint"}A.IsBigInt=M;function _(ae){return typeof ae=="boolean"}A.IsBoolean=_;function w(ae){return ae instanceof globalThis.Date}A.IsDate=w;function x(ae){return ae===null}A.IsNull=x;function T(ae){return typeof ae=="number"}A.IsNumber=T;function R(ae){return typeof ae=="object"&&ae!==null}A.IsObject=R;function ie(ae){return typeof ae=="string"}A.IsString=ie;function me(ae){return ae instanceof globalThis.Uint8Array}A.IsUint8Array=me;function le(ae){return ae===void 0}A.IsUndefined=le})(i||(t.ValueGuard=i={}));class o extends n{}t.TypeGuardUnknownTypeError=o;var s;(function(A){function k(J){try{return new RegExp(J),!0}catch{return!1}}function M(J){if(!i.IsString(J))return!1;for(let K=0;K<J.length;K++){const ne=J.charCodeAt(K);if(ne>=7&&ne<=13||ne===27||ne===127)return!1}return!0}function _(J){return T(J)||Qe(J)}function w(J){return i.IsUndefined(J)||i.IsBigInt(J)}function x(J){return i.IsUndefined(J)||i.IsNumber(J)}function T(J){return i.IsUndefined(J)||i.IsBoolean(J)}function R(J){return i.IsUndefined(J)||i.IsString(J)}function ie(J){return i.IsUndefined(J)||i.IsString(J)&&M(J)&&k(J)}function me(J){return i.IsUndefined(J)||i.IsString(J)&&M(J)}function le(J){return i.IsUndefined(J)||Qe(J)}function ae(J){return Je(J,"Any")&&R(J.$id)}A.TAny=ae;function Ue(J){return Je(J,"Array")&&J.type==="array"&&R(J.$id)&&Qe(J.items)&&x(J.minItems)&&x(J.maxItems)&&T(J.uniqueItems)&&le(J.contains)&&x(J.minContains)&&x(J.maxContains)}A.TArray=Ue;function he(J){return Je(J,"AsyncIterator")&&J.type==="AsyncIterator"&&R(J.$id)&&Qe(J.items)}A.TAsyncIterator=he;function _e(J){return Je(J,"BigInt")&&J.type==="bigint"&&R(J.$id)&&w(J.exclusiveMaximum)&&w(J.exclusiveMinimum)&&w(J.maximum)&&w(J.minimum)&&w(J.multipleOf)}A.TBigInt=_e;function Ze(J){return Je(J,"Boolean")&&J.type==="boolean"&&R(J.$id)}A.TBoolean=Ze;function ce(J){return Je(J,"Constructor")&&J.type==="Constructor"&&R(J.$id)&&i.IsArray(J.parameters)&&J.parameters.every(K=>Qe(K))&&Qe(J.returns)}A.TConstructor=ce;function He(J){return Je(J,"Date")&&J.type==="Date"&&R(J.$id)&&x(J.exclusiveMaximumTimestamp)&&x(J.exclusiveMinimumTimestamp)&&x(J.maximumTimestamp)&&x(J.minimumTimestamp)&&x(J.multipleOfTimestamp)}A.TDate=He;function ot(J){return Je(J,"Function")&&J.type==="Function"&&R(J.$id)&&i.IsArray(J.parameters)&&J.parameters.every(K=>Qe(K))&&Qe(J.returns)}A.TFunction=ot;function Ve(J){return Je(J,"Integer")&&J.type==="integer"&&R(J.$id)&&x(J.exclusiveMaximum)&&x(J.exclusiveMinimum)&&x(J.maximum)&&x(J.minimum)&&x(J.multipleOf)}A.TInteger=Ve;function Nt(J){return Je(J,"Intersect")&&!(i.IsString(J.type)&&J.type!=="object")&&i.IsArray(J.allOf)&&J.allOf.every(K=>Qe(K)&&!an(K))&&R(J.type)&&(T(J.unevaluatedProperties)||le(J.unevaluatedProperties))&&R(J.$id)}A.TIntersect=Nt;function tt(J){return Je(J,"Iterator")&&J.type==="Iterator"&&R(J.$id)&&Qe(J.items)}A.TIterator=tt;function Je(J,K){return je(J)&&J[t.Kind]===K}A.TKindOf=Je;function je(J){return i.IsObject(J)&&t.Kind in J&&i.IsString(J[t.Kind])}A.TKind=je;function ge(J){return oe(J)&&i.IsString(J.const)}A.TLiteralString=ge;function Ne(J){return oe(J)&&i.IsNumber(J.const)}A.TLiteralNumber=Ne;function z(J){return oe(J)&&i.IsBoolean(J.const)}A.TLiteralBoolean=z;function oe(J){return Je(J,"Literal")&&R(J.$id)&&(i.IsBoolean(J.const)||i.IsNumber(J.const)||i.IsString(J.const))}A.TLiteral=oe;function de(J){return Je(J,"Never")&&i.IsObject(J.not)&&Object.getOwnPropertyNames(J.not).length===0}A.TNever=de;function be(J){return Je(J,"Not")&&Qe(J.not)}A.TNot=be;function Ee(J){return Je(J,"Null")&&J.type==="null"&&R(J.$id)}A.TNull=Ee;function Be(J){return Je(J,"Number")&&J.type==="number"&&R(J.$id)&&x(J.exclusiveMaximum)&&x(J.exclusiveMinimum)&&x(J.maximum)&&x(J.minimum)&&x(J.multipleOf)}A.TNumber=Be;function pt(J){return Je(J,"Object")&&J.type==="object"&&R(J.$id)&&i.IsObject(J.properties)&&_(J.additionalProperties)&&x(J.minProperties)&&x(J.maxProperties)&&Object.entries(J.properties).every(([K,ne])=>M(K)&&Qe(ne))}A.TObject=pt;function ht(J){return Je(J,"Promise")&&J.type==="Promise"&&R(J.$id)&&Qe(J.item)}A.TPromise=ht;function sn(J){return Je(J,"Record")&&J.type==="object"&&R(J.$id)&&_(J.additionalProperties)&&i.IsObject(J.patternProperties)&&(K=>{const ne=Object.getOwnPropertyNames(K.patternProperties);return ne.length===1&&k(ne[0])&&i.IsObject(K.patternProperties)&&Qe(K.patternProperties[ne[0]])})(J)}A.TRecord=sn;function qn(J){return i.IsObject(J)&&t.Hint in J&&J[t.Hint]==="Recursive"}A.TRecursive=qn;function Ft(J){return Je(J,"Ref")&&R(J.$id)&&i.IsString(J.$ref)}A.TRef=Ft;function at(J){return Je(J,"String")&&J.type==="string"&&R(J.$id)&&x(J.minLength)&&x(J.maxLength)&&ie(J.pattern)&&me(J.format)}A.TString=at;function Vn(J){return Je(J,"Symbol")&&J.type==="symbol"&&R(J.$id)}A.TSymbol=Vn;function Jn(J){return Je(J,"TemplateLiteral")&&J.type==="string"&&i.IsString(J.pattern)&&J.pattern[0]==="^"&&J.pattern[J.pattern.length-1]==="$"}A.TTemplateLiteral=Jn;function pn(J){return Je(J,"This")&&R(J.$id)&&i.IsString(J.$ref)}A.TThis=pn;function an(J){return i.IsObject(J)&&t.Transform in J}A.TTransform=an;function tn(J){return Je(J,"Tuple")&&J.type==="array"&&R(J.$id)&&i.IsNumber(J.minItems)&&i.IsNumber(J.maxItems)&&J.minItems===J.maxItems&&(i.IsUndefined(J.items)&&i.IsUndefined(J.additionalItems)&&J.minItems===0||i.IsArray(J.items)&&J.items.every(K=>Qe(K)))}A.TTuple=tn;function or(J){return Je(J,"Undefined")&&J.type==="undefined"&&R(J.$id)}A.TUndefined=or;function Sn(J){return Qn(J)&&J.anyOf.every(K=>ge(K)||Ne(K))}A.TUnionLiteral=Sn;function Qn(J){return Je(J,"Union")&&R(J.$id)&&i.IsObject(J)&&i.IsArray(J.anyOf)&&J.anyOf.every(K=>Qe(K))}A.TUnion=Qn;function $e(J){return Je(J,"Uint8Array")&&J.type==="Uint8Array"&&R(J.$id)&&x(J.minByteLength)&&x(J.maxByteLength)}A.TUint8Array=$e;function Xe(J){return Je(J,"Unknown")&&R(J.$id)}A.TUnknown=Xe;function xt(J){return Je(J,"Unsafe")}A.TUnsafe=xt;function en(J){return Je(J,"Void")&&J.type==="void"&&R(J.$id)}A.TVoid=en;function qt(J){return i.IsObject(J)&&J[t.Readonly]==="Readonly"}A.TReadonly=qt;function xe(J){return i.IsObject(J)&&J[t.Optional]==="Optional"}A.TOptional=xe;function Qe(J){return i.IsObject(J)&&(ae(J)||Ue(J)||Ze(J)||_e(J)||he(J)||ce(J)||He(J)||ot(J)||Ve(J)||Nt(J)||tt(J)||oe(J)||de(J)||be(J)||Ee(J)||Be(J)||pt(J)||ht(J)||sn(J)||Ft(J)||at(J)||Vn(J)||Jn(J)||pn(J)||tn(J)||or(J)||Qn(J)||$e(J)||Xe(J)||xt(J)||en(J)||je(J)&&e.Has(J[t.Kind]))}A.TSchema=Qe})(s||(t.TypeGuard=s={}));var a;(function(A){function k(M){return M[t.Kind]==="Intersect"?M.allOf.every(_=>k(_)):M[t.Kind]==="Union"?M.anyOf.some(_=>k(_)):M[t.Kind]==="Undefined"?!0:M[t.Kind]==="Not"?!k(M.not):!1}A.Check=k})(a||(t.ExtendsUndefined=a={}));class l extends n{}t.TypeExtendsError=l;var c;(function(A){A[A.Union=0]="Union",A[A.True=1]="True",A[A.False=2]="False"})(c||(t.TypeExtendsResult=c={}));var f;(function(A){function k(Y){return Y===c.False?Y:c.True}function M(Y){throw new l(Y)}function _(Y){return s.TNever(Y)||s.TIntersect(Y)||s.TUnion(Y)||s.TUnknown(Y)||s.TAny(Y)}function w(Y,Q){return s.TNever(Q)?Je():s.TIntersect(Q)?ot(Y,Q):s.TUnion(Q)?Te(Y,Q):s.TUnknown(Q)?It():s.TAny(Q)?x():M("StructuralRight")}function x(Y,Q){return c.True}function T(Y,Q){return s.TIntersect(Q)?ot(Y,Q):s.TUnion(Q)&&Q.anyOf.some(Rt=>s.TAny(Rt)||s.TUnknown(Rt))?c.True:s.TUnion(Q)?c.Union:s.TUnknown(Q)||s.TAny(Q)?c.True:c.Union}function R(Y,Q){return s.TUnknown(Y)?c.False:s.TAny(Y)?c.Union:s.TNever(Y)?c.True:c.False}function ie(Y,Q){return s.TObject(Q)&&Jn(Q)?c.True:_(Q)?w(Y,Q):s.TArray(Q)?k(gt(Y.items,Q.items)):c.False}function me(Y,Q){return _(Q)?w(Y,Q):s.TAsyncIterator(Q)?k(gt(Y.items,Q.items)):c.False}function le(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TBigInt(Q)?c.True:c.False}function ae(Y,Q){return s.TLiteral(Y)&&i.IsBoolean(Y.const)||s.TBoolean(Y)?c.True:c.False}function Ue(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TBoolean(Q)?c.True:c.False}function he(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TConstructor(Q)?Y.parameters.length>Q.parameters.length?c.False:Y.parameters.every((Rt,vn)=>k(gt(Q.parameters[vn],Rt))===c.True)?k(gt(Y.returns,Q.returns)):c.False:c.False}function _e(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TDate(Q)?c.True:c.False}function Ze(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TFunction(Q)?Y.parameters.length>Q.parameters.length?c.False:Y.parameters.every((Rt,vn)=>k(gt(Q.parameters[vn],Rt))===c.True)?k(gt(Y.returns,Q.returns)):c.False:c.False}function ce(Y,Q){return s.TLiteral(Y)&&i.IsNumber(Y.const)||s.TNumber(Y)||s.TInteger(Y)?c.True:c.False}function He(Y,Q){return s.TInteger(Q)||s.TNumber(Q)?c.True:_(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):c.False}function ot(Y,Q){return Q.allOf.every(Rt=>gt(Y,Rt)===c.True)?c.True:c.False}function Ve(Y,Q){return Y.allOf.some(Rt=>gt(Rt,Q)===c.True)?c.True:c.False}function Nt(Y,Q){return _(Q)?w(Y,Q):s.TIterator(Q)?k(gt(Y.items,Q.items)):c.False}function tt(Y,Q){return s.TLiteral(Q)&&Q.const===Y.const?c.True:_(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TString(Q)?en(Y):s.TNumber(Q)?oe(Y):s.TInteger(Q)?ce(Y):s.TBoolean(Q)?ae(Y):c.False}function Je(Y,Q){return c.False}function je(Y,Q){return c.True}function ge(Y){let[Q,Rt]=[Y,0];for(;s.TNot(Q);)Q=Q.not,Rt+=1;return Rt%2===0?Q:t.Type.Unknown()}function Ne(Y,Q){return s.TNot(Y)?gt(ge(Y),Q):s.TNot(Q)?gt(Y,ge(Q)):M("Invalid fallthrough for Not")}function z(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TNull(Q)?c.True:c.False}function oe(Y,Q){return s.TLiteralNumber(Y)||s.TNumber(Y)||s.TInteger(Y)?c.True:c.False}function de(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TInteger(Q)||s.TNumber(Q)?c.True:c.False}function be(Y,Q){return Object.getOwnPropertyNames(Y.properties).length===Q}function Ee(Y){return Jn(Y)}function Be(Y){return be(Y,0)||be(Y,1)&&"description"in Y.properties&&s.TUnion(Y.properties.description)&&Y.properties.description.anyOf.length===2&&(s.TString(Y.properties.description.anyOf[0])&&s.TUndefined(Y.properties.description.anyOf[1])||s.TString(Y.properties.description.anyOf[1])&&s.TUndefined(Y.properties.description.anyOf[0]))}function pt(Y){return be(Y,0)}function ht(Y){return be(Y,0)}function sn(Y){return be(Y,0)}function qn(Y){return be(Y,0)}function Ft(Y){return Jn(Y)}function at(Y){const Q=t.Type.Number();return be(Y,0)||be(Y,1)&&"length"in Y.properties&&k(gt(Y.properties.length,Q))===c.True}function Vn(Y){return be(Y,0)}function Jn(Y){const Q=t.Type.Number();return be(Y,0)||be(Y,1)&&"length"in Y.properties&&k(gt(Y.properties.length,Q))===c.True}function pn(Y){const Q=t.Type.Function([t.Type.Any()],t.Type.Any());return be(Y,0)||be(Y,1)&&"then"in Y.properties&&k(gt(Y.properties.then,Q))===c.True}function an(Y,Q){return gt(Y,Q)===c.False||s.TOptional(Y)&&!s.TOptional(Q)?c.False:c.True}function tn(Y,Q){return s.TUnknown(Y)?c.False:s.TAny(Y)?c.Union:s.TNever(Y)||s.TLiteralString(Y)&&Ee(Q)||s.TLiteralNumber(Y)&&pt(Q)||s.TLiteralBoolean(Y)&&ht(Q)||s.TSymbol(Y)&&Be(Q)||s.TBigInt(Y)&&sn(Q)||s.TString(Y)&&Ee(Q)||s.TSymbol(Y)&&Be(Q)||s.TNumber(Y)&&pt(Q)||s.TInteger(Y)&&pt(Q)||s.TBoolean(Y)&&ht(Q)||s.TUint8Array(Y)&&Ft(Q)||s.TDate(Y)&&qn(Q)||s.TConstructor(Y)&&Vn(Q)||s.TFunction(Y)&&at(Q)?c.True:s.TRecord(Y)&&s.TString(Qn(Y))?Q[t.Hint]==="Record"?c.True:c.False:s.TRecord(Y)&&s.TNumber(Qn(Y))?be(Q,0)?c.True:c.False:c.False}function or(Y,Q){return _(Q)?w(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TObject(Q)?(()=>{for(const Rt of Object.getOwnPropertyNames(Q.properties)){if(!(Rt in Y.properties)&&!s.TOptional(Q.properties[Rt]))return c.False;if(s.TOptional(Q.properties[Rt]))return c.True;if(an(Y.properties[Rt],Q.properties[Rt])===c.False)return c.False}return c.True})():c.False}function Sn(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)&&pn(Q)?c.True:s.TPromise(Q)?k(gt(Y.item,Q.item)):c.False}function Qn(Y){return t.PatternNumberExact in Y.patternProperties?t.Type.Number():t.PatternStringExact in Y.patternProperties?t.Type.String():M("Unknown record key pattern")}function $e(Y){return t.PatternNumberExact in Y.patternProperties?Y.patternProperties[t.PatternNumberExact]:t.PatternStringExact in Y.patternProperties?Y.patternProperties[t.PatternStringExact]:M("Unable to get record value schema")}function Xe(Y,Q){const[Rt,vn]=[Qn(Q),$e(Q)];return s.TLiteralString(Y)&&s.TNumber(Rt)&&k(gt(Y,vn))===c.True?c.True:s.TUint8Array(Y)&&s.TNumber(Rt)||s.TString(Y)&&s.TNumber(Rt)||s.TArray(Y)&&s.TNumber(Rt)?gt(Y,vn):s.TObject(Y)?(()=>{for(const Ln of Object.getOwnPropertyNames(Y.properties))if(an(vn,Y.properties[Ln])===c.False)return c.False;return c.True})():c.False}function xt(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?gt($e(Y),$e(Q)):c.False}function en(Y,Q){return s.TLiteral(Y)&&i.IsString(Y.const)||s.TString(Y)?c.True:c.False}function qt(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TString(Q)?c.True:c.False}function xe(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TSymbol(Q)?c.True:c.False}function Qe(Y,Q){return s.TTemplateLiteral(Y)?gt($.Resolve(Y),Q):s.TTemplateLiteral(Q)?gt(Y,$.Resolve(Q)):M("Invalid fallthrough for TemplateLiteral")}function J(Y,Q){return s.TArray(Q)&&Y.items!==void 0&&Y.items.every(Rt=>gt(Rt,Q.items)===c.True)}function K(Y,Q){return s.TNever(Y)?c.True:s.TUnknown(Y)?c.False:s.TAny(Y)?c.Union:c.False}function ne(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)&&Jn(Q)||s.TArray(Q)&&J(Y,Q)?c.True:s.TTuple(Q)?i.IsUndefined(Y.items)&&!i.IsUndefined(Q.items)||!i.IsUndefined(Y.items)&&i.IsUndefined(Q.items)?c.False:i.IsUndefined(Y.items)&&!i.IsUndefined(Q.items)||Y.items.every((Rt,vn)=>gt(Rt,Q.items[vn])===c.True)?c.True:c.False:c.False}function pe(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TUint8Array(Q)?c.True:c.False}function Se(Y,Q){return _(Q)?w(Y,Q):s.TObject(Q)?tn(Y,Q):s.TRecord(Q)?Xe(Y,Q):s.TVoid(Q)?Dn(Y):s.TUndefined(Q)?c.True:c.False}function Te(Y,Q){return Q.anyOf.some(Rt=>gt(Y,Rt)===c.True)?c.True:c.False}function St(Y,Q){return Y.anyOf.every(Rt=>gt(Rt,Q)===c.True)?c.True:c.False}function It(Y,Q){return c.True}function nn(Y,Q){return s.TNever(Q)?Je():s.TIntersect(Q)?ot(Y,Q):s.TUnion(Q)?Te(Y,Q):s.TAny(Q)?x():s.TString(Q)?en(Y):s.TNumber(Q)?oe(Y):s.TInteger(Q)?ce(Y):s.TBoolean(Q)?ae(Y):s.TArray(Q)?R(Y):s.TTuple(Q)?K(Y):s.TObject(Q)?tn(Y,Q):s.TUnknown(Q)?c.True:c.False}function Dn(Y,Q){return s.TUndefined(Y)||s.TUndefined(Y)?c.True:c.False}function Un(Y,Q){return s.TIntersect(Q)?ot(Y,Q):s.TUnion(Q)?Te(Y,Q):s.TUnknown(Q)?It():s.TAny(Q)?x():s.TObject(Q)?tn(Y,Q):s.TVoid(Q)?c.True:c.False}function gt(Y,Q){return s.TTemplateLiteral(Y)||s.TTemplateLiteral(Q)?Qe(Y,Q):s.TNot(Y)||s.TNot(Q)?Ne(Y,Q):s.TAny(Y)?T(Y,Q):s.TArray(Y)?ie(Y,Q):s.TBigInt(Y)?le(Y,Q):s.TBoolean(Y)?Ue(Y,Q):s.TAsyncIterator(Y)?me(Y,Q):s.TConstructor(Y)?he(Y,Q):s.TDate(Y)?_e(Y,Q):s.TFunction(Y)?Ze(Y,Q):s.TInteger(Y)?He(Y,Q):s.TIntersect(Y)?Ve(Y,Q):s.TIterator(Y)?Nt(Y,Q):s.TLiteral(Y)?tt(Y,Q):s.TNever(Y)?je():s.TNull(Y)?z(Y,Q):s.TNumber(Y)?de(Y,Q):s.TObject(Y)?or(Y,Q):s.TRecord(Y)?xt(Y,Q):s.TString(Y)?qt(Y,Q):s.TSymbol(Y)?xe(Y,Q):s.TTuple(Y)?ne(Y,Q):s.TPromise(Y)?Sn(Y,Q):s.TUint8Array(Y)?pe(Y,Q):s.TUndefined(Y)?Se(Y,Q):s.TUnion(Y)?St(Y,Q):s.TUnknown(Y)?nn(Y,Q):s.TVoid(Y)?Un(Y,Q):M(`Unknown left type operand '${Y[t.Kind]}'`)}function Cn(Y,Q){return gt(Y,Q)}A.Extends=Cn})(f||(t.TypeExtends=f={}));var u;(function(A){function k(ie){return ie.map(me=>x(me))}function M(ie){return new Date(ie.getTime())}function _(ie){return new Uint8Array(ie)}function w(ie){const me=Object.getOwnPropertyNames(ie).reduce((ae,Ue)=>({...ae,[Ue]:x(ie[Ue])}),{}),le=Object.getOwnPropertySymbols(ie).reduce((ae,Ue)=>({...ae,[Ue]:x(ie[Ue])}),{});return{...me,...le}}function x(ie){return i.IsArray(ie)?k(ie):i.IsDate(ie)?M(ie):i.IsUint8Array(ie)?_(ie):i.IsObject(ie)?w(ie):ie}function T(ie){return ie.map(me=>R(me))}A.Rest=T;function R(ie,me={}){return{...x(ie),...me}}A.Type=R})(u||(t.TypeClone=u={}));var d;(function(A){function k(he){return he.map(_e=>{const{[t.Optional]:Ze,...ce}=u.Type(_e);return ce})}function M(he){return he.every(_e=>s.TOptional(_e))}function _(he){return he.some(_e=>s.TOptional(_e))}function w(he){return M(he.allOf)?t.Type.Optional(t.Type.Intersect(k(he.allOf))):he}function x(he){return _(he.anyOf)?t.Type.Optional(t.Type.Union(k(he.anyOf))):he}function T(he){return he[t.Kind]==="Intersect"?w(he):he[t.Kind]==="Union"?x(he):he}function R(he,_e){const Ze=he.allOf.reduce((ce,He)=>{const ot=ae(He,_e);return ot[t.Kind]==="Never"?ce:[...ce,ot]},[]);return T(t.Type.Intersect(Ze))}function ie(he,_e){const Ze=he.anyOf.map(ce=>ae(ce,_e));return T(t.Type.Union(Ze))}function me(he,_e){const Ze=he.properties[_e];return i.IsUndefined(Ze)?t.Type.Never():t.Type.Union([Ze])}function le(he,_e){const Ze=he.items;if(i.IsUndefined(Ze))return t.Type.Never();const ce=Ze[_e];return i.IsUndefined(ce)?t.Type.Never():ce}function ae(he,_e){return he[t.Kind]==="Intersect"?R(he,_e):he[t.Kind]==="Union"?ie(he,_e):he[t.Kind]==="Object"?me(he,_e):he[t.Kind]==="Tuple"?le(he,_e):t.Type.Never()}function Ue(he,_e,Ze={}){const ce=_e.map(He=>ae(he,He.toString()));return T(t.Type.Union(ce,Ze))}A.Resolve=Ue})(d||(t.IndexedAccessor=d={}));var h;(function(A){function k(le){const[ae,Ue]=[le.slice(0,1),le.slice(1)];return`${ae.toLowerCase()}${Ue}`}function M(le){const[ae,Ue]=[le.slice(0,1),le.slice(1)];return`${ae.toUpperCase()}${Ue}`}function _(le){return le.toUpperCase()}function w(le){return le.toLowerCase()}function x(le,ae){const Ue=E.ParseExact(le.pattern);if(!L.Check(Ue))return{...le,pattern:T(le.pattern,ae)};const Ze=[...F.Generate(Ue)].map(ot=>t.Type.Literal(ot)),ce=R(Ze,ae),He=t.Type.Union(ce);return t.Type.TemplateLiteral([He])}function T(le,ae){return typeof le=="string"?ae==="Uncapitalize"?k(le):ae==="Capitalize"?M(le):ae==="Uppercase"?_(le):ae==="Lowercase"?w(le):le:le.toString()}function R(le,ae){if(le.length===0)return[];const[Ue,...he]=le;return[me(Ue,ae),...R(he,ae)]}function ie(le,ae){return s.TTemplateLiteral(le)?x(le,ae):s.TUnion(le)?t.Type.Union(R(le.anyOf,ae)):s.TLiteral(le)?t.Type.Literal(T(le.const,ae)):le}function me(le,ae){return ie(le,ae)}A.Map=me})(h||(t.Intrinsic=h={}));var p;(function(A){function k(T,R){return t.Type.Intersect(T.allOf.map(ie=>w(ie,R)),{...T})}function M(T,R){return t.Type.Union(T.anyOf.map(ie=>w(ie,R)),{...T})}function _(T,R){return R(T)}function w(T,R){return T[t.Kind]==="Intersect"?k(T,R):T[t.Kind]==="Union"?M(T,R):T[t.Kind]==="Object"?_(T,R):T}function x(T,R,ie){return{...w(u.Type(T),R),...ie}}A.Map=x})(p||(t.ObjectMap=p={}));var m;(function(A){function k(me){return me[0]==="^"&&me[me.length-1]==="$"?me.slice(1,me.length-1):me}function M(me,le){return me.allOf.reduce((ae,Ue)=>[...ae,...T(Ue,le)],[])}function _(me,le){const ae=me.anyOf.map(Ue=>T(Ue,le));return[...ae.reduce((Ue,he)=>he.map(_e=>ae.every(Ze=>Ze.includes(_e))?Ue.add(_e):Ue)[0],new Set)]}function w(me,le){return Object.getOwnPropertyNames(me.properties)}function x(me,le){return le.includePatterns?Object.getOwnPropertyNames(me.patternProperties):[]}function T(me,le){return s.TIntersect(me)?M(me,le):s.TUnion(me)?_(me,le):s.TObject(me)?w(me):s.TRecord(me)?x(me,le):[]}function R(me,le){return[...new Set(T(me,le))]}A.ResolveKeys=R;function ie(me){return`^(${R(me,{includePatterns:!0}).map(Ue=>`(${k(Ue)})`).join("|")})$`}A.ResolvePattern=ie})(m||(t.KeyResolver=m={}));class y extends n{}t.KeyArrayResolverError=y;var g;(function(A){function k(M){return Array.isArray(M)?M:s.TUnionLiteral(M)?M.anyOf.map(_=>_.const.toString()):s.TLiteral(M)?[M.const]:s.TTemplateLiteral(M)?(()=>{const _=E.ParseExact(M.pattern);if(!L.Check(_))throw new y("Cannot resolve keys from infinite template expression");return[...F.Generate(_)]})():[]}A.Resolve=k})(g||(t.KeyArrayResolver=g={}));var b;(function(A){function*k(_){for(const w of _.anyOf)w[t.Kind]==="Union"?yield*k(w):yield w}function M(_){return t.Type.Union([...k(_)],{..._})}A.Resolve=M})(b||(t.UnionResolver=b={}));class S extends n{}t.TemplateLiteralPatternError=S;var j;(function(A){function k(x){throw new S(x)}function M(x){return x.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function _(x,T){return s.TTemplateLiteral(x)?x.pattern.slice(1,x.pattern.length-1):s.TUnion(x)?`(${x.anyOf.map(R=>_(R,T)).join("|")})`:s.TNumber(x)?`${T}${t.PatternNumber}`:s.TInteger(x)?`${T}${t.PatternNumber}`:s.TBigInt(x)?`${T}${t.PatternNumber}`:s.TString(x)?`${T}${t.PatternString}`:s.TLiteral(x)?`${T}${M(x.const.toString())}`:s.TBoolean(x)?`${T}${t.PatternBoolean}`:k(`Unexpected Kind '${x[t.Kind]}'`)}function w(x){return`^${x.map(T=>_(T,"")).join("")}$`}A.Create=w})(j||(t.TemplateLiteralPattern=j={}));var $;(function(A){function k(M){const _=E.ParseExact(M.pattern);if(!L.Check(_))return t.Type.String();const w=[...F.Generate(_)].map(x=>t.Type.Literal(x));return t.Type.Union(w)}A.Resolve=k})($||(t.TemplateLiteralResolver=$={}));class O extends n{}t.TemplateLiteralParserError=O;var E;(function(A){function k(he,_e,Ze){return he[_e]===Ze&&he.charCodeAt(_e-1)!==92}function M(he,_e){return k(he,_e,"(")}function _(he,_e){return k(he,_e,")")}function w(he,_e){return k(he,_e,"|")}function x(he){if(!(M(he,0)&&_(he,he.length-1)))return!1;let _e=0;for(let Ze=0;Ze<he.length;Ze++)if(M(he,Ze)&&(_e+=1),_(he,Ze)&&(_e-=1),_e===0&&Ze!==he.length-1)return!1;return!0}function T(he){return he.slice(1,he.length-1)}function R(he){let _e=0;for(let Ze=0;Ze<he.length;Ze++)if(M(he,Ze)&&(_e+=1),_(he,Ze)&&(_e-=1),w(he,Ze)&&_e===0)return!0;return!1}function ie(he){for(let _e=0;_e<he.length;_e++)if(M(he,_e))return!0;return!1}function me(he){let[_e,Ze]=[0,0];const ce=[];for(let ot=0;ot<he.length;ot++)if(M(he,ot)&&(_e+=1),_(he,ot)&&(_e-=1),w(he,ot)&&_e===0){const Ve=he.slice(Ze,ot);Ve.length>0&&ce.push(ae(Ve)),Ze=ot+1}const He=he.slice(Ze);return He.length>0&&ce.push(ae(He)),ce.length===0?{type:"const",const:""}:ce.length===1?ce[0]:{type:"or",expr:ce}}function le(he){function _e(He,ot){if(!M(He,ot))throw new O("TemplateLiteralParser: Index must point to open parens");let Ve=0;for(let Nt=ot;Nt<He.length;Nt++)if(M(He,Nt)&&(Ve+=1),_(He,Nt)&&(Ve-=1),Ve===0)return[ot,Nt];throw new O("TemplateLiteralParser: Unclosed group parens in expression")}function Ze(He,ot){for(let Ve=ot;Ve<He.length;Ve++)if(M(He,Ve))return[ot,Ve];return[ot,He.length]}const ce=[];for(let He=0;He<he.length;He++)if(M(he,He)){const[ot,Ve]=_e(he,He),Nt=he.slice(ot,Ve+1);ce.push(ae(Nt)),He=Ve}else{const[ot,Ve]=Ze(he,He),Nt=he.slice(ot,Ve);Nt.length>0&&ce.push(ae(Nt)),He=Ve-1}return ce.length===0?{type:"const",const:""}:ce.length===1?ce[0]:{type:"and",expr:ce}}function ae(he){return x(he)?ae(T(he)):R(he)?me(he):ie(he)?le(he):{type:"const",const:he}}A.Parse=ae;function Ue(he){return ae(he.slice(1,he.length-1))}A.ParseExact=Ue})(E||(t.TemplateLiteralParser=E={}));class V extends n{}t.TemplateLiteralFiniteError=V;var L;(function(A){function k(T){throw new V(T)}function M(T){return T.type==="or"&&T.expr.length===2&&T.expr[0].type==="const"&&T.expr[0].const==="0"&&T.expr[1].type==="const"&&T.expr[1].const==="[1-9][0-9]*"}function _(T){return T.type==="or"&&T.expr.length===2&&T.expr[0].type==="const"&&T.expr[0].const==="true"&&T.expr[1].type==="const"&&T.expr[1].const==="false"}function w(T){return T.type==="const"&&T.const===".*"}function x(T){return _(T)?!0:M(T)||w(T)?!1:T.type==="and"?T.expr.every(R=>x(R)):T.type==="or"?T.expr.every(R=>x(R)):T.type==="const"?!0:k("Unknown expression type")}A.Check=x})(L||(t.TemplateLiteralFinite=L={}));class D extends n{}t.TemplateLiteralGeneratorError=D;var F;(function(A){function*k(T){if(T.length===1)return yield*T[0];for(const R of T[0])for(const ie of k(T.slice(1)))yield`${R}${ie}`}function*M(T){return yield*k(T.expr.map(R=>[...x(R)]))}function*_(T){for(const R of T.expr)yield*x(R)}function*w(T){return yield T.const}function*x(T){return T.type==="and"?yield*M(T):T.type==="or"?yield*_(T):T.type==="const"?yield*w(T):(()=>{throw new D("Unknown expression")})()}A.Generate=x})(F||(t.TemplateLiteralGenerator=F={}));var I;(function(A){function*k(x){const T=x.trim().replace(/"|'/g,"");return T==="boolean"?yield t.Type.Boolean():T==="number"?yield t.Type.Number():T==="bigint"?yield t.Type.BigInt():T==="string"?yield t.Type.String():yield(()=>{const R=T.split("|").map(ie=>t.Type.Literal(ie.trim()));return R.length===0?t.Type.Never():R.length===1?R[0]:t.Type.Union(R)})()}function*M(x){if(x[1]!=="{"){const T=t.Type.Literal("$"),R=_(x.slice(1));return yield*[T,...R]}for(let T=2;T<x.length;T++)if(x[T]==="}"){const R=k(x.slice(2,T)),ie=_(x.slice(T+1));return yield*[...R,...ie]}yield t.Type.Literal(x)}function*_(x){for(let T=0;T<x.length;T++)if(x[T]==="$"){const R=t.Type.Literal(x.slice(0,T)),ie=M(x.slice(T));return yield*[R,...ie]}yield t.Type.Literal(x)}function w(x){return[..._(x)]}A.Parse=w})(I||(t.TemplateLiteralDslParser=I={}));class B{constructor(k){this.schema=k}Decode(k){return new q(this.schema,k)}}t.TransformDecodeBuilder=B;class q{constructor(k,M){this.schema=k,this.decode=M}Encode(k){const M=u.Type(this.schema);return s.TTransform(M)?(()=>{const x={Encode:T=>M[t.Transform].Encode(k(T)),Decode:T=>this.decode(M[t.Transform].Decode(T))};return{...M,[t.Transform]:x}})():(()=>{const _={Decode:this.decode,Encode:k};return{...M,[t.Transform]:_}})()}}t.TransformEncodeBuilder=q;let ee=0;class Z extends n{}t.TypeBuilderError=Z;class se{Create(k){return k}Throw(k){throw new Z(k)}Discard(k,M){return M.reduce((_,w)=>{const{[w]:x,...T}=_;return T},k)}Strict(k){return JSON.parse(JSON.stringify(k))}}t.TypeBuilder=se;class U extends se{ReadonlyOptional(k){return this.Readonly(this.Optional(k))}Readonly(k){return{...u.Type(k),[t.Readonly]:"Readonly"}}Optional(k){return{...u.Type(k),[t.Optional]:"Optional"}}Any(k={}){return this.Create({...k,[t.Kind]:"Any"})}Array(k,M={}){return this.Create({...M,[t.Kind]:"Array",type:"array",items:u.Type(k)})}Boolean(k={}){return this.Create({...k,[t.Kind]:"Boolean",type:"boolean"})}Capitalize(k,M={}){return{...h.Map(u.Type(k),"Capitalize"),...M}}Composite(k,M){const _=t.Type.Intersect(k,{}),x=m.ResolveKeys(_,{includePatterns:!1}).reduce((T,R)=>({...T,[R]:t.Type.Index(_,[R])}),{});return t.Type.Object(x,M)}Enum(k,M={}){if(i.IsUndefined(k))return this.Throw("Enum undefined or empty");const _=Object.getOwnPropertyNames(k).filter(T=>isNaN(T)).map(T=>k[T]),x=[...new Set(_)].map(T=>t.Type.Literal(T));return this.Union(x,{...M,[t.Hint]:"Enum"})}Extends(k,M,_,w,x={}){switch(f.Extends(k,M)){case c.Union:return this.Union([u.Type(_,x),u.Type(w,x)]);case c.True:return u.Type(_,x);case c.False:return u.Type(w,x)}}Exclude(k,M,_={}){return s.TTemplateLiteral(k)?this.Exclude($.Resolve(k),M,_):s.TTemplateLiteral(M)?this.Exclude(k,$.Resolve(M),_):s.TUnion(k)?(()=>{const w=k.anyOf.filter(x=>f.Extends(x,M)===c.False);return w.length===1?u.Type(w[0],_):this.Union(w,_)})():f.Extends(k,M)!==c.False?this.Never(_):u.Type(k,_)}Extract(k,M,_={}){return s.TTemplateLiteral(k)?this.Extract($.Resolve(k),M,_):s.TTemplateLiteral(M)?this.Extract(k,$.Resolve(M),_):s.TUnion(k)?(()=>{const w=k.anyOf.filter(x=>f.Extends(x,M)!==c.False);return w.length===1?u.Type(w[0],_):this.Union(w,_)})():f.Extends(k,M)!==c.False?u.Type(k,_):this.Never(_)}Index(k,M,_={}){return s.TArray(k)&&s.TNumber(M)?u.Type(k.items,_):s.TTuple(k)&&s.TNumber(M)?(()=>{const x=(i.IsUndefined(k.items)?[]:k.items).map(T=>u.Type(T));return this.Union(x,_)})():(()=>{const w=g.Resolve(M),x=u.Type(k);return d.Resolve(x,w,_)})()}Integer(k={}){return this.Create({...k,[t.Kind]:"Integer",type:"integer"})}Intersect(k,M={}){if(k.length===0)return t.Type.Never();if(k.length===1)return u.Type(k[0],M);k.some(T=>s.TTransform(T))&&this.Throw("Cannot intersect transform types");const _=k.every(T=>s.TObject(T)),w=u.Rest(k),x=s.TSchema(M.unevaluatedProperties)?{unevaluatedProperties:u.Type(M.unevaluatedProperties)}:{};return M.unevaluatedProperties===!1||s.TSchema(M.unevaluatedProperties)||_?this.Create({...M,...x,[t.Kind]:"Intersect",type:"object",allOf:w}):this.Create({...M,...x,[t.Kind]:"Intersect",allOf:w})}KeyOf(k,M={}){return s.TRecord(k)?(()=>{const _=Object.getOwnPropertyNames(k.patternProperties)[0];return _===t.PatternNumberExact?this.Number(M):_===t.PatternStringExact?this.String(M):this.Throw("Unable to resolve key type from Record key pattern")})():s.TTuple(k)?(()=>{const w=(i.IsUndefined(k.items)?[]:k.items).map((x,T)=>t.Type.Literal(T.toString()));return this.Union(w,M)})():s.TArray(k)?this.Number(M):(()=>{const _=m.ResolveKeys(k,{includePatterns:!1});if(_.length===0)return this.Never(M);const w=_.map(x=>this.Literal(x));return this.Union(w,M)})()}Literal(k,M={}){return this.Create({...M,[t.Kind]:"Literal",const:k,type:typeof k})}Lowercase(k,M={}){return{...h.Map(u.Type(k),"Lowercase"),...M}}Never(k={}){return this.Create({...k,[t.Kind]:"Never",not:{}})}Not(k,M){return this.Create({...M,[t.Kind]:"Not",not:u.Type(k)})}Null(k={}){return this.Create({...k,[t.Kind]:"Null",type:"null"})}Number(k={}){return this.Create({...k,[t.Kind]:"Number",type:"number"})}Object(k,M={}){const _=Object.getOwnPropertyNames(k),w=_.filter(ie=>s.TOptional(k[ie])),x=_.filter(ie=>!w.includes(ie)),T=s.TSchema(M.additionalProperties)?{additionalProperties:u.Type(M.additionalProperties)}:{},R=_.reduce((ie,me)=>({...ie,[me]:u.Type(k[me])}),{});return x.length>0?this.Create({...M,...T,[t.Kind]:"Object",type:"object",properties:R,required:x}):this.Create({...M,...T,[t.Kind]:"Object",type:"object",properties:R})}Omit(k,M,_={}){const w=g.Resolve(M);return p.Map(this.Discard(u.Type(k),["$id",t.Transform]),x=>{i.IsArray(x.required)&&(x.required=x.required.filter(T=>!w.includes(T)),x.required.length===0&&delete x.required);for(const T of Object.getOwnPropertyNames(x.properties))w.includes(T)&&delete x.properties[T];return this.Create(x)},_)}Partial(k,M={}){return p.Map(this.Discard(u.Type(k),["$id",t.Transform]),_=>{const w=Object.getOwnPropertyNames(_.properties).reduce((x,T)=>({...x,[T]:this.Optional(_.properties[T])}),{});return this.Object(w,this.Discard(_,["required"]))},M)}Pick(k,M,_={}){const w=g.Resolve(M);return p.Map(this.Discard(u.Type(k),["$id",t.Transform]),x=>{i.IsArray(x.required)&&(x.required=x.required.filter(T=>w.includes(T)),x.required.length===0&&delete x.required);for(const T of Object.getOwnPropertyNames(x.properties))w.includes(T)||delete x.properties[T];return this.Create(x)},_)}Record(k,M,_={}){return s.TTemplateLiteral(k)?(()=>{const w=E.ParseExact(k.pattern);return L.Check(w)?this.Object([...F.Generate(w)].reduce((x,T)=>({...x,[T]:u.Type(M)}),{}),_):this.Create({..._,[t.Kind]:"Record",type:"object",patternProperties:{[k.pattern]:u.Type(M)}})})():s.TUnion(k)?(()=>{const w=b.Resolve(k);if(s.TUnionLiteral(w)){const x=w.anyOf.reduce((T,R)=>({...T,[R.const]:u.Type(M)}),{});return this.Object(x,{..._,[t.Hint]:"Record"})}else this.Throw("Record key of type union contains non-literal types")})():s.TLiteral(k)?i.IsString(k.const)||i.IsNumber(k.const)?this.Object({[k.const]:u.Type(M)},_):this.Throw("Record key of type literal is not of type string or number"):s.TInteger(k)||s.TNumber(k)?this.Create({..._,[t.Kind]:"Record",type:"object",patternProperties:{[t.PatternNumberExact]:u.Type(M)}}):s.TString(k)?(()=>{const w=i.IsUndefined(k.pattern)?t.PatternStringExact:k.pattern;return this.Create({..._,[t.Kind]:"Record",type:"object",patternProperties:{[w]:u.Type(M)}})})():this.Never()}Recursive(k,M={}){i.IsUndefined(M.$id)&&(M.$id=`T${ee++}`);const _=k({[t.Kind]:"This",$ref:`${M.$id}`});return _.$id=M.$id,this.Create({...M,[t.Hint]:"Recursive",..._})}Ref(k,M={}){return i.IsString(k)?this.Create({...M,[t.Kind]:"Ref",$ref:k}):(i.IsUndefined(k.$id)&&this.Throw("Reference target type must specify an $id"),this.Create({...M,[t.Kind]:"Ref",$ref:k.$id}))}Required(k,M={}){return p.Map(this.Discard(u.Type(k),["$id",t.Transform]),_=>{const w=Object.getOwnPropertyNames(_.properties).reduce((x,T)=>({...x,[T]:this.Discard(_.properties[T],[t.Optional])}),{});return this.Object(w,_)},M)}Rest(k){return s.TTuple(k)&&!i.IsUndefined(k.items)?u.Rest(k.items):s.TIntersect(k)?u.Rest(k.allOf):s.TUnion(k)?u.Rest(k.anyOf):[]}String(k={}){return this.Create({...k,[t.Kind]:"String",type:"string"})}TemplateLiteral(k,M={}){const _=i.IsString(k)?j.Create(I.Parse(k)):j.Create(k);return this.Create({...M,[t.Kind]:"TemplateLiteral",type:"string",pattern:_})}Transform(k){return new B(k)}Tuple(k,M={}){const[_,w,x]=[!1,k.length,k.length],T=u.Rest(k),R=k.length>0?{...M,[t.Kind]:"Tuple",type:"array",items:T,additionalItems:_,minItems:w,maxItems:x}:{...M,[t.Kind]:"Tuple",type:"array",minItems:w,maxItems:x};return this.Create(R)}Uncapitalize(k,M={}){return{...h.Map(u.Type(k),"Uncapitalize"),...M}}Union(k,M={}){return s.TTemplateLiteral(k)?$.Resolve(k):(()=>{const _=k;if(_.length===0)return this.Never(M);if(_.length===1)return this.Create(u.Type(_[0],M));const w=u.Rest(_);return this.Create({...M,[t.Kind]:"Union",anyOf:w})})()}Unknown(k={}){return this.Create({...k,[t.Kind]:"Unknown"})}Unsafe(k={}){return this.Create({...k,[t.Kind]:k[t.Kind]||"Unsafe"})}Uppercase(k,M={}){return{...h.Map(u.Type(k),"Uppercase"),...M}}}t.JsonTypeBuilder=U;class G extends U{AsyncIterator(k,M={}){return this.Create({...M,[t.Kind]:"AsyncIterator",type:"AsyncIterator",items:u.Type(k)})}Awaited(k,M={}){const _=w=>w.length>0?(()=>{const[x,...T]=w;return[this.Awaited(x),..._(T)]})():w;return s.TIntersect(k)?t.Type.Intersect(_(k.allOf)):s.TUnion(k)?t.Type.Union(_(k.anyOf)):s.TPromise(k)?this.Awaited(k.item):u.Type(k,M)}BigInt(k={}){return this.Create({...k,[t.Kind]:"BigInt",type:"bigint"})}ConstructorParameters(k,M={}){return this.Tuple([...k.parameters],{...M})}Constructor(k,M,_){const[w,x]=[u.Rest(k),u.Type(M)];return this.Create({..._,[t.Kind]:"Constructor",type:"Constructor",parameters:w,returns:x})}Date(k={}){return this.Create({...k,[t.Kind]:"Date",type:"Date"})}Function(k,M,_){const[w,x]=[u.Rest(k),u.Type(M)];return this.Create({..._,[t.Kind]:"Function",type:"Function",parameters:w,returns:x})}InstanceType(k,M={}){return u.Type(k.returns,M)}Iterator(k,M={}){return this.Create({...M,[t.Kind]:"Iterator",type:"Iterator",items:u.Type(k)})}Parameters(k,M={}){return this.Tuple(k.parameters,{...M})}Promise(k,M={}){return this.Create({...M,[t.Kind]:"Promise",type:"Promise",item:u.Type(k)})}RegExp(k,M={}){const _=i.IsString(k)?k:k.source;return this.Create({...M,[t.Kind]:"String",type:"string",pattern:_})}RegEx(k,M={}){return this.RegExp(k,M)}ReturnType(k,M={}){return u.Type(k.returns,M)}Symbol(k){return this.Create({...k,[t.Kind]:"Symbol",type:"symbol"})}Undefined(k={}){return this.Create({...k,[t.Kind]:"Undefined",type:"undefined"})}Uint8Array(k={}){return this.Create({...k,[t.Kind]:"Uint8Array",type:"Uint8Array"})}Void(k={}){return this.Create({...k,[t.Kind]:"Void",type:"void"})}}t.JavaScriptTypeBuilder=G,t.JsonType=new U,t.Type=new G})(C);const QL=C.Type.Object({prefix:C.Type.Optional(C.Type.String()),suffix:C.Type.Optional(C.Type.String()),volume:C.Type.Optional(C.Type.Number())}),wx=C.Type.Object({soundOnNewLine:C.Type.Optional(C.Type.String()),soundPerLetter:C.Type.Optional(QL)}),YL=C.Type.Object({defaultAudio:C.Type.Optional(wx),characterAudio:C.Type.Optional(C.Type.Record(C.Type.String(),wx))}),XL=C.Type.Object({src:C.Type.String(),path:C.Type.Optional(C.Type.String()),volume:C.Type.Optional(C.Type.Number()),rate:C.Type.Optional(C.Type.Number()),html5:C.Type.Optional(C.Type.Boolean()),fadeInTime:C.Type.Optional(C.Type.Number()),fadeInDelay:C.Type.Optional(C.Type.Number()),fadeOutTime:C.Type.Optional(C.Type.Number()),loop:C.Type.Optional(C.Type.Boolean())}),ZL=C.Type.Record(C.Type.String(),XL),e7=C.Type.Object({volume:C.Type.Optional(C.Type.Number()),defaultMusic:C.Type.Optional(C.Type.String()),musicFadeInTime:C.Type.Optional(C.Type.Number()),musicFadeOutTime:C.Type.Optional(C.Type.Number()),musicFadeInDelay:C.Type.Optional(C.Type.Number())}),t7=C.Type.Record(C.Type.String(),C.Type.String()),Sx=C.Type.Object({files:ZL,audioTriggers:t7,options:e7,dialogAudio:C.Type.Optional(YL)}),kx={files:{},audioTriggers:{},options:{volume:1,musicFadeInTime:.5,musicFadeInDelay:.5,musicFadeOutTime:.5}},$x=C.Type.Object({backgrounds:C.Type.Object({width:C.Type.Number(),height:C.Type.Number()}),dialogBottomPadding:C.Type.Union([C.Type.Number(),C.Type.String()]),minTextWidth:C.Type.Optional(C.Type.Number()),verticalLayoutThreshold:C.Type.Number(),defaultFontSize:C.Type.Optional(C.Type.Number()),portraits:C.Type.Object({width:C.Type.Number(),height:C.Type.Number(),offset:C.Type.Optional(C.Type.Object({landscape:C.Type.Optional(C.Type.Object({right:C.Type.Number(),bottom:C.Type.Number()})),portrait:C.Type.Optional(C.Type.Object({right:C.Type.Number(),bottom:C.Type.Number()}))}))})}),n7={backgrounds:{width:880,height:720},dialogBottomPadding:70,verticalLayoutThreshold:600,defaultFontSize:16,portraits:{width:100,height:100}},Op=C.Type.Object({name:C.Type.String(),description:C.Type.Optional(C.Type.String())}),r7=C.Type.Intersect([Op,C.Type.Object({type:C.Type.Literal("number"),defaultValue:C.Type.Number(),step:C.Type.Number(),minValue:C.Type.Number(),maxValue:C.Type.Number()})]),i7=C.Type.Intersect([Op,C.Type.Object({type:C.Type.Literal("integer"),defaultValue:C.Type.Number(),step:C.Type.Number(),minValue:C.Type.Number(),maxValue:C.Type.Number()})]),o7=C.Type.Intersect([Op,C.Type.Object({type:C.Type.Literal("boolean"),defaultValue:C.Type.Boolean()})]),s7=C.Type.Intersect([Op,C.Type.Object({type:C.Type.Literal("string"),defaultValue:C.Type.String()})]),a7=C.Type.Union([r7,i7,o7,s7]);function l7(t){return t.type==="number"}function xx(t){return t.type==="integer"}function c7(t){return t.type==="boolean"}function u7(t){return t.type==="string"}const jx=C.Type.Object({customSettings:C.Type.Optional(C.Type.Record(C.Type.String(),a7))});var ul=(t=>(t[t.ERROR=3]="ERROR",t[t.WARN=2]="WARN",t[t.INFO=1]="INFO",t[t.DEBUG=0]="DEBUG",t[t.NONE=-1]="NONE",t))(ul||{});const Ep="###_--_~=:;_JUMP",uy="###_--_~=:;_RETURN",f7="###_--_~=:;_OK",Ap="###_--_~=:;_STOP";function d7(t){return t===Ep||t===uy||t===f7||t===Ap}const h7="3.12.4",p7=new Date("2024-08-18T15:47:00.319Z"),_x={branch:"main",commit:"b12f65468b18cded93bb0232b057297847b02c01"},m7=ul.WARN,g7=400,Pp=20,Mp="@empty",Cx={background:Mp},v7=C.Type.Optional(C.Type.Record(C.Type.String(),C.Type.Union([C.Type.String(),C.Type.Boolean()]))),Tx=C.Type.Optional(C.Type.Object({animateText:C.Type.Optional(C.Type.Boolean()),textSpeed:C.Type.Optional(C.Type.Number()),timeBetweenLines:C.Type.Optional(C.Type.Number()),overlayMode:C.Type.Optional(C.Type.Boolean()),rightOffset:C.Type.Optional(C.Type.Number()),bottomOffset:C.Type.Optional(C.Type.Number()),width:C.Type.Optional(C.Type.Number()),height:C.Type.Optional(C.Type.Number()),hideDuringTransition:C.Type.Optional(C.Type.Boolean()),showAfterScriptEnd:C.Type.Optional(C.Type.Boolean())})),Ox=C.Type.Object({engineSplashScreen:C.Type.Optional(C.Type.Object({skip:C.Type.Optional(C.Type.Boolean()),fadeDuration:C.Type.Optional(C.Type.Number()),timeBeforeFadeout:C.Type.Optional(C.Type.Number()),overrideText:C.Type.Optional(C.Type.String()),overrideLogo:C.Type.Optional(C.Type.String())})),gameSplashScreen:C.Type.Optional(C.Type.Object({startButtonText:C.Type.Optional(C.Type.String())}))}),Ex=C.Type.Object({timeOnScreen:C.Type.Number(),alsoPrintInDialogue:C.Type.Optional(C.Type.Boolean())}),y7=C.Type.Object({name:C.Type.String(),icon:C.Type.String(),startingValue:C.Type.Number(),maxValue:C.Type.Optional(C.Type.Number()),minValue:C.Type.Optional(C.Type.Number()),decimals:C.Type.Optional(C.Type.Number()),prefix:C.Type.Optional(C.Type.String()),suffix:C.Type.Optional(C.Type.String()),hideName:C.Type.Optional(C.Type.Boolean()),formatting:C.Type.Optional(C.Type.Object({style:C.Type.Union([C.Type.Literal("decimal"),C.Type.Literal("currency"),C.Type.Literal("percent"),C.Type.Literal("unit")]),currency:C.Type.Optional(C.Type.String()),unit:C.Type.Optional(C.Type.String())}))}),Ax=C.Type.Record(C.Type.String(),y7),Px=C.Type.Record(C.Type.String(),C.Type.Object({onlyInteractOutsideOfScripts:C.Type.Optional(C.Type.Boolean())})),b7=C.Type.Object({delay:C.Type.Optional(C.Type.Number()),duration:C.Type.Optional(C.Type.Number())}),Mx=C.Type.Record(C.Type.String(),b7),w7=C.Type.Object({text:C.Type.String(),cssClass:C.Type.Optional(C.Type.String())}),Nx=C.Type.Record(C.Type.String(),w7),Ix=C.Type.Object({showScriptFinishedMessage:C.Type.Optional(C.Type.Boolean())}),Rx=C.Type.Object({mode:C.Type.String(),slots:C.Type.Number(),runOnReload:C.Type.Optional(C.Type.String()),disabled:C.Type.Optional(C.Type.Boolean())}),Dx=C.Type.Array(C.Type.String()),S7=[],k7=C.Type.Object({startMenuScene:C.Type.Optional(C.Type.String()),gameScene:C.Type.Optional(C.Type.String()),gameSplashScene:C.Type.Optional(C.Type.String())}),Lx=C.Type.Object({baseAssetsPath:C.Type.Optional(C.Type.String()),baseDataPath:C.Type.Optional(C.Type.String()),gameTitle:C.Type.String(),saveFileName:C.Type.String(),images:C.Type.Optional(C.Type.Record(C.Type.String(),C.Type.String())),layout:$x,settings:C.Type.Optional(jx),gameFlow:C.Type.Optional(C.Type.Object({labelToJumpOnScriptEnd:C.Type.Optional(C.Type.String())})),dialogPanel:C.Type.Optional(Tx),splashScreens:C.Type.Optional(Ox),notifications:C.Type.Optional(Ex),hudStats:Ax,interactionTags:C.Type.Optional(Px),transitions:C.Type.Optional(Mx),menuButtons:C.Type.Optional(Nx),debugging:C.Type.Optional(Ix),saves:C.Type.Optional(Rx),hotkeys:v7,scenes:C.Type.Optional(k7)}),fy={baseAssetsPath:"",baseDataPath:"",gameTitle:"Narrat Game",saveFileName:"narrat save",images:{},layout:n7,settings:{},gameFlow:{},dialogPanel:{overlayMode:!0,rightOffset:100,bottomOffset:50,width:475,height:680,textSpeed:Pp,animateText:!0,timeBetweenLines:100,hideDuringTransition:!1,showAfterScriptEnd:!1},splashScreens:{},notifications:{timeOnScreen:2.5,alsoPrintInDialogue:!1},hudStats:{},interactionTags:{default:{onlyInteractOutsideOfScripts:!0}},transitions:{},menuButtons:{},debugging:{showScriptFinishedMessage:!1},saves:{mode:"manual",slots:10},hotkeys:{},scenes:{}},$7=C.Type.Object({name:C.Type.String(),description:C.Type.String(),icon:C.Type.String(),onUse:C.Type.Optional(C.Type.Object({action:C.Type.String(),label:C.Type.String()})),tag:C.Type.Optional(C.Type.String()),category:C.Type.Optional(C.Type.String()),showIfEmpty:C.Type.Optional(C.Type.Boolean())}),Bx=C.Type.Object({id:C.Type.String(),title:C.Type.String()}),Fx=C.Type.Record(C.Type.String(),$7);C.Type.Object({categories:C.Type.Array(Bx),items:Fx});const Vx=C.Type.Object({categories:C.Type.Optional(C.Type.Array(Bx)),items:C.Type.Optional(Fx)}),zx={categories:[{id:"default",title:"Items"}],items:{}},x7=C.Type.Object({description:C.Type.String(),succeededDescription:C.Type.Optional(C.Type.String()),failedDescription:C.Type.Optional(C.Type.String()),hidden:C.Type.Optional(C.Type.Boolean())}),j7=C.Type.Object({title:C.Type.String(),description:C.Type.String(),succeededDescription:C.Type.Optional(C.Type.String()),failedDescription:C.Type.Optional(C.Type.String()),endings:C.Type.Optional(C.Type.Record(C.Type.String(),C.Type.Object({success:C.Type.Boolean(),description:C.Type.String()}))),objectives:C.Type.Record(C.Type.String(),x7),category:C.Type.Optional(C.Type.String())}),_7=C.Type.Object({id:C.Type.String(),title:C.Type.String()}),C7=C.Type.Record(C.Type.String(),j7),qx=C.Type.Object({quests:C7,categories:C.Type.Array(_7)}),Ux={quests:{},categories:[{id:"default",title:"Quests"}]},Hx=C.Type.Object({enabled:C.Type.Boolean(),background:C.Type.Optional(C.Type.String()),text:C.Type.Optional(C.Type.String()),cssClass:C.Type.Optional(C.Type.String()),position:C.Type.Object({left:C.Type.Number(),top:C.Type.Number(),width:C.Type.Optional(C.Type.Number()),height:C.Type.Optional(C.Type.Number())}),anchor:C.Type.Optional(C.Type.Object({x:C.Type.Number(),y:C.Type.Number()})),action:C.Type.Optional(C.Type.String()),actionType:C.Type.Optional(C.Type.String()),scriptClickable:C.Type.Optional(C.Type.Boolean()),tag:C.Type.Optional(C.Type.String())}),T7=C.Type.Record(C.Type.String(),Hx),Wx=C.Type.Object({buttons:T7,clickableDuringScriptsByDefault:C.Type.Optional(C.Type.Boolean())}),Kx={buttons:{},clickableDuringScriptsByDefault:!1},O7=C.Type.Intersect([Hx,C.Type.Object({id:C.Type.String()})]),E7=C.Type.Object({muted:C.Type.Optional(C.Type.Boolean()),loop:C.Type.Optional(C.Type.Boolean())}),A7=C.Type.Object({background:C.Type.String(),video:C.Type.Optional(E7),buttons:C.Type.Optional(C.Type.Array(C.Type.Union([C.Type.String(),O7])))}),Gx=C.Type.Record(C.Type.String(),A7);C.Type.Object({screens:Gx});const Jx=C.Type.Object({screens:C.Type.Optional(Gx)}),Qx={screens:{}},P7=C.Type.Object({name:C.Type.String(),description:C.Type.String(),startingLevel:C.Type.Number(),hidden:C.Type.Optional(C.Type.Boolean()),icon:C.Type.String()}),Yx=C.Type.Record(C.Type.String(),P7),Xx=C.Type.Object({xpPerLevel:C.Type.Number(),notifyLevelUp:C.Type.Boolean()});C.Type.Object({skills:Yx,skillOptions:Xx});const Zx=C.Type.Object({skills:C.Type.Optional(Yx),skillOptions:C.Type.Optional(Xx)}),ej={skills:{},skillOptions:{xpPerLevel:10,notifyLevelUp:!0}},M7=C.Type.Object({portraitCssClass:C.Type.Optional(C.Type.String()),color:C.Type.Optional(C.Type.String()),boxCss:C.Type.Optional(C.Type.Record(C.Type.String(),C.Type.Any())),nameCss:C.Type.Optional(C.Type.Record(C.Type.String(),C.Type.Any())),textCss:C.Type.Optional(C.Type.Record(C.Type.String(),C.Type.Any()))}),N7=C.Type.Object({video:C.Type.String(),autoplay:C.Type.Optional(C.Type.Boolean()),loop:C.Type.Optional(C.Type.Boolean()),muted:C.Type.Optional(C.Type.Boolean()),width:C.Type.Optional(C.Type.Number()),height:C.Type.Optional(C.Type.Number())}),I7=C.Type.Object({image:C.Type.String(),width:C.Type.Optional(C.Type.Number()),height:C.Type.Optional(C.Type.Number())}),R7=C.Type.Union([C.Type.String(),N7,I7]),D7=C.Type.Object({sprites:C.Type.Optional(C.Type.Record(C.Type.String(),R7)),name:C.Type.String(),style:C.Type.Optional(M7)}),tj=C.Type.Object({config:C.Type.Object({imagesPath:C.Type.String(),playerCharacter:C.Type.Optional(C.Type.String()),gameCharacter:C.Type.Optional(C.Type.String())}),characters:C.Type.Record(C.Type.String(),D7)}),nj={config:{imagesPath:"",playerCharacter:"player",gameCharacter:"game"},characters:{}},rj=C.Type.Object({cssClass:C.Type.Optional(C.Type.String()),textCssClass:C.Type.Optional(C.Type.String()),titleCssClass:C.Type.Optional(C.Type.String())}),ij=C.Type.Object({options:C.Type.Object({delay:C.Type.Optional(C.Type.Number()),width:C.Type.Number(),keywordsPrefix:C.Type.String(),screenEdgesMinimumMargin:C.Type.Optional(C.Type.Number()),styling:C.Type.Optional(rj)}),tooltips:C.Type.Array(C.Type.Object({keywords:C.Type.Array(C.Type.String()),title:C.Type.String(),description:C.Type.String(),styling:C.Type.Optional(rj)}))}),oj={options:{delay:0,width:350,keywordsPrefix:"@@"},tooltips:[]},L7=C.Type.Object({name:C.Type.String(),description:C.Type.String(),icon:C.Type.Optional(C.Type.String()),lockedIcon:C.Type.Optional(C.Type.String()),secret:C.Type.Optional(C.Type.Boolean()),category:C.Type.Optional(C.Type.String())}),sj=C.Type.Object({id:C.Type.String(),title:C.Type.String()}),aj=C.Type.Record(C.Type.String(),L7);C.Type.Object({defaultAchievementIcon:C.Type.String(),categories:C.Type.Array(sj),achievements:aj,notifyNewAchievements:C.Type.Boolean(),secretAchievements:C.Type.Optional(C.Type.Object({censorDescription:C.Type.Optional(C.Type.Boolean()),censorName:C.Type.Optional(C.Type.Boolean()),hideUntilObtained:C.Type.Optional(C.Type.Boolean())}))});const lj=C.Type.Object({categories:C.Type.Optional(C.Type.Array(sj)),achievements:C.Type.Optional(aj)}),cj={categories:[{id:"default",title:"Achievements"}],achievements:{},notifyNewAchievements:!0,defaultAchievementIcon:"img/achievements/trophy.png"},B7=C.Type.Object({diceRange:C.Type.Tuple([C.Type.Number(),C.Type.Number()]),diceCount:C.Type.Number(),difficultyText:C.Type.Array(C.Type.Tuple([C.Type.Number(),C.Type.String()])),extraPointsPerLevel:C.Type.Number(),extraDicePerLevel:C.Type.Optional(C.Type.Number()),successOnRollsBelowThreshold:C.Type.Boolean(),showDifficultyText:C.Type.Boolean(),showDifficultyNumber:C.Type.Boolean(),showDifficultyWithoutModifiers:C.Type.Boolean(),finalRollIsHighest:C.Type.Optional(C.Type.Boolean()),finalRollIsLowest:C.Type.Optional(C.Type.Boolean()),failOnRollsEqualToThreshold:C.Type.Optional(C.Type.Boolean())}),F7=C.Type.Object({skill:C.Type.String(),difficulty:C.Type.Number(),winsNeeded:C.Type.Optional(C.Type.Number()),hideAfterRoll:C.Type.Optional(C.Type.Boolean()),repeatable:C.Type.Optional(C.Type.Boolean())}),uj=C.Type.Object({options:B7,skillChecks:C.Type.Record(C.Type.String(),F7)}),fj={options:{diceRange:[1,6],extraPointsPerLevel:1,extraDicePerLevel:0,diceCount:2,successOnRollsBelowThreshold:!1,showDifficultyText:!0,showDifficultyNumber:!1,showDifficultyWithoutModifiers:!1,finalRollIsHighest:!1,finalRollIsLowest:!1,difficultyText:[[2,"Very Easy"],[4,"Easy"],[6,"Medium"],[8,"Hard"],[10,"Very Hard"],[11,"Extremely Hard"],[12,"Near Impossible"]]},skillChecks:{}},V7=C.Type.Object({cssClass:C.Type.Optional(C.Type.String()),textTemplate:C.Type.Optional(C.Type.String())}),dj=C.Type.Record(C.Type.String(),V7);C.Type.Object({choiceTextTemplate:C.Type.String(),choicePrompts:dj});const hj=C.Type.Object({choiceTextTemplate:C.Type.Optional(C.Type.String()),choicePrompts:C.Type.Optional(dj)}),pj={choicePrompts:{},choiceTextTemplate:'<span class="choice-index">%{$index}. </span> <span class="choice-text">%{$choice}</span>'},mj=C.Type.Object({delay:C.Type.Optional(C.Type.Number()),direction:C.Type.Optional(C.Type.String()),duration:C.Type.Optional(C.Type.Number()),easing:C.Type.Optional(C.Type.String()),endDelay:C.Type.Optional(C.Type.Number()),fill:C.Type.Optional(C.Type.String()),iterationStart:C.Type.Optional(C.Type.Number()),iterations:C.Type.Optional(C.Type.Number()),keyframes:C.Type.Optional(C.Type.Any())}),dy=C.Type.Array(C.Type.Any()),z7=C.Type.Object({keyframes:C.Type.Union([C.Type.String(),dy]),options:C.Type.Optional(mj)});C.Type.Object({keyframes:dy,options:C.Type.Optional(mj)});const gj=C.Type.Object({animations:C.Type.Record(C.Type.String(),z7),keyframes:C.Type.Record(C.Type.String(),dy)}),vj={animations:{},keyframes:{}},q7=C.Type.Object({name:C.Type.String(),type:C.Type.String(),optional:C.Type.Optional(C.Type.Boolean())}),U7=C.Type.Object({keyword:C.Type.String(),label:C.Type.String(),options:C.Type.Optional(C.Type.Array(q7))}),yj=C.Type.Object({macros:C.Type.Array(U7)}),bj={macros:[]},hy=C.Type.Object({assets:C.Type.Record(C.Type.String(),C.Type.String())}),wj=C.Type.Object({images:C.Type.Optional(hy),audio:C.Type.Optional(hy),video:C.Type.Optional(hy)}),Sj={images:{assets:{}},audio:{assets:{}},video:{assets:{}}},pu={common:fy,screens:Qx,buttons:Kx,skills:ej,skillChecks:fj,scripts:[],audio:kx,tooltips:oj,achievements:cj,items:zx,quests:Ux,characters:nj,choices:pj,animations:vj,macros:bj,preload:Sj};var H7=function(e){return W7(e)&&!K7(e)};function W7(t){return!!t&&typeof t=="object"}function K7(t){var e=Object.prototype.toString.call(t);return e==="[object RegExp]"||e==="[object Date]"||Q7(t)}var G7=typeof Symbol=="function"&&Symbol.for,J7=G7?Symbol.for("react.element"):60103;function Q7(t){return t.$$typeof===J7}function Y7(t){return Array.isArray(t)?[]:{}}function fd(t,e){return e.clone!==!1&&e.isMergeableObject(t)?mu(Y7(t),t,e):t}function X7(t,e,n){return t.concat(e).map(function(r){return fd(r,n)})}function Z7(t,e){if(!e.customMerge)return mu;var n=e.customMerge(t);return typeof n=="function"?n:mu}function eB(t){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(t).filter(function(e){return Object.propertyIsEnumerable.call(t,e)}):[]}function kj(t){return Object.keys(t).concat(eB(t))}function $j(t,e){try{return e in t}catch{return!1}}function tB(t,e){return $j(t,e)&&!(Object.hasOwnProperty.call(t,e)&&Object.propertyIsEnumerable.call(t,e))}function nB(t,e,n){var r={};return n.isMergeableObject(t)&&kj(t).forEach(function(i){r[i]=fd(t[i],n)}),kj(e).forEach(function(i){tB(t,i)||($j(t,i)&&n.isMergeableObject(e[i])?r[i]=Z7(i,n)(t[i],e[i],n):r[i]=fd(e[i],n))}),r}function mu(t,e,n){n=n||{},n.arrayMerge=n.arrayMerge||X7,n.isMergeableObject=n.isMergeableObject||H7,n.cloneUnlessOtherwiseSpecified=fd;var r=Array.isArray(e),i=Array.isArray(t),o=r===i;return o?r?n.arrayMerge(t,e,n):nB(t,e,n):fd(e,n)}mu.all=function(e,n){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce(function(r,i){return mu(r,i,n)},{})};var rB=mu,iB=rB;const rc=bp(iB),Ur=Lr("config",{state:()=>({config:pu,configModules:{}}),actions:{async setConfig(t){this.config=t},extendConfig(t){this.config=rc(this.config,t)},generateSaveData(){return{playerCharacter:this.playerCharacter,gameCharacter:this.gameCharacter}},addConfigModule(t,e){this.configModules[t]=e},findConfigModuleKey(t){const e=Object.keys(this.configModules).find(n=>this.configModules[n].id===t.id);if(e)return e},reloadConfigModule(t,e){this.configModules[t].code=e,this.config[t]=e},loadSaveData(t){this.config.characters.config.playerCharacter=t.playerCharacter,this.config.characters.config.gameCharacter=t.gameCharacter}},getters:{playerCharacter(){return this.config.characters.config.playerCharacter??"player"},gameCharacter(){return this.config.characters.config.gameCharacter??"game"}}});function xj(t){const e=Rr(),n=e.getSkillCheck(t.id);if(n&&n.happened&&(n.succeeded||!t.repeatable))return n;const r=JL(t);return jj(HL(r,t)),r?e.passSkillCheck(t.id,t.hideAfterRoll):e.failSkillCheck(t.id,t.hideAfterRoll),e.getSkillCheck(t.id)}function oB(t,e=[]){const n=t.options,r=t.staticOptions,i=!!n.condition;if(i)return r.success;if(!i){for(const[o,s]of r.elseifs.entries())if(e[o]===!0)return s.branch}if(!i&&r.failure)return r.failure}function py(t){return typeof t=="object"}function my(t){return typeof t=="string"&&t.search(/\$/)===0}function jj(t){const e={speaker:Ur().gameCharacter,text:t,interactive:!1};er().addDialog(e)}async function Np(t){er().addDialog(t)}function sB(t,e){if(e<t.length)return t[e]}/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */function _j(t){return typeof t>"u"||t===null}function aB(t){return typeof t=="object"&&t!==null}function lB(t){return Array.isArray(t)?t:_j(t)?[]:[t]}function cB(t,e){var n,r,i,o;if(e)for(o=Object.keys(e),n=0,r=o.length;n<r;n+=1)i=o[n],t[i]=e[i];return t}function uB(t,e){var n="",r;for(r=0;r<e;r+=1)n+=t;return n}function fB(t){return t===0&&Number.NEGATIVE_INFINITY===1/t}var dB=_j,hB=aB,pB=lB,mB=uB,gB=fB,vB=cB,Jr={isNothing:dB,isObject:hB,toArray:pB,repeat:mB,isNegativeZero:gB,extend:vB};function Cj(t,e){var n="",r=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(n+='in "'+t.mark.name+'" '),n+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!e&&t.mark.snippet&&(n+=`
39
39
 
40
40
  `+t.mark.snippet),r+" "+n):r}function dd(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=Cj(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}dd.prototype=Object.create(Error.prototype),dd.prototype.constructor=dd,dd.prototype.toString=function(e){return this.name+": "+Cj(this,e)};var Wi=dd;function gy(t,e,n,r,i){var o="",s="",a=Math.floor(i/2)-1;return r-e>a&&(o=" ... ",e=r-a+o.length),n-r>a&&(s=" ...",n=r+a-s.length),{str:o+t.slice(e,n).replace(/\t/g,"→")+s,pos:r-e+o.length}}function vy(t,e){return Jr.repeat(" ",e-t.length)+t}function yB(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),typeof e.indent!="number"&&(e.indent=1),typeof e.linesBefore!="number"&&(e.linesBefore=3),typeof e.linesAfter!="number"&&(e.linesAfter=2);for(var n=/\r?\n|\r|\0/g,r=[0],i=[],o,s=-1;o=n.exec(t.buffer);)i.push(o.index),r.push(o.index+o[0].length),t.position<=o.index&&s<0&&(s=r.length-2);s<0&&(s=r.length-1);var a="",l,c,f=Math.min(t.line+e.linesAfter,i.length).toString().length,u=e.maxLength-(e.indent+f+3);for(l=1;l<=e.linesBefore&&!(s-l<0);l++)c=gy(t.buffer,r[s-l],i[s-l],t.position-(r[s]-r[s-l]),u),a=Jr.repeat(" ",e.indent)+vy((t.line-l+1).toString(),f)+" | "+c.str+`
41
41
  `+a;for(c=gy(t.buffer,r[s],i[s],t.position,u),a+=Jr.repeat(" ",e.indent)+vy((t.line+1).toString(),f)+" | "+c.str+`
@@ -66,7 +66,7 @@ This will fail in production.`);a=ad,a._s.has(r)||(o?oy(r,e,i,a):dx(r,i,a),proce
66
66
  `+t.slice(i,o),i=o+1),s=a;return l+=`
67
67
  `,t.length-i>e&&s>i?l+=t.slice(i,s)+`
68
68
  `+t.slice(s+1):l+=t.slice(i),l.slice(1)}function iF(t){for(var e="",n=0,r,i=0;i<t.length;n>=65536?i+=2:i++)n=gd(t,i),r=Ei[n],!r&&md(n)?(e+=t[i],n>=65536&&(e+=t[i+1])):e+=r||J9(n);return e}function oF(t,e,n){var r="",i=t.tag,o,s,a;for(o=0,s=n.length;o<s;o+=1)a=n[o],t.replacer&&(a=t.replacer.call(n,String(o),a)),(Oa(t,e,a,!1,!1)||typeof a>"u"&&Oa(t,e,null,!1,!1))&&(r!==""&&(r+=","+(t.condenseFlow?"":" ")),r+=t.dump);t.tag=i,t.dump="["+r+"]"}function __(t,e,n,r){var i="",o=t.tag,s,a,l;for(s=0,a=n.length;s<a;s+=1)l=n[s],t.replacer&&(l=t.replacer.call(n,String(s),l)),(Oa(t,e+1,l,!0,!0,!1,!0)||typeof l>"u"&&Oa(t,e+1,null,!0,!0,!1,!0))&&((!r||i!=="")&&(i+=_y(t,e)),t.dump&&hd===t.dump.charCodeAt(0)?i+="-":i+="- ",i+=t.dump);t.tag=o,t.dump=i||"[]"}function sF(t,e,n){var r="",i=t.tag,o=Object.keys(n),s,a,l,c,f;for(s=0,a=o.length;s<a;s+=1)f="",r!==""&&(f+=", "),t.condenseFlow&&(f+='"'),l=o[s],c=n[l],t.replacer&&(c=t.replacer.call(n,l,c)),Oa(t,e,l,!1,!1)&&(t.dump.length>1024&&(f+="? "),f+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Oa(t,e,c,!1,!1)&&(f+=t.dump,r+=f));t.tag=i,t.dump="{"+r+"}"}function aF(t,e,n,r){var i="",o=t.tag,s=Object.keys(n),a,l,c,f,u,d;if(t.sortKeys===!0)s.sort();else if(typeof t.sortKeys=="function")s.sort(t.sortKeys);else if(t.sortKeys)throw new Wi("sortKeys must be a boolean or a function");for(a=0,l=s.length;a<l;a+=1)d="",(!r||i!=="")&&(d+=_y(t,e)),c=s[a],f=n[c],t.replacer&&(f=t.replacer.call(n,c,f)),Oa(t,e+1,c,!0,!0,!0)&&(u=t.tag!==null&&t.tag!=="?"||t.dump&&t.dump.length>1024,u&&(t.dump&&hd===t.dump.charCodeAt(0)?d+="?":d+="? "),d+=t.dump,u&&(d+=_y(t,e)),Oa(t,e+1,f,!0,u)&&(t.dump&&hd===t.dump.charCodeAt(0)?d+=":":d+=": ",d+=t.dump,i+=d));t.tag=o,t.dump=i||"{}"}function C_(t,e,n){var r,i,o,s,a,l;for(i=n?t.explicitTypes:t.implicitTypes,o=0,s=i.length;o<s;o+=1)if(a=i[o],(a.instanceOf||a.predicate)&&(!a.instanceOf||typeof e=="object"&&e instanceof a.instanceOf)&&(!a.predicate||a.predicate(e))){if(n?a.multi&&a.representName?t.tag=a.representName(e):t.tag=a.tag:t.tag="?",a.represent){if(l=t.styleMap[a.tag]||a.defaultStyle,c_.call(a.represent)==="[object Function]")r=a.represent(e,l);else if(u_.call(a.represent,l))r=a.represent[l](e,l);else throw new Wi("!<"+a.tag+'> tag resolver accepts not "'+l+'" style');t.dump=r}return!0}return!1}function Oa(t,e,n,r,i,o,s){t.tag=null,t.dump=n,C_(t,n,!1)||C_(t,n,!0);var a=c_.call(t.dump),l=r,c;r&&(r=t.flowLevel<0||t.flowLevel>e);var f=a==="[object Object]"||a==="[object Array]",u,d;if(f&&(u=t.duplicates.indexOf(n),d=u!==-1),(t.tag!==null&&t.tag!=="?"||d||t.indent!==2&&e>0)&&(i=!1),d&&t.usedDuplicates[u])t.dump="*ref_"+u;else{if(f&&d&&!t.usedDuplicates[u]&&(t.usedDuplicates[u]=!0),a==="[object Object]")r&&Object.keys(t.dump).length!==0?(aF(t,e,t.dump,i),d&&(t.dump="&ref_"+u+t.dump)):(sF(t,e,t.dump),d&&(t.dump="&ref_"+u+" "+t.dump));else if(a==="[object Array]")r&&t.dump.length!==0?(t.noArrayIndent&&!s&&e>0?__(t,e-1,t.dump,i):__(t,e,t.dump,i),d&&(t.dump="&ref_"+u+t.dump)):(oF(t,e,t.dump),d&&(t.dump="&ref_"+u+" "+t.dump));else if(a==="[object String]")t.tag!=="?"&&nF(t,t.dump,e,o,l);else{if(a==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new Wi("unacceptable kind of an object to dump "+a)}t.tag!==null&&t.tag!=="?"&&(c=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?c="!"+c:c.slice(0,18)==="tag:yaml.org,2002:"?c="!!"+c.slice(18):c="!<"+c+">",t.dump=c+" "+t.dump)}return!0}function lF(t,e){var n=[],r=[],i,o;for(Ty(t,n,r),i=0,o=r.length;i<o;i+=1)e.duplicates.push(n[r[i]]);e.usedDuplicates=new Array(o)}function Ty(t,e,n){var r,i,o;if(t!==null&&typeof t=="object")if(i=e.indexOf(t),i!==-1)n.indexOf(i)===-1&&n.push(i);else if(e.push(t),Array.isArray(t))for(i=0,o=t.length;i<o;i+=1)Ty(t[i],e,n);else for(r=Object.keys(t),i=0,o=r.length;i<o;i+=1)Ty(t[r[i]],e,n)}function cF(t,e){e=e||{};var n=new Y9(e);n.noRefs||lF(t,n);var r=t;return n.replacer&&(r=n.replacer.call({"":r},"",r)),Oa(n,0,r,!0,!0)?n.dump+`
69
- `:""}var uF=cF,fF={dump:uF};function Oy(t,e){return function(){throw new Error("Function yaml."+t+" is removed in js-yaml 4. Use yaml."+e+" instead, which is now safe by default.")}}var dF=fi,hF=Oj,pF=Mj,mF=Lj,gF=Bj,vF=wy,yF=l_.load,bF=l_.loadAll,wF=fF.dump,SF=Wi,kF={binary:Uj,float:Dj,map:Pj,null:Nj,pairs:Wj,set:Kj,timestamp:zj,bool:Ij,int:Rj,merge:qj,omap:Hj,seq:Aj,str:Ej},$F=Oy("safeLoad","load"),xF=Oy("safeLoadAll","loadAll"),jF=Oy("safeDump","dump"),_F={Type:dF,Schema:hF,FAILSAFE_SCHEMA:pF,JSON_SCHEMA:mF,CORE_SCHEMA:gF,DEFAULT_SCHEMA:vF,load:yF,loadAll:bF,dump:wF,YAMLException:SF,types:kF,safeLoad:$F,safeLoadAll:xF,safeDump:jF};function Vp(t){return new Promise((e,n)=>{const r=new XMLHttpRequest;r.onload=function(){r.status>=200&&r.status<300?e(r.responseText):(vt(`Failed to load file ${t}`,r.status),n(r.status))},r.open("GET",t),r.send()})}async function vd(t){try{const e=await Vp(t);let n;if(t.endsWith(".json"))n=JSON.parse(e);else if(t.endsWith(".yaml"))n=_F.load(e);else{const r=`Unsupported file type for data file ${t} (must be .json or .yaml)`;throw new Error(r)}if(!n)throw new Error(`Data loaded from ${t} is empty`);return n}catch(e){throw console.error(`Failed to load data file ${t}: ${e}`),e}}const CF=(t,e)=>{const n={};for(const r in t)n[r]=e(t[r]);return n},T_=(t,e)=>{for(const n in t){const r=t[n];e(r,n,t),typeof r=="object"&&r!==null&&T_(r,e)}},oc={};async function TF(t){return oc[t]?oc[t]:O_(t,t)}async function OF(t){Ao.log("Loading images");const e=[],n=async(i,o)=>await O_(i,o),r=(i,o)=>{e.push(n(i,o))};for(const i in t.common.images){const o=t.common.images[i];r(i,o)}if(t.preload.images)for(const i in t.preload.images.assets){const o=t.preload.images.assets[i];r(i,o)}for(const i in t.screens.screens){const o=t.screens.screens[i];if(o.background&&!t.common.images[o.background]&&!o.video&&r(o.background,o.background),o.buttons)for(const s in o.buttons){const a=o.buttons[s];typeof a=="object"&&a.background&&!t.common.images[a.background]&&r(a.background,a.background)}}return Promise.all(e)}async function O_(t,e){if(oc[t])return oc[t];if(e===Mp){const r=new Image;return oc[t]=r,r}const n=new Promise((r,i)=>{const o=new Image;o.onload=()=>{oc[t]=o,r(o)},o.onerror=s=>{vt(`Failed to load image ${t} at ${e}`,s),i(s)},o.src=Gi(e)});return oc[t]=n,n}const zp={};function EF(t){return zp[t]??{}}function E_(t,e,n){const r=EF(t.transition),i=t.duration??r.duration??500,o=t.delay??r.delay??0;return{...t,resolve:n,duration:i,delay:o,oldScreen:e}}const Ai=Lr("notifications",{state:()=>({notifications:[],enabled:!0}),actions:{async addNotification(t,e,n){if(!this.enabled)return;t=Is(t);const r=`${Date.now()}-${Math.random()*1e4}`;this.notifications.push({id:r,text:t,description:e,icon:n}),ut().notifications.alsoPrintInDialogue&&jj(`[NOTIFICATION] ${t}`),await Hi(ut().notifications.timeOnScreen*1e3),this.deleteNotification(r)},deleteNotification(t){const e=this.findNotifications(t);e&&this.notifications.splice(this.notifications.indexOf(e),1)},findNotifications(t){return this.notifications.find(e=>e.id===t)},disableNotifications(){this.enabled=!1;for(const t in this.notifications)this.deleteNotification(t)},enableNotifications(){this.enabled=!0}}}),di=Lr("inventory",{state:()=>({items:{},interactionTags:{}}),actions:{generateSaveData(){return{items:yn(this.items),interactionTags:yn(this.interactionTags)}},loadSaveData(t){this.items={...this.items,...yn(t.items)},this.interactionTags={...yn(t.interactionTags)}},updateConfig(t){Object.keys(t.items).forEach(e=>{this.items[e]||(this.items[e]={amount:0,id:e})})},reset(t){this.$reset(),this.updateConfig(t)},hasItem(t,e){var n;return e||(e=1),((n=this.items[t])==null?void 0:n.amount)>=e},getExistingItem(t){return this.items[t]},getItemAmount(t){var e;return((e=this.getExistingItem(t))==null?void 0:e.amount)||0},add(t){const e=this.getExistingItem(t.id);e?e.amount+=t.amount:this.items[t.id]={...t};const n=ds(t.id).name,r=t.amount>1?`${n} x ${t.amount}`:n;Ai().addNotification(`Received item: ${r}`)},enableInteraction(t){t||(t="default"),this.interactionTags[t]={blockedInteraction:!1}},disableInteraction(t){t||(t="default"),this.interactionTags[t]={blockedInteraction:!0}},onScriptStart(){const t=ut().interactionTags;Object.keys(t).forEach(e=>{t[e].onlyInteractOutsideOfScripts&&this.disableInteraction(e)})},onScriptEnd(){const t=ut().interactionTags;Object.keys(t).forEach(e=>{t[e].onlyInteractOutsideOfScripts&&this.enableInteraction(e)})},isInteractionTagBlocked(t){return t||(t="default"),this.interactionTags[t]?this.interactionTags[t].blockedInteraction:!1},remove(t){const e=this.getExistingItem(t.id);e&&(e.amount-=t.amount,Ai().addNotification(`Lost item: ${ds(t.id).name} x ${t.amount}`),e.amount<=0&&this.deleteItem(t.id))},deleteItem(t){this.getExistingItem(t)&&(this.items[t].amount=0)},canUseItem(t){var n;const e=ds(t.id);return!!(e&&e.onUse&&!this.isInteractionTagBlocked(e.tag)&&!((n=er().currentDialog)!=null&&n.choices))},useItem(t){let e=!1;const n=ds(t.id);if(t&&this.canUseItem(t)&&n){const r=n.onUse;e=!0,nc("onItemUsed"),r.action==="jump"?Zt().jumpToLabel(r.label):r.action==="run"?Zt().runThenGoBackToPreviousDialog(r.label,!0):(e=!1,vt(`Unknown action ${r.action}`))}return e}}}),No=Lr("screens",{state:()=>({layers:[{screen:"default"}],buttons:{}}),actions:{setScreen(t,e,n){return new Promise(r=>{const i=this.layers[e||0];let o;const s=(i==null?void 0:i.screen)??null;if(s===t){r();return}n&&(o=E_(n,s,r)),this.layers[e||0]={screen:t,transition:o},o||r()})},finishTransition(t){const e=this.layers[t];if(!e)vt(`Tried to finish transition on layer ${t} but it doesn't exist`);else if(e.transition){const n=e.transition.resolve;delete e.transition,n()}},transitionScreen(t,e,n){return this.setScreen(t,n??0,e)},emptyLayer(t,e){return new Promise(n=>{const r=this.layers[t];if(!r){sc(`Tried to empty layer ${t} but it doesn't exist`);return}if(e){const i=r.screen,o=E_(e,i,n);r.transition=o}r.screen="@empty",e||n()})},updateConfig(t){console.log("update config!");const e=ar().buttons.buttons;for(const n in e)this.buttons[n]||(this.buttons[n]={state:e[n].enabled})},reset(t){this.$reset(),this.updateConfig(t)},changeButton(t,e){if(!this.buttons[t]){vt(`Tried to change button ${t} but it doesn't exist`);return}this.buttons[t].state=e},generateSaveData(){return{layers:yn(this.layers).filter(t=>t).map(t=>t.screen??null),buttons:yn(this.buttons)}},loadSaveData(t){this.layers=yn(t.layers).map(e=>(e!==null&&typeof e!="string"&&(e=null),{screen:e})),this.buttons=rc(this.buttons,yn(t.buttons))},isButtonDisabled(t){const e=this.getButtonState(t);return e==="hidden"||e==="greyed"||e===!1},isButtonInteractible(t){const e=this.getButtonState(t);return e?e===!0:!1},isButtonClickable(t){if(!this.isButtonInteractible(t))return!1;const n=bl(t);return!!qp(n)},getButtonState(t){const e=bl(t),n=this.buttons[t],r=e.tag||"default",i=n.state;return i===!0&&di().isInteractionTagBlocked(r)?"greyed":i},clickOnButton(t){if(!this.isButtonClickable(t))return;const e=Zt(),n=bl(t);nc("onButtonClicked");const r=n.action;r&&(n.actionType==="run"?e.runLabelFunction(r):e.jumpToLabel(r))}},getters:{nonEmptyLayers(t){return t.layers.filter(e=>e)},isTransitioning(t){return t.layers.some(e=>e==null?void 0:e.transition)}}});function qp(t){if(!Kt().inScript)return!0;const e=ym().clickableDuringScriptsByDefault;if(e)return t.scriptClickable!==!1;if(!e)return t.scriptClickable===!0}const AF=["screenObject","sprite"];function A_(t){return typeof t=="object"&&t!==null&&AF.includes(t._entityType)}function PF(t){return typeof t=="object"&&t!==null&&t._entityType==="sprite"}function MF(t){if(t.includes(" ")){const e=t.split(" ");return{label:e[0],args:e.slice(1)}}else return{label:t}}const vo=Lr("screenObjects",{state:()=>({tree:[],objectsList:{}}),actions:{addObject(t){t.parent?t.parent.children.push(t):this.tree.push(t),this.objectsList[t.id]=t},createObject(t){const e={_entityType:"screenObject",id:Zl(),name:"Screen Object",tags:[],x:0,y:0,anchor:{x:0,y:0},width:1,height:1,opacity:1,scale:1,layer:0,children:[],...t};return this.addObject(e),e},destroyObject(t){let e=t;typeof e=="string"&&(e=this.getObject(e));for(let n=e.children.length-1;n>=0;n--)this.destroyObject(e.children[n]);if(e.parent){const n=e.parent,r=n.children.indexOf(e);r!==-1?n.children.splice(r,1):console.warn(`Could not find object ${e.id} in parent's children`)}else{const n=this.tree.indexOf(e);n!==-1?this.tree.splice(n,1):console.warn(`Object to destroy not found in store (${e.id})`)}delete this.objectsList[e.id]},createSprite(t){const e=this.createObject(t);return e._entityType="sprite",TF(t.image).then(n=>{const r=this.getObject(e.id);r.width===1&&r.height===1&&(r.width=n.width,r.height=n.height)}),e},getObject(t){return this.objectsList[t]},isScreenObjectClickable(t){return qp(t)?!!t.onClick:!1},clickObject(t){if(this.isScreenObjectClickable(t)&&t.onClick){nc("onSpriteClicked");let e;if(typeof t.onClick=="string"){const n=MF(t.onClick);e={label:n.label,args:n.args}}else e=t.onClick;e.method=e.method??t.clickMethod??"jump",e.args=e.args??[],e.method==="run"?Zt().runThenGoBackToPreviousDialog(e.label,...e.args):e.method==="jump"?Zt().jumpToLabel(e.label,...e.args):vt(`Unknown sprite click method ${t.clickMethod}`)}},generateSaveData(){return{tree:yn(this.tree.map(t=>t.id)),objectsList:yn(CF(this.objectsList,t=>this.screenObjectToSave(t)))}},loadSaveData(t){this.objectsList=this.loadAllObjects(yn(t.objectsList)),this.tree=t.tree.map(e=>this.objectsList[e])},reset(){this.$reset()},screenObjectToSave(t){return{...t,children:t.children.map(e=>e.id),parent:t.parent?t.parent.id:void 0}},loadAllObjects(t){for(const e of Object.values(t)){const n=e;n.parent=n.parent?t[n.parent]:void 0,n.children=n.children.map(r=>t[r])}return t},emptyLayer(t){for(let e=this.tree.length-1;e>=0;e--){const n=this.tree[e];n.layer===t&&this.destroyObject(n)}},emptyAllLayers(){for(let t=this.tree.length-1;t>=0;t--){const e=this.tree[t];this.destroyObject(e)}}}});function P_(t){return"save"in t}function M_(t){return"globalSave"in t}function NF(t){return"config"in t}const IF=v.defineComponent({props:{percentage:Number,step:String},methods:{loadingStyle(){return{width:`${this.percentage*60}vw`}}},computed:{}}),RF={id:"loading-bar"},DF={id:"loading-text"};function LF(t,e,n,r,i,o){return v.openBlock(),v.createElementBlock("div",RF,[v.createElementVNode("div",{id:"inner-loading-bar",style:v.normalizeStyle(t.loadingStyle())},null,4),v.createElementVNode("div",DF,[v.createElementVNode("h3",null,"Loading "+v.toDisplayString(Math.floor(t.percentage*100))+"% - "+v.toDisplayString(t.step),1)])])}const BF=Po(IF,[["render",LF]]),FF="data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2019.0.0,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Rat'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20595.3%20595.3'%20style='enable-background:new%200%200%20595.3%20595.3;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill:%23E23B33;}%20%3c/style%3e%3cpath%20id='Rat_Shape'%20class='st0'%20d='M556.9,82.5c-10.8-24.3-47-57.1-71.3-65.6c-24.3-8.4-64.1-0.3-88.7,22.3%20c-20,18.4-26,28.2-29.1,37c-2.1,5.9-4.8,13.5-6,20.9v0c-0.5,4.1-4.5,7-8.6,6.1c-10.4-2.3-29.5-6-44.4-6.3%20c-13.7-0.2-30.1,3.2-40.4,5.7c-4.5,1.1-8.8-2.2-8.8-6.8c-0.1-5.3-1.1-12.3-4.8-19.6c-8.5-16.9-19.6-32.6-57.8-47.4%20c-31.9-12.4-75.1-9.7-100.8,1.8c-28.1,12.6-42.4,37.9-54,61.8c-14.4,29.8-14.9,83.6-6.4,104c12.8,30.7,35.8,47.2,52.6,53%20c11.3,3.8,28.2,3.7,38.2,3.3c4.2-0.2,7.7,3.3,7.5,7.5c-0.7,13.6-0.9,41.5,7,61.4c7.7,19.4,29.7,62.3,50.7,101.2%20c0,0.1-14.6,2.9-31.4,6.8c-23.9,5.5-52.6,12.7-54.3,13.7c-3.5,2.1-3,10-2.7,12c0.5,3.4,5.3,8.1,6.9,8.3c3.9,0.3,31.3-7.6,55.7-14.6%20c18.5-5.3,34.9-9.3,35.5-8.2c5.1,9.3,10,18,14.4,25.8c5.2,9.1,10.7,16.4,14.1,23.6c1.1,2.3-16.6,5.8-32.5,14.7%20c-16.4,9.1-29.7,21-32.3,24c-1.8,2.1-3,6-1.2,10.7c1.1,2.9,10,5.7,12.4,5.1c6.8-1.7,16.5-12.5,33.1-21.1%20c16.3-8.5,32.9-14.9,33.8-13.6c9.7,14.3,16.9,21.6,22.6,31.2c9.8,16.5,27.3,45.9,46.6,39.5c6.4-2.1,31.1-33.6,53.3-68.6%20c1.3-2.1,16.1,11.3,30.4,23.2c13.8,11.4,22.7,20.6,27.1,21.4c5.4,1,14.2-7.7,14.1-14.7c-0.1-2.7-14.3-13.8-29.1-26.2%20c-14.5-12.1-30.1-22.8-29.2-24.3c7.6-12,14.5-23.7,20.1-33.9c4.3-7.8,8.9-16,13-24.7c0.6-1.2,15.9,3,31.4,7.1c15.3,4,26.7,10,31,8%20c6.9-3,11.6-13.8,9.4-18.3c-1.1-2.3-17-7.3-33.2-12c-14.2-4.1-28-6.5-27.7-7.3c15.5-34,28.8-64.8,27.6-69.6%20c-1.7-7.1,2.6-11.9,7-36.5c3.2-18.1,4.7-40.9,5.2-51.7c0.2-3.5,2.8-6.3,6.3-6.7c3.1-0.3,6.9-0.9,10.5-1.9c7.8-2,18.6-7.8,36.4-20.6%20c17.9-12.8,38.7-49.6,44.4-67.8S567.6,106.8,556.9,82.5z%20M265.1,336.2c-8.1,4-13,7-26.4,9.6c-6.9,1.4-29.4-0.2-40.7-4.6%20c-10.5-4.1-19.9-7.6-30-15.4s-15.7-13.2-15.7-15.3c0-4.4,6-9.4,11-9.4c5.1,0,14.5,9.2,29.7,16.6c14.3,7,17.9,6.1,25.4,7.3%20c2.9,0.5,7.7,0.6,10.7,0.4c14.1-1.3,21.4-5.9,25.3-8.8c4-3,13.7-12.9,17.2-12.5c8,1,18.9,3.4,18.9,7.1%20C290.4,319,273.2,332.1,265.1,336.2z%20M320.9,521.4c-4.3,3.7-17.7,13.5-23.3,13.5c-2.8,0-7.4-8.2-11.5-16.8%20c-4.1-8.5-9.1-21.1-9.1-31.6c0-4.6,6-7.4,13.4-9.2c7.2-1.7,27.3-1.8,29.9-1.1c6.8,1.7,12.9,2.2,12.7,6.4c-0.4,12.7-7,18.9-8.3,24.3%20C323.4,512.3,323.4,519.2,320.9,521.4z%20M431.1,320.3c-9.2,7.4-10.6,8.1-24.9,13.7c-11.3,4.4-28.6,5.8-41.6,3.6%20c-12.2-2.1-22.3-4.6-29.5-10.1c-9.7-7.3-16.4-15.1-16.4-19.8c0-3.7,6.4-4.3,14.5-4.9c3.5-0.3,9.3,5.9,13.2,9.2%20c8.1,6.8,14.8,8,28.8,9.9c2.9,0.4,7.8,0.4,10.7,0.1c7.5-0.9,12-0.4,25.8-8.2c20-11.2,17.8-14.4,25.1-12.6c2.2,0.6,5.8,1.2,5.6,5.6%20C442.4,309,440.5,312.7,431.1,320.3z'/%3e%3c/svg%3e",VF={id:"engine-splash-screen",class:"flex justify-center items-center"},zF={id:"engine-splash-title"},qF=["src"],Ey=v.defineComponent({__name:"engine-splash",emits:["finished"],setup(t,{emit:e}){const n=e,r=v.ref("hidden"),i=v.computed(()=>({transitionDuration:`${f.value}s`})),o=v.computed(()=>({invisible:r.value!=="appear"})),s=Kt(),a=v.computed(()=>{var h;return((h=ut().splashScreens)==null?void 0:h.engineSplashScreen)??{}}),l=v.computed(()=>typeof a.value.overrideText=="string"?a.value.overrideText:"Made with narrat engine"),c=v.computed(()=>a.value.overrideLogo??FF),f=v.computed(()=>typeof a.value.fadeDuration=="number"?a.value.fadeDuration:.8),u=v.computed(()=>typeof a.value.timeBeforeFadeout=="number"?a.value.timeBeforeFadeout:1.5);v.onMounted(async()=>{if(await Hi(10),r.value="appear",a.value.skip||s.options.debug){d();return}await Hi(f.value*1e3),await Hi(u.value*1e3),r.value="disappear",await Hi(f.value*1e3),d()});function d(){s.loading.loaded?n("finished"):s.listener.once("gameLoaded",()=>{n("finished")})}return(h,p)=>(v.openBlock(),v.createElementBlock("div",VF,[v.createElementVNode("div",{id:"engine-splash-header",class:v.normalizeClass(["flex justify-center flex-col items-center",o.value]),style:v.normalizeStyle(i.value)},[v.createElementVNode("h1",zF,v.toDisplayString(l.value),1),v.createElementVNode("img",{src:c.value,alt:"Narrat Logo",id:"engine-splash-logo"},null,8,qF),v.createVNode(BF,{percentage:v.unref(s).loading.percentage,step:v.unref(s).loading.step},null,8,["percentage","step"])],6)]))}});class Ay{constructor(){zn(this,"listeners",{})}on(e,n){return this.listeners[e]||this.addEventToMap(e),this.listeners[e].add(n),n}off(e,n){return this.listeners[e]&&this.listeners[e].delete(n),n}once(e,n){const r=(...i)=>{this.off(e,r),n(...i)};return this.on(e,r)}emit(e,...n){this.listeners[e]&&this.listeners[e].forEach(r=>r(...n))}clear(){Object.keys(this.listeners).forEach(e=>{delete this.listeners[e]})}addEventToMap(e){this.listeners[e]=new Set}}class UF extends Ay{setup(){const e=()=>{this.emit("preUpdate"),this.emit("update"),this.emit("postUpdate"),requestAnimationFrame(e)};e()}}const yd=new UF;Fe.Vec2=void 0,(t=>{function e(p,m){return{x:p??0,y:m??0}}t.create=e;function n(p){return Math.sqrt(p.x*p.x+p.y*p.y)}t.magnitude=n;function r(p){const m=n(p);return m===0?e(0,0):{x:p.x/m,y:p.y/m}}t.normalize=r;function i(p,m){return{x:p.x+m.x,y:p.y+m.y}}t.add=i;function o(p,m){return{x:p.x-m.x,y:p.y-m.y}}t.subtract=o;function s(p,m){return{x:p.x*m.x,y:p.y*m.y}}t.multiply=s;function a(p,m){return{x:p.x*m,y:p.y*m}}t.scale=a;function l(p,m){return{x:p.x/m.x,y:p.y/m.y}}t.divide=l;function c(p,m){return n(o(p,m))}t.distance=c;function f(p,m,y){return{x:p.x+(m.x-p.x)*y,y:p.y+(m.y-p.y)*y}}t.lerp=f;function u(p,m){const y=Math.cos(m),g=Math.sin(m);return{x:p.x*y-p.y*g,y:p.x*g+p.y*y}}t.rotate=u;function d(p,m){const y=o(m,p);return t.normalize({x:-y.y,y:y.x})}t.normal=d;function h(p,m){return p.x*m.x+p.y*m.y}t.dot=h})(Fe.Vec2||(Fe.Vec2={}));function Py(t,e,n,r){const i=t/n,o=e/r;return Math.min(i,o)}const Ls=Lr("settings",{state:()=>({baseSettings:{textSpeed:30,animateText:!0,fontSize:16},settingsSchema:{textSpeed:{type:"number",defaultValue:30,minValue:1,maxValue:100,step:5,name:"Text Speed",description:"The speed at which text plays."},animateText:{type:"boolean",defaultValue:!0,name:"Animate Text",description:"Whether or not text should animate."},fontSize:{type:"integer",defaultValue:16,minValue:8,maxValue:64,step:1,name:"Font Size",description:"The base font size for the game."}},customSettings:{},customSettingsSchema:{}}),actions:{reset(t){this.$reset(),this.updateConfig(t)},getSetting(t){if(typeof this.baseSettings[t]<"u")return this.baseSettings[t];if(typeof this.customSettings[t]<"u")return this.customSettings[t];vt(`Setting ${t} does not exist.`)},getSettingSchema(t){if(typeof this.settingsSchema[t]<"u")return this.settingsSchema[t];if(typeof this.customSettingsSchema[t]<"u")return this.customSettingsSchema[t];vt(`Setting ${t} does not exist.`)},getAllSettingSchemas(){return{...this.settingsSchema,...this.customSettingsSchema}},setSetting(t,e){typeof this.baseSettings[t]<"u"?this.baseSettings[t]=e:typeof this.customSettings[t]<"u"?this.customSettings[t]=e:vt(`Setting ${t} does not exist.`),t==="fontSize"&&document.documentElement.style.setProperty("font-size",`${e}px`),t==="textSpeed"&&(ut().dialogPanel.textSpeed=e),t==="animateText"&&(ut().dialogPanel.animateText=e)},updateConfig(t){var e;if(this.setSetting("textSpeed",t.dialogPanel.textSpeed??Pp),this.setSetting("animateText",t.dialogPanel.animateText??!0),this.setSetting("fontSize",t.layout.defaultFontSize??16),(e=t.settings)!=null&&e.customSettings)for(const n in t.settings.customSettings)this.addCustomSetting(n,t.settings.customSettings[n])},addCustomSetting(t,e){this.customSettings[t]=e.defaultValue,this.customSettingsSchema[t]=e},generateSaveData(){return{baseSettings:yn(this.baseSettings),customSettings:yn(this.customSettings)}},loadSaveData(t){for(const e in t.baseSettings)this.setSetting(e,yn(t.baseSettings[e]));for(const e in t.customSettings)typeof this.customSettings[e]<"u"&&this.setSetting(e,yn(t.customSettings[e]))}}});function bd(t,e=50,n={}){let r;const i=n.isImmediate??!1,o=n.callback??!1,s=n.maxWait;let a=Date.now(),l=[];function c(){if(s!==void 0){const u=Date.now()-a;if(u+e>=s)return s-u}return e}const f=function(...u){const d=this;return new Promise((h,p)=>{const m=function(){if(r=void 0,a=Date.now(),!i){const b=t.apply(d,u);o&&o(b),l.forEach(({resolve:S})=>S(b)),l=[]}},y=i&&r===void 0;r!==void 0&&clearTimeout(r);const g=c();if(r=setTimeout(m,g),y){const b=t.apply(d,u);return o&&o(b),h(b)}l.push({resolve:h,reject:p})})};return f.cancel=function(u){r!==void 0&&clearTimeout(r),l.forEach(({reject:d})=>d(u)),l=[]},f}const Ir=Lr("rendering",{state:()=>({screenHeight:window.innerHeight,screenWidth:window.innerWidth,layoutMode:"horizontal",resizeObserver:null,containerElement:null,narratAppElement:null,dialogPanelMode:"auto"}),actions:{generateSaveData(){return{dialogPanelMode:this.dialogPanelMode}},loadSaveData(t){this.dialogPanelMode=t.dialogPanelMode},reset(){this.dialogPanelMode="auto"},updateScreenSize(t,e){this.screenHeight=e,this.screenWidth=t,t<ut().layout.verticalLayoutThreshold?(this.layoutMode="vertical",document.querySelector("html").style.fontSize=`${Ls().baseSettings.fontSize??40}px`):(this.layoutMode="horizontal",document.querySelector("html").style.fontSize=`${Ls().baseSettings.fontSize??16}px`)},setContainer(t){this.containerElement=t,this.resizeObserver&&this.resizeObserver.disconnect(),this.resizeObserver=new ResizeObserver(bd(()=>{this.refreshScreenSize()},100,{maxWait:200})),this.resizeObserver.observe(t),this.refreshScreenSize()},refreshScreenSize(){const t=this.containerElement;t&&this.updateScreenSize(t.clientWidth,t.clientHeight)}},getters:{gameScaleRatio(t){return Py(this.screenWidth,this.screenHeight,this.gameWidth,this.gameHeight)},overlayMode(t){return!!(ut().dialogPanel.overlayMode&&t.layoutMode==="horizontal")},gameWidth(){const t=ut();return this.layoutMode==="vertical"||this.overlayMode?t.layout.backgrounds.width:t.layout.backgrounds.width+$m()},gameHeight(){const t=ut();return this.layoutMode==="vertical",t.layout.backgrounds.height},dialogWidth(){return this.layoutMode==="vertical"?this.viewportWidth:$m()},dialogHeight(){return this.layoutMode==="vertical"?this.actualGameHeight-this.gameHeight:ut().dialogPanel.height??this.gameHeight},actualGameHeight(){let t=this.gameHeight;return this.layoutMode==="vertical"&&(t=this.screenHeight/this.gameScaleRatio),t},viewportRatio(t){if(this.layoutMode==="vertical"){const e=ut().layout.backgrounds;return t.screenWidth/e.width}return 1},viewportHeight(t){return ut().layout.backgrounds.height*this.viewportRatio},viewportWidth(t){return ut().layout.backgrounds.width*this.viewportRatio},showDialog(t){if(this.dialogPanelMode==="on")return!0;if(this.dialogPanelMode==="off")return!1;if(!this.overlayMode||this.layoutMode==="vertical")return!0;const e=Kt().inScript;let n=!0;return No().isTransitioning&&ut().dialogPanel.hideDuringTransition&&(n=!1),!ut().dialogPanel.showAfterScriptEnd&&!e&&(n=!1),n},container(){return this.containerElement?this.containerElement:document.body},inputsContainer(){return Kt().hasCustomContainer?this.container:window},narratApp(){return this.narratAppElement?this.narratAppElement:document.body}}});class HF extends EventTarget{constructor(){super(...arguments);zn(this,"gamepadAvailable",!0);zn(this,"gameActions",{});zn(this,"keyboardState",{});zn(this,"actions",{});zn(this,"lastInputMethodUsed","km");zn(this,"gamepad",null)}kbEvent(){this.changeLastInput("km")}getGamepads(){return navigator.getGamepads?navigator.getGamepads():(this.gamepadAvailable=!1,[])}gamepadEvent(){this.changeLastInput("gamepad")}mouseEvent(){this.changeLastInput("km")}changeLastInput(n){this.lastInputMethodUsed!==n&&(this.lastInputMethodUsed=n,this.dispatchEvent(new CustomEvent("change-input",{detail:n})))}getGamepad(){const n=this.getGamepads().filter(r=>r!==null);if(n.length>0)return n[0]}startListening(){this.updateGamepad();const n=Ir().inputsContainer;n.addEventListener("mousemove",r=>{this.mouseEvent()}),n.addEventListener("keydown",r=>{this.kbEvent();const i=this.getKeyboardState(r.key).current;this.keyboardState[r.key]={previous:i,current:!0}}),n.addEventListener("keyup",r=>{this.kbEvent();const i=this.getKeyboardState(r.key).current;this.keyboardState[r.key]={previous:i,current:!1}}),yd.on("preUpdate",()=>{this.update()})}updateGamepad(){const n=this.getGamepad();n?this.gamepad?this.updateAllNarratButtons(n,this.gamepad):this.gamepad=this.setupNarratGamepad(n):this.gamepad=null}setupNarratGamepad(n){return{id:n.id,gamepad:n,buttons:n.buttons.map((i,o)=>this.getNarratButtonFromGamepad(i,i,o))}}updateAllNarratButtons(n,r){for(const[i,o]of n.buttons.entries()){const s=r.buttons[i];s.previous=yn(s.state),s.state=yn(o),s.previous.pressed!==s.state.pressed&&this.gamepadEvent()}}getNarratButtonFromGamepad(n,r,i){return{index:i,state:yn(r),previous:yn(r)}}addAction(n){if(this.gameActions[n.id]=n,n.type==="button"){const r={config:n,active:!1,justPressed:!1,justReleased:!1};this.actions[n.id]={state:r,previous:yn(r)}}else{const r={config:n,value:Fe.Vec2.create(0,0),fullState:{left:0,right:0,up:0,down:0}};this.actions[n.id]={state:r,previous:yn(r)}}}getAnalog(n){return this.actions[n]||vt(`Action ${n} does not exist`),this.actions[n].state}getButton(n){return this.actions[n]||vt(`Action ${n} does not exist`),this.actions[n].state}getKeyboardState(n){return this.keyboardState[n]?this.keyboardState[n]:(this.keyboardState[n]={current:!1,previous:!1},this.keyboardState[n])}getGamepadState(n){return this.gamepad&&this.gamepad.buttons.length>n?{current:this.gamepad.buttons[n].state,previous:this.gamepad.buttons[n].previous}:null}debugGamepad(){if(this.gamepad)for(const[n,r]of this.gamepad.buttons.entries())r.state.pressed,r.previous.pressed}getKeybindKey(n,r){const i=n.id,o=ut().hotkeys[i];return typeof o<"u"?{...r,keyboardKey:o}:r}update(){this.updateGamepad(),this.debugGamepad();for(const n of Object.values(this.gameActions))if(n.type==="button"){const r=this.actions[n.id],i=yn(r.state),o=r.state;r.previous=i,n.action==="press"&&(n.keybinds.some(a=>{let l=!1;if(a=this.getKeybindKey(n,a),typeof a.keyboardKey=="string"&&this.getKeyboardState(a.keyboardKey).current===!0&&(l=!0),typeof a.gamepadButton=="number"){const c=this.getGamepadState(a.gamepadButton);c&&c.current.pressed===!0&&(l=!0)}return l})?o.active=!0:o.active=!1,o.active&&!i.active?o.justPressed=!0:o.justPressed=!1,!o.active&&i.active?o.justReleased=!0:o.justReleased=!1)}else if(n.type==="analog"){const r=this.actions[n.id],i=r.state;yn(r.state),r.previous=yn(i);let o=Fe.Vec2.create(0,0);n.keybinds.forEach(s=>{this.getKeyboardState(s.left).current&&(i.fullState.left=1,o.x-=1),this.getKeyboardState(s.right).current&&(i.fullState.right=1,o.x+=1),this.getKeyboardState(s.up).current&&(i.fullState.up=1,o.y-=1),this.getKeyboardState(s.down).current&&(i.fullState.down=1,o.y+=1)}),o=Fe.Vec2.normalize(o),i.value=o}}}const hl=new HF,hi=Lr("menu",{state:()=>({menus:{},activeMenu:!1}),getters:{showSkills(){return Object.entries(qs().skills).length>0},showInventory(){return Object.entries(gm().items).length>0},showQuests(){return Object.entries(Id().quests).length>0},showAchievements(){return Object.entries(Rd().achievements).length>0},menuTabsToShow(t){return t.menus.menu.tabs.map(e=>{const n=ut().menuButtons[e.id]||{};return{...e,...n}}).filter(e=>e.condition?e.condition():!0)},menu(t){return t.activeMenu?t.menus[t.activeMenu]:void 0},tab(){if(this.menu)return this.menu.tabs[this.menu.activeTab]}},actions:{setup(){},addMenu(t,e){this.menus[t]={...e,id:t}},addMenuOption(t,e){this.menus[t]||(this.menus[t]={id:t,label:t,tabs:[],activeTab:0}),this.menus[t].tabs.push(e)},setActiveTab(t){this.menu&&(this.menu.activeTab=t)},openMenu(t){this.activeMenu=t},closeMenu(){this.activeMenu=!1},toggleMenu(){this.activeMenu?this.activeMenu=!1:this.activeMenu="menu"}}}),WF=[{id:"left",type:"button",action:"press",keybinds:[{keyboardKey:"ArrowLeft",gamepadButton:14}]},{id:"right",type:"button",action:"press",keybinds:[{keyboardKey:"ArrowRight",gamepadButton:15}]},{id:"up",type:"button",action:"press",keybinds:[{keyboardKey:"ArrowUp",gamepadButton:12}]},{id:"down",type:"button",action:"press",keybinds:[{keyboardKey:"ArrowDown",gamepadButton:13}]},{id:"continue",type:"button",action:"press",keybinds:[{keyboardKey:"Enter",gamepadButton:0}]},{id:"cancel",type:"button",action:"press",keybinds:[{keyboardKey:"Escape",gamepadButton:1}]},{id:"system",type:"button",action:"press",keybinds:[{keyboardKey:"n",gamepadButton:9}]},{id:"menu",type:"button",action:"press",keybinds:[{keyboardKey:"m",gamepadButton:8}]},{id:"previousTab",type:"button",action:"press",keybinds:[{keyboardKey:"p",gamepadButton:4}]},{id:"nextTab",type:"button",action:"press",keybinds:[{keyboardKey:"o",gamepadButton:5}]},{id:"subPreviousTab",type:"button",action:"press",keybinds:[{keyboardKey:"i",gamepadButton:6}]},{id:"subNextTab",type:"button",action:"press",keybinds:[{keyboardKey:"u",gamepadButton:7}]},{id:"viewportSelect",type:"button",action:"press",keybinds:[{keyboardKey:"v",gamepadButton:2}]},{id:"autoPlay",type:"button",action:"press",keybinds:[{keyboardKey:"a",gamepadButton:6}]},{id:"skip",type:"button",action:"press",keybinds:[{keyboardKey:"s",gamepadButton:7}]}],nr=Lr("inputs",{state:()=>({inputStack:[],baseInputListener:null,inputMode:"mk",isTyping:!1,inGameInputListener:null}),actions:{setupInputs(){hl.addEventListener("change-input",t=>{this.inputMode=t.detail});for(const t of WF)hl.addAction(t);this.listenToBaseNarratInputs(),yd.on("preUpdate",()=>{for(const[t,e]of Object.entries(hl.actions))if(e.state.config.type==="button"){const n=e;n.state.justPressed&&this.triggerListeners(t,"press",n),n.state.justReleased&&this.triggerListeners(t,"release",n)}else e.state.config.type})},createInGameInputListener(){this.inGameInputListener||(this.inGameInputListener=this.registerInputListener("in-game",{system:{press:()=>{hi().openMenu("system")}},menu:{press:()=>{hi().openMenu("menu")}}}))},startTyping(){this.isTyping=!0},stopTyping(){this.isTyping=!1},removeInGameInputListener(){this.inGameInputListener&&(this.unregisterInputListener(this.inGameInputListener),this.inGameInputListener=null)},listenToContainerInputs(){hl.startListening()},listenToBaseNarratInputs(){},triggerListeners(t,e,n){const r=this.inputStack[this.inputStack.length-1];if(r&&r.actions[t]&&r.actions[t][e])if(n.state.config.type==="button"){const i=r.actions[t][e],o=n;i(n.state.config,o.state,o.previous)}else console.warn("Analog events not implemented yet")},getInputs(){return hl},registerInputListener(t,e){const r={id:`${Date.now()}-${Math.floor(Math.random()*1e8)}`,name:t,actions:e??{}};return this.inputStack.push(r),r},unregisterInputListener(t){const e=this.inputStack.findIndex(n=>n.id===t.id);if(e===-1)throw new Error("Input listener not found");this.inputStack.splice(e,1)},registerActions(t,e,n){t.actions[e]=n}}}),oo=Lr("scenes-store",{state:()=>({scenes:{},activeScene:as.EngineSplash,currentOptions:{}}),getters:{isPlaying(t){return t.activeScene!==as.EngineSplash&&t.activeScene!==as.GameSplash&&t.activeScene!==as.StartMenu}},actions:{generateSaveData(){return{activeScene:this.activeScene}},loadSaveData(t){},changeScene(t,e){const n=this.activeScene;if(n&&n!==t){const r=this.scenes[n];r.onLeaving&&r.onLeaving(),this.currentOptions={},this.activeScene=t,this.currentOptions=e||{},this.scenes[t].onStarting&&this.scenes[t].onStarting()}},getSceneConfig(t){return this.scenes[t]},onEngineSplashFinished(){this.goToGameSplashScene()},finishedScene(t){this.scenes[t].onFinished&&this.scenes[t].onFinished()},goToGameSplashScene(){let t=as.GameSplash;ut().scenes.gameSplashScene&&(t=ut().scenes.gameSplashScene),this.changeScene(t)},goToStartMenuScene(){let t=as.StartMenu;ut().scenes.startMenuScene&&(t=ut().scenes.startMenuScene),this.changeScene(t)},goToGameScene(){let t=as.Playing;ut().scenes.gameScene&&(t=ut().scenes.gameScene),this.changeScene(t)},addNewScene(t){this.scenes[t.id]=t}}}),KF={id:"game-splash-screen",style:{height:"100%",padding:"20px"},class:"flex justify-center items-center"},GF={id:"game-splash-screen-header flex justify-center flex-col items-center",class:"flex justify-center flex-col items-center"},JF={class:"title",id:"game-splash-title"},My=v.defineComponent({__name:"game-splash",setup(t){const e=v.ref(null),n=Kt(),r=v.computed(()=>{var l;return((l=ut().splashScreens)==null?void 0:l.gameSplashScreen)??{}}),i=v.computed(()=>typeof r.value.startButtonText=="string"?r.value.startButtonText:"Press to start"),o=v.computed(()=>n.loading.loaded),s=v.computed(()=>ut().gameTitle||"Narrat Game");function a(){oo().goToStartMenuScene()}return v.onMounted(()=>{e.value=nr().registerInputListener("game-splash",{continue:{press:()=>{a()}},system:{press:()=>{a()}}}),n.options.debug&&a()}),v.onUnmounted(()=>{e.value&&nr().unregisterInputListener(e.value)}),(l,c)=>(v.openBlock(),v.createElementBlock("div",KF,[v.createElementVNode("div",GF,[v.createElementVNode("h1",JF,v.toDisplayString(s.value),1),o.value?(v.openBlock(),v.createElementBlock("button",{key:0,class:"nrt-button menu-button main-menu-button large splash-start-button override",onClick:a},v.toDisplayString(i.value),1)):v.createCommentVNode("",!0)])]))}});function Ea(t){if(!t.listener)return console.warn("No input listener provided for navigation"),null;const e=v.ref(-1),n=v.computed(()=>t.mode==="grid"?e.value%t.columns:0),r=v.ref([]),i=v.ref(hl.lastInputMethodUsed),o=v.ref(null);function s(){var L,D;return(L=t.container)!=null&&L.value?t.container.value.children:(D=t.elements)!=null&&D.value?t.elements.value.filter(F=>F!==null):[]}function a(){r.value=s()}const l=v.computed(()=>u(e.value));function c(L){return r.value?L>=0&&L<r.value.length:!1}function f(L){const D=e.value;if(c(L)&&(e.value=L,l.value)){i.value==="gamepad"&&l.value.classList.add("selected");const F=u(D);F&&D!==L&&F.classList.remove("selected"),t.onSelected&&t.onSelected(L)}}function u(L){return r.value?r.value[L]:null}function d(){r.value&&(e.value===0?t.loopForbidden||f(r.value.length-1):f(e.value-1))}function h(){r.value&&(e.value===r.value.length-1?t.loopForbidden||f(0):f(e.value+1))}function p(){if(!r.value)return;const L=t,D=e.value;!t.loopForbidden&&D<L.columns?f(r.value.length-1):f(e.value-t.columns)}function m(){if(!r.value)return;const L=t,D=e.value;!t.loopForbidden&&D>=r.value.length-L.columns?f(0):f(e.value+t.columns)}function y(){t.mode==="grid"?p():t.mode==="list"&&d()}function g(){t.mode==="grid"?m():t.mode==="list"&&h()}function b(){(t.mode==="grid"||t.mode==="list")&&d()}function S(){(t.mode==="grid"||t.mode==="list")&&h()}function j(){t.onChosen&&t.onChosen(e.value)}v.onMounted(()=>{V()});function $(){t.listener&&(t.onlyVertical||(delete t.listener.actions.left,delete t.listener.actions.right),t.onlyHorizontal||(delete t.listener.actions.up,delete t.listener.actions.down),t.noChoosing||delete t.listener.actions.continue,o.value&&hl.removeEventListener("change-input",o.value))}function O(){l.value&&l.value.classList.add("selected")}function E(){l.value&&l.value.classList.remove("selected")}function V(){t.listener&&(a(),o.value=L=>{i.value=L.detail,L.detail==="gamepad"?O():E()},hl.addEventListener("change-input",o.value),t.onlyVertical||(t.listener.actions.left={press:b},t.listener.actions.right={press:S}),t.onlyHorizontal||(t.listener.actions.up={press:y},t.listener.actions.down={press:g}),t.noChoosing||(t.listener.actions.continue={press:j}),f(0))}return v.onUnmounted(()=>{$()}),v.watch(()=>{var L;return(L=t.elements)==null?void 0:L.value},L=>{L&&a()}),{selectedIndex:e,selectedElement:l,currentColumn:n,buttonDown:g,buttonUp:y,buttonLeft:b,buttonRight:S,selectUp:p,selectDown:m,selectPrevious:d,selectNext:h,select:f,disable:$,mount:V}}const QF={class:"used-save-slot flex flex-row justify-between items-center grow"},YF={class:"flex flex-col save-slot-number-container"},XF={class:"save-slot-number"},ZF={class:"flex flex-col justify-center save-info"},eV={key:1,class:"save-name"},tV={class:"flex flex-col"},nV={key:0},rV={key:1},iV={key:2},oV=["onClick"],Ny=v.defineComponent({__name:"save-slot-ui",props:{saveSlot:{},id:{},actions:{},selected:{type:Boolean},inputListener:{}},emits:["choice","cancel"],setup(t,{expose:e,emit:n}){var j;const r=t,i=v.ref(null),o=v.ref(null),s=v.ref(null);e({slotContainer:s});const a=v.ref(((j=r.saveSlot.saveData)==null?void 0:j.metadata.name)??"Empty Save"),l=v.ref(0),c=v.computed(()=>r.saveSlot.saveData!==null),f=v.computed(()=>r.saveSlot.saveData),u=v.computed(()=>ut().saves.mode),d=v.computed(()=>{const $=r.saveSlot.saveData;if($&&$.screens.layers[0]){const O=Eu($.screens.layers[0]);if(O)return{backgroundImage:`url(${Au(O.background)})`}}return!1}),h=n;function p($){h("choice",$)}function m($){return f.value?Q0(f.value.main.playTime/1e3):"00:00:00"}function y(){f.value&&nL(r.saveSlot.id,a.value)}function g(){const $=ut().saves.slots;let O="";const E=r.saveSlot.slotNumber;return E===0&&ut().saves.mode==="manual"?"AUTO":($>=10&&E<10&&(O+="0"),$>=100&&E<100&&(O+="0"),O+E)}function b(){i.value=Ea({mode:"list",container:o,listener:r.inputListener,onlyHorizontal:!0,onSelected:$=>{l.value=$},onChosen:$=>{p($)}}),i.value.mount()}function S(){i.value.disable(),i.value=null}return v.watch(()=>r.selected,($,O)=>{$&&!i.value&&b(),!$&&i.value&&S()}),v.onUnmounted(()=>{i.value&&S()}),($,O)=>(v.openBlock(),v.createElementBlock("div",{class:"save-slot flex flex-row",ref_key:"slotContainer",ref:s},[v.createElementVNode("div",QF,[v.createElementVNode("div",YF,[v.createElementVNode("h1",XF,v.toDisplayString(g()),1)]),d.value?(v.openBlock(),v.createElementBlock("div",{key:0,class:"save-slot-screenshot",style:v.normalizeStyle(d.value)},null,4)):v.createCommentVNode("",!0),v.createElementVNode("div",ZF,[c.value?v.withDirectives((v.openBlock(),v.createElementBlock("input",{key:0,type:"text",class:"save-name","onUpdate:modelValue":O[0]||(O[0]=E=>a.value=E),onInput:y},null,544)),[[v.vModelText,a.value]]):(v.openBlock(),v.createElementBlock("h3",eV,v.toDisplayString(a.value),1)),v.createElementVNode("div",tV,[f.value?(v.openBlock(),v.createElementBlock("p",nV,v.toDisplayString(new Date(f.value.metadata.saveDate).toLocaleString()),1)):v.createCommentVNode("",!0),f.value?(v.openBlock(),v.createElementBlock("p",rV,"Play time: "+v.toDisplayString(m($.saveSlot)),1)):v.createCommentVNode("",!0),u.value==="game-slots"?(v.openBlock(),v.createElementBlock("p",iV,v.toDisplayString($.saveSlot.slotType==="auto"?"Auto Save":"Manual Save"),1)):v.createCommentVNode("",!0)])]),v.createElementVNode("div",{class:"flex flex-row",ref_key:"actionsContainer",ref:o},[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList($.actions,(E,V)=>(v.openBlock(),v.createElementBlock("button",{class:v.normalizeClass(["nrt-button",{selected:$.selected&&V===l.value}]),onClick:()=>p(V),key:V},[v.createElementVNode("h3",null,v.toDisplayString(E),1)],10,oV))),128))],512)])],512))}}),sV=v.createElementVNode("h3",{class:"title"},"Confirmation",-1),Up=v.defineComponent({__name:"yes-no",props:{prompt:{type:String,required:!0},onConfirm:{type:Function,required:!1},onRefuse:{type:Function,required:!1}},emits:["choice"],setup(t,{emit:e}){const n=v.ref(nr().registerInputListener("yes-no",{cancel:{press:()=>{s(!1)}},continue:{press:()=>{s(!0)}}})),r=v.ref(null);Ea({mode:"list",container:r,listener:n.value,onChosen:a=>{s(a===0)}});const i=t,o=e;function s(a){a===!0&&i.onConfirm?i.onConfirm():a===!1&&i.onRefuse&&i.onRefuse(),o("choice",a)}return v.onMounted(()=>{}),v.onUnmounted(()=>{n.value&&nr().unregisterInputListener(n.value)}),(a,l)=>(v.openBlock(),v.createBlock(Ca,{onClose:l[2]||(l[2]=()=>s(!1)),containerCssClass:"yes-no-modal"},{header:v.withCtx(()=>[sV]),body:v.withCtx(()=>[v.createElementVNode("h3",null,v.toDisplayString(t.prompt),1),v.createElementVNode("div",{class:"flex justify-center",ref_key:"buttonsContainer",ref:r},[v.createElementVNode("button",{class:"nrt-button",onClick:l[0]||(l[0]=()=>s(!0))},"Yes"),v.createElementVNode("button",{class:"nrt-button",onClick:l[1]||(l[1]=()=>s(!1))},"No")],512)]),_:1}))}}),aV={class:"nrt-title"},lV={key:0},cV={class:"saves-section"},uV=v.createElementVNode("h3",{class:"saves-section-title"},"Auto save",-1),fV={class:"saves-section"},dV=v.createElementVNode("h3",{class:"saves-section-title"},"Manual Saves",-1),hV={key:1,class:"saves-section"},pV=v.createElementVNode("h3",{class:"saves-section-title"},"Save Slots",-1),mV={class:"saves-container flex flex-col"},N_=v.defineComponent({__name:"save-slots",props:{mode:{}},emits:["chosen","close"],setup(t,{emit:e}){const n=t,r=v.ref(nr().registerInputListener("save-slots",{cancel:{press:()=>{V()}}})),i=v.ref(0),o=v.reactive([]),s=v.computed(()=>o.slice(0,1)),a=v.computed(()=>o.slice(1)),l=v.ref([]),c=v.ref([]),f=v.ref([]),u=v.ref([]),d=v.ref([]);v.ref({mode:"list",elements:u,listener:r.value,onlyVertical:!0,noChoosing:!0,onSelected:F=>{i.value=F}});const h=Ea({mode:"list",elements:u,listener:r.value,onlyVertical:!0,noChoosing:!0,onSelected:F=>{i.value=F}}),p=v.computed(()=>{const F=i.value;return d.value.length<F+1?null:d.value[F].id}),m=v.reactive(n.mode==="load"?["Load","Delete"]:["Choose"]),y=v.computed(()=>ut().saves.mode),g=v.reactive({prompt:"Are you sure you want to delete this save file?",saveToDelete:null,onConfirm:()=>{E(g.saveToDelete),g.saveToDelete=null},onRefuse:()=>{g.saveToDelete=null}}),b=v.reactive({prompt:"Are you sure you want to overwrite this save file?",saveToOverwrite:null,onConfirm:()=>{$(b.saveToOverwrite),b.saveToOverwrite=null},onRefuse:()=>{b.saveToOverwrite=null}}),S=e;v.onBeforeMount(()=>{Ms().slots.forEach((B,q)=>{o[q]=B})});function j(){u.value=y.value==="manual"?[...c.value.map(I=>I.slotContainer),...f.value.map(I=>I.slotContainer)]:l.value.map(I=>I.slotContainer);const F=y.value==="manual"?[...s.value,...a.value]:o;d.value=F.map(I=>({id:I.id}))}v.onMounted(()=>{j()}),v.onUnmounted(()=>{h.value&&(h.value.disable(),h.value=null),r.value&&nr().unregisterInputListener(r.value)});function $(F){S("chosen",{slotId:F})}function O(F){const I=D(F);if(I){if(ut().saves.mode==="manual"&&I.slotType==="auto"){Kt().alert("Sorry","Can't delete the auto save slot!");return}g.saveToDelete=F}}function E(F){tL(F);const I=o.find(B=>B.id===F);I&&(I.saveData=null),j()}function V(){S("close")}function L(F,I){const B=m[I];B==="Load"?$(F):B==="Delete"?O(F):B==="Choose"&&(b.saveToOverwrite=F)}function D(F){return o.find(I=>I.id===F)}return(F,I)=>(v.openBlock(),v.createBlock(Ca,{onClose:V,containerCssClass:"save-modal",cantClose:!1},{header:v.withCtx(()=>[v.createElementVNode("h3",aV,v.toDisplayString(F.mode==="load"?"Choose a save to load":"Pick a slot to save the game"),1)]),body:v.withCtx(()=>[y.value==="manual"?(v.openBlock(),v.createElementBlock("div",lV,[v.createElementVNode("div",cV,[uV,v.createVNode(v.TransitionGroup,{name:"list",tag:"div"},{default:v.withCtx(()=>[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(s.value,B=>(v.openBlock(),v.createBlock(Ny,{key:B.id,saveSlot:B,id:B.id,actions:m,onChoice:q=>L(B.id,q),inputListener:r.value,selected:p.value===B.id,ref_for:!0,ref_key:"autoSlotsElements",ref:c},null,8,["saveSlot","id","actions","onChoice","inputListener","selected"]))),128))]),_:1})]),v.createElementVNode("div",fV,[dV,v.createVNode(v.TransitionGroup,{name:"list",tag:"div"},{default:v.withCtx(()=>[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(a.value,B=>(v.openBlock(),v.createBlock(Ny,{key:B.id,saveSlot:B,id:B.id,actions:m,onChoice:q=>L(B.id,q),inputListener:r.value,selected:p.value===B.id,ref_for:!0,ref_key:"manualSlotsElements",ref:f},null,8,["saveSlot","id","actions","onChoice","inputListener","selected"]))),128))]),_:1})])])):(v.openBlock(),v.createElementBlock("div",hV,[pV,v.createElementVNode("div",mV,[v.createVNode(v.TransitionGroup,{name:"list",tag:"div"},{default:v.withCtx(()=>[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(o,B=>(v.openBlock(),v.createBlock(Ny,{key:B.id,saveSlot:B,id:B.id,actions:m,onChoice:q=>L(B.id,q),selected:p.value===B.id,inputListener:r.value,ref_for:!0,ref_key:"saveSlotsElements",ref:l},null,8,["saveSlot","id","actions","onChoice","selected","inputListener"]))),128))]),_:1})])])),g.saveToDelete?(v.openBlock(),v.createBlock(Up,{key:2,prompt:g.prompt,onRefuse:g.onRefuse,onConfirm:g.onConfirm},null,8,["prompt","onRefuse","onConfirm"])):v.createCommentVNode("",!0),b.saveToOverwrite?(v.openBlock(),v.createBlock(Up,{key:3,prompt:b.prompt,onRefuse:b.onRefuse,onConfirm:b.onConfirm},null,8,["prompt","onRefuse","onConfirm"])):v.createCommentVNode("",!0)]),_:1}))}}),gV=v.defineComponent({__name:"start-menu-button",props:{button:{}},emits:["click"],setup(t){return(e,n)=>(v.openBlock(),v.createElementBlock("button",{class:v.normalizeClass(["nrt-button menu-button main-menu-button large override",e.button.cssClass]),onClick:n[0]||(n[0]=r=>e.$emit("click"))},v.toDisplayString(e.button.title),3))}});class Iy extends Ay{setup(e=!1){const r=e?"keydown":"keyup",i=bd(s=>{Io.emit("debouncedKeydown",s)},10,{isImmediate:!0,maxWait:10}),o=Ir().inputsContainer;o.addEventListener("keydown",s=>{Io.emit("keydown",s)}),o.addEventListener(r,s=>{i(s)})}}const Io=new Iy,Ry=Lr("startMenu",{state:()=>({buttons:[]}),actions:{addButtonsFromPlugins(){dn.plugins.forEach(e=>{e.startMenuButtons&&e.startMenuButtons.forEach(n=>{const r=window.narrat.app;n.popupComponent&&r.component(n.popupComponent.name,n.popupComponent.component),this.buttons.push(n)})})}}});function vV(){U_()}function I_(){vV(),Kt().menuReturn()}async function yV(t){if(ut().saves.mode==="manual"){const e=X0();e&&(t=e.id)}Kt().setSaveSlot(t),H_(Ms().globalSave),R_(),Zt().runGame()}function R_(){ui().stopAll(),nc("onPressStart"),Zt().start(),Kt().prepareToPlay(),dn.callHook("onGameStart")}async function bV(t,e){if(ut().saves.mode==="manual"){const n=X0();n&&(e=n.id)}if(Kt().setSaveSlot(e),R_(),t.saveData){Nz({gameSave:t.saveData,globalSave:Ms().globalSave}),ui().reloadAudio(t.saveData.audio);const n=Zt(),r=ut().saves.runOnReload;typeof r=="string"&&await Zt().runLabelFunction(r),n.jumpToLabel(t.saveData.vm.lastLabel)}}const wV={id:"game-menu"},SV={id:"game-header",class:"flex flex-col justify-between items-center"},kV={id:"game-title-container"},$V={id:"game-title-text"},xV={class:"nrt-title"},Dy=Po(v.defineComponent({__name:"StartMenu",setup(t){const e=v.ref(nr().registerInputListener("start-menu",{})),n=v.ref([]),r=v.ref(null),i=v.ref(!1),o=v.ref(!1),s=v.ref(null),a=v.ref(null),l=v.ref(!1),c=v.ref(!1),f=v.ref(null),u=Ry(),d=v.ref(!1),h=v.ref(null),p=v.computed(()=>u.buttons),m=Ea({mode:"list",container:r,listener:e.value,onChosen:B=>{y(n.value[B])}});function y(B){switch(B.id){case"continue":E();break;case"new-game":g();break;case"load-game":V();break;case"exit":Kt().exitGame();break;default:S(B);break}}async function g(){i.value&&ut().saves.mode==="manual"&&!ut().saves.disabled?c.value=!0:b()}async function b(){if(a.value===null)if(ut().saves.mode==="manual"){const B=X0();if(!B){vt("No autosave found");return}a.value=B.id}else{const B=ZD();if(!B){vt("No free slot found");return}a.value=B}c.value=!1,await yV(a.value)}function S(B){const q=p.value.findIndex(Z=>Z.id===B.id),ee=p.value[q];ee.action&&ee.action(),ee.popupComponent&&(d.value=ee)}function j(){d.value=!1}function $(){c.value=!1}async function O(){if(!a.value)return;const B=sd(a.value);if(!B){vt("No save file found");return}bV(B,a.value)}function E(){typeof s.value=="string"&&(a.value=s.value,O())}function V(){l.value=!0}function L({slotId:B}){const q=sd(B);q&&q.saveData?(a.value=B,O()):g()}v.onMounted(()=>{const B=Ms();B.slots.some(q=>q.saveData)&&(i.value=!0),(ut().saves.mode==="manual"||B.slots.some(q=>!q.saveData))&&(o.value=!0),B.lastSaveSlot&&sd(B.lastSaveSlot)&&(s.value=B.lastSaveSlot),D(),f.value=Io.on("debouncedKeydown",q=>{q.key===" "&&b(),q.key==="c"&&E()}),v.nextTick(()=>{m.select(0)}),yo().options.defaultMusic&&(h.value=VL(yo().options.defaultMusic)),dn.callHook("onStartScreenMounted")});function D(){const B=ut().saves.disabled;s.value&&!B&&n.value.push(F({id:"continue",title:"Continue",cssClass:"continue-button"})),o.value&&n.value.push(F({id:"new-game",title:"New Game",cssClass:"start-button"})),i.value&&!B&&n.value.push(F({id:"load-game",title:"Load Game",cssClass:"continue-button"}));for(const q of p.value)n.value.push({id:q.id,title:q.text,cssClass:`${q.id}-start-menu-button`});n.value.push(F({id:"exit",title:"Exit",cssClass:"exit-button"}))}function F({id:B,title:q,cssClass:ee}){const Z=ut().menuButtons[B];if(Z){let se=ee;return Z.cssClass&&(se=`${Z.cssClass} ${ee}`),{id:B,title:Z.text??q,cssClass:se}}return{id:B,title:q,cssClass:ee}}v.onUnmounted(()=>{if(e.value&&nr().unregisterInputListener(e.value),f.value&&Io.off("debouncedKeydown",f.value),typeof h.value=="number"){const B=yo().options.defaultMusic;zL(B,h.value)}});const I=v.computed(()=>ut().gameTitle);return(B,q)=>(v.openBlock(),v.createElementBlock("div",wV,[l.value?(v.openBlock(),v.createBlock(N_,{key:0,mode:"load",onChosen:L,onClose:q[0]||(q[0]=ee=>l.value=!1)})):v.createCommentVNode("",!0),c.value?(v.openBlock(),v.createBlock(Up,{key:1,prompt:"This will override your previous autosave, are you sure?",onConfirm:b,onRefuse:$})):v.createCommentVNode("",!0),v.createElementVNode("div",SV,[v.createElementVNode("div",kV,[v.createElementVNode("h1",$V,v.toDisplayString(I.value),1)]),v.createElementVNode("div",{class:"flex flex-col start-menu-buttons-container",ref_key:"buttonsContainer",ref:r},[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(n.value,ee=>(v.openBlock(),v.createBlock(gV,{key:ee.id,button:ee,onClick:Z=>y(ee)},null,8,["button","onClick"]))),128))],512)]),d.value?(v.openBlock(),v.createBlock(v.Teleport,{key:2,to:"#narrat"},[v.createVNode(Ca,{onClose:j,class:v.normalizeClass(`start-menu-popup-${d.value.id}`)},{header:v.withCtx(()=>[v.createElementVNode("h3",xV,v.toDisplayString(d.value.text),1)]),body:v.withCtx(()=>[d.value.popupComponent?(v.openBlock(),v.createBlock(v.resolveDynamicComponent(d.value.popupComponent.component),{key:0,onClose:j},null,32)):v.createCommentVNode("",!0)]),_:1},8,["class"])])):v.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-064e4df2"]]);function Hp(t){const e=bm().characters[t];return e||vt(`Character ${t} not found`),e}function jV(t,e){const n=Hp(t);if(n&&(e||(e="default"),n.sprites)){const r=n.sprites[e];return r==="none"?void 0:typeof r=="string"?{image:r}:r}}function D_(t){return`${bm().config.imagesPath}${t}`}function _V(t){return typeof t=="object"&&Object.hasOwn(t,"image")}function CV(t){return typeof t=="object"&&Object.hasOwn(t,"video")}function Ly(t){var e;return t?((e=Hp(t))==null?void 0:e.style)||{}:{}}const TV=["src"],OV=["autoplay","loop","muted"],EV=["src"],AV=v.defineComponent({__name:"dialog-picture",props:{picture:{},video:{},character:{},pose:{}},setup(t){const e=t,n=v.computed(()=>e.video),r=v.computed(()=>Ir().layoutMode),i=v.computed(()=>{var l;const s={};if(!e.character)return{};e.character&&(s[e.character]=!0);const a=Hp(e.character);return(l=a==null?void 0:a.style)!=null&&l.portraitCssClass&&(s[a.style.portraitCssClass]=!0),s}),o=v.computed(()=>{var h,p;const s=Ir(),a=ut().layout;let l=0,c=0;const f=a.portraits;if(r.value==="vertical"){const m=((h=f.offset)==null?void 0:h.portrait)??{right:0,bottom:0};l=20+m.right,c=s.dialogHeight+m.bottom}else{const m=((p=f.offset)==null?void 0:p.landscape)??{right:0,bottom:0},y=ut().dialogPanel.rightOffset??fy.dialogPanel.rightOffset;l=$m()-10+m.right+y,c=200+m.bottom}let u=a.portraits.width,d=a.portraits.height;return e.video&&(u=e.video.width??u,d=e.video.height??d),e.picture&&(u=e.picture.width??u,d=e.picture.height??d),{right:`${l}px`,bottom:`${c}px`,width:`${u}px`,height:`${d}px`}});return(s,a)=>{var l;return v.openBlock(),v.createElementBlock("div",{class:v.normalizeClass(["dialog-picture override",i.value]),style:v.normalizeStyle(o.value)},[s.picture?(v.openBlock(),v.createElementBlock("img",{key:0,src:v.unref(Gi)(v.unref(D_)((l=s.picture)==null?void 0:l.image)),class:v.normalizeClass(["picture override",i.value])},null,10,TV)):v.createCommentVNode("",!0),n.value?(v.openBlock(),v.createElementBlock("video",{key:1,class:"picture override",autoplay:n.value.autoplay!==!1,loop:n.value.loop!==!1,muted:!!n.value.muted},[v.createElementVNode("source",{src:v.unref(Gi)(v.unref(D_)(n.value.video))},null,8,EV)],8,OV)):v.createCommentVNode("",!0)],6)}}});function PV(){return yo().dialogAudio}function L_(t){const e=PV();if(e){if(e.characterAudio&&e.characterAudio[t])return e.characterAudio[t];if(e.defaultAudio)return e.defaultAudio}}function B_(t,e){if(typeof e!="string")return;const n=L_(t);return n==null?void 0:n.soundPerLetter}function MV(t,e){if(typeof e!="string")return;const n=B_(t,e);if(!n)return;const r=n;let i="";return r.prefix&&(i+=r.prefix),i+=e,r.suffix&&(i+=r.suffix),i}function NV(t,e){if(typeof e!="string")return;const n=e.toLowerCase(),r=MV(t,n);if(typeof r!="string")return;const i=ss(r);if(i){const o=B_(t,n);let s=1;o.volume&&(s=o.volume);const a=ui().audioVolume("sound",r)*s;i.volume(a),i.play()}}function IV(t){const e=L_(t);if(e!=null&&e.soundOnNewLine){const n=ss(e.soundOnNewLine);if(n){const r=ui().audioVolume("sound",e.soundOnNewLine);n.volume(r),n.play()}}}const RV=["innerHTML"],DV=["innerHTML"],LV=["innerHTML"],BV={key:1},FV=["onClick","innerHTML"],VV={key:1},zV={key:2,class:"buttons-container"},qV=v.defineComponent({__name:"dialog-box",props:{options:{},active:{type:Boolean},inputListener:{}},setup(t,{expose:e}){const n=v.ref(null),r=v.ref(""),i=v.ref(!1),o=v.ref(null),s=v.ref(null),a=v.ref(!1),l=v.ref(null),c=v.ref(null),f=v.ref(null),u=v.ref(null),d=v.ref(null),h=t,p=v.ref(null);h.active&&(p.value=Ea({mode:"list",container:n,listener:h.inputListener,onlyVertical:!0,onChosen:he=>{le.value&&R.value?$(R.value[he]):b(" ")}})),v.onMounted(()=>{ee(),a.value=!0}),v.onUnmounted(()=>{m(),I(),G({unmounted:!0})});function m(){o.value&&(clearTimeout(o.value),o.value=null),y()}function y(){p.value&&(p.value.disable(),p.value=null)}function g(he){b(he.key)}function b(he){if(!le.value){a.value&&s&&he===" "&&G({pressedSpace:!0});return}if(le.value&&h.options.textField&&he==="Enter"&&D(),le.value&&!h.options.textField){let _e=-1;switch(he){case" ":_e=0;break;case"1":_e=0;break;case"2":_e=1;break;case"3":_e=2;break;case"4":_e=3;break;case"5":_e=4;break;case"6":_e=5;break;case"7":_e=6;break;case"8":_e=7;break}_e!==-1&&R.value&&_e<R.value.length?$(R.value[_e]):_e===0&&$(_e)}}function S(){le.value||a.value&&s&&G({pressedSpace:!0})}function j(){i.value||$(0)}function $(he){O();let _e;typeof he=="object"?_e=he.originalIndex:_e=he,Kt().playerAnswered(_e)}function O(){m(),G({unmounted:!0}),i.value=!0}function E(he){const _e={};return he.allowed||(_e.pointerEvents="none",_e.textDecoration="line-through"),_e}function V(he,_e){const Ze={index:he+1,choice:_e.choice};let ce='<span class="choice-index">%{$index}. </span> <span class="choice-text">%{$choice}</span>';if(Y1().choiceTextTemplate&&(ce=Y1().choiceTextTemplate),_e.flag){const He=cT(_e.flag);He!=null&&He.textTemplate&&(ce=He.textTemplate)}return hx(Ze,ce)}function L(he){const _e={};if(he.allowed||(_e["strike-anim"]=!0),he.seenBefore&&(_e["seen-before"]=!0),he.flag){const Ze=cT(he.flag);Ze!=null&&Ze.cssClass&&(_e[Ze.cssClass]=!0)}return _e}function D(){const he=r.value;I(),Kt().playerAnswered(he)}function F(){h.options.textField&&(nr().startTyping(),o.value=setTimeout(()=>{le.value&&(d.value=nr().registerInputListener("text-field-input-grabber",{}),u.value&&u.value.focus())},100))}function I(){nr().stopTyping(),d.value&&(nr().unregisterInputListener(d.value),d.value=null)}function B(he,_e){const Ze=h.options.text.substring(he,_e);s.value.text+=Ze;const ce=Ze.substring(0,1);return NV(h.options.styleId,ce),_e}function q(he){const _e=he[0];return s.value.text+=_e,s.value.skippedChars+=_e.length,_e.length}function ee(){if(!h.options.old)if(er().playMode==="skip")Z();else if(IV(h.options.styleId),ut().dialogPanel.animateText){s.value={text:"",index:0,startTime:Date.now(),timer:null,skippedChars:0,tags:DL(h.options.text),finished:!1};const he=s.value;he.timer=setInterval(()=>{U()},30)}else M.value&&(l.value=setTimeout(()=>{G()},(ut().dialogPanel.textSpeed??Pp)*h.options.text.length))}function Z(){er().playMode==="skip"&&!h.options.old&&(M.value?c.value=setTimeout(()=>{G()},100):(er().toggleSkip(),G({unmounted:!0})))}function se(){er().playMode==="auto"&&!h.options.old&&M.value&&le&&j()}function U(){const he=s.value;if(!he)return;const _e=he.index,Ze=Date.now()-he.startTime;let ce=!1,He=Math.round(Ze/(ut().dialogPanel.textSpeed??Pp))+he.skippedChars;if(He>h.options.text.length&&(ce=!0,he.finished=!0,He=h.options.text.length),He!==he.index){let ot=_e;for(;he.tags.length>0&&He>=he.tags[0].index;){ot=B(ot,he.tags[0].index);const Ve=q(he.tags.shift());ot+=Ve,He+=Ve}ot=B(ot,He),he.index=ot}ce&&G()}function G({unmounted:he,pressedSpace:_e}={}){Zt().endTextAnimation(),he||F(),setTimeout(()=>{p.value&&p.value.select(0)},10),s.value&&(s.value.timer&&clearInterval(s.value.timer),s.value=null),l.value&&!_e&&clearTimeout(l.value),c.value&&clearTimeout(c.value),f.value&&clearTimeout(f.value),!he&&!_e&&er().playMode!=="normal"&&M&&(f.value=setTimeout(()=>{j()},er().playMode==="auto"?ut().dialogPanel.timeBetweenLines??pu.common.dialogPanel.timeBetweenLines:0))}const A=v.computed(()=>h.options.title?" &nbsp;–&nbsp; ":""),k=v.computed(()=>({...Ly(h.options.styleId).boxCss})),M=v.computed(()=>!R.value&&!h.options.textField),_=v.computed(()=>{const he={};return h.options.title&&(he["dialog-box-followup"]=!0),h.options.old?he["dialog-box-old"]=!0:he["dialog-box-new"]=!0,he}),w=v.computed(()=>{const he=Ly(h.options.styleId);return{color:he.color,...he.nameCss}}),x=v.computed(()=>Ly(h.options.styleId).textCss),T=v.computed(()=>s.value?s.value.text:h.options.text),R=v.computed(()=>{if(h.options.choices)return h.options.choices}),ie=v.computed(()=>er().playMode==="skip"),me=v.computed(()=>er().playMode==="auto"),le=v.computed(()=>h.active&&a.value&&!i.value&&!f.value&&!s.value&&h.options.interactive&&!Ue.value),ae=Kt(),Ue=v.computed(()=>ae.paused);return v.watch(()=>h.options,(he,_e)=>{!_e.old&&he.old&&s&&G({unmounted:!0})}),v.watch(ie,(he,_e)=>{he&&!_e&&Z()}),v.watch(me,(he,_e)=>{he&&!_e&&se()}),e({keyboardEvent:g}),(he,_e)=>{const Ze=v.resolveDirective("visible");return v.openBlock(),v.createElementBlock("div",{class:v.normalizeClass(["dialog-box w-full override",_.value]),style:v.normalizeStyle(k.value)},[v.createElementVNode("div",{class:"dialog-content",onClick:S},[he.options.title?(v.openBlock(),v.createElementBlock("span",{key:0,class:"dialog-title override",style:v.normalizeStyle(w.value),innerHTML:he.options.title},null,12,RV)):v.createCommentVNode("",!0),v.createElementVNode("span",{class:"dialog-text dialog-separator override",style:v.normalizeStyle(x.value),innerHTML:A.value},null,12,DV),v.createElementVNode("span",{class:v.normalizeClass(["dialog-text override",he.options.cssClass]),style:v.normalizeStyle(x.value),innerHTML:T.value},null,14,LV),he.options.old?v.createCommentVNode("",!0):v.withDirectives((v.openBlock(),v.createElementBlock("div",BV,[R.value?(v.openBlock(),v.createElementBlock("div",{key:0,class:"dialog-choices",ref_key:"choicesDiv",ref:n},[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(R.value,(ce,He)=>(v.openBlock(),v.createElementBlock("p",{key:He,style:v.normalizeStyle(E(ce)),class:v.normalizeClass([L(ce),"dialog-choice override"]),onClick:ot=>$(ce),innerHTML:V(He,ce)},null,14,FV))),128))],512)):he.options.textField?(v.openBlock(),v.createElementBlock("div",VV,[v.withDirectives(v.createElementVNode("input",{autofocus:"",type:"text",class:"label-input nrt-input",ref_key:"playerInput",ref:u,id:"player-input-field","onUpdate:modelValue":_e[0]||(_e[0]=ce=>r.value=ce)},null,512),[[v.vModelText,r.value]]),v.createElementVNode("button",{onClick:D,class:"nrt-button",id:"player-input-submit"}," Submit ")])):(v.openBlock(),v.createElementBlock("div",zV,[v.createElementVNode("div",{onClick:_e[1]||(_e[1]=ce=>$(0)),ref:"continue",class:"interact-button nrt-button override"}," Continue ",512)]))])),[[Ze,le.value]])])],6)}}}),UV={key:0,class:"auto-play-feedback-container"},HV=v.defineComponent({__name:"AutoPlayFeedback",setup(t){const e=er(),n=v.computed(()=>e.playMode==="auto"),r=v.computed(()=>e.playMode==="skip"),i=v.computed(()=>n.value?"auto-play-feedback-auto":r.value?"auto-play-feedback-skip":{}),o=v.computed(()=>n.value?"Auto Play":r.value?"Skip":"");return(s,a)=>o.value?(v.openBlock(),v.createElementBlock("div",UV,[v.createElementVNode("div",{class:v.normalizeClass(["auto-play-feedback",i.value])},v.toDisplayString(o.value),3)])):v.createCommentVNode("",!0)}}),WV=v.createElementVNode("div",{class:"anchor"},null,-1),By=v.defineComponent({__name:"game-dialog",setup(t){const e=v.computed(()=>Ir().layoutMode),n=v.computed(()=>nr().inGameInputListener),r=v.ref(Kt().inScript),i=v.ref(null),o=Ir(),s=Zt(),a=v.computed(()=>s.stack),l=er(),c=v.computed(()=>l.dialog),f=v.ref(null),u=v.ref(null),d=v.ref(null),h=v.computed(()=>{let I="0px";const B=ut().layout.dialogBottomPadding;return typeof B=="number"?I=`${B}px`:typeof B=="string"&&(I=B),{paddingBottom:I}}),p=v.computed(()=>{if(c.value.length>0)return c.value[c.value.length-1]}),m=v.computed(()=>{if(p.value)return p.value.speaker}),y=v.computed(()=>{if(p.value)return p.value.pose}),g=v.computed(()=>{if(p.value){const I=m.value;let B=y.value;return I?(B||(B="idle"),B):void 0}}),b=v.computed(()=>{if(!g.value)return;const I=m.value;return jV(I,g.value)}),S=v.computed(()=>{const I=b.value;if(_V(I))return I}),j=v.computed(()=>{const I=b.value;if(CV(I))return I}),$=v.computed(()=>o.dialogWidth),O=v.computed(()=>Kt().inScript);v.watch(O,I=>{I?r.value=!0:er().playMode!=="normal"?(er().playMode==="skip"&&(er().playMode="normal"),i.value=setTimeout(()=>{r.value=!1},500)):r.value=!1}),v.onMounted(()=>{if(n.value){const B=n.value;B.actions.autoPlay={press:()=>{er().toggleAutoPlay()}},B.actions.skip={press:()=>{er().toggleSkip()}}}const I=B=>{u.value&&u.value.keyboardEvent&&u.value.keyboardEvent(B)};I.value=Io.on("debouncedKeydown",I)}),v.onUnmounted(()=>{n.value&&(delete n.value.actions.autoPlay,delete n.value.actions.skip),d.value&&Io.off("debouncedKeydown",d.value),i.value&&clearTimeout(i.value)});const E=v.computed(()=>{let I;const B=`${Ir().dialogHeight}px`,q={};if(Ir().overlayMode){q.position="absolute";const ee=ut().dialogPanel.rightOffset??pu.common.dialogPanel.rightOffset;q.right=`${ee}px`;const Z=ut().dialogPanel.bottomOffset??pu.common.dialogPanel.bottomOffset;q.bottom=`${Z}px`}return{...q,width:e.value==="horizontal"?`${$.value}px`:"100%",height:B,transform:I,transformOrigin:"right"}});function V(){er().toggleAutoPlay()}function L(){er().toggleSkip()}function D(I,B){const q=Hp(I.speaker);let ee=(q==null?void 0:q.name)??"Missing Character";return B>=1&&c.value[B-1].speaker===I.speaker&&(ee=void 0),I.choices&&I.choices.forEach(Z=>{Z.choice=Is(Z.choice)}),{title:ee??"",text:I.text,cssClass:I.cssClass,styleId:I.speaker,choices:I.choices,old:B<c.value.length-1,interactive:I.interactive,textField:I.textField}}function F(I){return I===l.dialog.length-1&&a.value.length>0}return v.watch(c.value,I=>{if(f.value){const B=f.value;B.scrollTop=B.scrollHeight+1e8}}),(I,B)=>(v.openBlock(),v.createElementBlock(v.Fragment,null,[v.createVNode(HV),v.createVNode(v.Transition,{name:"fade"},{default:v.withCtx(()=>[(S.value||j.value)&&v.unref(o).showDialog?(v.openBlock(),v.createBlock(AV,{key:0,picture:S.value,video:j.value,character:m.value,pose:y.value},null,8,["picture","video","character","pose"])):v.createCommentVNode("",!0)]),_:1}),v.createVNode(v.Transition,{name:"dialog-transition"},{default:v.withCtx(()=>[v.unref(o).showDialog?(v.openBlock(),v.createElementBlock("div",{key:0,class:"dialog override",ref_key:"dialogRef",ref:f,style:v.normalizeStyle(E.value)},[v.createVNode(v.TransitionGroup,{name:"list",tag:"div",class:"dialog-container w-full override",style:v.normalizeStyle(h.value)},{default:v.withCtx(()=>[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(c.value,(q,ee)=>(v.openBlock(),v.createBlock(qV,{ref_for:!0,ref:Z=>u.value=Z,key:q.id,options:D(q,ee),active:F(ee),inputListener:n.value},null,8,["options","active","inputListener"]))),128))]),_:1},8,["style"]),(v.openBlock(),v.createBlock(v.Teleport,{to:"#narrat-app"},[v.createElementVNode("div",{class:"auto-skip-buttons flex"},[v.createElementVNode("div",{class:"nrt-button menu-toggle-button auto-button auto",onClick:V}," Auto "),v.createElementVNode("div",{class:"nrt-button menu-toggle-button auto-button skip",onClick:L}," Skip ")])])),WV],4)):v.createCommentVNode("",!0)]),_:1})],64))}}),KV=["id"],GV=["src"],JV={class:"tab-title"},F_=v.defineComponent({__name:"tab-selector",props:{tab:{},active:{type:Boolean}},emits:["click"],setup(t,{emit:e}){const n=t,r=e,i=v.computed(()=>n.active?"tab-active":"tab-inactive");function o(){r("click")}return(s,a)=>(v.openBlock(),v.createElementBlock("div",{class:v.normalizeClass(["tab",i.value]),id:`tab-${s.tab.id}`,onClick:o},[v.createElementVNode("div",{class:v.normalizeClass(["tab-title-container",s.active?"active":""])},[s.tab.icon?(v.openBlock(),v.createElementBlock("img",{key:0,src:s.tab.icon,alt:"tab icon",class:"tab-icon"},null,8,GV)):v.createCommentVNode("",!0),v.createElementVNode("span",JV,v.toDisplayString(s.tab.label),1)],2)],10,KV))}}),QV={class:"tabs-controller"},YV={key:0,class:"tabs-controller__tabs"},XV={key:1,class:"tab-content"},ZV={key:2},ez=[v.createElementVNode("div",{class:"tab-content__empty"},[v.createElementVNode("p",null,"No tab selected")],-1)],tz=v.defineComponent({__name:"TabsController",props:{tabs:{},defaultTab:{}},emits:["tab-change","close"],setup(t,{emit:e}){const n=v.ref(nr().registerInputListener("tabs-controller",{cancel:{press:()=>{r("close")}},system:{press:()=>{r("close")}},menu:{press:()=>{r("close")}},previousTab:{press:()=>{o.value>0&&s(o.value-1)}},nextTab:{press:()=>{o.value<i.tabs.length-1&&s(o.value+1)}}})),r=e,i=t,o=v.ref(i.defaultTab);function s(l){o.value=l,r("tab-change",l)}const a=v.computed(()=>i.tabs[o.value]);return v.onUnmounted(()=>{n.value&&(nr().unregisterInputListener(n.value),n.value=null)}),(l,c)=>(v.openBlock(),v.createElementBlock("div",QV,[l.tabs.length>1?(v.openBlock(),v.createElementBlock("div",YV,[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(l.tabs,(f,u)=>(v.openBlock(),v.createBlock(F_,{key:f.id,tab:f,active:u===o.value,onClick:()=>s(u),inputListener:n.value},null,8,["tab","active","onClick","inputListener"]))),128))])):v.createCommentVNode("",!0),a.value?(v.openBlock(),v.createElementBlock("div",XV,[a.value?(v.openBlock(),v.createBlock(v.resolveDynamicComponent(a.value.component),{key:0,inputListener:n.value,onClose:c[0]||(c[0]=f=>l.$emit("close"))},null,40,["inputListener"])):v.createCommentVNode("",!0)])):(v.openBlock(),v.createElementBlock("div",ZV,ez))]))}}),nz={class:"menu-container menu-toggle"},rz=["onClick","id"],iz={class:"nrt-title"},Fy=v.defineComponent({__name:"menu-buttons",setup(t){const e=hi(),n=v.ref(null);v.onMounted(()=>{dn.callHook("onGameMounted")}),v.onUnmounted(()=>{n.value&&Io.off("keydown",n.value),dn.callHook("onGameUnmounted")});function r(f){hi().activeMenu=f}const i=v.computed(()=>e.menus),o=v.computed(()=>e.menu),s=v.computed(()=>{var f;return(((f=o.value)==null?void 0:f.tabs)??[]).filter(u=>u.condition?u.condition():!0).map(u=>({id:u.id,label:u.text,component:u.component}))});function a(){e.closeMenu()}function l(f){e.setActiveTab(f)}function c(){return a()}return(f,u)=>(v.openBlock(),v.createElementBlock("div",nz,[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(i.value,(d,h)=>(v.openBlock(),v.createElementBlock("button",{key:d.id,onClick:p=>r(d.id),id:d.cssId??`${h}-menu-button`,class:"nrt-button menu-toggle-button"},v.toDisplayString(d.label),9,rz))),128)),o.value?(v.openBlock(),v.createBlock(v.Teleport,{key:0,to:"#narrat"},[v.createVNode(Ca,{containerCssClass:{[o.value.cssClass]:!0,"menu-modal":!0},onClose:a},{header:v.withCtx(()=>{var d;return[v.createElementVNode("h3",iz,v.toDisplayString(((d=v.unref(e).tab)==null?void 0:d.text)??o.value.label),1)]}),body:v.withCtx(()=>[v.createVNode(tz,{onTabChange:l,onClose:c,tabs:s.value,defaultTab:o.value.activeTab},null,8,["tabs","defaultTab"])]),_:1},8,["containerCssClass"])])):v.createCommentVNode("",!0)]))}});function V_(t){const e={};return t.selected&&(e.selected=!0),t.clickable&&t.viewportClickable&&!t.transitioning&&(e.interactable=!0),(!t.clickable||!t.viewportClickable)&&(e["nrt-disabled"]=!0),t.transitioning&&(e.transitioning=!0),t.greyed&&(e.greyed=!0),t.hidden&&(e.hidden=!0),t.cssClass&&(e[t.cssClass]=!0),e}function oz(t,e,n){return{selected:e,clickable:t.onClick!==void 0,viewportClickable:qp(t),transitioning:n,greyed:!1,hidden:!1,cssClass:t.cssClass}}function sz(t,e,n){const r=bl(t),i=No().getButtonState(t),o=nr().inputMode;return{selected:e&&o==="gamepad",clickable:No().isButtonInteractible(t),viewportClickable:qp(r),transitioning:n,greyed:i==="greyed",hidden:i==="hidden"||i===!1,cssClass:r.cssClass}}function az(t,e,n){return V_(sz(t,e,n))}function lz(t,e,n){return V_(oz(t,e,n))}const cz=["id"],uz=["innerHTML"],fz=v.defineComponent({__name:"screen-object",props:{screenObject:{},layerSelected:{type:Boolean},transitioning:{type:Boolean},activeInteractive:{}},setup(t){const e=t,n=vo();function r(a){e.transitioning||e.screenObject.onClick&&n.clickObject(a)}const i=v.computed(()=>{if(!e.layerSelected)return!1;const a=e.activeInteractive;return a.type==="screenObject"&&a.id===e.screenObject.id}),o=v.computed(()=>lz(e.screenObject,i.value,e.transitioning)),s=v.computed(()=>{const a={};e.screenObject.opacity!==1&&(a.opacity=e.screenObject.opacity);let l=e.screenObject.x,c=e.screenObject.y,f=e.screenObject.width,u=e.screenObject.height;if(e.screenObject.anchor){const h=e.screenObject.anchor;l=e.screenObject.x-f*h.x,c=e.screenObject.y-u*h.y,a.transformOrigin=`${h.x*100}% ${h.y*100}%`}e.screenObject.scale&&(f=f*e.screenObject.scale,u=u*e.screenObject.scale);const d={...a,left:`${l}px`,top:`${c}px`,width:`${f}px`,height:`${u}px`};return PF(e.screenObject)&&(d.backgroundImage=`url(${Au(e.screenObject.image)})`),d});return(a,l)=>{const c=v.resolveComponent("ScreenObject",!0);return v.openBlock(),v.createElementBlock("div",{tabindex:"-1",class:v.normalizeClass(["viewport-object",o.value]),id:`viewport-object-${e.screenObject.id}`,onClick:l[0]||(l[0]=f=>r(a.screenObject)),style:v.normalizeStyle(s.value)},[v.createElementVNode("span",{innerHTML:e.screenObject.text?v.unref(Is)(e.screenObject.text):void 0},null,8,uz),(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(e.screenObject.children,f=>(v.openBlock(),v.createBlock(c,{transitioning:a.transitioning,key:f.id,screenObject:f},null,8,["transitioning","screenObject"]))),128))],14,cz)}}}),dz=["id","innerHTML"],hz=v.defineComponent({__name:"viewport-button",props:{id:{},layerSelected:{type:Boolean},transitioning:{type:Boolean},activeInteractive:{}},setup(t){const e=t,n=No();v.computed(()=>n.getButtonState(e.id));const r=v.computed(()=>bl(e.id)),i=r.value.background?Au(r.value.background):null,o=v.computed(()=>{if(!e.layerSelected)return!1;const f=e.activeInteractive;return f.type==="button"&&f.id===e.id});v.computed(()=>n.isButtonClickable(e.id));const s=v.computed(()=>{const f=r.value.text??"";return Is(f)}),a=v.computed(()=>az(e.id,o.value,e.transitioning)),l=v.computed(()=>{const f={};r.value.position.width&&(f.width=`${r.value.position.width}px`),r.value.position.height&&(f.height=`${r.value.position.height}px`),r.value.background&&(f.backgroundImage=`url(${i})`);let u=r.value.position.left,d=r.value.position.top;return r.value.anchor&&(u=r.value.position.left-r.value.position.width*r.value.anchor.x,d=r.value.position.top-r.value.position.height*r.value.anchor.y),{...f,left:`${u}px`,top:`${d}px`}});function c(){n.clickOnButton(e.id)}return(f,u)=>(v.openBlock(),v.createElementBlock("div",{tabindex:"-1",class:v.normalizeClass(["viewport-button",a.value]),id:`viewport-button-${f.id}`,onClick:u[0]||(u[0]=d=>c()),style:v.normalizeStyle(l.value),innerHTML:s.value},null,14,dz))}}),pz=["id"],mz=["id","loop","muted"],gz=["src"],vz=["id"],Vy=v.defineComponent({__name:"screen-layer",props:{layer:{},layerIndex:{},transitioning:{type:Boolean},activeInteractive:{}},setup(t){const e=t,n=Kt(),r=vo(),i=v.computed(()=>!!(e.activeInteractive&&e.activeInteractive.layer===e.layerIndex)),o=v.computed(()=>r.tree.filter(y=>y.layer===e.layerIndex)),s=v.computed(()=>ut().layout.backgrounds.width),a=v.computed(()=>ut().layout.backgrounds.height),l=v.computed(()=>e.layer),c=v.computed(()=>{const y=Eu(l.value);return y||vt(`Screen ${l.value} doesn't have a config`),y}),f=v.computed(()=>n.isInGame),u=v.computed(()=>c.value.buttons||[]),d=v.computed(()=>c.value.video),h=v.computed(()=>({width:`${s.value}px`,height:`${a.value}px`})),p=v.computed(()=>{let y;return c.value.background!==Mp&&(y=`url(${Au(c.value.background)})`),{backgroundImage:y,position:"absolute",left:0,top:0,width:`${s.value}px`,height:`${a.value}px`}}),m=v.computed(()=>({position:"absolute",left:0,top:0,width:`${s.value}px`,height:`${a.value}px`}));return(y,g)=>f.value?(v.openBlock(),v.createElementBlock("div",{key:0,class:"viewport-layer",id:`viewport-layer-${l.value}`,style:v.normalizeStyle(h.value)},[d.value?(v.openBlock(),v.createElementBlock("video",{key:0,class:"viewport-layer-background",id:`viewport-layer-background-${l.value}`,style:v.normalizeStyle(m.value),autoplay:"",loop:d.value.loop!==!1,muted:!!d.value.muted},[v.createElementVNode("source",{src:v.unref(Gi)(c.value.background)},null,8,gz)],12,mz)):(v.openBlock(),v.createElementBlock("div",{key:1,class:"viewport-layer-background",id:`viewport-layer-background-${l.value}`,style:v.normalizeStyle(p.value)},null,12,vz)),(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(u.value,b=>(v.openBlock(),v.createBlock(hz,{key:b,id:b,layerSelected:i.value,transitioning:y.transitioning,activeInteractive:y.activeInteractive},null,8,["id","layerSelected","transitioning","activeInteractive"]))),128)),(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(o.value,b=>(v.openBlock(),v.createBlock(fz,{key:b.id,screenObject:b,transitioning:y.transitioning,layerSelected:i.value,activeInteractive:y.activeInteractive},null,8,["screenObject","transitioning","layerSelected","activeInteractive"]))),128))],12,pz)):v.createCommentVNode("",!0)}}),yz=v.defineComponent({__name:"NarratTransition",props:{name:{type:String,required:!0},duration:{type:Number,required:!0},delay:Number},emits:["complete"],setup(t,{emit:e}){v.useSlots();const n=e,r=t,i=v.ref("start"),o=v.reactive({oldSlotClasses:{},oldSlotStyle:{},newSlotClasses:{},newSlotStyle:{}});return v.onMounted(async()=>{const s=`narrat-transition-${r.name}`;o.newSlotClasses={[`${s}-enter-from`]:!0},o.oldSlotClasses={[`${s}-leave-active`]:!0},await Hi(30),o.oldSlotStyle={transitionDuration:`${r.duration/1e3}s`},o.newSlotStyle={transitionDuration:`${r.duration/1e3}s`},o.oldSlotClasses[`${s}-leave-to`]=!0,o.newSlotClasses[`${s}-enter-active`]=!0,await Hi(r.delay??0),delete o.newSlotClasses[`${s}-enter-from`],await Hi(r.duration),i.value="end",n("complete")}),(s,a)=>(v.openBlock(),v.createElementBlock(v.Fragment,null,[i.value!=="end"?(v.openBlock(),v.createElementBlock("div",{key:0,class:v.normalizeClass(["transition-holder",o.oldSlotClasses]),style:v.normalizeStyle(o.oldSlotStyle)},[v.renderSlot(s.$slots,"oldElement")],6)):v.createCommentVNode("",!0),v.createElementVNode("div",{class:v.normalizeClass(["transition-holder",o.newSlotClasses]),style:v.normalizeStyle(o.newSlotStyle)},[v.renderSlot(s.$slots,"newElement")],6)],64))}});function z_(t,e,n){return t<e?e:t>n?n:t}const zy=v.defineComponent({__name:"screens",setup(t){const e=v.computed(()=>nr().inGameInputListener),n=Kt(),r=No(),i=vo(),o=v.ref(0),s=v.computed(()=>r.nonEmptyLayers),a=v.computed(()=>{const p=[];return s.value.reduce((m,y,g)=>{const S=Eu(y.screen).buttons;if(S)for(const $ of S)r.isButtonClickable($)&&m.push({id:$,type:"button",layer:g});const j=i.tree.filter($=>$.layer===g);for(const $ of j)i.isScreenObjectClickable($)&&m.push({id:$.id,type:"screenObject",layer:g});return m},p)}),l=v.computed(()=>{if(a.value.length===0)return null;let p=o.value;return p>a.value.length-1&&(p=a.value.length-1),a.value[p]}),c=v.computed(()=>ut().layout.backgrounds.width),f=v.computed(()=>ut().layout.backgrounds.height),u=v.computed(()=>n.isInGame);function d(p){r.finishTransition(p)}const h=v.computed(()=>{const p=c.value;return{height:`${f.value}px`,width:`${p}px`}});return v.onMounted(()=>{v.nextTick(()=>{if(e.value){const p=e.value.actions;p.previousTab={press:()=>{o.value>0?o.value--:o.value=a.value.length-1,o.value=z_(o.value,0,a.value.length-1)}},p.left=p.previousTab,p.nextTab={press:()=>{o.value<a.value.length-1?o.value++:o.value=0,o.value=z_(o.value,0,a.value.length-1)}},p.right=p.nextTab,p.viewportSelect={press:()=>{if(l.value){const m=l.value;m.type==="button"?r.clickOnButton(m.id):m.type==="screenObject"&&i.clickObject(i.getObject(m.id))}}}}})}),v.onUnmounted(()=>{if(e.value){const p=e.value;delete p.actions.previousTab,delete p.actions.left,delete p.actions.nextTab,delete p.actions.right}}),(p,m)=>u.value?(v.openBlock(),v.createElementBlock("div",{key:0,class:"viewport",id:"narrat-viewport",style:v.normalizeStyle(h.value)},[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(s.value,(y,g)=>(v.openBlock(),v.createElementBlock("div",{key:y.screen??"",class:"layer-container"},[y.transition?(v.openBlock(),v.createBlock(yz,{key:0,name:y.transition.transition,duration:y.transition.duration,delay:y.transition.delay,onComplete:()=>d(g)},{oldElement:v.withCtx(()=>[y.transition.oldScreen?(v.openBlock(),v.createBlock(Vy,{key:0,layer:y.transition.oldScreen,layerIndex:g,transitioning:!0},null,8,["layer","layerIndex"])):v.createCommentVNode("",!0)]),newElement:v.withCtx(()=>[y.screen?(v.openBlock(),v.createBlock(Vy,{key:0,layer:y.screen,layerIndex:g,transitioning:!0},null,8,["layer","layerIndex"])):v.createCommentVNode("",!0)]),_:2},1032,["name","duration","delay","onComplete"])):y.screen?(v.openBlock(),v.createBlock(Vy,{key:1,layer:y.screen,layerIndex:g,transitioning:!1,activeInteractive:l.value},null,8,["layer","layerIndex","activeInteractive"])):v.createCommentVNode("",!0)]))),128))],4)):v.createCommentVNode("",!0)}}),so=Lr("hud",{state:()=>({hudStats:{},visible:!0}),actions:{updateConfig(t){for(const e in t.hudStats)this.hudStats[e]||(this.hudStats[e]={value:t.hudStats[e].startingValue})},reset(t){this.$reset(),this.updateConfig(t)},setStat(t,e){this.hudStats[t].value=e,this.getStat(t).value<(hc(t).minValue??0)&&(this.hudStats[t].value=hc(t).minValue??0),this.getStat(t).value>(hc(t).maxValue??1/0)&&(this.hudStats[t].value=hc(t).maxValue??1/0)},addStat(t,e){this.setStat(t,this.getStatValue(t)+e)},getStat(t){return this.hudStats[t]},getStatValue(t){return this.hudStats[t].value},generateSaveData(){return{hudStats:yn(this.hudStats),visible:this.visible}},loadSaveData(t){this.hudStats=rc(this.hudStats,t.hudStats),this.visible=t.visible},setVisibility(t){this.visible=t}}}),bz=v.defineComponent({data(){return{}},methods:{getStatImage(t){return Gi(this.statsConfig[t].icon)},formatStat(t,e){var a;const n=hc(t),r=n.decimals??2,i=Math.floor(e*10**r)/10**r,o={};(a=n.formatting)!=null&&a.style&&(o.style=n.formatting.style,n.formatting.style==="currency"&&(o.currency=n.formatting.currency??"USD",o.currencyDisplay="narrowSymbol"),n.formatting.style==="unit"&&(o.unit=n.formatting.unit??"day"));let s;try{s=i.toLocaleString(void 0,o)}catch(l){vt(`Error formatting HUD stat, probably using an invalid config: ${l}`),console.error(l),s=i.toLocaleString()}return s},statPrefix(t){const e=hc(t);return e.prefix??(e.suffix||e.hideName?"":e.name)},statSuffix(t){return hc(t).suffix??""}},computed:{...ud(so,["hudStats"]),...ud(Ir,["layoutMode"]),statsConfig(){return ut().hudStats},stats(){return this.hudStats},hudStyle(){let t="0";return this.layoutMode==="horizontal"&&(t=`${$m()+(ut().dialogPanel.rightOffset??pu.common.dialogPanel.rightOffset)}px`),{right:t}},hasHud(){return so().visible===!1?!1:Object.keys(so().hudStats).length>0}}}),wz=["src"],Sz=["innerHTML"],kz=["innerHTML"];function $z(t,e,n,r,i,o){return t.hasHud?(v.openBlock(),v.createElementBlock("div",{key:0,class:"hud",style:v.normalizeStyle(t.hudStyle)},[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(t.stats,(s,a)=>(v.openBlock(),v.createElementBlock("div",{key:a,class:"hud-stat"},[v.createElementVNode("img",{class:"hud-icon",src:t.getStatImage(a)},null,8,wz),v.createElementVNode("span",{class:"bold hud-text",innerHTML:t.statPrefix(a)},null,8,Sz),v.createElementVNode("span",null,v.toDisplayString(t.formatStat(a,s.value)),1),t.statSuffix?(v.openBlock(),v.createElementBlock("span",{key:0,innerHTML:t.statSuffix(a)},null,8,kz)):v.createCommentVNode("",!0)]))),128))],4)):v.createCommentVNode("",!0)}const qy=Po(bz,[["render",$z]]),Uy=v.defineComponent({__name:"in-game",setup(t){const e=nr(),n=v.computed(()=>e.inGameInputListener),r=Kt(),i=Ir(),o=v.computed(()=>i.layoutMode),s=v.computed(()=>r.saving),a=v.ref(null),l=er(),c=v.ref(null),f=v.computed(()=>s.value&&!s.value.withPrompt||s.value&&a.value),u=v.computed(()=>{let m="row";return o.value==="vertical"&&(m="column"),{flexDirection:m}});function d(m){if(a.value=null,m===null){Wy(m,!1);return}Wy(m,!0)}function h(){a.value=!0}function p(){a.value=!1,Wy(null,!1),a.value=null}return v.onBeforeMount(()=>{e.createInGameInputListener()}),v.onMounted(()=>{c.value=Io.on("debouncedKeydown",m=>{Kt().debugMode||((m.key==="a"||m.key==="A")&&l.toggleAutoPlay(),(m.key==="s"||m.key==="S")&&l.toggleSkip())})}),v.onUnmounted(()=>{n.value&&e.removeInGameInputListener(),c.value&&Io.off("debouncedKeydown",c.value)}),v.computed(()=>so().visible===!1?!1:Object.keys(so().hudStats).length>0),(m,y)=>(v.openBlock(),v.createElementBlock("div",{class:"game",style:v.normalizeStyle(u.value)},[v.createVNode(qy),v.createVNode(Fy),v.createVNode(zy),v.createVNode(By),f.value?(v.openBlock(),v.createBlock(N_,{key:0,mode:"pick",onChosen:d,onClose:y[0]||(y[0]=()=>d(null))})):v.createCommentVNode("",!0),s.value&&s.value.withPrompt&&a.value===null?(v.openBlock(),v.createBlock(Up,{key:1,prompt:"Would you like to save the game?",onConfirm:h,onRefuse:p})):v.createCommentVNode("",!0)],4))}}),xz={class:"chapter-title-scene"},jz=["innerHTML"],_z=["innerHTML"],Cz=v.defineComponent({__name:"chapter-title",props:{options:{}},setup(t){const e=t,n=v.ref(null);function r(){n.value=null,oo().changeScene(as.Playing),Zt().jumpToLabel(e.options.next_label)}return v.onMounted(()=>{n.value=setTimeout(r,e.options.duration??2e3)}),v.onUnmounted(()=>{n.value&&(clearTimeout(n.value),n.value=null)}),(i,o)=>(v.openBlock(),v.createElementBlock("div",xz,[v.createElementVNode("h1",{class:"title chapter-title",innerHTML:e.options.title},null,8,jz),e.options.subtitle?(v.openBlock(),v.createElementBlock("h2",{key:0,class:"subtitle chapter-subtitle",innerHTML:e.options.subtitle},null,8,_z)):v.createCommentVNode("",!0)]))}});var as=(t=>(t.EngineSplash="engine-splash",t.GameSplash="game-splash",t.StartMenu="start-menu",t.Playing="playing",t.ChapterTitle="chapter-title",t))(as||{});const q_={"engine-splash":{id:"engine-splash",component:v.shallowRef(Ey),props:{}},"game-splash":{id:"game-splash",component:v.shallowRef(My),props:{}},"start-menu":{id:"start-menu",component:v.shallowRef(Dy),props:{}},playing:{id:"playing",component:v.shallowRef(Uy),props:{}},"chapter-title":{id:"chapter-title",component:v.shallowRef(Cz),props:{}}};let Bs={};function Tz(t){Bs=t}function Oz(){q_["engine-splash"].onFinished=()=>{oo().onEngineSplashFinished()},oo().scenes=q_}function Ez(){return Bs}function U_(){for(const t in Bs){const e=Bs[t],n=e.store();let r;NF(e)&&(r=ar()[e.config]),n.reset&&!e.avoidReset&&n.reset(r)}dn.plugins.forEach(t=>{t.reset&&t.reset()})}function Az(){const t={},e={};for(const n in Bs){const r=Bs[n];if(P_(r)){const i=r.store();i.generateSaveData?t[r.save]=i.generateSaveData():vt(`Store ${n} has no generateSaveData method. Trying to generate save data for ${r.save}`)}if(M_(r)){const i=r.store();i.generateGlobalSaveData?e[r.globalSave]=i.generateGlobalSaveData():vt(`Store ${n} has no generateGlobalSaveData method. Trying to generate save data for ${r.globalSave}`)}}return dn.plugins.forEach(n=>{n.save&&(t.plugins[n.pluginId]=n.save())}),dn.customStores().forEach(([n,r])=>{if(r.save){const i=r.save();i&&(t.customStores==null&&(t.customStores={}),t.customStores[n]=i)}}),{gameSave:t,globalSave:e}}function Pz(t){for(const e in Bs){const n=Bs[e];if(P_(n)){const r=n.store();r.loadSaveData?r.loadSaveData(t[n.save]):vt(`Store ${e} has no loadSaveData method. Trying to load save data for ${n.save}`)}}dn.plugins.forEach(e=>{e.load&&t.plugins[e.pluginId]&&e.load(t.plugins[e.pluginId])}),dn.customStores().forEach(([e,n])=>{n.load&&n.load(t.customStores[e])})}function H_(t){for(const e in Bs){const n=Bs[e];if(M_(n)){const r=n.store();r.loadGlobalSaveData?r.loadGlobalSaveData(t[n.globalSave]):vt(`Store ${e} has no loadGlobalSaveData method. Trying to load global save data for ${n.globalSave}`)}}}function Mz(t){Pz(t.gameSave),H_(t.globalSave)}function Hy({slotId:t,name:e}){const n=Kt(),r=t??n.saveSlot;n.saveData=iL({slot:r,name:e,extractedSave:Az()})}function Nz(t){Mz(t)}function W_(){Zt().globalData={},Ms().globalSave.data={},Hy({})}function K_({saveName:t,withPrompt:e}){return new Promise(n=>{Zt().hasJumped?Kt().startManualSave(n,t,e):n()})}function Wy(t,e){var r;const n=Kt();if(!n.saving){vt("No saving in progress!");return}if(!e||!t){n.cancelManualSave();return}n.saveData?(oL(n.saveData,cu(n.playTime.start,n.playTime.previousPlaytime),t.slotId,(r=n.saving)==null?void 0:r.name),n.alert("Success","Game saved!")):vt("There was no data to save!"),n.cancelManualSave()}const Zt=Lr("vm",{state:()=>({stack:[],data:{},globalData:{},lastLabel:"main",script:{},labelStack:["main"],commandsWaitingForPlayerAnswer:[],promisesWaitingForTextAnimation:[],hasJumped:!1}),actions:{generateSaveData(){return{lastLabel:this.lastLabel,data:tb(this.data,t=>A_(t)?{_entityType:t._entityType,id:t.id}:null)}},generateGlobalSaveData(){return{data:yn(this.globalData)}},loadSaveData(t){this.lastLabel=t.lastLabel,this.data=yn(t.data),this.findEntitiesInData(this.data)},loadGlobalSaveData(t){this.globalData=t.data},findEntitiesInData(t){T_(this.data,(e,n,r)=>{if(A_(e)){const i=vo().getObject(e.id);i?r[n]=i:sc(`Trying to reload sprite ${n} (${JSON.stringify(e)} - ${e.id}) but it does not exist.`)}})},setReturnValue(t){this.currentFrame.returnValue=t},waitForPlayerAnswer(t){this.commandsWaitingForPlayerAnswer.push(t)},waitForEndTextAnimation(){return new Promise(t=>{this.promisesWaitingForTextAnimation.push(t)})},endTextAnimation(){for(const t of this.promisesWaitingForTextAnimation)t();this.promisesWaitingForTextAnimation=[]},popAnswerQueue(){return this.commandsWaitingForPlayerAnswer.pop()},addScopedVariable(t,e){this.currentFrame&&(this.currentFrame.scope[t]=e)},async loadScripts(t){this.readGlobalData();const e=await this.loadConfigScriptFiles(t),n=Kt().options.scripts;this.addAllScripts([...e,...n])},async loadConfigScriptFiles(t){const e=[];for(const r of t)e.push(Vp(km(r)));return(await Promise.all(e)).map((r,i)=>({fileName:t[i],code:r,id:t[i],type:"script"}))},addAllScripts(t){const e=Date.now();for(const r of t)dn.addNarratScript(r);const n=Date.now();Ao.log(`scripts parsed in ${n-e} ms`)},start(){this.setStack({currentIndex:0,branchData:{branch:dn.script.main.branch},label:"main"}),this.setStack({currentIndex:0,branchData:{branch:dn.script.main.branch},label:"main"})},setLastLabel(t){this.lastLabel=t},reset(){this.$reset(),this.stack=[],this.data={},this.hasJumped=!1,this.setStack({currentIndex:0,branchData:{branch:dn.script.main.branch},label:"main"})},readGlobalData(){this.globalData=Ms().globalSave.data},setScript(t){dn.script=t},overrideData(t){this.data=t},setStack(t){this.stack=[];const e=this.frameOptionsToFrame(t);this.lastLabel=t.label,this.stack.push(e)},frameOptionsToFrame(t){const e=t.branchData,n={...t,blocks:[],scope:{},returnValue:null};if(this.addBlock(n,{branchData:e,currentIndex:t.currentIndex}),t.scope&&(n.scope=t.scope),t.args&&t.branchData.args)for(const[r,i]of t.branchData.args.entries())t.args.length>r&&(n.scope[i]=t.args[r]);return n},addBlock(t,e){t.blocks.push(e)},async addAndRunBlock(t){const e=this.currentFrame;if(!e)throw new Error("No frame to add block to");return this.addBlock(e,t),await this.runBlock()},setData(t,e){const n=Pu();hT(n,t,e)},addInstruction(t,e){const n=Pu();pT(n,t,e)},addFrame(t){if(!t.label)if(this.currentFrame)t.label=this.currentFrame.label;else throw new Error("Tried to add a new frame but no label was passed and there is no current frame label");const e=this.frameOptionsToFrame(t);this.stack.push(e)},async addAndRunFrame(t){return await this.addFrame(t),await this.runFrame()},async runFrame(){if(!this.currentFrame)throw new Error("Tried to run a frame but there is no current frame");let e;for(;this.currentBlock;){const n=await this.runBlock();if(n===Ep||n===Ap)return this.cleanFrame(),n;if(n===uy)return this.cleanFrame()}return this.cleanFrame(),e},cleanFrame(){const t=this.currentFrame,{returnValue:e}=t;return this.stack.splice(this.stack.length-1,1),e},async runBlock(){const t=this.currentBlock;if(!t)throw new Error("Tried to run a block but there is no current block");let e;for(;this.currentLine;){if(e=await this.runLineOnly(),d7(e))return this.cleanBlock(),e;t.currentIndex++}return this.cleanBlock(),e},cleanBlock(){if(!this.currentFrame){vt("Tried to clean a block but there is no current frame");return}if(!this.currentFrame.blocks){vt("Tried to clean a block but there is no current block");return}this.currentFrame.blocks.splice(this.currentFrame.blocks.length-1,1)},async runGame(){let t=await this.runFrame();for(;t===Ep;){const e=this.jumpTarget;if(!e){vt("Tried to jump but no target was set");return}this.hasJumped=!0,this.setStack(e),await Hy({}),t=await this.runFrame()}t!==Ap&&this.stack.length===0&&this.reachedEndOfScript()},async nextLineOnly(){return this.stack.length===0||this.isBlockFinished()?!1:(this.currentBlock.currentIndex++,!0)},isBlockFinished(){return!this.currentBlock||this.currentBlock&&this.currentBlock.currentIndex>=this.currentBlock.branchData.branch.length},reachedEndOfScript(){if(ut().gameFlow.labelToJumpOnScriptEnd&&this.lastLabel!==ut().gameFlow.labelToJumpOnScriptEnd){this.jumpToLabel(ut().gameFlow.labelToJumpOnScriptEnd);return}Kt().endingScript(),Kt().options.debug&&ut().debugging.showScriptFinishedMessage},async runLineOnly(){const t=this.currentLine;if(!t){vt("There is no line of script to run.");return}return Kt().startingScript(),await tC(t)},async runLabelFunction(t,...e){const n=dn.script[t];if(!n){vt(`Tried to run a label that doesn't exist: ${t}`);return}const r={currentIndex:0,branchData:n,label:t,args:e};return this.addAndRunFrame(r)},runCustomFrame(t){this.addAndRunFrame(t)},async jumpToLabel(t,...e){const n=dn.script[t];if(!n){vt(`Label ${t} doesn't exist. Is the file with this label added in the list of script files to load in the config?`);return}t!==this.lastLabel&&(this.hasJumped=!0),this.setLastLabel(t),this.setStack({currentIndex:0,branchData:n,args:e,label:t}),this.runGame()},async runThenGoBackToPreviousDialog(t,...e){const n=er(),r=n.dialog[n.dialog.length-1],i=Kt().inScript,o=await this.runLabelFunction(t,...e);return i?n.dialog.push(r):Kt().endingScript(),o}},getters:{currentFrame(t){return t.stack[t.stack.length-1]},scope(){var t;return((t=this.currentFrame)==null?void 0:t.scope)??{}},currentBlock(){const t=this.currentFrame;return t?t.blocks[t.blocks.length-1]:void 0},currentLine(){const t=this.currentBlock;if(t&&t.branchData.branch.length>t.currentIndex)return t.branchData.branch[t.currentIndex]},commandWaitingForAnswer(){if(this.commandsWaitingForPlayerAnswer.length>0)return this.commandsWaitingForPlayerAnswer[0]}}}),G_=new wp;G_.setupDebugger(!1);const Ro=G_.logger;function Iz(t){return Rz((e,n,r)=>Qz(e,n,r),t.code,t.fileName)}function Rz(t,e,n){const r={fileName:n,currentLine:0,error:(s,a)=>t(r,s,a),processCommandsFunction:Ky,indentSize:0};r.indentSize=Hz(r,e);const i=zz(r,e);r.currentLine=0,Ro.log(i);const o={};for(const s of i){s.code.search(":")===-1&&r.error(s.line,"First indentation level should only be used to specify labels");const l=s.code.replace(":","").split(/ +/g),c=l[0],f=l.slice(1);s.branch||r.error(s.line,"This line should have a branch but doesn't"),o[c]={branch:Ky(r,s.branch,void 0),args:f}}return o}function Ky(t,e,n){const r=t.currentLine;if(!e){let s=0;return n&&(s=n.line),t.error(s,"Processing of command failed because the current branch has no lines inside"),[]}const i={processCommandsFunction:Ky,parserContext:t,lines:e,currentLine:0,line:e[0]},o=[];for(;i.currentLine<e.length;){const s=e[i.currentLine];i.line=s;const a=J_(t,s,s.expression),l=dn.commands[a.command.operator];let c=l==null?void 0:l.parser;c||(c=dn.commands.text.parser),Ro.log(dn.commands.text);const{newLine:f}=c(i,a);i.currentLine=f,t.currentLine=r+f,o.push(a)}return o}function J_(t,e,n){Array.isArray(n)||t.error(e.line,`Expression should be an array. Something is wrong. ${t.fileName}:${t.currentLine} - ${e.code}`),Ro.log(n),typeof n[0]!="string"&&t.error(e.line,`Expression operator should be a string ${t.fileName}:${t.currentLine} - ${e.code}`);const r={code:e.code,fileName:t.fileName,line:e.line,command:{staticOptions:{},commandType:n[0],operator:n[0],args:n.slice(1).map(s=>Q_(t,e,s)),options:{}}},i=n[0];if(!dn.commands[i]){const s=["else","success","failure"];!RL(i)&&!s.includes(i)&&t.error(e.line,`Unknown command ${i}`)}return r}function Q_(t,e,n){return Array.isArray(n)?J_(t,e,n):n}function Dz(t){return t==="true"?!0:t==="false"?!1:t==="undefined"?void 0:t===null?null:isNaN(Number(t))?t:Number(t)}function Lz(t,e){e.charAt(e.length-1)===":"&&(e=e.substr(0,e.length-1));const n=Bz(e),[r]=X_(t,n);return r}function Bz(t){const e=/(["'])(?:\\\1|.)*?\1/g,n=[];let r;for(;(r=e.exec(t))!=null;)n.push(r);let i=0,o=[];for(const s of n){const a=s.index;if(a>i){const c=t.substr(i,a-i),f=Y_(c);o=[...o,...f]}const l=s[0].replace(/\\/g,"");o.push(`$$"${l.substring(1,l.length-1)}`),i=a+s[0].length}return o=[...o,...Y_(t.substr(i))],o.push(")"),o}function Y_(t){t=t.replace(/: *$/g,"");let e=t.split(" ").filter(n=>n);return e=e.reduce((n,r)=>[...n,...r.split(/(\(|\))/g)].filter(i=>i&&i),[]),e.map(n=>Dz(n))}function X_(t,e){Ro.log("===============");let n=[],r=0,i=Z_(e)+r,o=Gy(e)+r;for(Ro.log(`Parsing expression: ${e}`),Ro.log(`Parenthesis start index: ${i} - end: ${o}`);i!==-1&&o>i;){n=[...n,...e.slice(r,i)];const l=e.slice(i+1);Ro.log(`Found a sub expression. Before: ${n} - After: ${l}`),r=i;const[c,f]=X_(t,l),u=r+f;n.push(c),r=u+1;const d=e.slice(r);Ro.log(`Sub expression came back: ${c} - rest of string: ${d}`),i=Z_(d),i!==-1&&(i+=r),o=Gy(d),o!==-1&&(o+=r)}o!==-1&&Ro.log("Found parenthesis end before new opening parenthesis, close this expression");const s=Gy(e.slice(r))+r;if(s===-1)return t.error(t.currentLine,'Expression is not closed (missing ")" closing parenthesis)'),[n,s];const a=e.slice(r,s);return Ro.log(`End of expression: ${s} - ${a}`),Ro.log("==================="),n=[...n,...a],Fz(t,n),[n,s+1]}function Fz(t,e){e.length<1&&t.error(t.currentLine,"Expression is empty")}function Z_(t){return t.findIndex(e=>e==="(")}function Gy(t){return t.findIndex(e=>e===")")}function Vz(t,e){return e.split(/\r?\n|$/).reduce((r,i,o)=>{const s={code:i,line:o,multiline:!1},a=i.search(/\\$/);a!==-1&&(s.multiline=!0,i=i.substring(0,a));const l=i.search(/ *\/\//g);return l!==-1&&(i=i.substring(0,l)),s.code=i,s.code.search(/^\s*$/)===-1&&(r.length>0&&r[r.length-1].multiline?(r[r.length-1].code+=i,r[r.length-1].multiline=s.multiline):r.push(s)),r},[])}function zz(t,e){const n=Vz(t,e);return eC(t,n,0,0).lines}function eC(t,e,n,r){let i=!0,o=n;const s=[];for(;i&&!(o>=e.length);){const a=e[o];let l=a.code;const c=Uz(t,l);if(l=l.substring(c*t.indentSize),qz(t,c,o),c<r)i=!1;else if(c>r){(s.length===0||c-r!==1)&&t.error(a.line,"Wrong double indentation");const f=eC(t,e,o,c);s[s.length-1].branch=f.lines,o=f.endLine}else{const f=Lz(t,l),u={code:l,indentation:c,line:a.line,expression:f};s.push(u),o++,t.currentLine=o}}return{lines:s,endLine:o}}function qz(t,e,n){e%1!==0&&t.error(n,`Indentation level of ${e} incorrect. Expected indentation of ${t.indentSize} spaces for this file.`)}function Uz(t,e){return e.search(/[^ ]/)/t.indentSize}function Hz(t,e){const n=e.match(/: *[\n\r]+( *)/);return!n||n.length<2?(t.error(0,"Can't detect indentation level. Make sure you indent with at least 2 spaces and consistently"),0):(Ro.log(n),n[1].length)}class Wz{constructor(){zn(this,"plugins",[]);zn(this,"pinia");zn(this,"script",{});zn(this,"scripts",[]);zn(this,"commands",{})}addCommand(e){this.commands[e.keyword]=e}addPlugin(e){if(this.plugins.push(e),e.customCommands)for(const n of e.customCommands)this.addCommand(n)}callHook(e,...n){for(const r of this.plugins)typeof r[e]=="function"&&r[e](...n)}addNarratScript(e){const n=Iz(e);this.script={...this.script,...n},this.scripts.push(e)}customStores(){const e=[];for(const n of this.plugins)if(n.customStores)for(const r in n.customStores)e.push([r,n.customStores[r](this.pinia)]);return e}addCustomSettings(){for(const e of this.plugins)if(e.customSettings)for(const n in e.customSettings)Ls().addCustomSetting(n,e.customSettings[n])}}const dn=new Wz;async function tC(t,e){var r;const n=Zt();try{return await Wp(t,e)}catch(i){console.error(i),console.error(t),vt(`Narrat script runtime error at <span class="error-filename">${t.fileName}:${t.line+1}</span>
69
+ `:""}var uF=cF,fF={dump:uF};function Oy(t,e){return function(){throw new Error("Function yaml."+t+" is removed in js-yaml 4. Use yaml."+e+" instead, which is now safe by default.")}}var dF=fi,hF=Oj,pF=Mj,mF=Lj,gF=Bj,vF=wy,yF=l_.load,bF=l_.loadAll,wF=fF.dump,SF=Wi,kF={binary:Uj,float:Dj,map:Pj,null:Nj,pairs:Wj,set:Kj,timestamp:zj,bool:Ij,int:Rj,merge:qj,omap:Hj,seq:Aj,str:Ej},$F=Oy("safeLoad","load"),xF=Oy("safeLoadAll","loadAll"),jF=Oy("safeDump","dump"),_F={Type:dF,Schema:hF,FAILSAFE_SCHEMA:pF,JSON_SCHEMA:mF,CORE_SCHEMA:gF,DEFAULT_SCHEMA:vF,load:yF,loadAll:bF,dump:wF,YAMLException:SF,types:kF,safeLoad:$F,safeLoadAll:xF,safeDump:jF};function Vp(t){return new Promise((e,n)=>{const r=new XMLHttpRequest;r.onload=function(){r.status>=200&&r.status<300?e(r.responseText):(vt(`Failed to load file ${t}`,r.status),n(r.status))},r.open("GET",t),r.send()})}async function vd(t){try{const e=await Vp(t);let n;if(t.endsWith(".json"))n=JSON.parse(e);else if(t.endsWith(".yaml"))n=_F.load(e);else{const r=`Unsupported file type for data file ${t} (must be .json or .yaml)`;throw new Error(r)}if(!n)throw new Error(`Data loaded from ${t} is empty`);return n}catch(e){throw console.error(`Failed to load data file ${t}: ${e}`),e}}const CF=(t,e)=>{const n={};for(const r in t)n[r]=e(t[r]);return n},T_=(t,e)=>{for(const n in t){const r=t[n];e(r,n,t),typeof r=="object"&&r!==null&&T_(r,e)}},oc={};async function TF(t){return oc[t]?oc[t]:O_(t,t)}async function OF(t){Ao.log("Loading images");const e=[],n=async(i,o)=>await O_(i,o),r=(i,o)=>{e.push(n(i,o))};for(const i in t.common.images){const o=t.common.images[i];r(i,o)}if(t.preload.images)for(const i in t.preload.images.assets){const o=t.preload.images.assets[i];r(i,o)}for(const i in t.screens.screens){const o=t.screens.screens[i];if(o.background&&!t.common.images[o.background]&&!o.video&&r(o.background,o.background),o.buttons)for(const s in o.buttons){const a=o.buttons[s];typeof a=="object"&&a.background&&!t.common.images[a.background]&&r(a.background,a.background)}}return Promise.all(e)}async function O_(t,e){if(oc[t])return oc[t];if(e===Mp){const r=new Image;return oc[t]=r,r}const n=new Promise((r,i)=>{const o=new Image;o.onload=()=>{oc[t]=o,r(o)},o.onerror=s=>{vt(`Failed to load image ${t} at ${e}`,s),i(s)},o.src=Gi(e)});return oc[t]=n,n}const zp={};function EF(t){return zp[t]??{}}function E_(t,e,n){const r=EF(t.transition),i=t.duration??r.duration??500,o=t.delay??r.delay??0;return{...t,resolve:n,duration:i,delay:o,oldScreen:e}}const Ai=Lr("notifications",{state:()=>({notifications:[],enabled:!0}),actions:{async addNotification(t,e,n){if(!this.enabled)return;t=Is(t);const r=`${Date.now()}-${Math.random()*1e4}`;this.notifications.push({id:r,text:t,description:e,icon:n}),ut().notifications.alsoPrintInDialogue&&jj(`[NOTIFICATION] ${t}`),await Hi(ut().notifications.timeOnScreen*1e3),this.deleteNotification(r)},deleteNotification(t){const e=this.findNotifications(t);e&&this.notifications.splice(this.notifications.indexOf(e),1)},findNotifications(t){return this.notifications.find(e=>e.id===t)},disableNotifications(){this.enabled=!1;for(const t in this.notifications)this.deleteNotification(t)},enableNotifications(){this.enabled=!0}}}),di=Lr("inventory",{state:()=>({items:{},interactionTags:{}}),actions:{generateSaveData(){return{items:yn(this.items),interactionTags:yn(this.interactionTags)}},loadSaveData(t){this.items={...this.items,...yn(t.items)},this.interactionTags={...yn(t.interactionTags)}},updateConfig(t){Object.keys(t.items).forEach(e=>{this.items[e]||(this.items[e]={amount:0,id:e})})},reset(t){this.$reset(),this.updateConfig(t)},hasItem(t,e){var n;return e||(e=1),((n=this.items[t])==null?void 0:n.amount)>=e},getExistingItem(t){return this.items[t]},getItemAmount(t){var e;return((e=this.getExistingItem(t))==null?void 0:e.amount)||0},add(t){const e=this.getExistingItem(t.id);e?e.amount+=t.amount:this.items[t.id]={...t};const n=ds(t.id).name,r=t.amount>1?`${n} x ${t.amount}`:n;Ai().addNotification(`Received item: ${r}`)},enableInteraction(t){t||(t="default"),this.interactionTags[t]={blockedInteraction:!1}},disableInteraction(t){t||(t="default"),this.interactionTags[t]={blockedInteraction:!0}},onScriptStart(){const t=ut().interactionTags;Object.keys(t).forEach(e=>{t[e].onlyInteractOutsideOfScripts&&this.disableInteraction(e)})},onScriptEnd(){const t=ut().interactionTags;Object.keys(t).forEach(e=>{t[e].onlyInteractOutsideOfScripts&&this.enableInteraction(e)})},isInteractionTagBlocked(t){return t||(t="default"),this.interactionTags[t]?this.interactionTags[t].blockedInteraction:!1},remove(t){const e=this.getExistingItem(t.id);e&&(e.amount-=t.amount,Ai().addNotification(`Lost item: ${ds(t.id).name} x ${t.amount}`),e.amount<=0&&this.deleteItem(t.id))},deleteItem(t){this.getExistingItem(t)&&(this.items[t].amount=0)},canUseItem(t){var n;const e=ds(t.id);return!!(e&&e.onUse&&!this.isInteractionTagBlocked(e.tag)&&!((n=er().currentDialog)!=null&&n.choices))},useItem(t){let e=!1;const n=ds(t.id);if(t&&this.canUseItem(t)&&n){const r=n.onUse;e=!0,nc("onItemUsed"),r.action==="jump"?Zt().jumpToLabel(r.label):r.action==="run"?Zt().runThenGoBackToPreviousDialog(r.label,!0):(e=!1,vt(`Unknown action ${r.action}`))}return e}}}),No=Lr("screens",{state:()=>({layers:[{screen:"default"}],buttons:{}}),actions:{setScreen(t,e,n){return new Promise(r=>{const i=this.layers[e||0];let o;const s=(i==null?void 0:i.screen)??null;if(s===t){r();return}n&&(o=E_(n,s,r)),this.layers[e||0]={screen:t,transition:o},o||r()})},finishTransition(t){const e=this.layers[t];if(!e)vt(`Tried to finish transition on layer ${t} but it doesn't exist`);else if(e.transition){const n=e.transition.resolve;delete e.transition,n()}},transitionScreen(t,e,n){return this.setScreen(t,n??0,e)},emptyLayer(t,e){return new Promise(n=>{const r=this.layers[t];if(!r){sc(`Tried to empty layer ${t} but it doesn't exist`);return}if(e){const i=r.screen,o=E_(e,i,n);r.transition=o}r.screen="@empty",e||n()})},updateConfig(t){console.log("update config!");const e=ar().buttons.buttons;for(const n in e)this.buttons[n]||(this.buttons[n]={state:e[n].enabled})},reset(t){this.$reset(),this.updateConfig(t)},changeButton(t,e){if(!this.buttons[t]){vt(`Tried to change button ${t} but it doesn't exist`);return}this.buttons[t].state=e},generateSaveData(){return{layers:yn(this.layers).filter(t=>t).map(t=>t.screen??null),buttons:yn(this.buttons)}},loadSaveData(t){this.layers=yn(t.layers).map(e=>(e!==null&&typeof e!="string"&&(e=null),{screen:e})),this.buttons=rc(this.buttons,yn(t.buttons))},isButtonDisabled(t){const e=this.getButtonState(t);return e==="hidden"||e==="greyed"||e===!1},isButtonInteractible(t){const e=this.getButtonState(t);return e?e===!0:!1},isButtonClickable(t){if(!this.isButtonInteractible(t))return!1;const n=bl(t);return!!qp(n)},getButtonState(t){const e=bl(t),n=this.buttons[t],r=e.tag||"default",i=n.state;return i===!0&&di().isInteractionTagBlocked(r)?"greyed":i},clickOnButton(t){if(!this.isButtonClickable(t))return;const e=Zt(),n=bl(t);nc("onButtonClicked");const r=n.action;r&&(n.actionType==="run"?e.runLabelFunction(r):e.jumpToLabel(r))}},getters:{nonEmptyLayers(t){return t.layers.filter(e=>e)},isTransitioning(t){return t.layers.some(e=>e==null?void 0:e.transition)}}});function qp(t){if(!Kt().inScript)return!0;const e=ym().clickableDuringScriptsByDefault;if(e)return t.scriptClickable!==!1;if(!e)return t.scriptClickable===!0}const AF=["screenObject","sprite"];function A_(t){return typeof t=="object"&&t!==null&&AF.includes(t._entityType)}function PF(t){return typeof t=="object"&&t!==null&&t._entityType==="sprite"}function MF(t){if(t.includes(" ")){const e=t.split(" ");return{label:e[0],args:e.slice(1)}}else return{label:t}}const vo=Lr("screenObjects",{state:()=>({tree:[],objectsList:{}}),actions:{addObject(t){t.parent?t.parent.children.push(t):this.tree.push(t),this.objectsList[t.id]=t},createObject(t){const e={_entityType:"screenObject",id:Zl(),name:"Screen Object",tags:[],x:0,y:0,anchor:{x:0,y:0},width:1,height:1,opacity:1,scale:1,layer:0,children:[],...t};return this.addObject(e),e},destroyObject(t){let e=t;typeof e=="string"&&(e=this.getObject(e));for(let n=e.children.length-1;n>=0;n--)this.destroyObject(e.children[n]);if(e.parent){const n=e.parent,r=n.children.indexOf(e);r!==-1?n.children.splice(r,1):console.warn(`Could not find object ${e.id} in parent's children`)}else{const n=this.tree.indexOf(e);n!==-1?this.tree.splice(n,1):console.warn(`Object to destroy not found in store (${e.id})`)}delete this.objectsList[e.id]},createSprite(t){const e=this.createObject(t);return e._entityType="sprite",TF(t.image).then(n=>{const r=this.getObject(e.id);r.width===1&&r.height===1&&(r.width=n.width,r.height=n.height)}),e},getObject(t){return this.objectsList[t]},isScreenObjectClickable(t){return qp(t)?!!t.onClick:!1},clickObject(t){if(this.isScreenObjectClickable(t)&&t.onClick){nc("onSpriteClicked");let e;if(typeof t.onClick=="string"){const n=MF(t.onClick);e={label:n.label,args:n.args}}else e=t.onClick;e.method=e.method??t.clickMethod??"jump",e.args=e.args??[],e.method==="run"?Zt().runThenGoBackToPreviousDialog(e.label,...e.args):e.method==="jump"?Zt().jumpToLabel(e.label,...e.args):vt(`Unknown sprite click method ${t.clickMethod}`)}},generateSaveData(){return{tree:yn(this.tree.map(t=>t.id)),objectsList:yn(CF(this.objectsList,t=>this.screenObjectToSave(t)))}},loadSaveData(t){this.objectsList=this.loadAllObjects(yn(t.objectsList)),this.tree=t.tree.map(e=>this.objectsList[e])},reset(){this.$reset()},screenObjectToSave(t){return{...t,children:t.children.map(e=>e.id),parent:t.parent?t.parent.id:void 0}},loadAllObjects(t){for(const e of Object.values(t)){const n=e;n.parent=n.parent?t[n.parent]:void 0,n.children=n.children.map(r=>t[r])}return t},emptyLayer(t){for(let e=this.tree.length-1;e>=0;e--){const n=this.tree[e];n.layer===t&&this.destroyObject(n)}},emptyAllLayers(){for(let t=this.tree.length-1;t>=0;t--){const e=this.tree[t];this.destroyObject(e)}}}});function P_(t){return"save"in t}function M_(t){return"globalSave"in t}function NF(t){return"config"in t}const IF=v.defineComponent({props:{percentage:Number,step:String},methods:{loadingStyle(){return{width:`${this.percentage*60}vw`}}},computed:{}}),RF={id:"loading-bar"},DF={id:"loading-text"};function LF(t,e,n,r,i,o){return v.openBlock(),v.createElementBlock("div",RF,[v.createElementVNode("div",{id:"inner-loading-bar",style:v.normalizeStyle(t.loadingStyle())},null,4),v.createElementVNode("div",DF,[v.createElementVNode("h3",null,"Loading "+v.toDisplayString(Math.floor(t.percentage*100))+"% - "+v.toDisplayString(t.step),1)])])}const BF=Po(IF,[["render",LF]]),FF="data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2019.0.0,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Rat'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20595.3%20595.3'%20style='enable-background:new%200%200%20595.3%20595.3;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill:%23E23B33;}%20%3c/style%3e%3cpath%20id='Rat_Shape'%20class='st0'%20d='M556.9,82.5c-10.8-24.3-47-57.1-71.3-65.6c-24.3-8.4-64.1-0.3-88.7,22.3%20c-20,18.4-26,28.2-29.1,37c-2.1,5.9-4.8,13.5-6,20.9v0c-0.5,4.1-4.5,7-8.6,6.1c-10.4-2.3-29.5-6-44.4-6.3%20c-13.7-0.2-30.1,3.2-40.4,5.7c-4.5,1.1-8.8-2.2-8.8-6.8c-0.1-5.3-1.1-12.3-4.8-19.6c-8.5-16.9-19.6-32.6-57.8-47.4%20c-31.9-12.4-75.1-9.7-100.8,1.8c-28.1,12.6-42.4,37.9-54,61.8c-14.4,29.8-14.9,83.6-6.4,104c12.8,30.7,35.8,47.2,52.6,53%20c11.3,3.8,28.2,3.7,38.2,3.3c4.2-0.2,7.7,3.3,7.5,7.5c-0.7,13.6-0.9,41.5,7,61.4c7.7,19.4,29.7,62.3,50.7,101.2%20c0,0.1-14.6,2.9-31.4,6.8c-23.9,5.5-52.6,12.7-54.3,13.7c-3.5,2.1-3,10-2.7,12c0.5,3.4,5.3,8.1,6.9,8.3c3.9,0.3,31.3-7.6,55.7-14.6%20c18.5-5.3,34.9-9.3,35.5-8.2c5.1,9.3,10,18,14.4,25.8c5.2,9.1,10.7,16.4,14.1,23.6c1.1,2.3-16.6,5.8-32.5,14.7%20c-16.4,9.1-29.7,21-32.3,24c-1.8,2.1-3,6-1.2,10.7c1.1,2.9,10,5.7,12.4,5.1c6.8-1.7,16.5-12.5,33.1-21.1%20c16.3-8.5,32.9-14.9,33.8-13.6c9.7,14.3,16.9,21.6,22.6,31.2c9.8,16.5,27.3,45.9,46.6,39.5c6.4-2.1,31.1-33.6,53.3-68.6%20c1.3-2.1,16.1,11.3,30.4,23.2c13.8,11.4,22.7,20.6,27.1,21.4c5.4,1,14.2-7.7,14.1-14.7c-0.1-2.7-14.3-13.8-29.1-26.2%20c-14.5-12.1-30.1-22.8-29.2-24.3c7.6-12,14.5-23.7,20.1-33.9c4.3-7.8,8.9-16,13-24.7c0.6-1.2,15.9,3,31.4,7.1c15.3,4,26.7,10,31,8%20c6.9-3,11.6-13.8,9.4-18.3c-1.1-2.3-17-7.3-33.2-12c-14.2-4.1-28-6.5-27.7-7.3c15.5-34,28.8-64.8,27.6-69.6%20c-1.7-7.1,2.6-11.9,7-36.5c3.2-18.1,4.7-40.9,5.2-51.7c0.2-3.5,2.8-6.3,6.3-6.7c3.1-0.3,6.9-0.9,10.5-1.9c7.8-2,18.6-7.8,36.4-20.6%20c17.9-12.8,38.7-49.6,44.4-67.8S567.6,106.8,556.9,82.5z%20M265.1,336.2c-8.1,4-13,7-26.4,9.6c-6.9,1.4-29.4-0.2-40.7-4.6%20c-10.5-4.1-19.9-7.6-30-15.4s-15.7-13.2-15.7-15.3c0-4.4,6-9.4,11-9.4c5.1,0,14.5,9.2,29.7,16.6c14.3,7,17.9,6.1,25.4,7.3%20c2.9,0.5,7.7,0.6,10.7,0.4c14.1-1.3,21.4-5.9,25.3-8.8c4-3,13.7-12.9,17.2-12.5c8,1,18.9,3.4,18.9,7.1%20C290.4,319,273.2,332.1,265.1,336.2z%20M320.9,521.4c-4.3,3.7-17.7,13.5-23.3,13.5c-2.8,0-7.4-8.2-11.5-16.8%20c-4.1-8.5-9.1-21.1-9.1-31.6c0-4.6,6-7.4,13.4-9.2c7.2-1.7,27.3-1.8,29.9-1.1c6.8,1.7,12.9,2.2,12.7,6.4c-0.4,12.7-7,18.9-8.3,24.3%20C323.4,512.3,323.4,519.2,320.9,521.4z%20M431.1,320.3c-9.2,7.4-10.6,8.1-24.9,13.7c-11.3,4.4-28.6,5.8-41.6,3.6%20c-12.2-2.1-22.3-4.6-29.5-10.1c-9.7-7.3-16.4-15.1-16.4-19.8c0-3.7,6.4-4.3,14.5-4.9c3.5-0.3,9.3,5.9,13.2,9.2%20c8.1,6.8,14.8,8,28.8,9.9c2.9,0.4,7.8,0.4,10.7,0.1c7.5-0.9,12-0.4,25.8-8.2c20-11.2,17.8-14.4,25.1-12.6c2.2,0.6,5.8,1.2,5.6,5.6%20C442.4,309,440.5,312.7,431.1,320.3z'/%3e%3c/svg%3e",VF={id:"engine-splash-screen",class:"flex justify-center items-center"},zF={id:"engine-splash-title"},qF=["src"],Ey=v.defineComponent({__name:"engine-splash",emits:["finished"],setup(t,{emit:e}){const n=e,r=v.ref("hidden"),i=v.computed(()=>({transitionDuration:`${f.value}s`})),o=v.computed(()=>({invisible:r.value!=="appear"})),s=Kt(),a=v.computed(()=>{var h;return((h=ut().splashScreens)==null?void 0:h.engineSplashScreen)??{}}),l=v.computed(()=>typeof a.value.overrideText=="string"?a.value.overrideText:"Made with narrat engine"),c=v.computed(()=>a.value.overrideLogo??FF),f=v.computed(()=>typeof a.value.fadeDuration=="number"?a.value.fadeDuration:.8),u=v.computed(()=>typeof a.value.timeBeforeFadeout=="number"?a.value.timeBeforeFadeout:1.5);v.onMounted(async()=>{if(await Hi(10),r.value="appear",a.value.skip||s.options.debug){d();return}await Hi(f.value*1e3),await Hi(u.value*1e3),r.value="disappear",await Hi(f.value*1e3),d()});function d(){s.loading.loaded?n("finished"):s.listener.once("gameLoaded",()=>{n("finished")})}return(h,p)=>(v.openBlock(),v.createElementBlock("div",VF,[v.createElementVNode("div",{id:"engine-splash-header",class:v.normalizeClass(["flex justify-center flex-col items-center",o.value]),style:v.normalizeStyle(i.value)},[v.createElementVNode("h1",zF,v.toDisplayString(l.value),1),v.createElementVNode("img",{src:c.value,alt:"Narrat Logo",id:"engine-splash-logo"},null,8,qF),v.createVNode(BF,{percentage:v.unref(s).loading.percentage,step:v.unref(s).loading.step},null,8,["percentage","step"])],6)]))}});class Ay{constructor(){zn(this,"listeners",{})}on(e,n){return this.listeners[e]||this.addEventToMap(e),this.listeners[e].add(n),n}off(e,n){return this.listeners[e]&&this.listeners[e].delete(n),n}once(e,n){const r=(...i)=>{this.off(e,r),n(...i)};return this.on(e,r)}emit(e,...n){this.listeners[e]&&this.listeners[e].forEach(r=>r(...n))}clear(){Object.keys(this.listeners).forEach(e=>{delete this.listeners[e]})}addEventToMap(e){this.listeners[e]=new Set}}class UF extends Ay{setup(){const e=()=>{this.emit("preUpdate"),this.emit("update"),this.emit("postUpdate"),requestAnimationFrame(e)};e()}}const yd=new UF;Fe.Vec2=void 0,(t=>{function e(p,m){return{x:p??0,y:m??0}}t.create=e;function n(p){return Math.sqrt(p.x*p.x+p.y*p.y)}t.magnitude=n;function r(p){const m=n(p);return m===0?e(0,0):{x:p.x/m,y:p.y/m}}t.normalize=r;function i(p,m){return{x:p.x+m.x,y:p.y+m.y}}t.add=i;function o(p,m){return{x:p.x-m.x,y:p.y-m.y}}t.subtract=o;function s(p,m){return{x:p.x*m.x,y:p.y*m.y}}t.multiply=s;function a(p,m){return{x:p.x*m,y:p.y*m}}t.scale=a;function l(p,m){return{x:p.x/m.x,y:p.y/m.y}}t.divide=l;function c(p,m){return n(o(p,m))}t.distance=c;function f(p,m,y){return{x:p.x+(m.x-p.x)*y,y:p.y+(m.y-p.y)*y}}t.lerp=f;function u(p,m){const y=Math.cos(m),g=Math.sin(m);return{x:p.x*y-p.y*g,y:p.x*g+p.y*y}}t.rotate=u;function d(p,m){const y=o(m,p);return t.normalize({x:-y.y,y:y.x})}t.normal=d;function h(p,m){return p.x*m.x+p.y*m.y}t.dot=h})(Fe.Vec2||(Fe.Vec2={}));function Py(t,e,n,r){const i=t/n,o=e/r;return Math.min(i,o)}const Ls=Lr("settings",{state:()=>({baseSettings:{textSpeed:30,animateText:!0,fontSize:16},settingsSchema:{textSpeed:{type:"number",defaultValue:30,minValue:1,maxValue:100,step:5,name:"Text Speed",description:"The speed at which text plays."},animateText:{type:"boolean",defaultValue:!0,name:"Animate Text",description:"Whether or not text should animate."},fontSize:{type:"integer",defaultValue:16,minValue:8,maxValue:64,step:1,name:"Font Size",description:"The base font size for the game."}},customSettings:{},customSettingsSchema:{}}),actions:{reset(t){this.$reset(),this.updateConfig(t)},getSetting(t){if(typeof this.baseSettings[t]<"u")return this.baseSettings[t];if(typeof this.customSettings[t]<"u")return this.customSettings[t];vt(`Setting ${t} does not exist.`)},getSettingSchema(t){if(typeof this.settingsSchema[t]<"u")return this.settingsSchema[t];if(typeof this.customSettingsSchema[t]<"u")return this.customSettingsSchema[t];vt(`Setting ${t} does not exist.`)},getAllSettingSchemas(){return{...this.settingsSchema,...this.customSettingsSchema}},setSetting(t,e){typeof this.baseSettings[t]<"u"?this.baseSettings[t]=e:typeof this.customSettings[t]<"u"?this.customSettings[t]=e:vt(`Setting ${t} does not exist.`),t==="fontSize"&&document.documentElement.style.setProperty("font-size",`${e}px`),t==="textSpeed"&&(ut().dialogPanel.textSpeed=e),t==="animateText"&&(ut().dialogPanel.animateText=e)},updateConfig(t){var e;if(this.setSetting("textSpeed",t.dialogPanel.textSpeed??Pp),this.setSetting("animateText",t.dialogPanel.animateText??!0),this.setSetting("fontSize",t.layout.defaultFontSize??16),(e=t.settings)!=null&&e.customSettings)for(const n in t.settings.customSettings)this.addCustomSetting(n,t.settings.customSettings[n])},addCustomSetting(t,e){this.customSettings[t]=e.defaultValue,this.customSettingsSchema[t]=e},generateSaveData(){return{baseSettings:yn(this.baseSettings),customSettings:yn(this.customSettings)}},loadSaveData(t){for(const e in t.baseSettings)this.setSetting(e,yn(t.baseSettings[e]));for(const e in t.customSettings)typeof this.customSettings[e]<"u"&&this.setSetting(e,yn(t.customSettings[e]))}}});function bd(t,e=50,n={}){let r;const i=n.isImmediate??!1,o=n.callback??!1,s=n.maxWait;let a=Date.now(),l=[];function c(){if(s!==void 0){const u=Date.now()-a;if(u+e>=s)return s-u}return e}const f=function(...u){const d=this;return new Promise((h,p)=>{const m=function(){if(r=void 0,a=Date.now(),!i){const b=t.apply(d,u);o&&o(b),l.forEach(({resolve:S})=>S(b)),l=[]}},y=i&&r===void 0;r!==void 0&&clearTimeout(r);const g=c();if(r=setTimeout(m,g),y){const b=t.apply(d,u);return o&&o(b),h(b)}l.push({resolve:h,reject:p})})};return f.cancel=function(u){r!==void 0&&clearTimeout(r),l.forEach(({reject:d})=>d(u)),l=[]},f}const Ir=Lr("rendering",{state:()=>({screenHeight:window.innerHeight,screenWidth:window.innerWidth,layoutMode:"horizontal",resizeObserver:null,containerElement:null,narratAppElement:null,dialogPanelMode:"auto"}),actions:{generateSaveData(){return{dialogPanelMode:this.dialogPanelMode}},loadSaveData(t){this.dialogPanelMode=t.dialogPanelMode},reset(){this.dialogPanelMode="auto"},updateScreenSize(t,e){this.screenHeight=e,this.screenWidth=t,t<ut().layout.verticalLayoutThreshold?(this.layoutMode="vertical",document.querySelector("html").style.fontSize=`${Ls().baseSettings.fontSize??40}px`):(this.layoutMode="horizontal",document.querySelector("html").style.fontSize=`${Ls().baseSettings.fontSize??16}px`)},setContainer(t){this.containerElement=t,this.resizeObserver&&this.resizeObserver.disconnect(),this.resizeObserver=new ResizeObserver(bd(()=>{this.refreshScreenSize()},100,{maxWait:200})),this.resizeObserver.observe(t),this.refreshScreenSize()},refreshScreenSize(){const t=this.containerElement;t&&this.updateScreenSize(t.clientWidth,t.clientHeight)}},getters:{gameScaleRatio(t){return Py(this.screenWidth,this.screenHeight,this.gameWidth,this.gameHeight)},overlayMode(t){return!!(ut().dialogPanel.overlayMode&&t.layoutMode==="horizontal")},gameWidth(){const t=ut();return this.layoutMode==="vertical"||this.overlayMode?t.layout.backgrounds.width:t.layout.backgrounds.width+$m()},gameHeight(){const t=ut();return this.layoutMode==="vertical",t.layout.backgrounds.height},dialogWidth(){return this.layoutMode==="vertical"?this.viewportWidth:$m()},dialogHeight(){return this.layoutMode==="vertical"?this.actualGameHeight-this.gameHeight:ut().dialogPanel.height??this.gameHeight},actualGameHeight(){let t=this.gameHeight;return this.layoutMode==="vertical"&&(t=this.screenHeight/this.gameScaleRatio),t},viewportRatio(t){if(this.layoutMode==="vertical"){const e=ut().layout.backgrounds;return t.screenWidth/e.width}return 1},viewportHeight(t){return ut().layout.backgrounds.height*this.viewportRatio},viewportWidth(t){return ut().layout.backgrounds.width*this.viewportRatio},showDialog(t){if(this.dialogPanelMode==="on")return!0;if(this.dialogPanelMode==="off")return!1;if(!this.overlayMode||this.layoutMode==="vertical")return!0;const e=Kt().inScript;let n=!0;return No().isTransitioning&&ut().dialogPanel.hideDuringTransition&&(n=!1),!ut().dialogPanel.showAfterScriptEnd&&!e&&(n=!1),n},container(){return this.containerElement?this.containerElement:document.body},inputsContainer(){return Kt().hasCustomContainer?this.container:window},narratApp(){return this.narratAppElement?this.narratAppElement:document.body}}});class HF extends EventTarget{constructor(){super(...arguments);zn(this,"gamepadAvailable",!0);zn(this,"gameActions",{});zn(this,"keyboardState",{});zn(this,"actions",{});zn(this,"lastInputMethodUsed","km");zn(this,"gamepad",null)}kbEvent(){this.changeLastInput("km")}getGamepads(){return navigator.getGamepads?navigator.getGamepads():(this.gamepadAvailable=!1,[])}gamepadEvent(){this.changeLastInput("gamepad")}mouseEvent(){this.changeLastInput("km")}changeLastInput(n){this.lastInputMethodUsed!==n&&(this.lastInputMethodUsed=n,this.dispatchEvent(new CustomEvent("change-input",{detail:n})))}getGamepad(){const n=this.getGamepads().filter(r=>r!==null);if(n.length>0)return n[0]}startListening(){this.updateGamepad();const n=Ir().inputsContainer;n.addEventListener("mousemove",r=>{this.mouseEvent()}),n.addEventListener("keydown",r=>{this.kbEvent();const i=this.getKeyboardState(r.key).current;this.keyboardState[r.key]={previous:i,current:!0}}),n.addEventListener("keyup",r=>{this.kbEvent();const i=this.getKeyboardState(r.key).current;this.keyboardState[r.key]={previous:i,current:!1}}),yd.on("preUpdate",()=>{this.update()})}updateGamepad(){const n=this.getGamepad();n?this.gamepad?this.updateAllNarratButtons(n,this.gamepad):this.gamepad=this.setupNarratGamepad(n):this.gamepad=null}setupNarratGamepad(n){return{id:n.id,gamepad:n,buttons:n.buttons.map((i,o)=>this.getNarratButtonFromGamepad(i,i,o))}}updateAllNarratButtons(n,r){for(const[i,o]of n.buttons.entries()){const s=r.buttons[i];s.previous=yn(s.state),s.state=yn(o),s.previous.pressed!==s.state.pressed&&this.gamepadEvent()}}getNarratButtonFromGamepad(n,r,i){return{index:i,state:yn(r),previous:yn(r)}}addAction(n){if(this.gameActions[n.id]=n,n.type==="button"){const r={config:n,active:!1,justPressed:!1,justReleased:!1};this.actions[n.id]={state:r,previous:yn(r)}}else{const r={config:n,value:Fe.Vec2.create(0,0),fullState:{left:0,right:0,up:0,down:0}};this.actions[n.id]={state:r,previous:yn(r)}}}getAnalog(n){return this.actions[n]||vt(`Action ${n} does not exist`),this.actions[n].state}getButton(n){return this.actions[n]||vt(`Action ${n} does not exist`),this.actions[n].state}getKeyboardState(n){return this.keyboardState[n]?this.keyboardState[n]:(this.keyboardState[n]={current:!1,previous:!1},this.keyboardState[n])}getGamepadState(n){return this.gamepad&&this.gamepad.buttons.length>n?{current:this.gamepad.buttons[n].state,previous:this.gamepad.buttons[n].previous}:null}debugGamepad(){if(this.gamepad)for(const[n,r]of this.gamepad.buttons.entries())r.state.pressed,r.previous.pressed}getKeybindKey(n,r){const i=n.id,o=ut().hotkeys[i];return typeof o<"u"?{...r,keyboardKey:o}:r}update(){this.updateGamepad(),this.debugGamepad();for(const n of Object.values(this.gameActions))if(n.type==="button"){const r=this.actions[n.id],i=yn(r.state),o=r.state;r.previous=i,n.action==="press"&&(n.keybinds.some(a=>{let l=!1;if(a=this.getKeybindKey(n,a),typeof a.keyboardKey=="string"&&this.getKeyboardState(a.keyboardKey).current===!0&&(l=!0),typeof a.gamepadButton=="number"){const c=this.getGamepadState(a.gamepadButton);c&&c.current.pressed===!0&&(l=!0)}return l})?o.active=!0:o.active=!1,o.active&&!i.active?o.justPressed=!0:o.justPressed=!1,!o.active&&i.active?o.justReleased=!0:o.justReleased=!1)}else if(n.type==="analog"){const r=this.actions[n.id],i=r.state;yn(r.state),r.previous=yn(i);let o=Fe.Vec2.create(0,0);n.keybinds.forEach(s=>{this.getKeyboardState(s.left).current&&(i.fullState.left=1,o.x-=1),this.getKeyboardState(s.right).current&&(i.fullState.right=1,o.x+=1),this.getKeyboardState(s.up).current&&(i.fullState.up=1,o.y-=1),this.getKeyboardState(s.down).current&&(i.fullState.down=1,o.y+=1)}),o=Fe.Vec2.normalize(o),i.value=o}}}const hl=new HF,hi=Lr("menu",{state:()=>({menus:{},activeMenu:!1}),getters:{showSkills(){return Object.entries(qs().skills).length>0},showInventory(){return Object.entries(gm().items).length>0},showQuests(){return Object.entries(Id().quests).length>0},showAchievements(){return Object.entries(Rd().achievements).length>0},menuTabsToShow(t){return t.menus.menu.tabs.map(e=>{const n=ut().menuButtons[e.id]||{};return{...e,...n}}).filter(e=>e.condition?e.condition():!0)},menu(t){return t.activeMenu?t.menus[t.activeMenu]:void 0},tab(){if(this.menu)return this.menu.tabs[this.menu.activeTab]}},actions:{setup(){},addMenu(t,e){this.menus[t]={...e,id:t}},addMenuOption(t,e){this.menus[t]||(this.menus[t]={id:t,label:t,tabs:[],activeTab:0}),this.menus[t].tabs.push(e)},setActiveTab(t){this.menu&&(this.menu.activeTab=t)},openMenu(t){this.activeMenu=t},closeMenu(){this.activeMenu=!1},toggleMenu(){this.activeMenu?this.activeMenu=!1:this.activeMenu="menu"}}}),WF=[{id:"left",type:"button",action:"press",keybinds:[{keyboardKey:"ArrowLeft",gamepadButton:14}]},{id:"right",type:"button",action:"press",keybinds:[{keyboardKey:"ArrowRight",gamepadButton:15}]},{id:"up",type:"button",action:"press",keybinds:[{keyboardKey:"ArrowUp",gamepadButton:12}]},{id:"down",type:"button",action:"press",keybinds:[{keyboardKey:"ArrowDown",gamepadButton:13}]},{id:"continue",type:"button",action:"press",keybinds:[{keyboardKey:"Enter",gamepadButton:0}]},{id:"cancel",type:"button",action:"press",keybinds:[{keyboardKey:"Escape",gamepadButton:1}]},{id:"system",type:"button",action:"press",keybinds:[{keyboardKey:"n",gamepadButton:9}]},{id:"menu",type:"button",action:"press",keybinds:[{keyboardKey:"m",gamepadButton:8}]},{id:"previousTab",type:"button",action:"press",keybinds:[{keyboardKey:"p",gamepadButton:4}]},{id:"nextTab",type:"button",action:"press",keybinds:[{keyboardKey:"o",gamepadButton:5}]},{id:"subPreviousTab",type:"button",action:"press",keybinds:[{keyboardKey:"i",gamepadButton:6}]},{id:"subNextTab",type:"button",action:"press",keybinds:[{keyboardKey:"u",gamepadButton:7}]},{id:"viewportSelect",type:"button",action:"press",keybinds:[{keyboardKey:"v",gamepadButton:2}]},{id:"autoPlay",type:"button",action:"press",keybinds:[{keyboardKey:"a",gamepadButton:6}]},{id:"skip",type:"button",action:"press",keybinds:[{keyboardKey:"s",gamepadButton:7}]}],nr=Lr("inputs",{state:()=>({inputStack:[],baseInputListener:null,inputMode:"mk",isTyping:!1,inGameInputListener:null}),actions:{setupInputs(){hl.addEventListener("change-input",t=>{this.inputMode=t.detail});for(const t of WF)hl.addAction(t);this.listenToBaseNarratInputs(),yd.on("preUpdate",()=>{for(const[t,e]of Object.entries(hl.actions))if(e.state.config.type==="button"){const n=e;n.state.justPressed&&this.triggerListeners(t,"press",n),n.state.justReleased&&this.triggerListeners(t,"release",n)}else e.state.config.type})},createInGameInputListener(){this.inGameInputListener||(this.inGameInputListener=this.registerInputListener("in-game",{system:{press:()=>{hi().openMenu("system")}},menu:{press:()=>{hi().openMenu("menu")}}}))},startTyping(){this.isTyping=!0},stopTyping(){this.isTyping=!1},removeInGameInputListener(){this.inGameInputListener&&(this.unregisterInputListener(this.inGameInputListener),this.inGameInputListener=null)},listenToContainerInputs(){hl.startListening()},listenToBaseNarratInputs(){},triggerListeners(t,e,n){const r=this.inputStack[this.inputStack.length-1];if(r&&r.actions[t]&&r.actions[t][e])if(n.state.config.type==="button"){const i=r.actions[t][e],o=n;i(n.state.config,o.state,o.previous)}else console.warn("Analog events not implemented yet")},getInputs(){return hl},registerInputListener(t,e){const r={id:`${Date.now()}-${Math.floor(Math.random()*1e8)}`,name:t,actions:e??{}};return this.inputStack.push(r),r},unregisterInputListener(t){const e=this.inputStack.findIndex(n=>n.id===t.id);if(e===-1)throw new Error("Input listener not found");this.inputStack.splice(e,1)},registerActions(t,e,n){t.actions[e]=n}}}),oo=Lr("scenes-store",{state:()=>({scenes:{},activeScene:as.EngineSplash,currentOptions:{}}),getters:{isPlaying(t){return t.activeScene!==as.EngineSplash&&t.activeScene!==as.GameSplash&&t.activeScene!==as.StartMenu}},actions:{generateSaveData(){return{activeScene:this.activeScene}},loadSaveData(t){},changeScene(t,e){const n=this.activeScene;if(n&&n!==t){const r=this.scenes[n];r.onLeaving&&r.onLeaving(),this.currentOptions={},this.activeScene=t,this.currentOptions=e||{},this.scenes[t].onStarting&&this.scenes[t].onStarting()}},getSceneConfig(t){return this.scenes[t]},onEngineSplashFinished(){this.goToGameSplashScene()},finishedScene(t){this.scenes[t].onFinished&&this.scenes[t].onFinished()},goToGameSplashScene(){let t=as.GameSplash;ut().scenes.gameSplashScene&&(t=ut().scenes.gameSplashScene),this.changeScene(t)},goToStartMenuScene(){let t=as.StartMenu;ut().scenes.startMenuScene&&(t=ut().scenes.startMenuScene),this.changeScene(t)},goToGameScene(){let t=as.Playing;ut().scenes.gameScene&&(t=ut().scenes.gameScene),this.changeScene(t)},addNewScene(t){this.scenes[t.id]=t}}}),KF={id:"game-splash-screen",style:{height:"100%",padding:"20px"},class:"flex justify-center items-center"},GF={id:"game-splash-screen-header flex justify-center flex-col items-center",class:"flex justify-center flex-col items-center"},JF={class:"title",id:"game-splash-title"},My=v.defineComponent({__name:"game-splash",setup(t){const e=v.ref(null),n=Kt(),r=v.computed(()=>{var l;return((l=ut().splashScreens)==null?void 0:l.gameSplashScreen)??{}}),i=v.computed(()=>typeof r.value.startButtonText=="string"?r.value.startButtonText:"Press to start"),o=v.computed(()=>n.loading.loaded),s=v.computed(()=>ut().gameTitle||"Narrat Game");function a(){oo().goToStartMenuScene()}return v.onMounted(()=>{e.value=nr().registerInputListener("game-splash",{continue:{press:()=>{a()}},system:{press:()=>{a()}}}),n.options.debug&&a()}),v.onUnmounted(()=>{e.value&&nr().unregisterInputListener(e.value)}),(l,c)=>(v.openBlock(),v.createElementBlock("div",KF,[v.createElementVNode("div",GF,[v.createElementVNode("h1",JF,v.toDisplayString(s.value),1),o.value?(v.openBlock(),v.createElementBlock("button",{key:0,class:"nrt-button menu-button main-menu-button large splash-start-button override",onClick:a},v.toDisplayString(i.value),1)):v.createCommentVNode("",!0)])]))}});function Ea(t){if(!t.listener)return console.warn("No input listener provided for navigation"),null;const e=v.ref(-1),n=v.computed(()=>t.mode==="grid"?e.value%t.columns:0),r=v.ref([]),i=v.ref(hl.lastInputMethodUsed),o=v.ref(null);function s(){var L,D;return(L=t.container)!=null&&L.value?t.container.value.children:(D=t.elements)!=null&&D.value?t.elements.value.filter(F=>F!==null):[]}function a(){r.value=s()}const l=v.computed(()=>u(e.value));function c(L){return r.value?L>=0&&L<r.value.length:!1}function f(L){const D=e.value;if(c(L)&&(e.value=L,l.value)){i.value==="gamepad"&&l.value.classList.add("selected");const F=u(D);F&&D!==L&&F.classList.remove("selected"),t.onSelected&&t.onSelected(L)}}function u(L){return r.value?r.value[L]:null}function d(){r.value&&(e.value===0?t.loopForbidden||f(r.value.length-1):f(e.value-1))}function h(){r.value&&(e.value===r.value.length-1?t.loopForbidden||f(0):f(e.value+1))}function p(){if(!r.value)return;const L=t,D=e.value;!t.loopForbidden&&D<L.columns?f(r.value.length-1):f(e.value-t.columns)}function m(){if(!r.value)return;const L=t,D=e.value;!t.loopForbidden&&D>=r.value.length-L.columns?f(0):f(e.value+t.columns)}function y(){t.mode==="grid"?p():t.mode==="list"&&d()}function g(){t.mode==="grid"?m():t.mode==="list"&&h()}function b(){(t.mode==="grid"||t.mode==="list")&&d()}function S(){(t.mode==="grid"||t.mode==="list")&&h()}function j(){t.onChosen&&t.onChosen(e.value)}v.onMounted(()=>{V()});function $(){t.listener&&(t.onlyVertical||(delete t.listener.actions.left,delete t.listener.actions.right),t.onlyHorizontal||(delete t.listener.actions.up,delete t.listener.actions.down),t.noChoosing||delete t.listener.actions.continue,o.value&&hl.removeEventListener("change-input",o.value))}function O(){l.value&&l.value.classList.add("selected")}function E(){l.value&&l.value.classList.remove("selected")}function V(){t.listener&&(a(),o.value=L=>{i.value=L.detail,L.detail==="gamepad"?O():E()},hl.addEventListener("change-input",o.value),t.onlyVertical||(t.listener.actions.left={press:b},t.listener.actions.right={press:S}),t.onlyHorizontal||(t.listener.actions.up={press:y},t.listener.actions.down={press:g}),t.noChoosing||(t.listener.actions.continue={press:j}),f(0))}return v.onUnmounted(()=>{$()}),v.watch(()=>{var L;return(L=t.elements)==null?void 0:L.value},L=>{L&&a()}),{selectedIndex:e,selectedElement:l,currentColumn:n,buttonDown:g,buttonUp:y,buttonLeft:b,buttonRight:S,selectUp:p,selectDown:m,selectPrevious:d,selectNext:h,select:f,disable:$,mount:V}}const QF={class:"used-save-slot flex flex-row justify-between items-center grow"},YF={class:"flex flex-col save-slot-number-container"},XF={class:"save-slot-number"},ZF={class:"flex flex-col justify-center save-info"},eV={key:1,class:"save-name"},tV={class:"flex flex-col"},nV={key:0},rV={key:1},iV={key:2},oV=["onClick"],Ny=v.defineComponent({__name:"save-slot-ui",props:{saveSlot:{},id:{},actions:{},selected:{type:Boolean},inputListener:{}},emits:["choice","cancel"],setup(t,{expose:e,emit:n}){var j;const r=t,i=v.ref(null),o=v.ref(null),s=v.ref(null);e({slotContainer:s});const a=v.ref(((j=r.saveSlot.saveData)==null?void 0:j.metadata.name)??"Empty Save"),l=v.ref(0),c=v.computed(()=>r.saveSlot.saveData!==null),f=v.computed(()=>r.saveSlot.saveData),u=v.computed(()=>ut().saves.mode),d=v.computed(()=>{const $=r.saveSlot.saveData;if($&&$.screens.layers[0]){const O=Eu($.screens.layers[0]);if(O)return{backgroundImage:`url(${Au(O.background)})`}}return!1}),h=n;function p($){h("choice",$)}function m($){return f.value?Q0(f.value.main.playTime/1e3):"00:00:00"}function y(){f.value&&nL(r.saveSlot.id,a.value)}function g(){const $=ut().saves.slots;let O="";const E=r.saveSlot.slotNumber;return E===0&&ut().saves.mode==="manual"?"AUTO":($>=10&&E<10&&(O+="0"),$>=100&&E<100&&(O+="0"),O+E)}function b(){i.value=Ea({mode:"list",container:o,listener:r.inputListener,onlyHorizontal:!0,onSelected:$=>{l.value=$},onChosen:$=>{p($)}}),i.value.mount()}function S(){i.value.disable(),i.value=null}return v.watch(()=>r.selected,($,O)=>{$&&!i.value&&b(),!$&&i.value&&S()}),v.onUnmounted(()=>{i.value&&S()}),($,O)=>(v.openBlock(),v.createElementBlock("div",{class:"save-slot flex flex-row",ref_key:"slotContainer",ref:s},[v.createElementVNode("div",QF,[v.createElementVNode("div",YF,[v.createElementVNode("h1",XF,v.toDisplayString(g()),1)]),d.value?(v.openBlock(),v.createElementBlock("div",{key:0,class:"save-slot-screenshot",style:v.normalizeStyle(d.value)},null,4)):v.createCommentVNode("",!0),v.createElementVNode("div",ZF,[c.value?v.withDirectives((v.openBlock(),v.createElementBlock("input",{key:0,type:"text",class:"save-name","onUpdate:modelValue":O[0]||(O[0]=E=>a.value=E),onInput:y},null,544)),[[v.vModelText,a.value]]):(v.openBlock(),v.createElementBlock("h3",eV,v.toDisplayString(a.value),1)),v.createElementVNode("div",tV,[f.value?(v.openBlock(),v.createElementBlock("p",nV,v.toDisplayString(new Date(f.value.metadata.saveDate).toLocaleString()),1)):v.createCommentVNode("",!0),f.value?(v.openBlock(),v.createElementBlock("p",rV,"Play time: "+v.toDisplayString(m($.saveSlot)),1)):v.createCommentVNode("",!0),u.value==="game-slots"?(v.openBlock(),v.createElementBlock("p",iV,v.toDisplayString($.saveSlot.slotType==="auto"?"Auto Save":"Manual Save"),1)):v.createCommentVNode("",!0)])]),v.createElementVNode("div",{class:"flex flex-row",ref_key:"actionsContainer",ref:o},[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList($.actions,(E,V)=>(v.openBlock(),v.createElementBlock("button",{class:v.normalizeClass(["nrt-button",{selected:$.selected&&V===l.value}]),onClick:()=>p(V),key:V},[v.createElementVNode("h3",null,v.toDisplayString(E),1)],10,oV))),128))],512)])],512))}}),sV=v.createElementVNode("h3",{class:"title"},"Confirmation",-1),Up=v.defineComponent({__name:"yes-no",props:{prompt:{type:String,required:!0},onConfirm:{type:Function,required:!1},onRefuse:{type:Function,required:!1}},emits:["choice"],setup(t,{emit:e}){const n=v.ref(nr().registerInputListener("yes-no",{cancel:{press:()=>{s(!1)}},continue:{press:()=>{s(!0)}}})),r=v.ref(null);Ea({mode:"list",container:r,listener:n.value,onChosen:a=>{s(a===0)}});const i=t,o=e;function s(a){a===!0&&i.onConfirm?i.onConfirm():a===!1&&i.onRefuse&&i.onRefuse(),o("choice",a)}return v.onMounted(()=>{}),v.onUnmounted(()=>{n.value&&nr().unregisterInputListener(n.value)}),(a,l)=>(v.openBlock(),v.createBlock(Ca,{onClose:l[2]||(l[2]=()=>s(!1)),containerCssClass:"yes-no-modal"},{header:v.withCtx(()=>[sV]),body:v.withCtx(()=>[v.createElementVNode("h3",null,v.toDisplayString(t.prompt),1),v.createElementVNode("div",{class:"flex justify-center",ref_key:"buttonsContainer",ref:r},[v.createElementVNode("button",{class:"nrt-button",onClick:l[0]||(l[0]=()=>s(!0))},"Yes"),v.createElementVNode("button",{class:"nrt-button",onClick:l[1]||(l[1]=()=>s(!1))},"No")],512)]),_:1}))}}),aV={class:"nrt-title"},lV={key:0},cV={class:"saves-section"},uV=v.createElementVNode("h3",{class:"saves-section-title"},"Auto save",-1),fV={class:"saves-section"},dV=v.createElementVNode("h3",{class:"saves-section-title"},"Manual Saves",-1),hV={key:1,class:"saves-section"},pV=v.createElementVNode("h3",{class:"saves-section-title"},"Save Slots",-1),mV={class:"saves-container flex flex-col"},N_=v.defineComponent({__name:"save-slots",props:{mode:{}},emits:["chosen","close"],setup(t,{emit:e}){const n=t,r=v.ref(nr().registerInputListener("save-slots",{cancel:{press:()=>{V()}}})),i=v.ref(0),o=v.reactive([]),s=v.computed(()=>o.slice(0,1)),a=v.computed(()=>o.slice(1)),l=v.ref([]),c=v.ref([]),f=v.ref([]),u=v.ref([]),d=v.ref([]);v.ref({mode:"list",elements:u,listener:r.value,onlyVertical:!0,noChoosing:!0,onSelected:F=>{i.value=F}});const h=Ea({mode:"list",elements:u,listener:r.value,onlyVertical:!0,noChoosing:!0,onSelected:F=>{i.value=F}}),p=v.computed(()=>{const F=i.value;return d.value.length<F+1?null:d.value[F].id}),m=v.reactive(n.mode==="load"?["Load","Delete"]:["Choose"]),y=v.computed(()=>ut().saves.mode),g=v.reactive({prompt:"Are you sure you want to delete this save file?",saveToDelete:null,onConfirm:()=>{E(g.saveToDelete),g.saveToDelete=null},onRefuse:()=>{g.saveToDelete=null}}),b=v.reactive({prompt:"Are you sure you want to overwrite this save file?",saveToOverwrite:null,onConfirm:()=>{$(b.saveToOverwrite),b.saveToOverwrite=null},onRefuse:()=>{b.saveToOverwrite=null}}),S=e;v.onBeforeMount(()=>{Ms().slots.forEach((B,q)=>{o[q]=B})});function j(){u.value=y.value==="manual"?[...c.value.map(I=>I.slotContainer),...f.value.map(I=>I.slotContainer)]:l.value.map(I=>I.slotContainer);const F=y.value==="manual"?[...s.value,...a.value]:o;d.value=F.map(I=>({id:I.id}))}v.onMounted(()=>{j()}),v.onUnmounted(()=>{h.value&&(h.value.disable(),h.value=null),r.value&&nr().unregisterInputListener(r.value)});function $(F){S("chosen",{slotId:F})}function O(F){const I=D(F);if(I){if(ut().saves.mode==="manual"&&I.slotType==="auto"){Kt().alert("Sorry","Can't delete the auto save slot!");return}g.saveToDelete=F}}function E(F){tL(F);const I=o.find(B=>B.id===F);I&&(I.saveData=null),j()}function V(){S("close")}function L(F,I){const B=m[I];B==="Load"?$(F):B==="Delete"?O(F):B==="Choose"&&(b.saveToOverwrite=F)}function D(F){return o.find(I=>I.id===F)}return(F,I)=>(v.openBlock(),v.createBlock(Ca,{onClose:V,containerCssClass:"save-modal",cantClose:!1},{header:v.withCtx(()=>[v.createElementVNode("h3",aV,v.toDisplayString(F.mode==="load"?"Choose a save to load":"Pick a slot to save the game"),1)]),body:v.withCtx(()=>[y.value==="manual"?(v.openBlock(),v.createElementBlock("div",lV,[v.createElementVNode("div",cV,[uV,v.createVNode(v.TransitionGroup,{name:"list",tag:"div"},{default:v.withCtx(()=>[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(s.value,B=>(v.openBlock(),v.createBlock(Ny,{key:B.id,saveSlot:B,id:B.id,actions:m,onChoice:q=>L(B.id,q),inputListener:r.value,selected:p.value===B.id,ref_for:!0,ref_key:"autoSlotsElements",ref:c},null,8,["saveSlot","id","actions","onChoice","inputListener","selected"]))),128))]),_:1})]),v.createElementVNode("div",fV,[dV,v.createVNode(v.TransitionGroup,{name:"list",tag:"div"},{default:v.withCtx(()=>[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(a.value,B=>(v.openBlock(),v.createBlock(Ny,{key:B.id,saveSlot:B,id:B.id,actions:m,onChoice:q=>L(B.id,q),inputListener:r.value,selected:p.value===B.id,ref_for:!0,ref_key:"manualSlotsElements",ref:f},null,8,["saveSlot","id","actions","onChoice","inputListener","selected"]))),128))]),_:1})])])):(v.openBlock(),v.createElementBlock("div",hV,[pV,v.createElementVNode("div",mV,[v.createVNode(v.TransitionGroup,{name:"list",tag:"div"},{default:v.withCtx(()=>[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(o,B=>(v.openBlock(),v.createBlock(Ny,{key:B.id,saveSlot:B,id:B.id,actions:m,onChoice:q=>L(B.id,q),selected:p.value===B.id,inputListener:r.value,ref_for:!0,ref_key:"saveSlotsElements",ref:l},null,8,["saveSlot","id","actions","onChoice","selected","inputListener"]))),128))]),_:1})])])),g.saveToDelete?(v.openBlock(),v.createBlock(Up,{key:2,prompt:g.prompt,onRefuse:g.onRefuse,onConfirm:g.onConfirm},null,8,["prompt","onRefuse","onConfirm"])):v.createCommentVNode("",!0),b.saveToOverwrite?(v.openBlock(),v.createBlock(Up,{key:3,prompt:b.prompt,onRefuse:b.onRefuse,onConfirm:b.onConfirm},null,8,["prompt","onRefuse","onConfirm"])):v.createCommentVNode("",!0)]),_:1}))}}),gV=v.defineComponent({__name:"start-menu-button",props:{button:{}},emits:["click"],setup(t){return(e,n)=>(v.openBlock(),v.createElementBlock("button",{class:v.normalizeClass(["nrt-button menu-button main-menu-button large override",e.button.cssClass]),onClick:n[0]||(n[0]=r=>e.$emit("click"))},v.toDisplayString(e.button.title),3))}});class Iy extends Ay{setup(e=!1){const r=e?"keydown":"keyup",i=bd(s=>{Io.emit("debouncedKeydown",s)},10,{isImmediate:!0,maxWait:10}),o=Ir().inputsContainer;o.addEventListener("keydown",s=>{Io.emit("keydown",s)}),o.addEventListener(r,s=>{i(s)})}}const Io=new Iy,Ry=Lr("startMenu",{state:()=>({buttons:[]}),actions:{addButtonsFromPlugins(){dn.plugins.forEach(e=>{e.startMenuButtons&&e.startMenuButtons.forEach(n=>{const r=window.narrat.app;n.popupComponent&&r.component(n.popupComponent.name,n.popupComponent.component),this.buttons.push(n)})})}}});function vV(){U_()}function I_(){vV(),Kt().menuReturn()}async function yV(t){if(ut().saves.mode==="manual"){const e=X0();e&&(t=e.id)}Kt().setSaveSlot(t),H_(Ms().globalSave),R_(),Zt().runGame()}function R_(){ui().stopAll(),nc("onPressStart"),Zt().start(),Kt().prepareToPlay(),dn.callHook("onGameStart")}async function bV(t,e){if(ut().saves.mode==="manual"){const n=X0();n&&(e=n.id)}if(Kt().setSaveSlot(e),R_(),t.saveData){Nz({gameSave:t.saveData,globalSave:Ms().globalSave}),ui().reloadAudio(t.saveData.audio);const n=Zt(),r=ut().saves.runOnReload;typeof r=="string"&&await Zt().runLabelFunction(r),n.jumpToLabel(t.saveData.vm.lastLabel)}}const wV={id:"game-menu"},SV={id:"game-header",class:"flex flex-col justify-between items-center"},kV={id:"game-title-container"},$V={id:"game-title-text"},xV={class:"nrt-title"},Dy=Po(v.defineComponent({__name:"StartMenu",setup(t){const e=v.ref(nr().registerInputListener("start-menu",{})),n=v.ref([]),r=v.ref(null),i=v.ref(!1),o=v.ref(!1),s=v.ref(null),a=v.ref(null),l=v.ref(!1),c=v.ref(!1),f=v.ref(null),u=Ry(),d=v.ref(!1),h=v.ref(null),p=v.computed(()=>u.buttons),m=Ea({mode:"list",container:r,listener:e.value,onChosen:B=>{y(n.value[B])}});function y(B){switch(B.id){case"continue":E();break;case"new-game":g();break;case"load-game":V();break;case"exit":Kt().exitGame();break;default:S(B);break}}async function g(){i.value&&ut().saves.mode==="manual"&&!ut().saves.disabled?c.value=!0:b()}async function b(){if(a.value===null)if(ut().saves.mode==="manual"){const B=X0();if(!B){vt("No autosave found");return}a.value=B.id}else{const B=ZD();if(!B){vt("No free slot found");return}a.value=B}c.value=!1,await yV(a.value)}function S(B){const q=p.value.findIndex(Z=>Z.id===B.id),ee=p.value[q];ee.action&&ee.action(),ee.popupComponent&&(d.value=ee)}function j(){d.value=!1}function $(){c.value=!1}async function O(){if(!a.value)return;const B=sd(a.value);if(!B){vt("No save file found");return}bV(B,a.value)}function E(){typeof s.value=="string"&&(a.value=s.value,O())}function V(){l.value=!0}function L({slotId:B}){const q=sd(B);q&&q.saveData?(a.value=B,O()):g()}v.onMounted(()=>{const B=Ms();B.slots.some(q=>q.saveData)&&(i.value=!0),(ut().saves.mode==="manual"||B.slots.some(q=>!q.saveData))&&(o.value=!0),B.lastSaveSlot&&sd(B.lastSaveSlot)&&(s.value=B.lastSaveSlot),D(),f.value=Io.on("debouncedKeydown",q=>{q.key===" "&&b(),q.key==="c"&&E()}),v.nextTick(()=>{m.select(0)}),yo().options.defaultMusic&&(h.value=VL(yo().options.defaultMusic)),dn.callHook("onStartScreenMounted")});function D(){const B=ut().saves.disabled;s.value&&!B&&n.value.push(F({id:"continue",title:"Continue",cssClass:"continue-button"})),o.value&&n.value.push(F({id:"new-game",title:"New Game",cssClass:"start-button"})),i.value&&!B&&n.value.push(F({id:"load-game",title:"Load Game",cssClass:"continue-button"}));for(const q of p.value)n.value.push({id:q.id,title:q.text,cssClass:`${q.id}-start-menu-button`});n.value.push(F({id:"exit",title:"Exit",cssClass:"exit-button"}))}function F({id:B,title:q,cssClass:ee}){const Z=ut().menuButtons[B];if(Z){let se=ee;return Z.cssClass&&(se=`${Z.cssClass} ${ee}`),{id:B,title:Z.text??q,cssClass:se}}return{id:B,title:q,cssClass:ee}}v.onUnmounted(()=>{if(e.value&&nr().unregisterInputListener(e.value),f.value&&Io.off("debouncedKeydown",f.value),typeof h.value=="number"){const B=yo().options.defaultMusic;zL(B,h.value)}});const I=v.computed(()=>ut().gameTitle);return(B,q)=>(v.openBlock(),v.createElementBlock("div",wV,[l.value?(v.openBlock(),v.createBlock(N_,{key:0,mode:"load",onChosen:L,onClose:q[0]||(q[0]=ee=>l.value=!1)})):v.createCommentVNode("",!0),c.value?(v.openBlock(),v.createBlock(Up,{key:1,prompt:"This will override your previous autosave, are you sure?",onConfirm:b,onRefuse:$})):v.createCommentVNode("",!0),v.createElementVNode("div",SV,[v.createElementVNode("div",kV,[v.createElementVNode("h1",$V,v.toDisplayString(I.value),1)]),v.createElementVNode("div",{class:"flex flex-col start-menu-buttons-container",ref_key:"buttonsContainer",ref:r},[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(n.value,ee=>(v.openBlock(),v.createBlock(gV,{key:ee.id,button:ee,onClick:Z=>y(ee)},null,8,["button","onClick"]))),128))],512)]),d.value?(v.openBlock(),v.createBlock(v.Teleport,{key:2,to:"#narrat-app-container"},[v.createVNode(Ca,{onClose:j,class:v.normalizeClass(`start-menu-popup-${d.value.id}`)},{header:v.withCtx(()=>[v.createElementVNode("h3",xV,v.toDisplayString(d.value.text),1)]),body:v.withCtx(()=>[d.value.popupComponent?(v.openBlock(),v.createBlock(v.resolveDynamicComponent(d.value.popupComponent.component),{key:0,onClose:j},null,32)):v.createCommentVNode("",!0)]),_:1},8,["class"])])):v.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-6a89804b"]]);function Hp(t){const e=bm().characters[t];return e||vt(`Character ${t} not found`),e}function jV(t,e){const n=Hp(t);if(n&&(e||(e="default"),n.sprites)){const r=n.sprites[e];return r==="none"?void 0:typeof r=="string"?{image:r}:r}}function D_(t){return`${bm().config.imagesPath}${t}`}function _V(t){return typeof t=="object"&&Object.hasOwn(t,"image")}function CV(t){return typeof t=="object"&&Object.hasOwn(t,"video")}function Ly(t){var e;return t?((e=Hp(t))==null?void 0:e.style)||{}:{}}const TV=["src"],OV=["autoplay","loop","muted"],EV=["src"],AV=v.defineComponent({__name:"dialog-picture",props:{picture:{},video:{},character:{},pose:{}},setup(t){const e=t,n=v.computed(()=>e.video),r=v.computed(()=>Ir().layoutMode),i=v.computed(()=>{var l;const s={};if(!e.character)return{};e.character&&(s[e.character]=!0);const a=Hp(e.character);return(l=a==null?void 0:a.style)!=null&&l.portraitCssClass&&(s[a.style.portraitCssClass]=!0),s}),o=v.computed(()=>{var h,p;const s=Ir(),a=ut().layout;let l=0,c=0;const f=a.portraits;if(r.value==="vertical"){const m=((h=f.offset)==null?void 0:h.portrait)??{right:0,bottom:0};l=20+m.right,c=s.dialogHeight+m.bottom}else{const m=((p=f.offset)==null?void 0:p.landscape)??{right:0,bottom:0},y=ut().dialogPanel.rightOffset??fy.dialogPanel.rightOffset;l=$m()-10+m.right+y,c=200+m.bottom}let u=a.portraits.width,d=a.portraits.height;return e.video&&(u=e.video.width??u,d=e.video.height??d),e.picture&&(u=e.picture.width??u,d=e.picture.height??d),{right:`${l}px`,bottom:`${c}px`,width:`${u}px`,height:`${d}px`}});return(s,a)=>{var l;return v.openBlock(),v.createElementBlock("div",{class:v.normalizeClass(["dialog-picture override",i.value]),style:v.normalizeStyle(o.value)},[s.picture?(v.openBlock(),v.createElementBlock("img",{key:0,src:v.unref(Gi)(v.unref(D_)((l=s.picture)==null?void 0:l.image)),class:v.normalizeClass(["picture override",i.value])},null,10,TV)):v.createCommentVNode("",!0),n.value?(v.openBlock(),v.createElementBlock("video",{key:1,class:"picture override",autoplay:n.value.autoplay!==!1,loop:n.value.loop!==!1,muted:!!n.value.muted},[v.createElementVNode("source",{src:v.unref(Gi)(v.unref(D_)(n.value.video))},null,8,EV)],8,OV)):v.createCommentVNode("",!0)],6)}}});function PV(){return yo().dialogAudio}function L_(t){const e=PV();if(e){if(e.characterAudio&&e.characterAudio[t])return e.characterAudio[t];if(e.defaultAudio)return e.defaultAudio}}function B_(t,e){if(typeof e!="string")return;const n=L_(t);return n==null?void 0:n.soundPerLetter}function MV(t,e){if(typeof e!="string")return;const n=B_(t,e);if(!n)return;const r=n;let i="";return r.prefix&&(i+=r.prefix),i+=e,r.suffix&&(i+=r.suffix),i}function NV(t,e){if(typeof e!="string")return;const n=e.toLowerCase(),r=MV(t,n);if(typeof r!="string")return;const i=ss(r);if(i){const o=B_(t,n);let s=1;o.volume&&(s=o.volume);const a=ui().audioVolume("sound",r)*s;i.volume(a),i.play()}}function IV(t){const e=L_(t);if(e!=null&&e.soundOnNewLine){const n=ss(e.soundOnNewLine);if(n){const r=ui().audioVolume("sound",e.soundOnNewLine);n.volume(r),n.play()}}}const RV=["innerHTML"],DV=["innerHTML"],LV=["innerHTML"],BV={key:1},FV=["onClick","innerHTML"],VV={key:1},zV={key:2,class:"buttons-container"},qV=v.defineComponent({__name:"dialog-box",props:{options:{},active:{type:Boolean},inputListener:{}},setup(t,{expose:e}){const n=v.ref(null),r=v.ref(""),i=v.ref(!1),o=v.ref(null),s=v.ref(null),a=v.ref(!1),l=v.ref(null),c=v.ref(null),f=v.ref(null),u=v.ref(null),d=v.ref(null),h=t,p=v.ref(null);h.active&&(p.value=Ea({mode:"list",container:n,listener:h.inputListener,onlyVertical:!0,onChosen:he=>{le.value&&R.value?$(R.value[he]):b(" ")}})),v.onMounted(()=>{ee(),a.value=!0}),v.onUnmounted(()=>{m(),I(),G({unmounted:!0})});function m(){o.value&&(clearTimeout(o.value),o.value=null),y()}function y(){p.value&&(p.value.disable(),p.value=null)}function g(he){b(he.key)}function b(he){if(!le.value){a.value&&s&&he===" "&&G({pressedSpace:!0});return}if(le.value&&h.options.textField&&he==="Enter"&&D(),le.value&&!h.options.textField){let _e=-1;switch(he){case" ":_e=0;break;case"1":_e=0;break;case"2":_e=1;break;case"3":_e=2;break;case"4":_e=3;break;case"5":_e=4;break;case"6":_e=5;break;case"7":_e=6;break;case"8":_e=7;break}_e!==-1&&R.value&&_e<R.value.length?$(R.value[_e]):_e===0&&$(_e)}}function S(){le.value||a.value&&s&&G({pressedSpace:!0})}function j(){i.value||$(0)}function $(he){O();let _e;typeof he=="object"?_e=he.originalIndex:_e=he,Kt().playerAnswered(_e)}function O(){m(),G({unmounted:!0}),i.value=!0}function E(he){const _e={};return he.allowed||(_e.pointerEvents="none",_e.textDecoration="line-through"),_e}function V(he,_e){const Ze={index:he+1,choice:_e.choice};let ce='<span class="choice-index">%{$index}. </span> <span class="choice-text">%{$choice}</span>';if(Y1().choiceTextTemplate&&(ce=Y1().choiceTextTemplate),_e.flag){const He=cT(_e.flag);He!=null&&He.textTemplate&&(ce=He.textTemplate)}return hx(Ze,ce)}function L(he){const _e={};if(he.allowed||(_e["strike-anim"]=!0),he.seenBefore&&(_e["seen-before"]=!0),he.flag){const Ze=cT(he.flag);Ze!=null&&Ze.cssClass&&(_e[Ze.cssClass]=!0)}return _e}function D(){const he=r.value;I(),Kt().playerAnswered(he)}function F(){h.options.textField&&(nr().startTyping(),o.value=setTimeout(()=>{le.value&&(d.value=nr().registerInputListener("text-field-input-grabber",{}),u.value&&u.value.focus())},100))}function I(){nr().stopTyping(),d.value&&(nr().unregisterInputListener(d.value),d.value=null)}function B(he,_e){const Ze=h.options.text.substring(he,_e);s.value.text+=Ze;const ce=Ze.substring(0,1);return NV(h.options.styleId,ce),_e}function q(he){const _e=he[0];return s.value.text+=_e,s.value.skippedChars+=_e.length,_e.length}function ee(){if(!h.options.old)if(er().playMode==="skip")Z();else if(IV(h.options.styleId),ut().dialogPanel.animateText){s.value={text:"",index:0,startTime:Date.now(),timer:null,skippedChars:0,tags:DL(h.options.text),finished:!1};const he=s.value;he.timer=setInterval(()=>{U()},30)}else M.value&&(l.value=setTimeout(()=>{G()},(ut().dialogPanel.textSpeed??Pp)*h.options.text.length))}function Z(){er().playMode==="skip"&&!h.options.old&&(M.value?c.value=setTimeout(()=>{G()},100):(er().toggleSkip(),G({unmounted:!0})))}function se(){er().playMode==="auto"&&!h.options.old&&M.value&&le&&j()}function U(){const he=s.value;if(!he)return;const _e=he.index,Ze=Date.now()-he.startTime;let ce=!1,He=Math.round(Ze/(ut().dialogPanel.textSpeed??Pp))+he.skippedChars;if(He>h.options.text.length&&(ce=!0,he.finished=!0,He=h.options.text.length),He!==he.index){let ot=_e;for(;he.tags.length>0&&He>=he.tags[0].index;){ot=B(ot,he.tags[0].index);const Ve=q(he.tags.shift());ot+=Ve,He+=Ve}ot=B(ot,He),he.index=ot}ce&&G()}function G({unmounted:he,pressedSpace:_e}={}){Zt().endTextAnimation(),he||F(),setTimeout(()=>{p.value&&p.value.select(0)},10),s.value&&(s.value.timer&&clearInterval(s.value.timer),s.value=null),l.value&&!_e&&clearTimeout(l.value),c.value&&clearTimeout(c.value),f.value&&clearTimeout(f.value),!he&&!_e&&er().playMode!=="normal"&&M&&(f.value=setTimeout(()=>{j()},er().playMode==="auto"?ut().dialogPanel.timeBetweenLines??pu.common.dialogPanel.timeBetweenLines:0))}const A=v.computed(()=>h.options.title?" &nbsp;–&nbsp; ":""),k=v.computed(()=>({...Ly(h.options.styleId).boxCss})),M=v.computed(()=>!R.value&&!h.options.textField),_=v.computed(()=>{const he={};return h.options.title&&(he["dialog-box-followup"]=!0),h.options.old?he["dialog-box-old"]=!0:he["dialog-box-new"]=!0,he}),w=v.computed(()=>{const he=Ly(h.options.styleId);return{color:he.color,...he.nameCss}}),x=v.computed(()=>Ly(h.options.styleId).textCss),T=v.computed(()=>s.value?s.value.text:h.options.text),R=v.computed(()=>{if(h.options.choices)return h.options.choices}),ie=v.computed(()=>er().playMode==="skip"),me=v.computed(()=>er().playMode==="auto"),le=v.computed(()=>h.active&&a.value&&!i.value&&!f.value&&!s.value&&h.options.interactive&&!Ue.value),ae=Kt(),Ue=v.computed(()=>ae.paused);return v.watch(()=>h.options,(he,_e)=>{!_e.old&&he.old&&s&&G({unmounted:!0})}),v.watch(ie,(he,_e)=>{he&&!_e&&Z()}),v.watch(me,(he,_e)=>{he&&!_e&&se()}),e({keyboardEvent:g}),(he,_e)=>{const Ze=v.resolveDirective("visible");return v.openBlock(),v.createElementBlock("div",{class:v.normalizeClass(["dialog-box w-full override",_.value]),style:v.normalizeStyle(k.value)},[v.createElementVNode("div",{class:"dialog-content",onClick:S},[he.options.title?(v.openBlock(),v.createElementBlock("span",{key:0,class:"dialog-title override",style:v.normalizeStyle(w.value),innerHTML:he.options.title},null,12,RV)):v.createCommentVNode("",!0),v.createElementVNode("span",{class:"dialog-text dialog-separator override",style:v.normalizeStyle(x.value),innerHTML:A.value},null,12,DV),v.createElementVNode("span",{class:v.normalizeClass(["dialog-text override",he.options.cssClass]),style:v.normalizeStyle(x.value),innerHTML:T.value},null,14,LV),he.options.old?v.createCommentVNode("",!0):v.withDirectives((v.openBlock(),v.createElementBlock("div",BV,[R.value?(v.openBlock(),v.createElementBlock("div",{key:0,class:"dialog-choices",ref_key:"choicesDiv",ref:n},[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(R.value,(ce,He)=>(v.openBlock(),v.createElementBlock("p",{key:He,style:v.normalizeStyle(E(ce)),class:v.normalizeClass([L(ce),"dialog-choice override"]),onClick:ot=>$(ce),innerHTML:V(He,ce)},null,14,FV))),128))],512)):he.options.textField?(v.openBlock(),v.createElementBlock("div",VV,[v.withDirectives(v.createElementVNode("input",{autofocus:"",type:"text",class:"label-input nrt-input",ref_key:"playerInput",ref:u,id:"player-input-field","onUpdate:modelValue":_e[0]||(_e[0]=ce=>r.value=ce)},null,512),[[v.vModelText,r.value]]),v.createElementVNode("button",{onClick:D,class:"nrt-button",id:"player-input-submit"}," Submit ")])):(v.openBlock(),v.createElementBlock("div",zV,[v.createElementVNode("div",{onClick:_e[1]||(_e[1]=ce=>$(0)),ref:"continue",class:"interact-button nrt-button override"}," Continue ",512)]))])),[[Ze,le.value]])])],6)}}}),UV={key:0,class:"auto-play-feedback-container"},HV=v.defineComponent({__name:"AutoPlayFeedback",setup(t){const e=er(),n=v.computed(()=>e.playMode==="auto"),r=v.computed(()=>e.playMode==="skip"),i=v.computed(()=>n.value?"auto-play-feedback-auto":r.value?"auto-play-feedback-skip":{}),o=v.computed(()=>n.value?"Auto Play":r.value?"Skip":"");return(s,a)=>o.value?(v.openBlock(),v.createElementBlock("div",UV,[v.createElementVNode("div",{class:v.normalizeClass(["auto-play-feedback",i.value])},v.toDisplayString(o.value),3)])):v.createCommentVNode("",!0)}}),WV=v.createElementVNode("div",{class:"anchor"},null,-1),By=v.defineComponent({__name:"game-dialog",setup(t){const e=v.computed(()=>Ir().layoutMode),n=v.computed(()=>nr().inGameInputListener),r=v.ref(Kt().inScript),i=v.ref(null),o=Ir(),s=Zt(),a=v.computed(()=>s.stack),l=er(),c=v.computed(()=>l.dialog),f=v.ref(null),u=v.ref(null),d=v.ref(null),h=v.computed(()=>{let I="0px";const B=ut().layout.dialogBottomPadding;return typeof B=="number"?I=`${B}px`:typeof B=="string"&&(I=B),{paddingBottom:I}}),p=v.computed(()=>{if(c.value.length>0)return c.value[c.value.length-1]}),m=v.computed(()=>{if(p.value)return p.value.speaker}),y=v.computed(()=>{if(p.value)return p.value.pose}),g=v.computed(()=>{if(p.value){const I=m.value;let B=y.value;return I?(B||(B="idle"),B):void 0}}),b=v.computed(()=>{if(!g.value)return;const I=m.value;return jV(I,g.value)}),S=v.computed(()=>{const I=b.value;if(_V(I))return I}),j=v.computed(()=>{const I=b.value;if(CV(I))return I}),$=v.computed(()=>o.dialogWidth),O=v.computed(()=>Kt().inScript);v.watch(O,I=>{I?r.value=!0:er().playMode!=="normal"?(er().playMode==="skip"&&(er().playMode="normal"),i.value=setTimeout(()=>{r.value=!1},500)):r.value=!1}),v.onMounted(()=>{if(n.value){const B=n.value;B.actions.autoPlay={press:()=>{er().toggleAutoPlay()}},B.actions.skip={press:()=>{er().toggleSkip()}}}const I=B=>{u.value&&u.value.keyboardEvent&&u.value.keyboardEvent(B)};I.value=Io.on("debouncedKeydown",I)}),v.onUnmounted(()=>{n.value&&(delete n.value.actions.autoPlay,delete n.value.actions.skip),d.value&&Io.off("debouncedKeydown",d.value),i.value&&clearTimeout(i.value)});const E=v.computed(()=>{let I;const B=`${Ir().dialogHeight}px`,q={};if(Ir().overlayMode){q.position="absolute";const ee=ut().dialogPanel.rightOffset??pu.common.dialogPanel.rightOffset;q.right=`${ee}px`;const Z=ut().dialogPanel.bottomOffset??pu.common.dialogPanel.bottomOffset;q.bottom=`${Z}px`}return{...q,width:e.value==="horizontal"?`${$.value}px`:"100%",height:B,transform:I,transformOrigin:"right"}});function V(){er().toggleAutoPlay()}function L(){er().toggleSkip()}function D(I,B){const q=Hp(I.speaker);let ee=(q==null?void 0:q.name)??"Missing Character";return B>=1&&c.value[B-1].speaker===I.speaker&&(ee=void 0),I.choices&&I.choices.forEach(Z=>{Z.choice=Is(Z.choice)}),{title:ee??"",text:I.text,cssClass:I.cssClass,styleId:I.speaker,choices:I.choices,old:B<c.value.length-1,interactive:I.interactive,textField:I.textField}}function F(I){return I===l.dialog.length-1&&a.value.length>0}return v.watch(c.value,I=>{if(f.value){const B=f.value;B.scrollTop=B.scrollHeight+1e8}}),(I,B)=>(v.openBlock(),v.createElementBlock(v.Fragment,null,[v.createVNode(HV),v.createVNode(v.Transition,{name:"fade"},{default:v.withCtx(()=>[(S.value||j.value)&&v.unref(o).showDialog?(v.openBlock(),v.createBlock(AV,{key:0,picture:S.value,video:j.value,character:m.value,pose:y.value},null,8,["picture","video","character","pose"])):v.createCommentVNode("",!0)]),_:1}),v.createVNode(v.Transition,{name:"dialog-transition"},{default:v.withCtx(()=>[v.unref(o).showDialog?(v.openBlock(),v.createElementBlock("div",{key:0,class:"dialog override",ref_key:"dialogRef",ref:f,style:v.normalizeStyle(E.value)},[v.createVNode(v.TransitionGroup,{name:"list",tag:"div",class:"dialog-container w-full override",style:v.normalizeStyle(h.value)},{default:v.withCtx(()=>[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(c.value,(q,ee)=>(v.openBlock(),v.createBlock(qV,{ref_for:!0,ref:Z=>u.value=Z,key:q.id,options:D(q,ee),active:F(ee),inputListener:n.value},null,8,["options","active","inputListener"]))),128))]),_:1},8,["style"]),(v.openBlock(),v.createBlock(v.Teleport,{to:"#narrat-app"},[v.createElementVNode("div",{class:"auto-skip-buttons flex"},[v.createElementVNode("div",{class:"nrt-button menu-toggle-button auto-button auto",onClick:V}," Auto "),v.createElementVNode("div",{class:"nrt-button menu-toggle-button auto-button skip",onClick:L}," Skip ")])])),WV],4)):v.createCommentVNode("",!0)]),_:1})],64))}}),KV=["id"],GV=["src"],JV={class:"tab-title"},F_=v.defineComponent({__name:"tab-selector",props:{tab:{},active:{type:Boolean}},emits:["click"],setup(t,{emit:e}){const n=t,r=e,i=v.computed(()=>n.active?"tab-active":"tab-inactive");function o(){r("click")}return(s,a)=>(v.openBlock(),v.createElementBlock("div",{class:v.normalizeClass(["tab",i.value]),id:`tab-${s.tab.id}`,onClick:o},[v.createElementVNode("div",{class:v.normalizeClass(["tab-title-container",s.active?"active":""])},[s.tab.icon?(v.openBlock(),v.createElementBlock("img",{key:0,src:s.tab.icon,alt:"tab icon",class:"tab-icon"},null,8,GV)):v.createCommentVNode("",!0),v.createElementVNode("span",JV,v.toDisplayString(s.tab.label),1)],2)],10,KV))}}),QV={class:"tabs-controller"},YV={key:0,class:"tabs-controller__tabs"},XV={key:1,class:"tab-content"},ZV={key:2},ez=[v.createElementVNode("div",{class:"tab-content__empty"},[v.createElementVNode("p",null,"No tab selected")],-1)],tz=v.defineComponent({__name:"TabsController",props:{tabs:{},defaultTab:{}},emits:["tab-change","close"],setup(t,{emit:e}){const n=v.ref(nr().registerInputListener("tabs-controller",{cancel:{press:()=>{r("close")}},system:{press:()=>{r("close")}},menu:{press:()=>{r("close")}},previousTab:{press:()=>{o.value>0&&s(o.value-1)}},nextTab:{press:()=>{o.value<i.tabs.length-1&&s(o.value+1)}}})),r=e,i=t,o=v.ref(i.defaultTab);function s(l){o.value=l,r("tab-change",l)}const a=v.computed(()=>i.tabs[o.value]);return v.onUnmounted(()=>{n.value&&(nr().unregisterInputListener(n.value),n.value=null)}),(l,c)=>(v.openBlock(),v.createElementBlock("div",QV,[l.tabs.length>1?(v.openBlock(),v.createElementBlock("div",YV,[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(l.tabs,(f,u)=>(v.openBlock(),v.createBlock(F_,{key:f.id,tab:f,active:u===o.value,onClick:()=>s(u),inputListener:n.value},null,8,["tab","active","onClick","inputListener"]))),128))])):v.createCommentVNode("",!0),a.value?(v.openBlock(),v.createElementBlock("div",XV,[a.value?(v.openBlock(),v.createBlock(v.resolveDynamicComponent(a.value.component),{key:0,inputListener:n.value,onClose:c[0]||(c[0]=f=>l.$emit("close"))},null,40,["inputListener"])):v.createCommentVNode("",!0)])):(v.openBlock(),v.createElementBlock("div",ZV,ez))]))}}),nz={class:"menu-container menu-toggle"},rz=["onClick","id"],iz={class:"nrt-title"},Fy=v.defineComponent({__name:"menu-buttons",setup(t){const e=hi(),n=v.ref(null);v.onMounted(()=>{dn.callHook("onGameMounted")}),v.onUnmounted(()=>{n.value&&Io.off("keydown",n.value),dn.callHook("onGameUnmounted")});function r(f){hi().activeMenu=f}const i=v.computed(()=>e.menus),o=v.computed(()=>e.menu),s=v.computed(()=>{var f;return(((f=o.value)==null?void 0:f.tabs)??[]).filter(u=>u.condition?u.condition():!0).map(u=>({id:u.id,label:u.text,component:u.component}))});function a(){e.closeMenu()}function l(f){e.setActiveTab(f)}function c(){return a()}return(f,u)=>(v.openBlock(),v.createElementBlock("div",nz,[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(i.value,(d,h)=>(v.openBlock(),v.createElementBlock("button",{key:d.id,onClick:p=>r(d.id),id:d.cssId??`${h}-menu-button`,class:"nrt-button menu-toggle-button"},v.toDisplayString(d.label),9,rz))),128)),o.value?(v.openBlock(),v.createBlock(v.Teleport,{key:0,to:"#narrat-app-container"},[v.createVNode(Ca,{containerCssClass:{[o.value.cssClass]:!0,"menu-modal":!0},onClose:a},{header:v.withCtx(()=>{var d;return[v.createElementVNode("h3",iz,v.toDisplayString(((d=v.unref(e).tab)==null?void 0:d.text)??o.value.label),1)]}),body:v.withCtx(()=>[v.createVNode(tz,{onTabChange:l,onClose:c,tabs:s.value,defaultTab:o.value.activeTab},null,8,["tabs","defaultTab"])]),_:1},8,["containerCssClass"])])):v.createCommentVNode("",!0)]))}});function V_(t){const e={};return t.selected&&(e.selected=!0),t.clickable&&t.viewportClickable&&!t.transitioning&&(e.interactable=!0),(!t.clickable||!t.viewportClickable)&&(e["nrt-disabled"]=!0),t.transitioning&&(e.transitioning=!0),t.greyed&&(e.greyed=!0),t.hidden&&(e.hidden=!0),t.cssClass&&(e[t.cssClass]=!0),e}function oz(t,e,n){return{selected:e,clickable:t.onClick!==void 0,viewportClickable:qp(t),transitioning:n,greyed:!1,hidden:!1,cssClass:t.cssClass}}function sz(t,e,n){const r=bl(t),i=No().getButtonState(t),o=nr().inputMode;return{selected:e&&o==="gamepad",clickable:No().isButtonInteractible(t),viewportClickable:qp(r),transitioning:n,greyed:i==="greyed",hidden:i==="hidden"||i===!1,cssClass:r.cssClass}}function az(t,e,n){return V_(sz(t,e,n))}function lz(t,e,n){return V_(oz(t,e,n))}const cz=["id"],uz=["innerHTML"],fz=v.defineComponent({__name:"screen-object",props:{screenObject:{},layerSelected:{type:Boolean},transitioning:{type:Boolean},activeInteractive:{}},setup(t){const e=t,n=vo();function r(a){e.transitioning||e.screenObject.onClick&&n.clickObject(a)}const i=v.computed(()=>{if(!e.layerSelected)return!1;const a=e.activeInteractive;return a.type==="screenObject"&&a.id===e.screenObject.id}),o=v.computed(()=>lz(e.screenObject,i.value,e.transitioning)),s=v.computed(()=>{const a={};e.screenObject.opacity!==1&&(a.opacity=e.screenObject.opacity);let l=e.screenObject.x,c=e.screenObject.y,f=e.screenObject.width,u=e.screenObject.height;if(e.screenObject.anchor){const h=e.screenObject.anchor;l=e.screenObject.x-f*h.x,c=e.screenObject.y-u*h.y,a.transformOrigin=`${h.x*100}% ${h.y*100}%`}e.screenObject.scale&&(f=f*e.screenObject.scale,u=u*e.screenObject.scale);const d={...a,left:`${l}px`,top:`${c}px`,width:`${f}px`,height:`${u}px`};return PF(e.screenObject)&&(d.backgroundImage=`url(${Au(e.screenObject.image)})`),d});return(a,l)=>{const c=v.resolveComponent("ScreenObject",!0);return v.openBlock(),v.createElementBlock("div",{tabindex:"-1",class:v.normalizeClass(["viewport-object",o.value]),id:`viewport-object-${e.screenObject.id}`,onClick:l[0]||(l[0]=f=>r(a.screenObject)),style:v.normalizeStyle(s.value)},[v.createElementVNode("span",{innerHTML:e.screenObject.text?v.unref(Is)(e.screenObject.text):void 0},null,8,uz),(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(e.screenObject.children,f=>(v.openBlock(),v.createBlock(c,{transitioning:a.transitioning,key:f.id,screenObject:f},null,8,["transitioning","screenObject"]))),128))],14,cz)}}}),dz=["id","innerHTML"],hz=v.defineComponent({__name:"viewport-button",props:{id:{},layerSelected:{type:Boolean},transitioning:{type:Boolean},activeInteractive:{}},setup(t){const e=t,n=No();v.computed(()=>n.getButtonState(e.id));const r=v.computed(()=>bl(e.id)),i=r.value.background?Au(r.value.background):null,o=v.computed(()=>{if(!e.layerSelected)return!1;const f=e.activeInteractive;return f.type==="button"&&f.id===e.id});v.computed(()=>n.isButtonClickable(e.id));const s=v.computed(()=>{const f=r.value.text??"";return Is(f)}),a=v.computed(()=>az(e.id,o.value,e.transitioning)),l=v.computed(()=>{const f={};r.value.position.width&&(f.width=`${r.value.position.width}px`),r.value.position.height&&(f.height=`${r.value.position.height}px`),r.value.background&&(f.backgroundImage=`url(${i})`);let u=r.value.position.left,d=r.value.position.top;return r.value.anchor&&(u=r.value.position.left-r.value.position.width*r.value.anchor.x,d=r.value.position.top-r.value.position.height*r.value.anchor.y),{...f,left:`${u}px`,top:`${d}px`}});function c(){n.clickOnButton(e.id)}return(f,u)=>(v.openBlock(),v.createElementBlock("div",{tabindex:"-1",class:v.normalizeClass(["viewport-button",a.value]),id:`viewport-button-${f.id}`,onClick:u[0]||(u[0]=d=>c()),style:v.normalizeStyle(l.value),innerHTML:s.value},null,14,dz))}}),pz=["id"],mz=["id","loop","muted"],gz=["src"],vz=["id"],Vy=v.defineComponent({__name:"screen-layer",props:{layer:{},layerIndex:{},transitioning:{type:Boolean},activeInteractive:{}},setup(t){const e=t,n=Kt(),r=vo(),i=v.computed(()=>!!(e.activeInteractive&&e.activeInteractive.layer===e.layerIndex)),o=v.computed(()=>r.tree.filter(y=>y.layer===e.layerIndex)),s=v.computed(()=>ut().layout.backgrounds.width),a=v.computed(()=>ut().layout.backgrounds.height),l=v.computed(()=>e.layer),c=v.computed(()=>{const y=Eu(l.value);return y||vt(`Screen ${l.value} doesn't have a config`),y}),f=v.computed(()=>n.isInGame),u=v.computed(()=>c.value.buttons||[]),d=v.computed(()=>c.value.video),h=v.computed(()=>({width:`${s.value}px`,height:`${a.value}px`})),p=v.computed(()=>{let y;return c.value.background!==Mp&&(y=`url(${Au(c.value.background)})`),{backgroundImage:y,position:"absolute",left:0,top:0,width:`${s.value}px`,height:`${a.value}px`}}),m=v.computed(()=>({position:"absolute",left:0,top:0,width:`${s.value}px`,height:`${a.value}px`}));return(y,g)=>f.value?(v.openBlock(),v.createElementBlock("div",{key:0,class:"viewport-layer",id:`viewport-layer-${l.value}`,style:v.normalizeStyle(h.value)},[d.value?(v.openBlock(),v.createElementBlock("video",{key:0,class:"viewport-layer-background",id:`viewport-layer-background-${l.value}`,style:v.normalizeStyle(m.value),autoplay:"",loop:d.value.loop!==!1,muted:!!d.value.muted},[v.createElementVNode("source",{src:v.unref(Gi)(c.value.background)},null,8,gz)],12,mz)):(v.openBlock(),v.createElementBlock("div",{key:1,class:"viewport-layer-background",id:`viewport-layer-background-${l.value}`,style:v.normalizeStyle(p.value)},null,12,vz)),(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(u.value,b=>(v.openBlock(),v.createBlock(hz,{key:b,id:b,layerSelected:i.value,transitioning:y.transitioning,activeInteractive:y.activeInteractive},null,8,["id","layerSelected","transitioning","activeInteractive"]))),128)),(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(o.value,b=>(v.openBlock(),v.createBlock(fz,{key:b.id,screenObject:b,transitioning:y.transitioning,layerSelected:i.value,activeInteractive:y.activeInteractive},null,8,["screenObject","transitioning","layerSelected","activeInteractive"]))),128))],12,pz)):v.createCommentVNode("",!0)}}),yz=v.defineComponent({__name:"NarratTransition",props:{name:{type:String,required:!0},duration:{type:Number,required:!0},delay:Number},emits:["complete"],setup(t,{emit:e}){v.useSlots();const n=e,r=t,i=v.ref("start"),o=v.reactive({oldSlotClasses:{},oldSlotStyle:{},newSlotClasses:{},newSlotStyle:{}});return v.onMounted(async()=>{const s=`narrat-transition-${r.name}`;o.newSlotClasses={[`${s}-enter-from`]:!0},o.oldSlotClasses={[`${s}-leave-active`]:!0},await Hi(30),o.oldSlotStyle={transitionDuration:`${r.duration/1e3}s`},o.newSlotStyle={transitionDuration:`${r.duration/1e3}s`},o.oldSlotClasses[`${s}-leave-to`]=!0,o.newSlotClasses[`${s}-enter-active`]=!0,await Hi(r.delay??0),delete o.newSlotClasses[`${s}-enter-from`],await Hi(r.duration),i.value="end",n("complete")}),(s,a)=>(v.openBlock(),v.createElementBlock(v.Fragment,null,[i.value!=="end"?(v.openBlock(),v.createElementBlock("div",{key:0,class:v.normalizeClass(["transition-holder",o.oldSlotClasses]),style:v.normalizeStyle(o.oldSlotStyle)},[v.renderSlot(s.$slots,"oldElement")],6)):v.createCommentVNode("",!0),v.createElementVNode("div",{class:v.normalizeClass(["transition-holder",o.newSlotClasses]),style:v.normalizeStyle(o.newSlotStyle)},[v.renderSlot(s.$slots,"newElement")],6)],64))}});function z_(t,e,n){return t<e?e:t>n?n:t}const zy=v.defineComponent({__name:"screens",setup(t){const e=v.computed(()=>nr().inGameInputListener),n=Kt(),r=No(),i=vo(),o=v.ref(0),s=v.computed(()=>r.nonEmptyLayers),a=v.computed(()=>{const p=[];return s.value.reduce((m,y,g)=>{const S=Eu(y.screen).buttons;if(S)for(const $ of S)r.isButtonClickable($)&&m.push({id:$,type:"button",layer:g});const j=i.tree.filter($=>$.layer===g);for(const $ of j)i.isScreenObjectClickable($)&&m.push({id:$.id,type:"screenObject",layer:g});return m},p)}),l=v.computed(()=>{if(a.value.length===0)return null;let p=o.value;return p>a.value.length-1&&(p=a.value.length-1),a.value[p]}),c=v.computed(()=>ut().layout.backgrounds.width),f=v.computed(()=>ut().layout.backgrounds.height),u=v.computed(()=>n.isInGame);function d(p){r.finishTransition(p)}const h=v.computed(()=>{const p=c.value;return{height:`${f.value}px`,width:`${p}px`}});return v.onMounted(()=>{v.nextTick(()=>{if(e.value){const p=e.value.actions;p.previousTab={press:()=>{o.value>0?o.value--:o.value=a.value.length-1,o.value=z_(o.value,0,a.value.length-1)}},p.left=p.previousTab,p.nextTab={press:()=>{o.value<a.value.length-1?o.value++:o.value=0,o.value=z_(o.value,0,a.value.length-1)}},p.right=p.nextTab,p.viewportSelect={press:()=>{if(l.value){const m=l.value;m.type==="button"?r.clickOnButton(m.id):m.type==="screenObject"&&i.clickObject(i.getObject(m.id))}}}}})}),v.onUnmounted(()=>{if(e.value){const p=e.value;delete p.actions.previousTab,delete p.actions.left,delete p.actions.nextTab,delete p.actions.right}}),(p,m)=>u.value?(v.openBlock(),v.createElementBlock("div",{key:0,class:"viewport",id:"narrat-viewport",style:v.normalizeStyle(h.value)},[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(s.value,(y,g)=>(v.openBlock(),v.createElementBlock("div",{key:y.screen??"",class:"layer-container"},[y.transition?(v.openBlock(),v.createBlock(yz,{key:0,name:y.transition.transition,duration:y.transition.duration,delay:y.transition.delay,onComplete:()=>d(g)},{oldElement:v.withCtx(()=>[y.transition.oldScreen?(v.openBlock(),v.createBlock(Vy,{key:0,layer:y.transition.oldScreen,layerIndex:g,transitioning:!0},null,8,["layer","layerIndex"])):v.createCommentVNode("",!0)]),newElement:v.withCtx(()=>[y.screen?(v.openBlock(),v.createBlock(Vy,{key:0,layer:y.screen,layerIndex:g,transitioning:!0},null,8,["layer","layerIndex"])):v.createCommentVNode("",!0)]),_:2},1032,["name","duration","delay","onComplete"])):y.screen?(v.openBlock(),v.createBlock(Vy,{key:1,layer:y.screen,layerIndex:g,transitioning:!1,activeInteractive:l.value},null,8,["layer","layerIndex","activeInteractive"])):v.createCommentVNode("",!0)]))),128))],4)):v.createCommentVNode("",!0)}}),so=Lr("hud",{state:()=>({hudStats:{},visible:!0}),actions:{updateConfig(t){for(const e in t.hudStats)this.hudStats[e]||(this.hudStats[e]={value:t.hudStats[e].startingValue})},reset(t){this.$reset(),this.updateConfig(t)},setStat(t,e){this.hudStats[t].value=e,this.getStat(t).value<(hc(t).minValue??0)&&(this.hudStats[t].value=hc(t).minValue??0),this.getStat(t).value>(hc(t).maxValue??1/0)&&(this.hudStats[t].value=hc(t).maxValue??1/0)},addStat(t,e){this.setStat(t,this.getStatValue(t)+e)},getStat(t){return this.hudStats[t]},getStatValue(t){return this.hudStats[t].value},generateSaveData(){return{hudStats:yn(this.hudStats),visible:this.visible}},loadSaveData(t){this.hudStats=rc(this.hudStats,t.hudStats),this.visible=t.visible},setVisibility(t){this.visible=t}}}),bz=v.defineComponent({data(){return{}},methods:{getStatImage(t){return Gi(this.statsConfig[t].icon)},formatStat(t,e){var a;const n=hc(t),r=n.decimals??2,i=Math.floor(e*10**r)/10**r,o={};(a=n.formatting)!=null&&a.style&&(o.style=n.formatting.style,n.formatting.style==="currency"&&(o.currency=n.formatting.currency??"USD",o.currencyDisplay="narrowSymbol"),n.formatting.style==="unit"&&(o.unit=n.formatting.unit??"day"));let s;try{s=i.toLocaleString(void 0,o)}catch(l){vt(`Error formatting HUD stat, probably using an invalid config: ${l}`),console.error(l),s=i.toLocaleString()}return s},statPrefix(t){const e=hc(t);return e.prefix??(e.suffix||e.hideName?"":e.name)},statSuffix(t){return hc(t).suffix??""}},computed:{...ud(so,["hudStats"]),...ud(Ir,["layoutMode"]),statsConfig(){return ut().hudStats},stats(){return this.hudStats},hudStyle(){let t="0";return this.layoutMode==="horizontal"&&(t=`${$m()+(ut().dialogPanel.rightOffset??pu.common.dialogPanel.rightOffset)}px`),{right:t}},hasHud(){return so().visible===!1?!1:Object.keys(so().hudStats).length>0}}}),wz=["src"],Sz=["innerHTML"],kz=["innerHTML"];function $z(t,e,n,r,i,o){return t.hasHud?(v.openBlock(),v.createElementBlock("div",{key:0,class:"hud",style:v.normalizeStyle(t.hudStyle)},[(v.openBlock(!0),v.createElementBlock(v.Fragment,null,v.renderList(t.stats,(s,a)=>(v.openBlock(),v.createElementBlock("div",{key:a,class:"hud-stat"},[v.createElementVNode("img",{class:"hud-icon",src:t.getStatImage(a)},null,8,wz),v.createElementVNode("span",{class:"bold hud-text",innerHTML:t.statPrefix(a)},null,8,Sz),v.createElementVNode("span",null,v.toDisplayString(t.formatStat(a,s.value)),1),t.statSuffix?(v.openBlock(),v.createElementBlock("span",{key:0,innerHTML:t.statSuffix(a)},null,8,kz)):v.createCommentVNode("",!0)]))),128))],4)):v.createCommentVNode("",!0)}const qy=Po(bz,[["render",$z]]),Uy=v.defineComponent({__name:"in-game",setup(t){const e=nr(),n=v.computed(()=>e.inGameInputListener),r=Kt(),i=Ir(),o=v.computed(()=>i.layoutMode),s=v.computed(()=>r.saving),a=v.ref(null),l=er(),c=v.ref(null),f=v.computed(()=>s.value&&!s.value.withPrompt||s.value&&a.value),u=v.computed(()=>{let m="row";return o.value==="vertical"&&(m="column"),{flexDirection:m}});function d(m){if(a.value=null,m===null){Wy(m,!1);return}Wy(m,!0)}function h(){a.value=!0}function p(){a.value=!1,Wy(null,!1),a.value=null}return v.onBeforeMount(()=>{e.createInGameInputListener()}),v.onMounted(()=>{c.value=Io.on("debouncedKeydown",m=>{Kt().debugMode||((m.key==="a"||m.key==="A")&&l.toggleAutoPlay(),(m.key==="s"||m.key==="S")&&l.toggleSkip())})}),v.onUnmounted(()=>{n.value&&e.removeInGameInputListener(),c.value&&Io.off("debouncedKeydown",c.value)}),v.computed(()=>so().visible===!1?!1:Object.keys(so().hudStats).length>0),(m,y)=>(v.openBlock(),v.createElementBlock("div",{class:"game",style:v.normalizeStyle(u.value)},[v.createVNode(qy),v.createVNode(Fy),v.createVNode(zy),v.createVNode(By),f.value?(v.openBlock(),v.createBlock(N_,{key:0,mode:"pick",onChosen:d,onClose:y[0]||(y[0]=()=>d(null))})):v.createCommentVNode("",!0),s.value&&s.value.withPrompt&&a.value===null?(v.openBlock(),v.createBlock(Up,{key:1,prompt:"Would you like to save the game?",onConfirm:h,onRefuse:p})):v.createCommentVNode("",!0)],4))}}),xz={class:"chapter-title-scene"},jz=["innerHTML"],_z=["innerHTML"],Cz=v.defineComponent({__name:"chapter-title",props:{options:{}},setup(t){const e=t,n=v.ref(null);function r(){n.value=null,oo().changeScene(as.Playing),Zt().jumpToLabel(e.options.next_label)}return v.onMounted(()=>{n.value=setTimeout(r,e.options.duration??2e3)}),v.onUnmounted(()=>{n.value&&(clearTimeout(n.value),n.value=null)}),(i,o)=>(v.openBlock(),v.createElementBlock("div",xz,[v.createElementVNode("h1",{class:"title chapter-title",innerHTML:e.options.title},null,8,jz),e.options.subtitle?(v.openBlock(),v.createElementBlock("h2",{key:0,class:"subtitle chapter-subtitle",innerHTML:e.options.subtitle},null,8,_z)):v.createCommentVNode("",!0)]))}});var as=(t=>(t.EngineSplash="engine-splash",t.GameSplash="game-splash",t.StartMenu="start-menu",t.Playing="playing",t.ChapterTitle="chapter-title",t))(as||{});const q_={"engine-splash":{id:"engine-splash",component:v.shallowRef(Ey),props:{}},"game-splash":{id:"game-splash",component:v.shallowRef(My),props:{}},"start-menu":{id:"start-menu",component:v.shallowRef(Dy),props:{}},playing:{id:"playing",component:v.shallowRef(Uy),props:{}},"chapter-title":{id:"chapter-title",component:v.shallowRef(Cz),props:{}}};let Bs={};function Tz(t){Bs=t}function Oz(){q_["engine-splash"].onFinished=()=>{oo().onEngineSplashFinished()},oo().scenes=q_}function Ez(){return Bs}function U_(){for(const t in Bs){const e=Bs[t],n=e.store();let r;NF(e)&&(r=ar()[e.config]),n.reset&&!e.avoidReset&&n.reset(r)}dn.plugins.forEach(t=>{t.reset&&t.reset()})}function Az(){const t={},e={};for(const n in Bs){const r=Bs[n];if(P_(r)){const i=r.store();i.generateSaveData?t[r.save]=i.generateSaveData():vt(`Store ${n} has no generateSaveData method. Trying to generate save data for ${r.save}`)}if(M_(r)){const i=r.store();i.generateGlobalSaveData?e[r.globalSave]=i.generateGlobalSaveData():vt(`Store ${n} has no generateGlobalSaveData method. Trying to generate save data for ${r.globalSave}`)}}return dn.plugins.forEach(n=>{n.save&&(t.plugins[n.pluginId]=n.save())}),dn.customStores().forEach(([n,r])=>{if(r.save){const i=r.save();i&&(t.customStores==null&&(t.customStores={}),t.customStores[n]=i)}}),{gameSave:t,globalSave:e}}function Pz(t){for(const e in Bs){const n=Bs[e];if(P_(n)){const r=n.store();r.loadSaveData?r.loadSaveData(t[n.save]):vt(`Store ${e} has no loadSaveData method. Trying to load save data for ${n.save}`)}}dn.plugins.forEach(e=>{e.load&&t.plugins[e.pluginId]&&e.load(t.plugins[e.pluginId])}),dn.customStores().forEach(([e,n])=>{n.load&&n.load(t.customStores[e])})}function H_(t){for(const e in Bs){const n=Bs[e];if(M_(n)){const r=n.store();r.loadGlobalSaveData?r.loadGlobalSaveData(t[n.globalSave]):vt(`Store ${e} has no loadGlobalSaveData method. Trying to load global save data for ${n.globalSave}`)}}}function Mz(t){Pz(t.gameSave),H_(t.globalSave)}function Hy({slotId:t,name:e}){const n=Kt(),r=t??n.saveSlot;n.saveData=iL({slot:r,name:e,extractedSave:Az()})}function Nz(t){Mz(t)}function W_(){Zt().globalData={},Ms().globalSave.data={},Hy({})}function K_({saveName:t,withPrompt:e}){return new Promise(n=>{Zt().hasJumped?Kt().startManualSave(n,t,e):n()})}function Wy(t,e){var r;const n=Kt();if(!n.saving){vt("No saving in progress!");return}if(!e||!t){n.cancelManualSave();return}n.saveData?(oL(n.saveData,cu(n.playTime.start,n.playTime.previousPlaytime),t.slotId,(r=n.saving)==null?void 0:r.name),n.alert("Success","Game saved!")):vt("There was no data to save!"),n.cancelManualSave()}const Zt=Lr("vm",{state:()=>({stack:[],data:{},globalData:{},lastLabel:"main",script:{},labelStack:["main"],commandsWaitingForPlayerAnswer:[],promisesWaitingForTextAnimation:[],hasJumped:!1}),actions:{generateSaveData(){return{lastLabel:this.lastLabel,data:tb(this.data,t=>A_(t)?{_entityType:t._entityType,id:t.id}:null)}},generateGlobalSaveData(){return{data:yn(this.globalData)}},loadSaveData(t){this.lastLabel=t.lastLabel,this.data=yn(t.data),this.findEntitiesInData(this.data)},loadGlobalSaveData(t){this.globalData=t.data},findEntitiesInData(t){T_(this.data,(e,n,r)=>{if(A_(e)){const i=vo().getObject(e.id);i?r[n]=i:sc(`Trying to reload sprite ${n} (${JSON.stringify(e)} - ${e.id}) but it does not exist.`)}})},setReturnValue(t){this.currentFrame.returnValue=t},waitForPlayerAnswer(t){this.commandsWaitingForPlayerAnswer.push(t)},waitForEndTextAnimation(){return new Promise(t=>{this.promisesWaitingForTextAnimation.push(t)})},endTextAnimation(){for(const t of this.promisesWaitingForTextAnimation)t();this.promisesWaitingForTextAnimation=[]},popAnswerQueue(){return this.commandsWaitingForPlayerAnswer.pop()},addScopedVariable(t,e){this.currentFrame&&(this.currentFrame.scope[t]=e)},async loadScripts(t){this.readGlobalData();const e=await this.loadConfigScriptFiles(t),n=Kt().options.scripts;this.addAllScripts([...e,...n])},async loadConfigScriptFiles(t){const e=[];for(const r of t)e.push(Vp(km(r)));return(await Promise.all(e)).map((r,i)=>({fileName:t[i],code:r,id:t[i],type:"script"}))},addAllScripts(t){const e=Date.now();for(const r of t)dn.addNarratScript(r);const n=Date.now();Ao.log(`scripts parsed in ${n-e} ms`)},start(){this.setStack({currentIndex:0,branchData:{branch:dn.script.main.branch},label:"main"}),this.setStack({currentIndex:0,branchData:{branch:dn.script.main.branch},label:"main"})},setLastLabel(t){this.lastLabel=t},reset(){this.$reset(),this.stack=[],this.data={},this.hasJumped=!1,this.setStack({currentIndex:0,branchData:{branch:dn.script.main.branch},label:"main"})},readGlobalData(){this.globalData=Ms().globalSave.data},setScript(t){dn.script=t},overrideData(t){this.data=t},setStack(t){this.stack=[];const e=this.frameOptionsToFrame(t);this.lastLabel=t.label,this.stack.push(e)},frameOptionsToFrame(t){const e=t.branchData,n={...t,blocks:[],scope:{},returnValue:null};if(this.addBlock(n,{branchData:e,currentIndex:t.currentIndex}),t.scope&&(n.scope=t.scope),t.args&&t.branchData.args)for(const[r,i]of t.branchData.args.entries())t.args.length>r&&(n.scope[i]=t.args[r]);return n},addBlock(t,e){t.blocks.push(e)},async addAndRunBlock(t){const e=this.currentFrame;if(!e)throw new Error("No frame to add block to");return this.addBlock(e,t),await this.runBlock()},setData(t,e){const n=Pu();hT(n,t,e)},addInstruction(t,e){const n=Pu();pT(n,t,e)},addFrame(t){if(!t.label)if(this.currentFrame)t.label=this.currentFrame.label;else throw new Error("Tried to add a new frame but no label was passed and there is no current frame label");const e=this.frameOptionsToFrame(t);this.stack.push(e)},async addAndRunFrame(t){return await this.addFrame(t),await this.runFrame()},async runFrame(){if(!this.currentFrame)throw new Error("Tried to run a frame but there is no current frame");let e;for(;this.currentBlock;){const n=await this.runBlock();if(n===Ep||n===Ap)return this.cleanFrame(),n;if(n===uy)return this.cleanFrame()}return this.cleanFrame(),e},cleanFrame(){const t=this.currentFrame,{returnValue:e}=t;return this.stack.splice(this.stack.length-1,1),e},async runBlock(){const t=this.currentBlock;if(!t)throw new Error("Tried to run a block but there is no current block");let e;for(;this.currentLine;){if(e=await this.runLineOnly(),d7(e))return this.cleanBlock(),e;t.currentIndex++}return this.cleanBlock(),e},cleanBlock(){if(!this.currentFrame){vt("Tried to clean a block but there is no current frame");return}if(!this.currentFrame.blocks){vt("Tried to clean a block but there is no current block");return}this.currentFrame.blocks.splice(this.currentFrame.blocks.length-1,1)},async runGame(){let t=await this.runFrame();for(;t===Ep;){const e=this.jumpTarget;if(!e){vt("Tried to jump but no target was set");return}this.hasJumped=!0,this.setStack(e),await Hy({}),t=await this.runFrame()}t!==Ap&&this.stack.length===0&&this.reachedEndOfScript()},async nextLineOnly(){return this.stack.length===0||this.isBlockFinished()?!1:(this.currentBlock.currentIndex++,!0)},isBlockFinished(){return!this.currentBlock||this.currentBlock&&this.currentBlock.currentIndex>=this.currentBlock.branchData.branch.length},reachedEndOfScript(){if(ut().gameFlow.labelToJumpOnScriptEnd&&this.lastLabel!==ut().gameFlow.labelToJumpOnScriptEnd){this.jumpToLabel(ut().gameFlow.labelToJumpOnScriptEnd);return}Kt().endingScript(),Kt().options.debug&&ut().debugging.showScriptFinishedMessage},async runLineOnly(){const t=this.currentLine;if(!t){vt("There is no line of script to run.");return}return Kt().startingScript(),await tC(t)},async runLabelFunction(t,...e){const n=dn.script[t];if(!n){vt(`Tried to run a label that doesn't exist: ${t}`);return}const r={currentIndex:0,branchData:n,label:t,args:e};return this.addAndRunFrame(r)},runCustomFrame(t){this.addAndRunFrame(t)},async jumpToLabel(t,...e){const n=dn.script[t];if(!n){vt(`Label ${t} doesn't exist. Is the file with this label added in the list of script files to load in the config?`);return}t!==this.lastLabel&&(this.hasJumped=!0),this.setLastLabel(t),this.setStack({currentIndex:0,branchData:n,args:e,label:t}),this.runGame()},async runThenGoBackToPreviousDialog(t,...e){const n=er(),r=n.dialog[n.dialog.length-1],i=Kt().inScript,o=await this.runLabelFunction(t,...e);return i?n.dialog.push(r):Kt().endingScript(),o}},getters:{currentFrame(t){return t.stack[t.stack.length-1]},scope(){var t;return((t=this.currentFrame)==null?void 0:t.scope)??{}},currentBlock(){const t=this.currentFrame;return t?t.blocks[t.blocks.length-1]:void 0},currentLine(){const t=this.currentBlock;if(t&&t.branchData.branch.length>t.currentIndex)return t.branchData.branch[t.currentIndex]},commandWaitingForAnswer(){if(this.commandsWaitingForPlayerAnswer.length>0)return this.commandsWaitingForPlayerAnswer[0]}}}),G_=new wp;G_.setupDebugger(!1);const Ro=G_.logger;function Iz(t){return Rz((e,n,r)=>Qz(e,n,r),t.code,t.fileName)}function Rz(t,e,n){const r={fileName:n,currentLine:0,error:(s,a)=>t(r,s,a),processCommandsFunction:Ky,indentSize:0};r.indentSize=Hz(r,e);const i=zz(r,e);r.currentLine=0,Ro.log(i);const o={};for(const s of i){s.code.search(":")===-1&&r.error(s.line,"First indentation level should only be used to specify labels");const l=s.code.replace(":","").split(/ +/g),c=l[0],f=l.slice(1);s.branch||r.error(s.line,"This line should have a branch but doesn't"),o[c]={branch:Ky(r,s.branch,void 0),args:f}}return o}function Ky(t,e,n){const r=t.currentLine;if(!e){let s=0;return n&&(s=n.line),t.error(s,"Processing of command failed because the current branch has no lines inside"),[]}const i={processCommandsFunction:Ky,parserContext:t,lines:e,currentLine:0,line:e[0]},o=[];for(;i.currentLine<e.length;){const s=e[i.currentLine];i.line=s;const a=J_(t,s,s.expression),l=dn.commands[a.command.operator];let c=l==null?void 0:l.parser;c||(c=dn.commands.text.parser),Ro.log(dn.commands.text);const{newLine:f}=c(i,a);i.currentLine=f,t.currentLine=r+f,o.push(a)}return o}function J_(t,e,n){Array.isArray(n)||t.error(e.line,`Expression should be an array. Something is wrong. ${t.fileName}:${t.currentLine} - ${e.code}`),Ro.log(n),typeof n[0]!="string"&&t.error(e.line,`Expression operator should be a string ${t.fileName}:${t.currentLine} - ${e.code}`);const r={code:e.code,fileName:t.fileName,line:e.line,command:{staticOptions:{},commandType:n[0],operator:n[0],args:n.slice(1).map(s=>Q_(t,e,s)),options:{}}},i=n[0];if(!dn.commands[i]){const s=["else","success","failure"];!RL(i)&&!s.includes(i)&&t.error(e.line,`Unknown command ${i}`)}return r}function Q_(t,e,n){return Array.isArray(n)?J_(t,e,n):n}function Dz(t){return t==="true"?!0:t==="false"?!1:t==="undefined"?void 0:t===null?null:isNaN(Number(t))?t:Number(t)}function Lz(t,e){e.charAt(e.length-1)===":"&&(e=e.substr(0,e.length-1));const n=Bz(e),[r]=X_(t,n);return r}function Bz(t){const e=/(["'])(?:\\\1|.)*?\1/g,n=[];let r;for(;(r=e.exec(t))!=null;)n.push(r);let i=0,o=[];for(const s of n){const a=s.index;if(a>i){const c=t.substr(i,a-i),f=Y_(c);o=[...o,...f]}const l=s[0].replace(/\\/g,"");o.push(`$$"${l.substring(1,l.length-1)}`),i=a+s[0].length}return o=[...o,...Y_(t.substr(i))],o.push(")"),o}function Y_(t){t=t.replace(/: *$/g,"");let e=t.split(" ").filter(n=>n);return e=e.reduce((n,r)=>[...n,...r.split(/(\(|\))/g)].filter(i=>i&&i),[]),e.map(n=>Dz(n))}function X_(t,e){Ro.log("===============");let n=[],r=0,i=Z_(e)+r,o=Gy(e)+r;for(Ro.log(`Parsing expression: ${e}`),Ro.log(`Parenthesis start index: ${i} - end: ${o}`);i!==-1&&o>i;){n=[...n,...e.slice(r,i)];const l=e.slice(i+1);Ro.log(`Found a sub expression. Before: ${n} - After: ${l}`),r=i;const[c,f]=X_(t,l),u=r+f;n.push(c),r=u+1;const d=e.slice(r);Ro.log(`Sub expression came back: ${c} - rest of string: ${d}`),i=Z_(d),i!==-1&&(i+=r),o=Gy(d),o!==-1&&(o+=r)}o!==-1&&Ro.log("Found parenthesis end before new opening parenthesis, close this expression");const s=Gy(e.slice(r))+r;if(s===-1)return t.error(t.currentLine,'Expression is not closed (missing ")" closing parenthesis)'),[n,s];const a=e.slice(r,s);return Ro.log(`End of expression: ${s} - ${a}`),Ro.log("==================="),n=[...n,...a],Fz(t,n),[n,s+1]}function Fz(t,e){e.length<1&&t.error(t.currentLine,"Expression is empty")}function Z_(t){return t.findIndex(e=>e==="(")}function Gy(t){return t.findIndex(e=>e===")")}function Vz(t,e){return e.split(/\r?\n|$/).reduce((r,i,o)=>{const s={code:i,line:o,multiline:!1},a=i.search(/\\$/);a!==-1&&(s.multiline=!0,i=i.substring(0,a));const l=i.search(/ *\/\//g);return l!==-1&&(i=i.substring(0,l)),s.code=i,s.code.search(/^\s*$/)===-1&&(r.length>0&&r[r.length-1].multiline?(r[r.length-1].code+=i,r[r.length-1].multiline=s.multiline):r.push(s)),r},[])}function zz(t,e){const n=Vz(t,e);return eC(t,n,0,0).lines}function eC(t,e,n,r){let i=!0,o=n;const s=[];for(;i&&!(o>=e.length);){const a=e[o];let l=a.code;const c=Uz(t,l);if(l=l.substring(c*t.indentSize),qz(t,c,o),c<r)i=!1;else if(c>r){(s.length===0||c-r!==1)&&t.error(a.line,"Wrong double indentation");const f=eC(t,e,o,c);s[s.length-1].branch=f.lines,o=f.endLine}else{const f=Lz(t,l),u={code:l,indentation:c,line:a.line,expression:f};s.push(u),o++,t.currentLine=o}}return{lines:s,endLine:o}}function qz(t,e,n){e%1!==0&&t.error(n,`Indentation level of ${e} incorrect. Expected indentation of ${t.indentSize} spaces for this file.`)}function Uz(t,e){return e.search(/[^ ]/)/t.indentSize}function Hz(t,e){const n=e.match(/: *[\n\r]+( *)/);return!n||n.length<2?(t.error(0,"Can't detect indentation level. Make sure you indent with at least 2 spaces and consistently"),0):(Ro.log(n),n[1].length)}class Wz{constructor(){zn(this,"plugins",[]);zn(this,"pinia");zn(this,"script",{});zn(this,"scripts",[]);zn(this,"commands",{})}addCommand(e){this.commands[e.keyword]=e}addPlugin(e){if(this.plugins.push(e),e.customCommands)for(const n of e.customCommands)this.addCommand(n)}callHook(e,...n){for(const r of this.plugins)typeof r[e]=="function"&&r[e](...n)}addNarratScript(e){const n=Iz(e);this.script={...this.script,...n},this.scripts.push(e)}customStores(){const e=[];for(const n of this.plugins)if(n.customStores)for(const r in n.customStores)e.push([r,n.customStores[r](this.pinia)]);return e}addCustomSettings(){for(const e of this.plugins)if(e.customSettings)for(const n in e.customSettings)Ls().addCustomSetting(n,e.customSettings[n])}}const dn=new Wz;async function tC(t,e){var r;const n=Zt();try{return await Wp(t,e)}catch(i){console.error(i),console.error(t),vt(`Narrat script runtime error at <span class="error-filename">${t.fileName}:${t.line+1}</span>
70
70
  <b>${i}</b>
71
71
  Script: ${t.code}
72
72
  Label: ${((r=n.currentFrame)==null?void 0:r.label)||"none"}`)}}async function Kz(t,e){const n=t.command,r=dn.commands[n.commandType];if(r){const i={args:[],options:{},operator:n.operator,staticOptions:n.staticOptions,code:t.code,commandType:n.commandType,fileName:t.fileName,line:t.line},o=r.argTypes;i.options={};for(const[s,a]of n.args.entries()){let l;if(py(a)?l=await Wp(a,e):typeof a=="string"?a.search(px)===0?l=Is(a.substring(3)):my(a)?l=nC(a):l=a:l=a,i.args.push(l),Array.isArray(o)&&o.length>s){const c=o[s];l!==null&&(i.options[c.name]=l)}}return i}else throw new Error(`${n.commandType} is not a valid command`)}function nC(t){const e=Pu(),n=xW(e,t);if(n){const[r,i]=n;return r[i]}else return t}async function Wp(t,e){const n=await Kz(t,e),r=dn.commands[n.commandType];if(r)return await r.run(n,e);throw new Error(`${n.commandType} is not a valid command`)}async function rC(t){nc("onPlayerAnswered");const e=Zt(),n=e.popAnswerQueue(),r=e.currentLine;try{if(n){const i=dn.commands[n.commandType];if(i)return await i.processPlayerAnswer(n,t)}}catch(i){console.error(i),vt(`Error after player answer at ${r.fileName}:${r.line+1} (${r.code}<br /> - Error: ${i}`)}}function Gz(){return{baseAssetsPath:"",baseDataPath:"",configPath:"data/config.json",logging:!1,debug:!1,scripts:[],container:"#game-holder"}}class Jz extends Ay{}const Kt=Lr("main",{state:()=>({ready:!1,playing:!1,errors:[],playTime:{start:0,previousPlaytime:0},saveSlot:"",paused:!1,debugMode:!0,options:{baseAssetsPath:"",baseDataPath:"",configPath:"data/config.json",logging:!1,debug:!1,scripts:[]},loading:{step:"Loading",percentage:.1,loaded:!1},alerts:[],saving:null,listener:new Jz,inScript:!1}),actions:{setLoadingStep(t,e){this.loading.step=t,this.loading.percentage=e},gameLoaded(){this.loading.loaded=!0,this.listener.emit("gameLoaded")},async alert(t,e){return new Promise(n=>{this.alerts.push({title:t,text:e,resolver:n,id:Zl()})})},closeAlert(t){const e=this.alerts.findIndex(n=>n.id===t);e!==-1&&(this.alerts[e].resolver(),this.alerts.splice(e,1))},startingScript(){di().onScriptStart(),this.inScript=!0},endingScript(){di().onScriptEnd(),this.inScript=!1},prepareToPlay(){this.ready=!0,this.startPlaying(),oo().goToGameScene()},setSaveSlot(t){this.saveSlot=t,XD(t)},startManualSave(t,e,n){this.saving={name:e,withPrompt:n,resolver:t}},cancelManualSave(){this.saving&&(this.saving.resolver(),this.saving=null)},playerAnswered(t){rC(t)},menuReturn(){oo().goToStartMenuScene()},createError(t){this.errors.push({text:t,type:"error"})},createWarning(t){this.errors.push({text:t,type:"warning"})},clearErrors(){this.errors=[]},pause(){this.paused=!0},unpause(){this.paused=!1},setOptions(t){this.options=t},startPlaying(){this.playing=!0,this.playTime.start=Date.now()},reset(){this.ready=!1,this.paused=!1,this.playing=!1,this.ready=!0},generateSaveData(){return{playTime:cu(this.playTime.start,this.playTime.previousPlaytime)}},loadSaveData(t){this.playTime.previousPlaytime=t.playTime},exitGame(){window.close()}},getters:{isInGame(t){return oo().isPlaying},totalPlayTime(t){return cu(t.playTime.start,t.playTime.previousPlaytime)},sessionPlayTime(t){return cu(t.playTime.start,0)},hasCustomContainer(t){return(t.options.container??"")!=="#game-holder"}}});function Qz(t,e,n){console.error(`Parser error: ${t.fileName}:${t.currentLine}`,n);const r=`[Parser Error] in <span class="error-filename">${t.fileName}:${e+1}</span> - <b>${n}</b>`;vt(r)}function vt(t,...e){const n=Kt();console.error(t,...e),t=t.replace(/[\r\n]/g,`