narrat 3.9.7 → 3.9.8

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.`);c=zr,c._s.has(r)||(a?Qi(r,t,o,c):Ol(r,o,c),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 o=r._howls.length-1;o>=0;o--)r._howls[o].stereo(n);return r},HowlerGlobal.prototype.pos=function(n,r,o){var a=this;if(!a.ctx||!a.ctx.listener)return a;if(r=typeof r!="number"?a._pos[1]:r,o=typeof o!="number"?a._pos[2]:o,typeof n=="number")a._pos=[n,r,o],typeof a.ctx.listener.positionX<"u"?(a.ctx.listener.positionX.setTargetAtTime(a._pos[0],Howler.ctx.currentTime,.1),a.ctx.listener.positionY.setTargetAtTime(a._pos[1],Howler.ctx.currentTime,.1),a.ctx.listener.positionZ.setTargetAtTime(a._pos[2],Howler.ctx.currentTime,.1)):a.ctx.listener.setPosition(a._pos[0],a._pos[1],a._pos[2]);else return a._pos;return a},HowlerGlobal.prototype.orientation=function(n,r,o,a,s,c){var d=this;if(!d.ctx||!d.ctx.listener)return d;var u=d._orientation;if(r=typeof r!="number"?u[1]:r,o=typeof o!="number"?u[2]:o,a=typeof a!="number"?u[3]:a,s=typeof s!="number"?u[4]:s,c=typeof c!="number"?u[5]:c,typeof n=="number")d._orientation=[n,r,o,a,s,c],typeof d.ctx.listener.forwardX<"u"?(d.ctx.listener.forwardX.setTargetAtTime(n,Howler.ctx.currentTime,.1),d.ctx.listener.forwardY.setTargetAtTime(r,Howler.ctx.currentTime,.1),d.ctx.listener.forwardZ.setTargetAtTime(o,Howler.ctx.currentTime,.1),d.ctx.listener.upX.setTargetAtTime(a,Howler.ctx.currentTime,.1),d.ctx.listener.upY.setTargetAtTime(s,Howler.ctx.currentTime,.1),d.ctx.listener.upZ.setTargetAtTime(c,Howler.ctx.currentTime,.1)):d.ctx.listener.setOrientation(n,r,o,a,s,c);else return u;return d},Howl.prototype.init=function(n){return function(r){var o=this;return o._orientation=r.orientation||[1,0,0],o._stereo=r.stereo||null,o._pos=r.pos||null,o._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},o._onstereo=r.onstereo?[{fn:r.onstereo}]:[],o._onpos=r.onpos?[{fn:r.onpos}]:[],o._onorientation=r.onorientation?[{fn:r.onorientation}]:[],n.call(this,r)}}(Howl.prototype.init),Howl.prototype.stereo=function(n,r){var o=this;if(!o._webAudio)return o;if(o._state!=="loaded")return o._queue.push({event:"stereo",action:function(){o.stereo(n,r)}}),o;var a=typeof Howler.ctx.createStereoPanner>"u"?"spatial":"stereo";if(typeof r>"u")if(typeof n=="number")o._stereo=n,o._pos=[n,0,0];else return o._stereo;for(var s=o._getSoundIds(r),c=0;c<s.length;c++){var d=o._soundById(s[c]);if(d)if(typeof n=="number")d._stereo=n,d._pos=[n,0,0],d._node&&(d._pannerAttr.panningModel="equalpower",(!d._panner||!d._panner.pan)&&t(d,a),a==="spatial"?typeof d._panner.positionX<"u"?(d._panner.positionX.setValueAtTime(n,Howler.ctx.currentTime),d._panner.positionY.setValueAtTime(0,Howler.ctx.currentTime),d._panner.positionZ.setValueAtTime(0,Howler.ctx.currentTime)):d._panner.setPosition(n,0,0):d._panner.pan.setValueAtTime(n,Howler.ctx.currentTime)),o._emit("stereo",d._id);else return d._stereo}return o},Howl.prototype.pos=function(n,r,o,a){var s=this;if(!s._webAudio)return s;if(s._state!=="loaded")return s._queue.push({event:"pos",action:function(){s.pos(n,r,o,a)}}),s;if(r=typeof r!="number"?0:r,o=typeof o!="number"?-.5:o,typeof a>"u")if(typeof n=="number")s._pos=[n,r,o];else return s._pos;for(var c=s._getSoundIds(a),d=0;d<c.length;d++){var u=s._soundById(c[d]);if(u)if(typeof n=="number")u._pos=[n,r,o],u._node&&((!u._panner||u._panner.pan)&&t(u,"spatial"),typeof u._panner.positionX<"u"?(u._panner.positionX.setValueAtTime(n,Howler.ctx.currentTime),u._panner.positionY.setValueAtTime(r,Howler.ctx.currentTime),u._panner.positionZ.setValueAtTime(o,Howler.ctx.currentTime)):u._panner.setPosition(n,r,o)),s._emit("pos",u._id);else return u._pos}return s},Howl.prototype.orientation=function(n,r,o,a){var s=this;if(!s._webAudio)return s;if(s._state!=="loaded")return s._queue.push({event:"orientation",action:function(){s.orientation(n,r,o,a)}}),s;if(r=typeof r!="number"?s._orientation[1]:r,o=typeof o!="number"?s._orientation[2]:o,typeof a>"u")if(typeof n=="number")s._orientation=[n,r,o];else return s._orientation;for(var c=s._getSoundIds(a),d=0;d<c.length;d++){var u=s._soundById(c[d]);if(u)if(typeof n=="number")u._orientation=[n,r,o],u._node&&(u._panner||(u._pos||(u._pos=s._pos||[0,0,-.5]),t(u,"spatial")),typeof u._panner.orientationX<"u"?(u._panner.orientationX.setValueAtTime(n,Howler.ctx.currentTime),u._panner.orientationY.setValueAtTime(r,Howler.ctx.currentTime),u._panner.orientationZ.setValueAtTime(o,Howler.ctx.currentTime)):u._panner.setOrientation(n,r,o)),s._emit("orientation",u._id);else return u._orientation}return s},Howl.prototype.pannerAttr=function(){var n=this,r=arguments,o,a,s;if(!n._webAudio)return n;if(r.length===0)return n._pannerAttr;if(r.length===1)if(typeof r[0]=="object")o=r[0],typeof a>"u"&&(o.pannerAttr||(o.pannerAttr={coneInnerAngle:o.coneInnerAngle,coneOuterAngle:o.coneOuterAngle,coneOuterGain:o.coneOuterGain,distanceModel:o.distanceModel,maxDistance:o.maxDistance,refDistance:o.refDistance,rolloffFactor:o.rolloffFactor,panningModel:o.panningModel}),n._pannerAttr={coneInnerAngle:typeof o.pannerAttr.coneInnerAngle<"u"?o.pannerAttr.coneInnerAngle:n._coneInnerAngle,coneOuterAngle:typeof o.pannerAttr.coneOuterAngle<"u"?o.pannerAttr.coneOuterAngle:n._coneOuterAngle,coneOuterGain:typeof o.pannerAttr.coneOuterGain<"u"?o.pannerAttr.coneOuterGain:n._coneOuterGain,distanceModel:typeof o.pannerAttr.distanceModel<"u"?o.pannerAttr.distanceModel:n._distanceModel,maxDistance:typeof o.pannerAttr.maxDistance<"u"?o.pannerAttr.maxDistance:n._maxDistance,refDistance:typeof o.pannerAttr.refDistance<"u"?o.pannerAttr.refDistance:n._refDistance,rolloffFactor:typeof o.pannerAttr.rolloffFactor<"u"?o.pannerAttr.rolloffFactor:n._rolloffFactor,panningModel:typeof o.pannerAttr.panningModel<"u"?o.pannerAttr.panningModel:n._panningModel});else return s=n._soundById(parseInt(r[0],10)),s?s._pannerAttr:n._pannerAttr;else r.length===2&&(o=r[0],a=parseInt(r[1],10));for(var c=n._getSoundIds(a),d=0;d<c.length;d++)if(s=n._soundById(c[d]),s){var u=s._pannerAttr;u={coneInnerAngle:typeof o.coneInnerAngle<"u"?o.coneInnerAngle:u.coneInnerAngle,coneOuterAngle:typeof o.coneOuterAngle<"u"?o.coneOuterAngle:u.coneOuterAngle,coneOuterGain:typeof o.coneOuterGain<"u"?o.coneOuterGain:u.coneOuterGain,distanceModel:typeof o.distanceModel<"u"?o.distanceModel:u.distanceModel,maxDistance:typeof o.maxDistance<"u"?o.maxDistance:u.maxDistance,refDistance:typeof o.refDistance<"u"?o.refDistance:u.refDistance,rolloffFactor:typeof o.rolloffFactor<"u"?o.rolloffFactor:u.rolloffFactor,panningModel:typeof o.panningModel<"u"?o.panningModel:u.panningModel};var h=s._panner;h||(s._pos||(s._pos=n._pos||[0,0,-.5]),t(s,"spatial"),h=s._panner),h.coneInnerAngle=u.coneInnerAngle,h.coneOuterAngle=u.coneOuterAngle,h.coneOuterGain=u.coneOuterGain,h.distanceModel=u.distanceModel,h.maxDistance=u.maxDistance,h.refDistance=u.refDistance,h.rolloffFactor=u.rolloffFactor,h.panningModel=u.panningModel}return n},Sound.prototype.init=function(n){return function(){var r=this,o=r._parent;r._orientation=o._orientation,r._stereo=o._stereo,r._pos=o._pos,r._pannerAttr=o._pannerAttr,n.call(this),r._stereo?o.stereo(r._stereo):r._pos&&o.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,o=r._parent;return r._orientation=o._orientation,r._stereo=o._stereo,r._pos=o._pos,r._pannerAttr=o._pannerAttr,r._stereo?o.stereo(r._stereo):r._pos?o.pos(r._pos[0],r._pos[1],r._pos[2],r._id):r._panner&&(r._panner.disconnect(0),r._panner=void 0,o._refreshBuffer(r)),n.call(this)}}(Sound.prototype.reset);var t=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)}})()})(rn);function At(e){return new Promise((t,n)=>{setTimeout(t,e)})}const Ji=e=>e.reduce((t,n)=>({...t,[n]:n}),{}),Xi=e=>e!==null&&typeof e=="object"&&typeof e.then=="function"&&typeof e.catch=="function",Nl=["music","ambiant","sound"],Pl=Ji(Nl),ft=et("audio",{state:()=>{const e=new Map;for(const t in Pl)e.set(t,{channels:[],options:{volume:1}});return{modes:e,masterVolume:1}},actions:{stopAll(){this.modes.forEach(e=>{e.channels.forEach((t,n)=>{t&&(this.actuallyStopChannel(t),e.channels[n]=null)})})},async stopChannel(e,t){const n=this.getAudioChannel(e,t);if(!n)return;const{fadeOutTime:r}=Si(n.audio);if(this.setAudioChannel(e,t,null),Lt().options.musicFadeOutTime){const o=Qt(n.audio);o&&o.fade(o.volume(n.howlerId),0,r,n.howlerId),await At(r)}this.actuallyStopChannel(n)},async pauseChannel(e,t){const n=this.getAudioChannel(e,t);if(!n)return;const r=Qt(n.audio);if(!r){ae(`Could not find audio ${n.audio}`);return}r.pause(n.howlerId)},async playChannel(e,t,n){rn.Howler.ctx.state==="suspended"&&(console.warn("Audio context is suspended :o"),rn.Howler.ctx.resume());const r=this.getAudioChannel(e,n);if(e==="sound")return this.actuallyPlayChannel(e,n,t);r&&r.audio!==t?await this.changeChannel(e,t,n):r&&r.audio===t?await this.resumeChannel(e,n):await this.actuallyPlayChannel(e,n,t)},async resumeChannel(e,t){const n=this.getAudioChannel(e,t);if(!n)return;const r=Qt(n.audio);if(!r){ae(`Could not find audio ${n.audio}`);return}r.play(n.howlerId)},async changeChannel(e,t,n){this.getAudioChannel(e,n)&&e!=="sound"&&await this.stopChannel(e,n),await this.actuallyPlayChannel(e,n,t)},actuallyStopChannel(e){cm(e.audio,e.howlerId)},getAudioChannel(e,t){return this.modes.get(e).channels[t]||null},setAudioChannel(e,t,n){this.modes.get(e).channels[t]=n},async actuallyPlayChannel(e,t,n){const r=Qt(n);if(!r){ae(`Could not find audio ${n}`);return}const{fadeInTime:o,fadeInDelay:a}=Si(n),s=this.audioVolume(e,n);if(e!=="sound"){const c=r.play();r.volume(0,c),r.pause(c),this.setAudioChannel(e,t,{audio:n,howlerId:c}),await At(a);const d=this.getAudioChannel(e,t);d!==null&&d.audio===n&&(r.play(c),r.fade(0,s,o,c))}else if(e==="sound"){const c=r.play();r.volume(s,c),this.setAudioChannel(e,t,{audio:n,howlerId:c})}},reloadAudio(e){for(const t in e.modes){if(t==="sound")continue;const n=t;this.modes.get(n).options=Re(e.modes[n].options);for(const r in e.modes[n].channels){const o=e.modes[n].channels[r];o&&o.audio&&this.actuallyPlayChannel(n,Number(r),o.audio)}}},stopSound(e){const t=Qt(e);t&&t.stop()},generateSaveData(){const e={};for(const t in Pl){const n=this.modes.get(t);e[t]={options:Re(n.options),channels:Re(n.channels).map(r=>r?{audio:r.audio}:{audio:null})}}return{modes:e,masterVolume:this.masterVolume}},loadSaveData(e){this.masterVolume=e.masterVolume},reset(){this.stopAll()},setModeVolume(e,t){const n=this.modes.get(e);n.options.volume=t;for(const r in n.channels){const o=n.channels[r];if(o){const a=Qt(o.audio);a&&a.volume(this.modeVolume(e),o.howlerId)}}},setMasterVolume(e){this.masterVolume=e,rn.Howler.volume(e)},modeVolume(e){return this.masterVolume*this.modes.get(e).options.volume},audioVolume(e,t){var n;return this.modeVolume(e)*(((n=vf(t))==null?void 0:n.volume)??1)}}}),jl={};rn.Howler.volume(.5);let Zi={};async function am(e){Ft.log("Loading audio");const t=[];rn.Howler.volume(e.options.volume);for(const n in e.files){const r=e.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!")),t.push(lm(n,e.files[n]))}return e.audioTriggers&&(Zi=e.audioTriggers),Promise.all(t)}function Qn(e){Zi[e]&&ft().playChannel("sound",Zi[e],0)}async function lm(e,t){return new Promise((n,r)=>{const o=new rn.Howl({...t,src:$t(t.src)});o.load(),jl[e]=o,n()})}function cm(e,t){const n=Qt(e);if(!n){Zn(`Could not find music ${e}`);return}n.stop(t)}function Qt(e){return jl[e]}function um(e){const t=Qt(e),{fadeInTime:n}=Si(e),r=t.play(),a=ft().audioVolume("music",e);return t.fade(0,a,n,r),r}async function dm(e,t){const n=Qt(e),{fadeOutTime:r}=Si(e);n.fade(n.volume(t),0,r,t),await At(r),n.stop(t)}function fm(e,t){return e-t*vo().options.extraPointsPerLevel}function Dl(e,t){const{options:n}=vo();let r=e;n.showDifficultyWithoutModifiers||(r=fm(e,t));const o=vo().options;let a=!1,s=0,c=o.difficultyText[0][1];for(;!a;)o.difficultyText.length>s&&r>=o.difficultyText[s][0]?c=o.difficultyText[s][1]:a=!0,s++;let d="";return n.showDifficultyText&&n.showDifficultyNumber?d=`${c} (${r})`:n.showDifficultyText?d=c:n.showDifficultyNumber&&(d=r.toString()),d}function pm({skill:e,skillCheckId:t,value:n}){const r=Xe(),o=r.getSkillCheck(t),a=Oi(e),s=r.skills[e].level,c=Dl(n,s);let d=!0,u=`<span class='skill-check'>[<span class='skill-check-name'>${a.name}</span> - `;return o.happened?o.succeeded?u="":(d=!1,u+=` <span class='skill-check-difficulty'>${c}</span> - <span class='skill-check-failed'>FAILED</span>]</span>`):u+=` <span class='skill-check-difficulty'>${c}</span>]</span>`,{difficultyText:u,allowed:d}}function mm(e,t){const n=Xe(),r=Oi(t.skill),o=Dl(t.difficulty,n.skills[t.skill].level);return`<span class='passive-skill-check skill-check'>[<span class='skill-check-name'>${r.name}</span> - <span class='skill-check-difficulty'>${o}</span> - ${e?'<span class="skill-check-success">Success</span>':'<span class="skill-check-failed">Failure</span>'}]</span>`}function hm(e){const{options:t}=vo(),n=ym(t,e),a=Xe().skills[e].level*t.extraPointsPerLevel;let s=n.reduce((c,d)=>c+d.unmodified,a);return t.finalRollIsHighest?(s=n.reduce((c,d)=>d.modified>c?d.modified:c,0),Ft.log(`[SKILL CHECK] Keeping only highest roll: ${s}`)):t.finalRollIsLowest&&(s=n.reduce((c,d)=>d.modified<c?d.modified:c,n[0].modified),Ft.log(`[SKILL CHECK] Keeping only lowest roll: ${s}`)),{roll:s,rolls:n}}function ym(e,t){const r=Xe().skills[t],o=r.level*e.extraPointsPerLevel;let{diceRange:a,diceCount:s}=e;e.extraDicePerLevel&&(s+=e.extraDicePerLevel*r.level);const c=[];for(let d=0;d<s;d++){const u=gm(a),h=u+o;Ft.log(`[SKILL CHECK] Roll ${d+1}/${s}: ${h}. (Base roll: ${u}, modifier: ${o} - Skill level: ${r.level})`),c.push({unmodified:u,modified:h})}return c}function gm(e){return Math.floor(Math.random()*e[1])+e[0]}function _m(e){const{skills:t}=dn(),{roll:n,rolls:r}=hm(e.skill),o=t[e.skill];let a=!1;if(typeof e.winsNeeded=="number"){const s=r.reduce((c,d)=>(xl(d.modified,e.difficulty)&&c++,c),0);s>=e.winsNeeded&&(a=!0),Ft.log(`[SKILL CHECK ${o.name}] - Dice pool mode. ${e.winsNeeded} wins needed. Got ${s} successes.
38
- (${e.id} - ${s}/${e.winsNeeded} - rolls: ${JSON.stringify(r.map(c=>c.modified))})`)}else a=xl(n,e.difficulty),Ft.log(`[SKILL CHECK ${o.name}]: ${a?"✅":"❌"}`,`(${e.id}) - ${n}/${e.difficulty}`);return Qn(a?"onSkillCheckSuccess":"onSkillCheckFailure"),a}function xl(e,t){const{options:n}=vo();let r=e>=t;return n.successOnRollsBelowThreshold&&(r=e<=t),n.failOnRollsEqualToThreshold&&e===t&&(r=!1),r}var p={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Type=e.JsonType=e.JavaScriptTypeBuilder=e.JsonTypeBuilder=e.TypeBuilder=e.TypeBuilderError=e.TransformEncodeBuilder=e.TransformDecodeBuilder=e.TemplateLiteralDslParser=e.TemplateLiteralGenerator=e.TemplateLiteralGeneratorError=e.TemplateLiteralFinite=e.TemplateLiteralFiniteError=e.TemplateLiteralParser=e.TemplateLiteralParserError=e.TemplateLiteralResolver=e.TemplateLiteralPattern=e.TemplateLiteralPatternError=e.UnionResolver=e.KeyArrayResolver=e.KeyArrayResolverError=e.KeyResolver=e.ObjectMap=e.Intrinsic=e.IndexedAccessor=e.TypeClone=e.TypeExtends=e.TypeExtendsResult=e.TypeExtendsError=e.ExtendsUndefined=e.TypeGuard=e.TypeGuardUnknownTypeError=e.ValueGuard=e.FormatRegistry=e.TypeBoxError=e.TypeRegistry=e.PatternStringExact=e.PatternNumberExact=e.PatternBooleanExact=e.PatternString=e.PatternNumber=e.PatternBoolean=e.Kind=e.Hint=e.Optional=e.Readonly=e.Transform=void 0,e.Transform=Symbol.for("TypeBox.Transform"),e.Readonly=Symbol.for("TypeBox.Readonly"),e.Optional=Symbol.for("TypeBox.Optional"),e.Hint=Symbol.for("TypeBox.Hint"),e.Kind=Symbol.for("TypeBox.Kind"),e.PatternBoolean="(true|false)",e.PatternNumber="(0|[1-9][0-9]*)",e.PatternString="(.*)",e.PatternBooleanExact=`^${e.PatternBoolean}$`,e.PatternNumberExact=`^${e.PatternNumber}$`,e.PatternStringExact=`^${e.PatternString}$`;var t;(function(j){const g=new Map;function E(){return new Map(g)}j.Entries=E;function $(){return g.clear()}j.Clear=$;function _(U){return g.delete(U)}j.Delete=_;function v(U){return g.has(U)}j.Has=v;function C(U,ne){g.set(U,ne)}j.Set=C;function M(U){return g.get(U)}j.Get=M})(t||(e.TypeRegistry=t={}));class n extends Error{constructor(g){super(g)}}e.TypeBoxError=n;var r;(function(j){const g=new Map;function E(){return new Map(g)}j.Entries=E;function $(){return g.clear()}j.Clear=$;function _(U){return g.delete(U)}j.Delete=_;function v(U){return g.has(U)}j.Has=v;function C(U,ne){g.set(U,ne)}j.Set=C;function M(U){return g.get(U)}j.Get=M})(r||(e.FormatRegistry=r={}));var o;(function(j){function g(re){return Array.isArray(re)}j.IsArray=g;function E(re){return typeof re=="bigint"}j.IsBigInt=E;function $(re){return typeof re=="boolean"}j.IsBoolean=$;function _(re){return re instanceof globalThis.Date}j.IsDate=_;function v(re){return re===null}j.IsNull=v;function C(re){return typeof re=="number"}j.IsNumber=C;function M(re){return typeof re=="object"&&re!==null}j.IsObject=M;function U(re){return typeof re=="string"}j.IsString=U;function ne(re){return re instanceof globalThis.Uint8Array}j.IsUint8Array=ne;function ee(re){return re===void 0}j.IsUndefined=ee})(o||(e.ValueGuard=o={}));class a extends n{}e.TypeGuardUnknownTypeError=a;var s;(function(j){function g(O){try{return new RegExp(O),!0}catch{return!1}}function E(O){if(!o.IsString(O))return!1;for(let N=0;N<O.length;N++){const A=O.charCodeAt(N);if(A>=7&&A<=13||A===27||A===127)return!1}return!0}function $(O){return C(O)||ot(O)}function _(O){return o.IsUndefined(O)||o.IsBigInt(O)}function v(O){return o.IsUndefined(O)||o.IsNumber(O)}function C(O){return o.IsUndefined(O)||o.IsBoolean(O)}function M(O){return o.IsUndefined(O)||o.IsString(O)}function U(O){return o.IsUndefined(O)||o.IsString(O)&&E(O)&&g(O)}function ne(O){return o.IsUndefined(O)||o.IsString(O)&&E(O)}function ee(O){return o.IsUndefined(O)||ot(O)}function re(O){return Ce(O,"Any")&&M(O.$id)}j.TAny=re;function Ee(O){return Ce(O,"Array")&&O.type==="array"&&M(O.$id)&&ot(O.items)&&v(O.minItems)&&v(O.maxItems)&&C(O.uniqueItems)&&ee(O.contains)&&v(O.minContains)&&v(O.maxContains)}j.TArray=Ee;function R(O){return Ce(O,"AsyncIterator")&&O.type==="AsyncIterator"&&M(O.$id)&&ot(O.items)}j.TAsyncIterator=R;function J(O){return Ce(O,"BigInt")&&O.type==="bigint"&&M(O.$id)&&_(O.exclusiveMaximum)&&_(O.exclusiveMinimum)&&_(O.maximum)&&_(O.minimum)&&_(O.multipleOf)}j.TBigInt=J;function fe(O){return Ce(O,"Boolean")&&O.type==="boolean"&&M(O.$id)}j.TBoolean=fe;function ce(O){return Ce(O,"Constructor")&&O.type==="Constructor"&&M(O.$id)&&o.IsArray(O.parameters)&&O.parameters.every(N=>ot(N))&&ot(O.returns)}j.TConstructor=ce;function be(O){return Ce(O,"Date")&&O.type==="Date"&&M(O.$id)&&v(O.exclusiveMaximumTimestamp)&&v(O.exclusiveMinimumTimestamp)&&v(O.maximumTimestamp)&&v(O.minimumTimestamp)&&v(O.multipleOfTimestamp)}j.TDate=be;function ve(O){return Ce(O,"Function")&&O.type==="Function"&&M(O.$id)&&o.IsArray(O.parameters)&&O.parameters.every(N=>ot(N))&&ot(O.returns)}j.TFunction=ve;function Le(O){return Ce(O,"Integer")&&O.type==="integer"&&M(O.$id)&&v(O.exclusiveMaximum)&&v(O.exclusiveMinimum)&&v(O.maximum)&&v(O.minimum)&&v(O.multipleOf)}j.TInteger=Le;function Qe(O){return Ce(O,"Intersect")&&!(o.IsString(O.type)&&O.type!=="object")&&o.IsArray(O.allOf)&&O.allOf.every(N=>ot(N)&&!dr(N))&&M(O.type)&&(C(O.unevaluatedProperties)||ee(O.unevaluatedProperties))&&M(O.$id)}j.TIntersect=Qe;function We(O){return Ce(O,"Iterator")&&O.type==="Iterator"&&M(O.$id)&&ot(O.items)}j.TIterator=We;function Ce(O,N){return H(O)&&O[e.Kind]===N}j.TKindOf=Ce;function H(O){return o.IsObject(O)&&e.Kind in O&&o.IsString(O[e.Kind])}j.TKind=H;function oe(O){return _e(O)&&o.IsString(O.const)}j.TLiteralString=oe;function ie(O){return _e(O)&&o.IsNumber(O.const)}j.TLiteralNumber=ie;function ue(O){return _e(O)&&o.IsBoolean(O.const)}j.TLiteralBoolean=ue;function _e(O){return Ce(O,"Literal")&&M(O.$id)&&(o.IsBoolean(O.const)||o.IsNumber(O.const)||o.IsString(O.const))}j.TLiteral=_e;function $e(O){return Ce(O,"Never")&&o.IsObject(O.not)&&Object.getOwnPropertyNames(O.not).length===0}j.TNever=$e;function Se(O){return Ce(O,"Not")&&ot(O.not)}j.TNot=Se;function at(O){return Ce(O,"Null")&&O.type==="null"&&M(O.$id)}j.TNull=at;function Rt(O){return Ce(O,"Number")&&O.type==="number"&&M(O.$id)&&v(O.exclusiveMaximum)&&v(O.exclusiveMinimum)&&v(O.maximum)&&v(O.minimum)&&v(O.multipleOf)}j.TNumber=Rt;function Bt(O){return Ce(O,"Object")&&O.type==="object"&&M(O.$id)&&o.IsObject(O.properties)&&$(O.additionalProperties)&&v(O.minProperties)&&v(O.maxProperties)&&Object.entries(O.properties).every(([N,A])=>E(N)&&ot(A))}j.TObject=Bt;function Et(O){return Ce(O,"Promise")&&O.type==="Promise"&&M(O.$id)&&ot(O.item)}j.TPromise=Et;function cr(O){return Ce(O,"Record")&&O.type==="object"&&M(O.$id)&&$(O.additionalProperties)&&o.IsObject(O.patternProperties)&&(N=>{const A=Object.getOwnPropertyNames(N.patternProperties);return A.length===1&&g(A[0])&&o.IsObject(N.patternProperties)&&ot(N.patternProperties[A[0]])})(O)}j.TRecord=cr;function Co(O){return o.IsObject(O)&&e.Hint in O&&O[e.Hint]==="Recursive"}j.TRecursive=Co;function ur(O){return Ce(O,"Ref")&&M(O.$id)&&o.IsString(O.$ref)}j.TRef=ur;function Ot(O){return Ce(O,"String")&&O.type==="string"&&M(O.$id)&&v(O.minLength)&&v(O.maxLength)&&U(O.pattern)&&ne(O.format)}j.TString=Ot;function Fr(O){return Ce(O,"Symbol")&&O.type==="symbol"&&M(O.$id)}j.TSymbol=Fr;function On(O){return Ce(O,"TemplateLiteral")&&O.type==="string"&&o.IsString(O.pattern)&&O.pattern[0]==="^"&&O.pattern[O.pattern.length-1]==="$"}j.TTemplateLiteral=On;function Vr(O){return Ce(O,"This")&&M(O.$id)&&o.IsString(O.$ref)}j.TThis=Vr;function dr(O){return o.IsObject(O)&&e.Transform in O}j.TTransform=dr;function rt(O){return Ce(O,"Tuple")&&O.type==="array"&&M(O.$id)&&o.IsNumber(O.minItems)&&o.IsNumber(O.maxItems)&&O.minItems===O.maxItems&&(o.IsUndefined(O.items)&&o.IsUndefined(O.additionalItems)&&O.minItems===0||o.IsArray(O.items)&&O.items.every(N=>ot(N)))}j.TTuple=rt;function Ur(O){return Ce(O,"Undefined")&&O.type==="undefined"&&M(O.$id)}j.TUndefined=Ur;function mn(O){return An(O)&&O.anyOf.every(N=>oe(N)||ie(N))}j.TUnionLiteral=mn;function An(O){return Ce(O,"Union")&&M(O.$id)&&o.IsObject(O)&&o.IsArray(O.anyOf)&&O.anyOf.every(N=>ot(N))}j.TUnion=An;function In(O){return Ce(O,"Uint8Array")&&O.type==="Uint8Array"&&M(O.$id)&&v(O.minByteLength)&&v(O.maxByteLength)}j.TUint8Array=In;function _t(O){return Ce(O,"Unknown")&&M(O.$id)}j.TUnknown=_t;function qn(O){return Ce(O,"Unsafe")}j.TUnsafe=qn;function Hn(O){return Ce(O,"Void")&&O.type==="void"&&M(O.$id)}j.TVoid=Hn;function $o(O){return o.IsObject(O)&&O[e.Readonly]==="Readonly"}j.TReadonly=$o;function qr(O){return o.IsObject(O)&&O[e.Optional]==="Optional"}j.TOptional=qr;function ot(O){return o.IsObject(O)&&(re(O)||Ee(O)||fe(O)||J(O)||R(O)||ce(O)||be(O)||ve(O)||Le(O)||Qe(O)||We(O)||_e(O)||$e(O)||Se(O)||at(O)||Rt(O)||Bt(O)||Et(O)||cr(O)||ur(O)||Ot(O)||Fr(O)||On(O)||Vr(O)||rt(O)||Ur(O)||An(O)||In(O)||_t(O)||qn(O)||Hn(O)||H(O)&&t.Has(O[e.Kind]))}j.TSchema=ot})(s||(e.TypeGuard=s={}));var c;(function(j){function g(E){return E[e.Kind]==="Intersect"?E.allOf.every($=>g($)):E[e.Kind]==="Union"?E.anyOf.some($=>g($)):E[e.Kind]==="Undefined"?!0:E[e.Kind]==="Not"?!g(E.not):!1}j.Check=g})(c||(e.ExtendsUndefined=c={}));class d extends n{}e.TypeExtendsError=d;var u;(function(j){j[j.Union=0]="Union",j[j.True=1]="True",j[j.False=2]="False"})(u||(e.TypeExtendsResult=u={}));var h;(function(j){function g(k){return k===u.False?k:u.True}function E(k){throw new d(k)}function $(k){return s.TNever(k)||s.TIntersect(k)||s.TUnion(k)||s.TUnknown(k)||s.TAny(k)}function _(k,w){return s.TNever(w)?Ce():s.TIntersect(w)?ve(k,w):s.TUnion(w)?q(k,w):s.TUnknown(w)?he():s.TAny(w)?v():E("StructuralRight")}function v(k,w){return u.True}function C(k,w){return s.TIntersect(w)?ve(k,w):s.TUnion(w)&&w.anyOf.some(ye=>s.TAny(ye)||s.TUnknown(ye))?u.True:s.TUnion(w)?u.Union:s.TUnknown(w)||s.TAny(w)?u.True:u.Union}function M(k,w){return s.TUnknown(k)?u.False:s.TAny(k)?u.Union:s.TNever(k)?u.True:u.False}function U(k,w){return s.TObject(w)&&On(w)?u.True:$(w)?_(k,w):s.TArray(w)?g(de(k.items,w.items)):u.False}function ne(k,w){return $(w)?_(k,w):s.TAsyncIterator(w)?g(de(k.items,w.items)):u.False}function ee(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):s.TBigInt(w)?u.True:u.False}function re(k,w){return s.TLiteral(k)&&o.IsBoolean(k.const)||s.TBoolean(k)?u.True:u.False}function Ee(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):s.TBoolean(w)?u.True:u.False}function R(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TConstructor(w)?k.parameters.length>w.parameters.length?u.False:k.parameters.every((ye,Be)=>g(de(w.parameters[Be],ye))===u.True)?g(de(k.returns,w.returns)):u.False:u.False}function J(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):s.TDate(w)?u.True:u.False}function fe(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TFunction(w)?k.parameters.length>w.parameters.length?u.False:k.parameters.every((ye,Be)=>g(de(w.parameters[Be],ye))===u.True)?g(de(k.returns,w.returns)):u.False:u.False}function ce(k,w){return s.TLiteral(k)&&o.IsNumber(k.const)||s.TNumber(k)||s.TInteger(k)?u.True:u.False}function be(k,w){return s.TInteger(w)||s.TNumber(w)?u.True:$(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):u.False}function ve(k,w){return w.allOf.every(ye=>de(k,ye)===u.True)?u.True:u.False}function Le(k,w){return k.allOf.some(ye=>de(ye,w)===u.True)?u.True:u.False}function Qe(k,w){return $(w)?_(k,w):s.TIterator(w)?g(de(k.items,w.items)):u.False}function We(k,w){return s.TLiteral(w)&&w.const===k.const?u.True:$(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):s.TString(w)?Hn(k):s.TNumber(w)?_e(k):s.TInteger(w)?ce(k):s.TBoolean(w)?re(k):u.False}function Ce(k,w){return u.False}function H(k,w){return u.True}function oe(k){let[w,ye]=[k,0];for(;s.TNot(w);)w=w.not,ye+=1;return ye%2===0?w:e.Type.Unknown()}function ie(k,w){return s.TNot(k)?de(oe(k),w):s.TNot(w)?de(k,oe(w)):E("Invalid fallthrough for Not")}function ue(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):s.TNull(w)?u.True:u.False}function _e(k,w){return s.TLiteralNumber(k)||s.TNumber(k)||s.TInteger(k)?u.True:u.False}function $e(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):s.TInteger(w)||s.TNumber(w)?u.True:u.False}function Se(k,w){return Object.getOwnPropertyNames(k.properties).length===w}function at(k){return On(k)}function Rt(k){return Se(k,0)||Se(k,1)&&"description"in k.properties&&s.TUnion(k.properties.description)&&k.properties.description.anyOf.length===2&&(s.TString(k.properties.description.anyOf[0])&&s.TUndefined(k.properties.description.anyOf[1])||s.TString(k.properties.description.anyOf[1])&&s.TUndefined(k.properties.description.anyOf[0]))}function Bt(k){return Se(k,0)}function Et(k){return Se(k,0)}function cr(k){return Se(k,0)}function Co(k){return Se(k,0)}function ur(k){return On(k)}function Ot(k){const w=e.Type.Number();return Se(k,0)||Se(k,1)&&"length"in k.properties&&g(de(k.properties.length,w))===u.True}function Fr(k){return Se(k,0)}function On(k){const w=e.Type.Number();return Se(k,0)||Se(k,1)&&"length"in k.properties&&g(de(k.properties.length,w))===u.True}function Vr(k){const w=e.Type.Function([e.Type.Any()],e.Type.Any());return Se(k,0)||Se(k,1)&&"then"in k.properties&&g(de(k.properties.then,w))===u.True}function dr(k,w){return de(k,w)===u.False||s.TOptional(k)&&!s.TOptional(w)?u.False:u.True}function rt(k,w){return s.TUnknown(k)?u.False:s.TAny(k)?u.Union:s.TNever(k)||s.TLiteralString(k)&&at(w)||s.TLiteralNumber(k)&&Bt(w)||s.TLiteralBoolean(k)&&Et(w)||s.TSymbol(k)&&Rt(w)||s.TBigInt(k)&&cr(w)||s.TString(k)&&at(w)||s.TSymbol(k)&&Rt(w)||s.TNumber(k)&&Bt(w)||s.TInteger(k)&&Bt(w)||s.TBoolean(k)&&Et(w)||s.TUint8Array(k)&&ur(w)||s.TDate(k)&&Co(w)||s.TConstructor(k)&&Fr(w)||s.TFunction(k)&&Ot(w)?u.True:s.TRecord(k)&&s.TString(An(k))?w[e.Hint]==="Record"?u.True:u.False:s.TRecord(k)&&s.TNumber(An(k))?Se(w,0)?u.True:u.False:u.False}function Ur(k,w){return $(w)?_(k,w):s.TRecord(w)?_t(k,w):s.TObject(w)?(()=>{for(const ye of Object.getOwnPropertyNames(w.properties)){if(!(ye in k.properties)&&!s.TOptional(w.properties[ye]))return u.False;if(s.TOptional(w.properties[ye]))return u.True;if(dr(k.properties[ye],w.properties[ye])===u.False)return u.False}return u.True})():u.False}function mn(k,w){return $(w)?_(k,w):s.TObject(w)&&Vr(w)?u.True:s.TPromise(w)?g(de(k.item,w.item)):u.False}function An(k){return e.PatternNumberExact in k.patternProperties?e.Type.Number():e.PatternStringExact in k.patternProperties?e.Type.String():E("Unknown record key pattern")}function In(k){return e.PatternNumberExact in k.patternProperties?k.patternProperties[e.PatternNumberExact]:e.PatternStringExact in k.patternProperties?k.patternProperties[e.PatternStringExact]:E("Unable to get record value schema")}function _t(k,w){const[ye,Be]=[An(w),In(w)];return s.TLiteralString(k)&&s.TNumber(ye)&&g(de(k,Be))===u.True?u.True:s.TUint8Array(k)&&s.TNumber(ye)||s.TString(k)&&s.TNumber(ye)||s.TArray(k)&&s.TNumber(ye)?de(k,Be):s.TObject(k)?(()=>{for(const Ge of Object.getOwnPropertyNames(k.properties))if(dr(Be,k.properties[Ge])===u.False)return u.False;return u.True})():u.False}function qn(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?de(In(k),In(w)):u.False}function Hn(k,w){return s.TLiteral(k)&&o.IsString(k.const)||s.TString(k)?u.True:u.False}function $o(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):s.TString(w)?u.True:u.False}function qr(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):s.TSymbol(w)?u.True:u.False}function ot(k,w){return s.TTemplateLiteral(k)?de(F.Resolve(k),w):s.TTemplateLiteral(w)?de(k,F.Resolve(w)):E("Invalid fallthrough for TemplateLiteral")}function O(k,w){return s.TArray(w)&&k.items!==void 0&&k.items.every(ye=>de(ye,w.items)===u.True)}function N(k,w){return s.TNever(k)?u.True:s.TUnknown(k)?u.False:s.TAny(k)?u.Union:u.False}function A(k,w){return $(w)?_(k,w):s.TObject(w)&&On(w)||s.TArray(w)&&O(k,w)?u.True:s.TTuple(w)?o.IsUndefined(k.items)&&!o.IsUndefined(w.items)||!o.IsUndefined(k.items)&&o.IsUndefined(w.items)?u.False:o.IsUndefined(k.items)&&!o.IsUndefined(w.items)||k.items.every((ye,Be)=>de(ye,w.items[Be])===u.True)?u.True:u.False:u.False}function D(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):s.TUint8Array(w)?u.True:u.False}function K(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):s.TVoid(w)?He(k):s.TUndefined(w)?u.True:u.False}function q(k,w){return w.anyOf.some(ye=>de(k,ye)===u.True)?u.True:u.False}function me(k,w){return k.anyOf.every(ye=>de(ye,w)===u.True)?u.True:u.False}function he(k,w){return u.True}function De(k,w){return s.TNever(w)?Ce():s.TIntersect(w)?ve(k,w):s.TUnion(w)?q(k,w):s.TAny(w)?v():s.TString(w)?Hn(k):s.TNumber(w)?_e(k):s.TInteger(w)?ce(k):s.TBoolean(w)?re(k):s.TArray(w)?M(k):s.TTuple(w)?N(k):s.TObject(w)?rt(k,w):s.TUnknown(w)?u.True:u.False}function He(k,w){return s.TUndefined(k)||s.TUndefined(k)?u.True:u.False}function Ye(k,w){return s.TIntersect(w)?ve(k,w):s.TUnion(w)?q(k,w):s.TUnknown(w)?he():s.TAny(w)?v():s.TObject(w)?rt(k,w):s.TVoid(w)?u.True:u.False}function de(k,w){return s.TTemplateLiteral(k)||s.TTemplateLiteral(w)?ot(k,w):s.TNot(k)||s.TNot(w)?ie(k,w):s.TAny(k)?C(k,w):s.TArray(k)?U(k,w):s.TBigInt(k)?ee(k,w):s.TBoolean(k)?Ee(k,w):s.TAsyncIterator(k)?ne(k,w):s.TConstructor(k)?R(k,w):s.TDate(k)?J(k,w):s.TFunction(k)?fe(k,w):s.TInteger(k)?be(k,w):s.TIntersect(k)?Le(k,w):s.TIterator(k)?Qe(k,w):s.TLiteral(k)?We(k,w):s.TNever(k)?H():s.TNull(k)?ue(k,w):s.TNumber(k)?$e(k,w):s.TObject(k)?Ur(k,w):s.TRecord(k)?qn(k,w):s.TString(k)?$o(k,w):s.TSymbol(k)?qr(k,w):s.TTuple(k)?A(k,w):s.TPromise(k)?mn(k,w):s.TUint8Array(k)?D(k,w):s.TUndefined(k)?K(k,w):s.TUnion(k)?me(k,w):s.TUnknown(k)?De(k,w):s.TVoid(k)?Ye(k,w):E(`Unknown left type operand '${k[e.Kind]}'`)}function Ue(k,w){return de(k,w)}j.Extends=Ue})(h||(e.TypeExtends=h={}));var l;(function(j){function g(U){return U.map(ne=>v(ne))}function E(U){return new Date(U.getTime())}function $(U){return new Uint8Array(U)}function _(U){const ne=Object.getOwnPropertyNames(U).reduce((re,Ee)=>({...re,[Ee]:v(U[Ee])}),{}),ee=Object.getOwnPropertySymbols(U).reduce((re,Ee)=>({...re,[Ee]:v(U[Ee])}),{});return{...ne,...ee}}function v(U){return o.IsArray(U)?g(U):o.IsDate(U)?E(U):o.IsUint8Array(U)?$(U):o.IsObject(U)?_(U):U}function C(U){return U.map(ne=>M(ne))}j.Rest=C;function M(U,ne={}){return{...v(U),...ne}}j.Type=M})(l||(e.TypeClone=l={}));var f;(function(j){function g(R){return R.map(J=>{const{[e.Optional]:fe,...ce}=l.Type(J);return ce})}function E(R){return R.every(J=>s.TOptional(J))}function $(R){return R.some(J=>s.TOptional(J))}function _(R){return E(R.allOf)?e.Type.Optional(e.Type.Intersect(g(R.allOf))):R}function v(R){return $(R.anyOf)?e.Type.Optional(e.Type.Union(g(R.anyOf))):R}function C(R){return R[e.Kind]==="Intersect"?_(R):R[e.Kind]==="Union"?v(R):R}function M(R,J){const fe=R.allOf.reduce((ce,be)=>{const ve=re(be,J);return ve[e.Kind]==="Never"?ce:[...ce,ve]},[]);return C(e.Type.Intersect(fe))}function U(R,J){const fe=R.anyOf.map(ce=>re(ce,J));return C(e.Type.Union(fe))}function ne(R,J){const fe=R.properties[J];return o.IsUndefined(fe)?e.Type.Never():e.Type.Union([fe])}function ee(R,J){const fe=R.items;if(o.IsUndefined(fe))return e.Type.Never();const ce=fe[J];return o.IsUndefined(ce)?e.Type.Never():ce}function re(R,J){return R[e.Kind]==="Intersect"?M(R,J):R[e.Kind]==="Union"?U(R,J):R[e.Kind]==="Object"?ne(R,J):R[e.Kind]==="Tuple"?ee(R,J):e.Type.Never()}function Ee(R,J,fe={}){const ce=J.map(be=>re(R,be.toString()));return C(e.Type.Union(ce,fe))}j.Resolve=Ee})(f||(e.IndexedAccessor=f={}));var m;(function(j){function g(ee){const[re,Ee]=[ee.slice(0,1),ee.slice(1)];return`${re.toLowerCase()}${Ee}`}function E(ee){const[re,Ee]=[ee.slice(0,1),ee.slice(1)];return`${re.toUpperCase()}${Ee}`}function $(ee){return ee.toUpperCase()}function _(ee){return ee.toLowerCase()}function v(ee,re){const Ee=P.ParseExact(ee.pattern);if(!W.Check(Ee))return{...ee,pattern:C(ee.pattern,re)};const fe=[...G.Generate(Ee)].map(ve=>e.Type.Literal(ve)),ce=M(fe,re),be=e.Type.Union(ce);return e.Type.TemplateLiteral([be])}function C(ee,re){return typeof ee=="string"?re==="Uncapitalize"?g(ee):re==="Capitalize"?E(ee):re==="Uppercase"?$(ee):re==="Lowercase"?_(ee):ee:ee.toString()}function M(ee,re){if(ee.length===0)return[];const[Ee,...R]=ee;return[ne(Ee,re),...M(R,re)]}function U(ee,re){return s.TTemplateLiteral(ee)?v(ee,re):s.TUnion(ee)?e.Type.Union(M(ee.anyOf,re)):s.TLiteral(ee)?e.Type.Literal(C(ee.const,re)):ee}function ne(ee,re){return U(ee,re)}j.Map=ne})(m||(e.Intrinsic=m={}));var y;(function(j){function g(C,M){return e.Type.Intersect(C.allOf.map(U=>_(U,M)),{...C})}function E(C,M){return e.Type.Union(C.anyOf.map(U=>_(U,M)),{...C})}function $(C,M){return M(C)}function _(C,M){return C[e.Kind]==="Intersect"?g(C,M):C[e.Kind]==="Union"?E(C,M):C[e.Kind]==="Object"?$(C,M):C}function v(C,M,U){return{..._(l.Type(C),M),...U}}j.Map=v})(y||(e.ObjectMap=y={}));var b;(function(j){function g(ne){return ne[0]==="^"&&ne[ne.length-1]==="$"?ne.slice(1,ne.length-1):ne}function E(ne,ee){return ne.allOf.reduce((re,Ee)=>[...re,...C(Ee,ee)],[])}function $(ne,ee){const re=ne.anyOf.map(Ee=>C(Ee,ee));return[...re.reduce((Ee,R)=>R.map(J=>re.every(fe=>fe.includes(J))?Ee.add(J):Ee)[0],new Set)]}function _(ne,ee){return Object.getOwnPropertyNames(ne.properties)}function v(ne,ee){return ee.includePatterns?Object.getOwnPropertyNames(ne.patternProperties):[]}function C(ne,ee){return s.TIntersect(ne)?E(ne,ee):s.TUnion(ne)?$(ne,ee):s.TObject(ne)?_(ne):s.TRecord(ne)?v(ne,ee):[]}function M(ne,ee){return[...new Set(C(ne,ee))]}j.ResolveKeys=M;function U(ne){return`^(${M(ne,{includePatterns:!0}).map(Ee=>`(${g(Ee)})`).join("|")})$`}j.ResolvePattern=U})(b||(e.KeyResolver=b={}));class S extends n{}e.KeyArrayResolverError=S;var T;(function(j){function g(E){return Array.isArray(E)?E:s.TUnionLiteral(E)?E.anyOf.map($=>$.const.toString()):s.TLiteral(E)?[E.const]:s.TTemplateLiteral(E)?(()=>{const $=P.ParseExact(E.pattern);if(!W.Check($))throw new S("Cannot resolve keys from infinite template expression");return[...G.Generate($)]})():[]}j.Resolve=g})(T||(e.KeyArrayResolver=T={}));var I;(function(j){function*g($){for(const _ of $.anyOf)_[e.Kind]==="Union"?yield*g(_):yield _}function E($){return e.Type.Union([...g($)],{...$})}j.Resolve=E})(I||(e.UnionResolver=I={}));class x extends n{}e.TemplateLiteralPatternError=x;var B;(function(j){function g(v){throw new x(v)}function E(v){return v.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function $(v,C){return s.TTemplateLiteral(v)?v.pattern.slice(1,v.pattern.length-1):s.TUnion(v)?`(${v.anyOf.map(M=>$(M,C)).join("|")})`:s.TNumber(v)?`${C}${e.PatternNumber}`:s.TInteger(v)?`${C}${e.PatternNumber}`:s.TBigInt(v)?`${C}${e.PatternNumber}`:s.TString(v)?`${C}${e.PatternString}`:s.TLiteral(v)?`${C}${E(v.const.toString())}`:s.TBoolean(v)?`${C}${e.PatternBoolean}`:g(`Unexpected Kind '${v[e.Kind]}'`)}function _(v){return`^${v.map(C=>$(C,"")).join("")}$`}j.Create=_})(B||(e.TemplateLiteralPattern=B={}));var F;(function(j){function g(E){const $=P.ParseExact(E.pattern);if(!W.Check($))return e.Type.String();const _=[...G.Generate($)].map(v=>e.Type.Literal(v));return e.Type.Union(_)}j.Resolve=g})(F||(e.TemplateLiteralResolver=F={}));class L extends n{}e.TemplateLiteralParserError=L;var P;(function(j){function g(R,J,fe){return R[J]===fe&&R.charCodeAt(J-1)!==92}function E(R,J){return g(R,J,"(")}function $(R,J){return g(R,J,")")}function _(R,J){return g(R,J,"|")}function v(R){if(!(E(R,0)&&$(R,R.length-1)))return!1;let J=0;for(let fe=0;fe<R.length;fe++)if(E(R,fe)&&(J+=1),$(R,fe)&&(J-=1),J===0&&fe!==R.length-1)return!1;return!0}function C(R){return R.slice(1,R.length-1)}function M(R){let J=0;for(let fe=0;fe<R.length;fe++)if(E(R,fe)&&(J+=1),$(R,fe)&&(J-=1),_(R,fe)&&J===0)return!0;return!1}function U(R){for(let J=0;J<R.length;J++)if(E(R,J))return!0;return!1}function ne(R){let[J,fe]=[0,0];const ce=[];for(let ve=0;ve<R.length;ve++)if(E(R,ve)&&(J+=1),$(R,ve)&&(J-=1),_(R,ve)&&J===0){const Le=R.slice(fe,ve);Le.length>0&&ce.push(re(Le)),fe=ve+1}const be=R.slice(fe);return be.length>0&&ce.push(re(be)),ce.length===0?{type:"const",const:""}:ce.length===1?ce[0]:{type:"or",expr:ce}}function ee(R){function J(be,ve){if(!E(be,ve))throw new L("TemplateLiteralParser: Index must point to open parens");let Le=0;for(let Qe=ve;Qe<be.length;Qe++)if(E(be,Qe)&&(Le+=1),$(be,Qe)&&(Le-=1),Le===0)return[ve,Qe];throw new L("TemplateLiteralParser: Unclosed group parens in expression")}function fe(be,ve){for(let Le=ve;Le<be.length;Le++)if(E(be,Le))return[ve,Le];return[ve,be.length]}const ce=[];for(let be=0;be<R.length;be++)if(E(R,be)){const[ve,Le]=J(R,be),Qe=R.slice(ve,Le+1);ce.push(re(Qe)),be=Le}else{const[ve,Le]=fe(R,be),Qe=R.slice(ve,Le);Qe.length>0&&ce.push(re(Qe)),be=Le-1}return ce.length===0?{type:"const",const:""}:ce.length===1?ce[0]:{type:"and",expr:ce}}function re(R){return v(R)?re(C(R)):M(R)?ne(R):U(R)?ee(R):{type:"const",const:R}}j.Parse=re;function Ee(R){return re(R.slice(1,R.length-1))}j.ParseExact=Ee})(P||(e.TemplateLiteralParser=P={}));class Y extends n{}e.TemplateLiteralFiniteError=Y;var W;(function(j){function g(C){throw new Y(C)}function E(C){return C.type==="or"&&C.expr.length===2&&C.expr[0].type==="const"&&C.expr[0].const==="0"&&C.expr[1].type==="const"&&C.expr[1].const==="[1-9][0-9]*"}function $(C){return C.type==="or"&&C.expr.length===2&&C.expr[0].type==="const"&&C.expr[0].const==="true"&&C.expr[1].type==="const"&&C.expr[1].const==="false"}function _(C){return C.type==="const"&&C.const===".*"}function v(C){return $(C)?!0:E(C)||_(C)?!1:C.type==="and"?C.expr.every(M=>v(M)):C.type==="or"?C.expr.every(M=>v(M)):C.type==="const"?!0:g("Unknown expression type")}j.Check=v})(W||(e.TemplateLiteralFinite=W={}));class X extends n{}e.TemplateLiteralGeneratorError=X;var G;(function(j){function*g(C){if(C.length===1)return yield*C[0];for(const M of C[0])for(const U of g(C.slice(1)))yield`${M}${U}`}function*E(C){return yield*g(C.expr.map(M=>[...v(M)]))}function*$(C){for(const M of C.expr)yield*v(M)}function*_(C){return yield C.const}function*v(C){return C.type==="and"?yield*E(C):C.type==="or"?yield*$(C):C.type==="const"?yield*_(C):(()=>{throw new X("Unknown expression")})()}j.Generate=v})(G||(e.TemplateLiteralGenerator=G={}));var z;(function(j){function*g(v){const C=v.trim().replace(/"|'/g,"");return C==="boolean"?yield e.Type.Boolean():C==="number"?yield e.Type.Number():C==="bigint"?yield e.Type.BigInt():C==="string"?yield e.Type.String():yield(()=>{const M=C.split("|").map(U=>e.Type.Literal(U.trim()));return M.length===0?e.Type.Never():M.length===1?M[0]:e.Type.Union(M)})()}function*E(v){if(v[1]!=="{"){const C=e.Type.Literal("$"),M=$(v.slice(1));return yield*[C,...M]}for(let C=2;C<v.length;C++)if(v[C]==="}"){const M=g(v.slice(2,C)),U=$(v.slice(C+1));return yield*[...M,...U]}yield e.Type.Literal(v)}function*$(v){for(let C=0;C<v.length;C++)if(v[C]==="$"){const M=e.Type.Literal(v.slice(0,C)),U=E(v.slice(C));return yield*[M,...U]}yield e.Type.Literal(v)}function _(v){return[...$(v)]}j.Parse=_})(z||(e.TemplateLiteralDslParser=z={}));class Q{constructor(g){this.schema=g}Decode(g){return new te(this.schema,g)}}e.TransformDecodeBuilder=Q;class te{constructor(g,E){this.schema=g,this.decode=E}Encode(g){const E=l.Type(this.schema);return s.TTransform(E)?(()=>{const v={Encode:C=>E[e.Transform].Encode(g(C)),Decode:C=>this.decode(E[e.Transform].Decode(C))};return{...E,[e.Transform]:v}})():(()=>{const $={Decode:this.decode,Encode:g};return{...E,[e.Transform]:$}})()}}e.TransformEncodeBuilder=te;let ke=0;class Ne extends n{}e.TypeBuilderError=Ne;class Ze{Create(g){return g}Throw(g){throw new Ne(g)}Discard(g,E){return E.reduce(($,_)=>{const{[_]:v,...C}=$;return C},g)}Strict(g){return JSON.parse(JSON.stringify(g))}}e.TypeBuilder=Ze;class qe extends Ze{ReadonlyOptional(g){return this.Readonly(this.Optional(g))}Readonly(g){return{...l.Type(g),[e.Readonly]:"Readonly"}}Optional(g){return{...l.Type(g),[e.Optional]:"Optional"}}Any(g={}){return this.Create({...g,[e.Kind]:"Any"})}Array(g,E={}){return this.Create({...E,[e.Kind]:"Array",type:"array",items:l.Type(g)})}Boolean(g={}){return this.Create({...g,[e.Kind]:"Boolean",type:"boolean"})}Capitalize(g,E={}){return{...m.Map(l.Type(g),"Capitalize"),...E}}Composite(g,E){const $=e.Type.Intersect(g,{}),v=b.ResolveKeys($,{includePatterns:!1}).reduce((C,M)=>({...C,[M]:e.Type.Index($,[M])}),{});return e.Type.Object(v,E)}Enum(g,E={}){if(o.IsUndefined(g))return this.Throw("Enum undefined or empty");const $=Object.getOwnPropertyNames(g).filter(C=>isNaN(C)).map(C=>g[C]),v=[...new Set($)].map(C=>e.Type.Literal(C));return this.Union(v,{...E,[e.Hint]:"Enum"})}Extends(g,E,$,_,v={}){switch(h.Extends(g,E)){case u.Union:return this.Union([l.Type($,v),l.Type(_,v)]);case u.True:return l.Type($,v);case u.False:return l.Type(_,v)}}Exclude(g,E,$={}){return s.TTemplateLiteral(g)?this.Exclude(F.Resolve(g),E,$):s.TTemplateLiteral(E)?this.Exclude(g,F.Resolve(E),$):s.TUnion(g)?(()=>{const _=g.anyOf.filter(v=>h.Extends(v,E)===u.False);return _.length===1?l.Type(_[0],$):this.Union(_,$)})():h.Extends(g,E)!==u.False?this.Never($):l.Type(g,$)}Extract(g,E,$={}){return s.TTemplateLiteral(g)?this.Extract(F.Resolve(g),E,$):s.TTemplateLiteral(E)?this.Extract(g,F.Resolve(E),$):s.TUnion(g)?(()=>{const _=g.anyOf.filter(v=>h.Extends(v,E)!==u.False);return _.length===1?l.Type(_[0],$):this.Union(_,$)})():h.Extends(g,E)!==u.False?l.Type(g,$):this.Never($)}Index(g,E,$={}){return s.TArray(g)&&s.TNumber(E)?l.Type(g.items,$):s.TTuple(g)&&s.TNumber(E)?(()=>{const v=(o.IsUndefined(g.items)?[]:g.items).map(C=>l.Type(C));return this.Union(v,$)})():(()=>{const _=T.Resolve(E),v=l.Type(g);return f.Resolve(v,_,$)})()}Integer(g={}){return this.Create({...g,[e.Kind]:"Integer",type:"integer"})}Intersect(g,E={}){if(g.length===0)return e.Type.Never();if(g.length===1)return l.Type(g[0],E);g.some(C=>s.TTransform(C))&&this.Throw("Cannot intersect transform types");const $=g.every(C=>s.TObject(C)),_=l.Rest(g),v=s.TSchema(E.unevaluatedProperties)?{unevaluatedProperties:l.Type(E.unevaluatedProperties)}:{};return E.unevaluatedProperties===!1||s.TSchema(E.unevaluatedProperties)||$?this.Create({...E,...v,[e.Kind]:"Intersect",type:"object",allOf:_}):this.Create({...E,...v,[e.Kind]:"Intersect",allOf:_})}KeyOf(g,E={}){return s.TRecord(g)?(()=>{const $=Object.getOwnPropertyNames(g.patternProperties)[0];return $===e.PatternNumberExact?this.Number(E):$===e.PatternStringExact?this.String(E):this.Throw("Unable to resolve key type from Record key pattern")})():s.TTuple(g)?(()=>{const _=(o.IsUndefined(g.items)?[]:g.items).map((v,C)=>e.Type.Literal(C.toString()));return this.Union(_,E)})():s.TArray(g)?this.Number(E):(()=>{const $=b.ResolveKeys(g,{includePatterns:!1});if($.length===0)return this.Never(E);const _=$.map(v=>this.Literal(v));return this.Union(_,E)})()}Literal(g,E={}){return this.Create({...E,[e.Kind]:"Literal",const:g,type:typeof g})}Lowercase(g,E={}){return{...m.Map(l.Type(g),"Lowercase"),...E}}Never(g={}){return this.Create({...g,[e.Kind]:"Never",not:{}})}Not(g,E){return this.Create({...E,[e.Kind]:"Not",not:l.Type(g)})}Null(g={}){return this.Create({...g,[e.Kind]:"Null",type:"null"})}Number(g={}){return this.Create({...g,[e.Kind]:"Number",type:"number"})}Object(g,E={}){const $=Object.getOwnPropertyNames(g),_=$.filter(U=>s.TOptional(g[U])),v=$.filter(U=>!_.includes(U)),C=s.TSchema(E.additionalProperties)?{additionalProperties:l.Type(E.additionalProperties)}:{},M=$.reduce((U,ne)=>({...U,[ne]:l.Type(g[ne])}),{});return v.length>0?this.Create({...E,...C,[e.Kind]:"Object",type:"object",properties:M,required:v}):this.Create({...E,...C,[e.Kind]:"Object",type:"object",properties:M})}Omit(g,E,$={}){const _=T.Resolve(E);return y.Map(this.Discard(l.Type(g),["$id",e.Transform]),v=>{o.IsArray(v.required)&&(v.required=v.required.filter(C=>!_.includes(C)),v.required.length===0&&delete v.required);for(const C of Object.getOwnPropertyNames(v.properties))_.includes(C)&&delete v.properties[C];return this.Create(v)},$)}Partial(g,E={}){return y.Map(this.Discard(l.Type(g),["$id",e.Transform]),$=>{const _=Object.getOwnPropertyNames($.properties).reduce((v,C)=>({...v,[C]:this.Optional($.properties[C])}),{});return this.Object(_,this.Discard($,["required"]))},E)}Pick(g,E,$={}){const _=T.Resolve(E);return y.Map(this.Discard(l.Type(g),["$id",e.Transform]),v=>{o.IsArray(v.required)&&(v.required=v.required.filter(C=>_.includes(C)),v.required.length===0&&delete v.required);for(const C of Object.getOwnPropertyNames(v.properties))_.includes(C)||delete v.properties[C];return this.Create(v)},$)}Record(g,E,$={}){return s.TTemplateLiteral(g)?(()=>{const _=P.ParseExact(g.pattern);return W.Check(_)?this.Object([...G.Generate(_)].reduce((v,C)=>({...v,[C]:l.Type(E)}),{}),$):this.Create({...$,[e.Kind]:"Record",type:"object",patternProperties:{[g.pattern]:l.Type(E)}})})():s.TUnion(g)?(()=>{const _=I.Resolve(g);if(s.TUnionLiteral(_)){const v=_.anyOf.reduce((C,M)=>({...C,[M.const]:l.Type(E)}),{});return this.Object(v,{...$,[e.Hint]:"Record"})}else this.Throw("Record key of type union contains non-literal types")})():s.TLiteral(g)?o.IsString(g.const)||o.IsNumber(g.const)?this.Object({[g.const]:l.Type(E)},$):this.Throw("Record key of type literal is not of type string or number"):s.TInteger(g)||s.TNumber(g)?this.Create({...$,[e.Kind]:"Record",type:"object",patternProperties:{[e.PatternNumberExact]:l.Type(E)}}):s.TString(g)?(()=>{const _=o.IsUndefined(g.pattern)?e.PatternStringExact:g.pattern;return this.Create({...$,[e.Kind]:"Record",type:"object",patternProperties:{[_]:l.Type(E)}})})():this.Never()}Recursive(g,E={}){o.IsUndefined(E.$id)&&(E.$id=`T${ke++}`);const $=g({[e.Kind]:"This",$ref:`${E.$id}`});return $.$id=E.$id,this.Create({...E,[e.Hint]:"Recursive",...$})}Ref(g,E={}){return o.IsString(g)?this.Create({...E,[e.Kind]:"Ref",$ref:g}):(o.IsUndefined(g.$id)&&this.Throw("Reference target type must specify an $id"),this.Create({...E,[e.Kind]:"Ref",$ref:g.$id}))}Required(g,E={}){return y.Map(this.Discard(l.Type(g),["$id",e.Transform]),$=>{const _=Object.getOwnPropertyNames($.properties).reduce((v,C)=>({...v,[C]:this.Discard($.properties[C],[e.Optional])}),{});return this.Object(_,$)},E)}Rest(g){return s.TTuple(g)&&!o.IsUndefined(g.items)?l.Rest(g.items):s.TIntersect(g)?l.Rest(g.allOf):s.TUnion(g)?l.Rest(g.anyOf):[]}String(g={}){return this.Create({...g,[e.Kind]:"String",type:"string"})}TemplateLiteral(g,E={}){const $=o.IsString(g)?B.Create(z.Parse(g)):B.Create(g);return this.Create({...E,[e.Kind]:"TemplateLiteral",type:"string",pattern:$})}Transform(g){return new Q(g)}Tuple(g,E={}){const[$,_,v]=[!1,g.length,g.length],C=l.Rest(g),M=g.length>0?{...E,[e.Kind]:"Tuple",type:"array",items:C,additionalItems:$,minItems:_,maxItems:v}:{...E,[e.Kind]:"Tuple",type:"array",minItems:_,maxItems:v};return this.Create(M)}Uncapitalize(g,E={}){return{...m.Map(l.Type(g),"Uncapitalize"),...E}}Union(g,E={}){return s.TTemplateLiteral(g)?F.Resolve(g):(()=>{const $=g;if($.length===0)return this.Never(E);if($.length===1)return this.Create(l.Type($[0],E));const _=l.Rest($);return this.Create({...E,[e.Kind]:"Union",anyOf:_})})()}Unknown(g={}){return this.Create({...g,[e.Kind]:"Unknown"})}Unsafe(g={}){return this.Create({...g,[e.Kind]:g[e.Kind]||"Unsafe"})}Uppercase(g,E={}){return{...m.Map(l.Type(g),"Uppercase"),...E}}}e.JsonTypeBuilder=qe;class nt extends qe{AsyncIterator(g,E={}){return this.Create({...E,[e.Kind]:"AsyncIterator",type:"AsyncIterator",items:l.Type(g)})}Awaited(g,E={}){const $=_=>_.length>0?(()=>{const[v,...C]=_;return[this.Awaited(v),...$(C)]})():_;return s.TIntersect(g)?e.Type.Intersect($(g.allOf)):s.TUnion(g)?e.Type.Union($(g.anyOf)):s.TPromise(g)?this.Awaited(g.item):l.Type(g,E)}BigInt(g={}){return this.Create({...g,[e.Kind]:"BigInt",type:"bigint"})}ConstructorParameters(g,E={}){return this.Tuple([...g.parameters],{...E})}Constructor(g,E,$){const[_,v]=[l.Rest(g),l.Type(E)];return this.Create({...$,[e.Kind]:"Constructor",type:"Constructor",parameters:_,returns:v})}Date(g={}){return this.Create({...g,[e.Kind]:"Date",type:"Date"})}Function(g,E,$){const[_,v]=[l.Rest(g),l.Type(E)];return this.Create({...$,[e.Kind]:"Function",type:"Function",parameters:_,returns:v})}InstanceType(g,E={}){return l.Type(g.returns,E)}Iterator(g,E={}){return this.Create({...E,[e.Kind]:"Iterator",type:"Iterator",items:l.Type(g)})}Parameters(g,E={}){return this.Tuple(g.parameters,{...E})}Promise(g,E={}){return this.Create({...E,[e.Kind]:"Promise",type:"Promise",item:l.Type(g)})}RegExp(g,E={}){const $=o.IsString(g)?g:g.source;return this.Create({...E,[e.Kind]:"String",type:"string",pattern:$})}RegEx(g,E={}){return this.RegExp(g,E)}ReturnType(g,E={}){return l.Type(g.returns,E)}Symbol(g){return this.Create({...g,[e.Kind]:"Symbol",type:"symbol"})}Undefined(g={}){return this.Create({...g,[e.Kind]:"Undefined",type:"undefined"})}Uint8Array(g={}){return this.Create({...g,[e.Kind]:"Uint8Array",type:"Uint8Array"})}Void(g={}){return this.Create({...g,[e.Kind]:"Void",type:"void"})}}e.JavaScriptTypeBuilder=nt,e.JsonType=new qe,e.Type=new nt})(p);const bm=p.Type.Object({prefix:p.Type.Optional(p.Type.String()),suffix:p.Type.Optional(p.Type.String()),volume:p.Type.Optional(p.Type.Number())}),Ll=p.Type.Object({soundOnNewLine:p.Type.Optional(p.Type.String()),soundPerLetter:p.Type.Optional(bm)}),Tm=p.Type.Object({defaultAudio:p.Type.Optional(Ll),characterAudio:p.Type.Optional(p.Type.Record(p.Type.String(),Ll))}),vm=p.Type.Object({src:p.Type.String(),path:p.Type.Optional(p.Type.String()),volume:p.Type.Optional(p.Type.Number()),rate:p.Type.Optional(p.Type.Number()),html5:p.Type.Optional(p.Type.Boolean()),fadeInTime:p.Type.Optional(p.Type.Number()),fadeInDelay:p.Type.Optional(p.Type.Number()),fadeOutTime:p.Type.Optional(p.Type.Number()),loop:p.Type.Optional(p.Type.Boolean())}),Sm=p.Type.Record(p.Type.String(),vm),wm=p.Type.Object({volume:p.Type.Optional(p.Type.Number()),defaultMusic:p.Type.Optional(p.Type.String()),musicFadeInTime:p.Type.Optional(p.Type.Number()),musicFadeOutTime:p.Type.Optional(p.Type.Number()),musicFadeInDelay:p.Type.Optional(p.Type.Number())}),km=p.Type.Record(p.Type.String(),p.Type.String()),Ml=p.Type.Object({files:Sm,audioTriggers:km,options:wm,dialogAudio:p.Type.Optional(Tm)}),Rl={files:{},audioTriggers:{},options:{volume:1,musicFadeInTime:.5,musicFadeInDelay:.5,musicFadeOutTime:.5}},Bl=p.Type.Object({backgrounds:p.Type.Object({width:p.Type.Number(),height:p.Type.Number()}),dialogBottomPadding:p.Type.Union([p.Type.Number(),p.Type.String()]),minTextWidth:p.Type.Optional(p.Type.Number()),verticalLayoutThreshold:p.Type.Number(),defaultFontSize:p.Type.Optional(p.Type.Number()),portraits:p.Type.Object({width:p.Type.Number(),height:p.Type.Number(),offset:p.Type.Optional(p.Type.Object({landscape:p.Type.Optional(p.Type.Object({right:p.Type.Number(),bottom:p.Type.Number()})),portrait:p.Type.Optional(p.Type.Object({right:p.Type.Number(),bottom:p.Type.Number()}))}))})}),Cm={backgrounds:{width:880,height:720},dialogBottomPadding:70,verticalLayoutThreshold:600,defaultFontSize:16,portraits:{width:100,height:100}},Ro=p.Type.Object({name:p.Type.String(),description:p.Type.Optional(p.Type.String())}),$m=p.Type.Intersect([Ro,p.Type.Object({type:p.Type.Literal("number"),defaultValue:p.Type.Number(),step:p.Type.Number(),minValue:p.Type.Number(),maxValue:p.Type.Number()})]),Em=p.Type.Intersect([Ro,p.Type.Object({type:p.Type.Literal("integer"),defaultValue:p.Type.Number(),step:p.Type.Number(),minValue:p.Type.Number(),maxValue:p.Type.Number()})]),Om=p.Type.Intersect([Ro,p.Type.Object({type:p.Type.Literal("boolean"),defaultValue:p.Type.Boolean()})]),Am=p.Type.Intersect([Ro,p.Type.Object({type:p.Type.Literal("string"),defaultValue:p.Type.String()})]),Im=p.Type.Union([$m,Em,Om,Am]);function Nm(e){return e.type==="number"}function Fl(e){return e.type==="integer"}function Pm(e){return e.type==="boolean"}function jm(e){return e.type==="string"}const Vl=p.Type.Object({customSettings:p.Type.Optional(p.Type.Record(p.Type.String(),Im))}),Bo="###_--_~=:;_JUMP",es="###_--_~=:;_RETURN",Dm="###_--_~=:;_OK",Fo="###_--_~=:;_STOP";function xm(e){return e===Bo||e===es||e===Dm||e===Fo}const Lm="3.9.7",Mm=new Date("2024-02-03T15:09:28.490Z"),Rm=400,Vo=20,Uo="@empty",Ul={background:Uo},Bm=p.Type.Optional(p.Type.Object({debugMenu:p.Type.Optional(p.Type.String()),jumpMenu:p.Type.Optional(p.Type.String())})),ql=p.Type.Optional(p.Type.Object({animateText:p.Type.Optional(p.Type.Boolean()),textSpeed:p.Type.Optional(p.Type.Number()),timeBetweenLines:p.Type.Optional(p.Type.Number()),overlayMode:p.Type.Optional(p.Type.Boolean()),rightOffset:p.Type.Optional(p.Type.Number()),bottomOffset:p.Type.Optional(p.Type.Number()),width:p.Type.Optional(p.Type.Number()),height:p.Type.Optional(p.Type.Number()),hideDuringTransition:p.Type.Optional(p.Type.Boolean()),showAfterScriptEnd:p.Type.Optional(p.Type.Boolean())})),Hl=p.Type.Object({engineSplashScreen:p.Type.Optional(p.Type.Object({skip:p.Type.Optional(p.Type.Boolean()),fadeDuration:p.Type.Optional(p.Type.Number()),timeBeforeFadeout:p.Type.Optional(p.Type.Number()),overrideText:p.Type.Optional(p.Type.String()),overrideLogo:p.Type.Optional(p.Type.String())})),gameSplashScreen:p.Type.Optional(p.Type.Object({startButtonText:p.Type.Optional(p.Type.String())}))}),Kl=p.Type.Object({timeOnScreen:p.Type.Number(),alsoPrintInDialogue:p.Type.Optional(p.Type.Boolean())}),Fm=p.Type.Object({name:p.Type.String(),icon:p.Type.String(),startingValue:p.Type.Number(),maxValue:p.Type.Optional(p.Type.Number()),minValue:p.Type.Optional(p.Type.Number()),decimals:p.Type.Optional(p.Type.Number()),prefix:p.Type.Optional(p.Type.String()),suffix:p.Type.Optional(p.Type.String()),hideName:p.Type.Optional(p.Type.Boolean()),formatting:p.Type.Optional(p.Type.Object({style:p.Type.Union([p.Type.Literal("decimal"),p.Type.Literal("currency"),p.Type.Literal("percent"),p.Type.Literal("unit")]),currency:p.Type.Optional(p.Type.String()),unit:p.Type.Optional(p.Type.String())}))}),Gl=p.Type.Record(p.Type.String(),Fm),zl=p.Type.Record(p.Type.String(),p.Type.Object({onlyInteractOutsideOfScripts:p.Type.Optional(p.Type.Boolean())})),Vm=p.Type.Object({delay:p.Type.Optional(p.Type.Number()),duration:p.Type.Optional(p.Type.Number())}),Wl=p.Type.Record(p.Type.String(),Vm),Um=p.Type.Object({text:p.Type.String(),cssClass:p.Type.Optional(p.Type.String())}),Ql=p.Type.Record(p.Type.String(),Um),Yl=p.Type.Object({showScriptFinishedMessage:p.Type.Optional(p.Type.Boolean())}),Jl=p.Type.Object({mode:p.Type.String(),slots:p.Type.Number(),runOnReload:p.Type.Optional(p.Type.String()),disabled:p.Type.Optional(p.Type.Boolean())}),Xl=p.Type.Array(p.Type.String()),qm=[],Zl=p.Type.Object({baseAssetsPath:p.Type.Optional(p.Type.String()),baseDataPath:p.Type.Optional(p.Type.String()),gameTitle:p.Type.String(),saveFileName:p.Type.String(),images:p.Type.Optional(p.Type.Record(p.Type.String(),p.Type.String())),layout:Bl,settings:p.Type.Optional(Vl),gameFlow:p.Type.Optional(p.Type.Object({labelToJumpOnScriptEnd:p.Type.Optional(p.Type.String())})),dialogPanel:p.Type.Optional(ql),splashScreens:p.Type.Optional(Hl),notifications:p.Type.Optional(Kl),hudStats:Gl,interactionTags:p.Type.Optional(zl),transitions:p.Type.Optional(Wl),menuButtons:p.Type.Optional(Ql),debugging:p.Type.Optional(Yl),saves:p.Type.Optional(Jl),hotkeys:Bm}),ts={baseAssetsPath:"",baseDataPath:"",gameTitle:"Narrat Game",saveFileName:"narrat save",images:{},layout:Cm,settings:{},gameFlow:{},dialogPanel:{overlayMode:!0,rightOffset:100,bottomOffset:50,width:475,height:680,textSpeed:Vo,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:{}},Hm=p.Type.Object({name:p.Type.String(),description:p.Type.String(),icon:p.Type.String(),onUse:p.Type.Optional(p.Type.Object({action:p.Type.String(),label:p.Type.String()})),tag:p.Type.Optional(p.Type.String()),category:p.Type.Optional(p.Type.String()),showIfEmpty:p.Type.Optional(p.Type.Boolean())}),ec=p.Type.Object({id:p.Type.String(),title:p.Type.String()}),tc=p.Type.Record(p.Type.String(),Hm);p.Type.Object({categories:p.Type.Array(ec),items:tc});const nc=p.Type.Object({categories:p.Type.Optional(p.Type.Array(ec)),items:p.Type.Optional(tc)}),rc={categories:[{id:"default",title:"Items"}],items:{}},Km=p.Type.Object({description:p.Type.String(),succeededDescription:p.Type.Optional(p.Type.String()),failedDescription:p.Type.Optional(p.Type.String()),hidden:p.Type.Optional(p.Type.Boolean())}),Gm=p.Type.Object({title:p.Type.String(),description:p.Type.String(),succeededDescription:p.Type.Optional(p.Type.String()),failedDescription:p.Type.Optional(p.Type.String()),endings:p.Type.Optional(p.Type.Record(p.Type.String(),p.Type.Object({success:p.Type.Boolean(),description:p.Type.String()}))),objectives:p.Type.Record(p.Type.String(),Km),category:p.Type.Optional(p.Type.String())}),zm=p.Type.Object({id:p.Type.String(),title:p.Type.String()}),Wm=p.Type.Record(p.Type.String(),Gm),oc=p.Type.Object({quests:Wm,categories:p.Type.Array(zm)}),ic={quests:{},categories:[{id:"default",title:"Quests"}]},sc=p.Type.Object({enabled:p.Type.Boolean(),background:p.Type.Optional(p.Type.String()),text:p.Type.Optional(p.Type.String()),cssClass:p.Type.Optional(p.Type.String()),position:p.Type.Object({left:p.Type.Number(),top:p.Type.Number(),width:p.Type.Optional(p.Type.Number()),height:p.Type.Optional(p.Type.Number())}),anchor:p.Type.Optional(p.Type.Object({x:p.Type.Number(),y:p.Type.Number()})),action:p.Type.Optional(p.Type.String()),actionType:p.Type.Optional(p.Type.String()),scriptClickable:p.Type.Optional(p.Type.Boolean()),tag:p.Type.Optional(p.Type.String())}),Qm=p.Type.Record(p.Type.String(),sc),ac=p.Type.Object({buttons:Qm,clickableDuringScriptsByDefault:p.Type.Optional(p.Type.Boolean())}),lc={buttons:{},clickableDuringScriptsByDefault:!1},Ym=p.Type.Intersect([sc,p.Type.Object({id:p.Type.String()})]),Jm=p.Type.Object({muted:p.Type.Optional(p.Type.Boolean()),loop:p.Type.Optional(p.Type.Boolean())}),Xm=p.Type.Object({background:p.Type.String(),video:p.Type.Optional(Jm),buttons:p.Type.Optional(p.Type.Array(p.Type.Union([p.Type.String(),Ym])))}),cc=p.Type.Record(p.Type.String(),Xm);p.Type.Object({screens:cc});const uc=p.Type.Object({screens:p.Type.Optional(cc)}),dc={screens:{}},Zm=p.Type.Object({name:p.Type.String(),description:p.Type.String(),startingLevel:p.Type.Number(),hidden:p.Type.Optional(p.Type.Boolean()),icon:p.Type.String()}),fc=p.Type.Record(p.Type.String(),Zm),pc=p.Type.Object({xpPerLevel:p.Type.Number(),notifyLevelUp:p.Type.Boolean()});p.Type.Object({skills:fc,skillOptions:pc});const mc=p.Type.Object({skills:p.Type.Optional(fc),skillOptions:p.Type.Optional(pc)}),hc={skills:{},skillOptions:{xpPerLevel:10,notifyLevelUp:!0}},eh=p.Type.Object({portraitCssClass:p.Type.Optional(p.Type.String()),color:p.Type.Optional(p.Type.String()),boxCss:p.Type.Optional(p.Type.Record(p.Type.String(),p.Type.Any())),nameCss:p.Type.Optional(p.Type.Record(p.Type.String(),p.Type.Any())),textCss:p.Type.Optional(p.Type.Record(p.Type.String(),p.Type.Any()))}),th=p.Type.Object({video:p.Type.String(),autoplay:p.Type.Optional(p.Type.Boolean()),loop:p.Type.Optional(p.Type.Boolean()),muted:p.Type.Optional(p.Type.Boolean()),width:p.Type.Optional(p.Type.Number()),height:p.Type.Optional(p.Type.Number())}),nh=p.Type.Object({image:p.Type.String(),width:p.Type.Optional(p.Type.Number()),height:p.Type.Optional(p.Type.Number())}),rh=p.Type.Union([p.Type.String(),th,nh]),oh=p.Type.Object({sprites:p.Type.Optional(p.Type.Record(p.Type.String(),rh)),name:p.Type.String(),style:p.Type.Optional(eh)}),yc=p.Type.Object({config:p.Type.Object({imagesPath:p.Type.String(),playerCharacter:p.Type.Optional(p.Type.String()),gameCharacter:p.Type.Optional(p.Type.String())}),characters:p.Type.Record(p.Type.String(),oh)}),gc={config:{imagesPath:"",playerCharacter:"player",gameCharacter:"game"},characters:{}},_c=p.Type.Object({cssClass:p.Type.Optional(p.Type.String()),textCssClass:p.Type.Optional(p.Type.String()),titleCssClass:p.Type.Optional(p.Type.String())}),bc=p.Type.Object({options:p.Type.Object({delay:p.Type.Optional(p.Type.Number()),width:p.Type.Number(),keywordsPrefix:p.Type.String(),screenEdgesMinimumMargin:p.Type.Optional(p.Type.Number()),styling:p.Type.Optional(_c)}),tooltips:p.Type.Array(p.Type.Object({keywords:p.Type.Array(p.Type.String()),title:p.Type.String(),description:p.Type.String(),styling:p.Type.Optional(_c)}))}),Tc={options:{delay:0,width:350,keywordsPrefix:"@@"},tooltips:[]},ih=p.Type.Object({name:p.Type.String(),description:p.Type.String(),icon:p.Type.Optional(p.Type.String()),lockedIcon:p.Type.Optional(p.Type.String()),secret:p.Type.Optional(p.Type.Boolean()),category:p.Type.Optional(p.Type.String())}),vc=p.Type.Object({id:p.Type.String(),title:p.Type.String()}),Sc=p.Type.Record(p.Type.String(),ih);p.Type.Object({defaultAchievementIcon:p.Type.String(),categories:p.Type.Array(vc),achievements:Sc,notifyNewAchievements:p.Type.Boolean(),secretAchievements:p.Type.Optional(p.Type.Object({censorDescription:p.Type.Optional(p.Type.Boolean()),censorName:p.Type.Optional(p.Type.Boolean()),hideUntilObtained:p.Type.Optional(p.Type.Boolean())}))});const wc=p.Type.Object({categories:p.Type.Optional(p.Type.Array(vc)),achievements:p.Type.Optional(Sc)}),kc={categories:[{id:"default",title:"Achievements"}],achievements:{},notifyNewAchievements:!0,defaultAchievementIcon:"img/achievements/trophy.png"},sh=p.Type.Object({diceRange:p.Type.Tuple([p.Type.Number(),p.Type.Number()]),diceCount:p.Type.Number(),difficultyText:p.Type.Array(p.Type.Tuple([p.Type.Number(),p.Type.String()])),extraPointsPerLevel:p.Type.Number(),extraDicePerLevel:p.Type.Optional(p.Type.Number()),successOnRollsBelowThreshold:p.Type.Boolean(),showDifficultyText:p.Type.Boolean(),showDifficultyNumber:p.Type.Boolean(),showDifficultyWithoutModifiers:p.Type.Boolean(),finalRollIsHighest:p.Type.Optional(p.Type.Boolean()),finalRollIsLowest:p.Type.Optional(p.Type.Boolean()),failOnRollsEqualToThreshold:p.Type.Optional(p.Type.Boolean())}),ah=p.Type.Object({skill:p.Type.String(),difficulty:p.Type.Number(),winsNeeded:p.Type.Optional(p.Type.Number()),hideAfterRoll:p.Type.Optional(p.Type.Boolean()),repeatable:p.Type.Optional(p.Type.Boolean())}),Cc=p.Type.Object({options:sh,skillChecks:p.Type.Record(p.Type.String(),ah)}),$c={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:{}},lh=p.Type.Object({cssClass:p.Type.Optional(p.Type.String()),textTemplate:p.Type.Optional(p.Type.String())}),Ec=p.Type.Record(p.Type.String(),lh);p.Type.Object({choiceTextTemplate:p.Type.String(),choicePrompts:Ec});const Oc=p.Type.Object({choiceTextTemplate:p.Type.Optional(p.Type.String()),choicePrompts:p.Type.Optional(Ec)}),Ac={choicePrompts:{},choiceTextTemplate:'<span class="choice-index">%{$index}. </span> <span class="choice-text">%{$choice}</span>'},Ic=p.Type.Object({delay:p.Type.Optional(p.Type.Number()),direction:p.Type.Optional(p.Type.String()),duration:p.Type.Optional(p.Type.Number()),easing:p.Type.Optional(p.Type.String()),endDelay:p.Type.Optional(p.Type.Number()),fill:p.Type.Optional(p.Type.String()),iterationStart:p.Type.Optional(p.Type.Number()),iterations:p.Type.Optional(p.Type.Number()),keyframes:p.Type.Optional(p.Type.Any())}),ns=p.Type.Array(p.Type.Any()),ch=p.Type.Object({keyframes:p.Type.Union([p.Type.String(),ns]),options:p.Type.Optional(Ic)});p.Type.Object({keyframes:ns,options:p.Type.Optional(Ic)});const Nc=p.Type.Object({animations:p.Type.Record(p.Type.String(),ch),keyframes:p.Type.Record(p.Type.String(),ns)}),Pc={animations:{},keyframes:{}},uh=p.Type.Object({name:p.Type.String(),type:p.Type.String(),optional:p.Type.Optional(p.Type.Boolean())}),dh=p.Type.Object({keyword:p.Type.String(),label:p.Type.String(),options:p.Type.Optional(p.Type.Array(uh))}),jc=p.Type.Object({macros:p.Type.Array(dh)}),Dc={macros:[]},rs=p.Type.Object({assets:p.Type.Record(p.Type.String(),p.Type.String())}),xc=p.Type.Object({images:p.Type.Optional(rs),audio:p.Type.Optional(rs),video:p.Type.Optional(rs)}),Lc={images:{assets:{}},audio:{assets:{}},video:{assets:{}}},br={common:ts,screens:dc,buttons:lc,skills:hc,skillChecks:$c,scripts:[],audio:Rl,tooltips:Tc,achievements:kc,items:rc,quests:ic,characters:gc,choices:Ac,animations:Pc,macros:Dc,preload:Lc};var fh=function(t){return ph(t)&&!mh(t)};function ph(e){return!!e&&typeof e=="object"}function mh(e){var t=Object.prototype.toString.call(e);return t==="[object RegExp]"||t==="[object Date]"||gh(e)}var hh=typeof Symbol=="function"&&Symbol.for,yh=hh?Symbol.for("react.element"):60103;function gh(e){return e.$$typeof===yh}function _h(e){return Array.isArray(e)?[]:{}}function Jr(e,t){return t.clone!==!1&&t.isMergeableObject(e)?Tr(_h(e),e,t):e}function bh(e,t,n){return e.concat(t).map(function(r){return Jr(r,n)})}function Th(e,t){if(!t.customMerge)return Tr;var n=t.customMerge(e);return typeof n=="function"?n:Tr}function vh(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter(function(t){return Object.propertyIsEnumerable.call(e,t)}):[]}function Mc(e){return Object.keys(e).concat(vh(e))}function Rc(e,t){try{return t in e}catch{return!1}}function Sh(e,t){return Rc(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))}function wh(e,t,n){var r={};return n.isMergeableObject(e)&&Mc(e).forEach(function(o){r[o]=Jr(e[o],n)}),Mc(t).forEach(function(o){Sh(e,o)||(Rc(e,o)&&n.isMergeableObject(t[o])?r[o]=Th(o,n)(e[o],t[o],n):r[o]=Jr(t[o],n))}),r}function Tr(e,t,n){n=n||{},n.arrayMerge=n.arrayMerge||bh,n.isMergeableObject=n.isMergeableObject||fh,n.cloneUnlessOtherwiseSpecified=Jr;var r=Array.isArray(t),o=Array.isArray(e),a=r===o;return a?r?n.arrayMerge(e,t,n):wh(e,t,n):Jr(t,n)}Tr.all=function(t,n){if(!Array.isArray(t))throw new Error("first argument should be an array");return t.reduce(function(r,o){return Tr(r,o,n)},{})};var kh=Tr,Ch=kh;const Yn=Bi(Ch),lt=et("config",{state:()=>({config:br,configModules:{}}),actions:{async setConfig(e){this.config=e},extendConfig(e){this.config=Yn(this.config,e)},generateSaveData(){return{playerCharacter:this.playerCharacter,gameCharacter:this.gameCharacter}},addConfigModule(e,t){this.configModules[e]=t},findConfigModuleKey(e){const t=Object.keys(this.configModules).find(n=>this.configModules[n].id===e.id);if(t)return t},reloadConfigModule(e,t){this.configModules[e].code=t,this.config[e]=t},loadSaveData(e){this.config.characters.config.playerCharacter=e.playerCharacter,this.config.characters.config.gameCharacter=e.gameCharacter}},getters:{playerCharacter(){return this.config.characters.config.playerCharacter??"player"},gameCharacter(){return this.config.characters.config.gameCharacter??"game"}}});function Bc(e){const t=Xe(),n=t.getSkillCheck(e.id);if(n&&n.happened&&(n.succeeded||!e.repeatable))return n;const r=_m(e);return Uc(mm(r,e)),r?t.passSkillCheck(e.id,e.hideAfterRoll):t.failSkillCheck(e.id,e.hideAfterRoll),t.getSkillCheck(e.id)}function $h(e,t=[]){const n=e.options,r=e.staticOptions,o=!!n.condition;if(o)return r.success;if(!o){for(const[a,s]of r.elseifs.entries())if(t[a]===!0)return s.branch}if(!o&&r.failure)return r.failure}function Fc(e){return typeof e=="object"}function Vc(e){return typeof e=="string"&&e.search(/\$/)===0}function Uc(e){const t={speaker:lt().gameCharacter,text:e,interactive:!1};Fe().addDialog(t)}async function os(e){Fe().addDialog(e)}function Eh(e,t){if(t<e.length)return e[t]}/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */function qc(e){return typeof e>"u"||e===null}function Oh(e){return typeof e=="object"&&e!==null}function Ah(e){return Array.isArray(e)?e:qc(e)?[]:[e]}function Ih(e,t){var n,r,o,a;if(t)for(a=Object.keys(t),n=0,r=a.length;n<r;n+=1)o=a[n],e[o]=t[o];return e}function Nh(e,t){var n="",r;for(r=0;r<t;r+=1)n+=e;return n}function Ph(e){return e===0&&Number.NEGATIVE_INFINITY===1/e}var jh=qc,Dh=Oh,xh=Ah,Lh=Nh,Mh=Ph,Rh=Ih,ct={isNothing:jh,isObject:Dh,toArray:xh,repeat:Lh,isNegativeZero:Mh,extend:Rh};function Hc(e,t){var n="",r=e.reason||"(unknown reason)";return e.mark?(e.mark.name&&(n+='in "'+e.mark.name+'" '),n+="("+(e.mark.line+1)+":"+(e.mark.column+1)+")",!t&&e.mark.snippet&&(n+=`
38
+ (${e.id} - ${s}/${e.winsNeeded} - rolls: ${JSON.stringify(r.map(c=>c.modified))})`)}else a=xl(n,e.difficulty),Ft.log(`[SKILL CHECK ${o.name}]: ${a?"✅":"❌"}`,`(${e.id}) - ${n}/${e.difficulty}`);return Qn(a?"onSkillCheckSuccess":"onSkillCheckFailure"),a}function xl(e,t){const{options:n}=vo();let r=e>=t;return n.successOnRollsBelowThreshold&&(r=e<=t),n.failOnRollsEqualToThreshold&&e===t&&(r=!1),r}var p={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Type=e.JsonType=e.JavaScriptTypeBuilder=e.JsonTypeBuilder=e.TypeBuilder=e.TypeBuilderError=e.TransformEncodeBuilder=e.TransformDecodeBuilder=e.TemplateLiteralDslParser=e.TemplateLiteralGenerator=e.TemplateLiteralGeneratorError=e.TemplateLiteralFinite=e.TemplateLiteralFiniteError=e.TemplateLiteralParser=e.TemplateLiteralParserError=e.TemplateLiteralResolver=e.TemplateLiteralPattern=e.TemplateLiteralPatternError=e.UnionResolver=e.KeyArrayResolver=e.KeyArrayResolverError=e.KeyResolver=e.ObjectMap=e.Intrinsic=e.IndexedAccessor=e.TypeClone=e.TypeExtends=e.TypeExtendsResult=e.TypeExtendsError=e.ExtendsUndefined=e.TypeGuard=e.TypeGuardUnknownTypeError=e.ValueGuard=e.FormatRegistry=e.TypeBoxError=e.TypeRegistry=e.PatternStringExact=e.PatternNumberExact=e.PatternBooleanExact=e.PatternString=e.PatternNumber=e.PatternBoolean=e.Kind=e.Hint=e.Optional=e.Readonly=e.Transform=void 0,e.Transform=Symbol.for("TypeBox.Transform"),e.Readonly=Symbol.for("TypeBox.Readonly"),e.Optional=Symbol.for("TypeBox.Optional"),e.Hint=Symbol.for("TypeBox.Hint"),e.Kind=Symbol.for("TypeBox.Kind"),e.PatternBoolean="(true|false)",e.PatternNumber="(0|[1-9][0-9]*)",e.PatternString="(.*)",e.PatternBooleanExact=`^${e.PatternBoolean}$`,e.PatternNumberExact=`^${e.PatternNumber}$`,e.PatternStringExact=`^${e.PatternString}$`;var t;(function(j){const g=new Map;function E(){return new Map(g)}j.Entries=E;function $(){return g.clear()}j.Clear=$;function _(U){return g.delete(U)}j.Delete=_;function v(U){return g.has(U)}j.Has=v;function C(U,ne){g.set(U,ne)}j.Set=C;function M(U){return g.get(U)}j.Get=M})(t||(e.TypeRegistry=t={}));class n extends Error{constructor(g){super(g)}}e.TypeBoxError=n;var r;(function(j){const g=new Map;function E(){return new Map(g)}j.Entries=E;function $(){return g.clear()}j.Clear=$;function _(U){return g.delete(U)}j.Delete=_;function v(U){return g.has(U)}j.Has=v;function C(U,ne){g.set(U,ne)}j.Set=C;function M(U){return g.get(U)}j.Get=M})(r||(e.FormatRegistry=r={}));var o;(function(j){function g(re){return Array.isArray(re)}j.IsArray=g;function E(re){return typeof re=="bigint"}j.IsBigInt=E;function $(re){return typeof re=="boolean"}j.IsBoolean=$;function _(re){return re instanceof globalThis.Date}j.IsDate=_;function v(re){return re===null}j.IsNull=v;function C(re){return typeof re=="number"}j.IsNumber=C;function M(re){return typeof re=="object"&&re!==null}j.IsObject=M;function U(re){return typeof re=="string"}j.IsString=U;function ne(re){return re instanceof globalThis.Uint8Array}j.IsUint8Array=ne;function ee(re){return re===void 0}j.IsUndefined=ee})(o||(e.ValueGuard=o={}));class a extends n{}e.TypeGuardUnknownTypeError=a;var s;(function(j){function g(O){try{return new RegExp(O),!0}catch{return!1}}function E(O){if(!o.IsString(O))return!1;for(let N=0;N<O.length;N++){const A=O.charCodeAt(N);if(A>=7&&A<=13||A===27||A===127)return!1}return!0}function $(O){return C(O)||ot(O)}function _(O){return o.IsUndefined(O)||o.IsBigInt(O)}function v(O){return o.IsUndefined(O)||o.IsNumber(O)}function C(O){return o.IsUndefined(O)||o.IsBoolean(O)}function M(O){return o.IsUndefined(O)||o.IsString(O)}function U(O){return o.IsUndefined(O)||o.IsString(O)&&E(O)&&g(O)}function ne(O){return o.IsUndefined(O)||o.IsString(O)&&E(O)}function ee(O){return o.IsUndefined(O)||ot(O)}function re(O){return Ce(O,"Any")&&M(O.$id)}j.TAny=re;function Ee(O){return Ce(O,"Array")&&O.type==="array"&&M(O.$id)&&ot(O.items)&&v(O.minItems)&&v(O.maxItems)&&C(O.uniqueItems)&&ee(O.contains)&&v(O.minContains)&&v(O.maxContains)}j.TArray=Ee;function R(O){return Ce(O,"AsyncIterator")&&O.type==="AsyncIterator"&&M(O.$id)&&ot(O.items)}j.TAsyncIterator=R;function J(O){return Ce(O,"BigInt")&&O.type==="bigint"&&M(O.$id)&&_(O.exclusiveMaximum)&&_(O.exclusiveMinimum)&&_(O.maximum)&&_(O.minimum)&&_(O.multipleOf)}j.TBigInt=J;function fe(O){return Ce(O,"Boolean")&&O.type==="boolean"&&M(O.$id)}j.TBoolean=fe;function ce(O){return Ce(O,"Constructor")&&O.type==="Constructor"&&M(O.$id)&&o.IsArray(O.parameters)&&O.parameters.every(N=>ot(N))&&ot(O.returns)}j.TConstructor=ce;function be(O){return Ce(O,"Date")&&O.type==="Date"&&M(O.$id)&&v(O.exclusiveMaximumTimestamp)&&v(O.exclusiveMinimumTimestamp)&&v(O.maximumTimestamp)&&v(O.minimumTimestamp)&&v(O.multipleOfTimestamp)}j.TDate=be;function ve(O){return Ce(O,"Function")&&O.type==="Function"&&M(O.$id)&&o.IsArray(O.parameters)&&O.parameters.every(N=>ot(N))&&ot(O.returns)}j.TFunction=ve;function Le(O){return Ce(O,"Integer")&&O.type==="integer"&&M(O.$id)&&v(O.exclusiveMaximum)&&v(O.exclusiveMinimum)&&v(O.maximum)&&v(O.minimum)&&v(O.multipleOf)}j.TInteger=Le;function Qe(O){return Ce(O,"Intersect")&&!(o.IsString(O.type)&&O.type!=="object")&&o.IsArray(O.allOf)&&O.allOf.every(N=>ot(N)&&!dr(N))&&M(O.type)&&(C(O.unevaluatedProperties)||ee(O.unevaluatedProperties))&&M(O.$id)}j.TIntersect=Qe;function We(O){return Ce(O,"Iterator")&&O.type==="Iterator"&&M(O.$id)&&ot(O.items)}j.TIterator=We;function Ce(O,N){return H(O)&&O[e.Kind]===N}j.TKindOf=Ce;function H(O){return o.IsObject(O)&&e.Kind in O&&o.IsString(O[e.Kind])}j.TKind=H;function oe(O){return _e(O)&&o.IsString(O.const)}j.TLiteralString=oe;function ie(O){return _e(O)&&o.IsNumber(O.const)}j.TLiteralNumber=ie;function ue(O){return _e(O)&&o.IsBoolean(O.const)}j.TLiteralBoolean=ue;function _e(O){return Ce(O,"Literal")&&M(O.$id)&&(o.IsBoolean(O.const)||o.IsNumber(O.const)||o.IsString(O.const))}j.TLiteral=_e;function $e(O){return Ce(O,"Never")&&o.IsObject(O.not)&&Object.getOwnPropertyNames(O.not).length===0}j.TNever=$e;function Se(O){return Ce(O,"Not")&&ot(O.not)}j.TNot=Se;function at(O){return Ce(O,"Null")&&O.type==="null"&&M(O.$id)}j.TNull=at;function Rt(O){return Ce(O,"Number")&&O.type==="number"&&M(O.$id)&&v(O.exclusiveMaximum)&&v(O.exclusiveMinimum)&&v(O.maximum)&&v(O.minimum)&&v(O.multipleOf)}j.TNumber=Rt;function Bt(O){return Ce(O,"Object")&&O.type==="object"&&M(O.$id)&&o.IsObject(O.properties)&&$(O.additionalProperties)&&v(O.minProperties)&&v(O.maxProperties)&&Object.entries(O.properties).every(([N,A])=>E(N)&&ot(A))}j.TObject=Bt;function Et(O){return Ce(O,"Promise")&&O.type==="Promise"&&M(O.$id)&&ot(O.item)}j.TPromise=Et;function cr(O){return Ce(O,"Record")&&O.type==="object"&&M(O.$id)&&$(O.additionalProperties)&&o.IsObject(O.patternProperties)&&(N=>{const A=Object.getOwnPropertyNames(N.patternProperties);return A.length===1&&g(A[0])&&o.IsObject(N.patternProperties)&&ot(N.patternProperties[A[0]])})(O)}j.TRecord=cr;function Co(O){return o.IsObject(O)&&e.Hint in O&&O[e.Hint]==="Recursive"}j.TRecursive=Co;function ur(O){return Ce(O,"Ref")&&M(O.$id)&&o.IsString(O.$ref)}j.TRef=ur;function Ot(O){return Ce(O,"String")&&O.type==="string"&&M(O.$id)&&v(O.minLength)&&v(O.maxLength)&&U(O.pattern)&&ne(O.format)}j.TString=Ot;function Fr(O){return Ce(O,"Symbol")&&O.type==="symbol"&&M(O.$id)}j.TSymbol=Fr;function On(O){return Ce(O,"TemplateLiteral")&&O.type==="string"&&o.IsString(O.pattern)&&O.pattern[0]==="^"&&O.pattern[O.pattern.length-1]==="$"}j.TTemplateLiteral=On;function Vr(O){return Ce(O,"This")&&M(O.$id)&&o.IsString(O.$ref)}j.TThis=Vr;function dr(O){return o.IsObject(O)&&e.Transform in O}j.TTransform=dr;function rt(O){return Ce(O,"Tuple")&&O.type==="array"&&M(O.$id)&&o.IsNumber(O.minItems)&&o.IsNumber(O.maxItems)&&O.minItems===O.maxItems&&(o.IsUndefined(O.items)&&o.IsUndefined(O.additionalItems)&&O.minItems===0||o.IsArray(O.items)&&O.items.every(N=>ot(N)))}j.TTuple=rt;function Ur(O){return Ce(O,"Undefined")&&O.type==="undefined"&&M(O.$id)}j.TUndefined=Ur;function mn(O){return An(O)&&O.anyOf.every(N=>oe(N)||ie(N))}j.TUnionLiteral=mn;function An(O){return Ce(O,"Union")&&M(O.$id)&&o.IsObject(O)&&o.IsArray(O.anyOf)&&O.anyOf.every(N=>ot(N))}j.TUnion=An;function In(O){return Ce(O,"Uint8Array")&&O.type==="Uint8Array"&&M(O.$id)&&v(O.minByteLength)&&v(O.maxByteLength)}j.TUint8Array=In;function _t(O){return Ce(O,"Unknown")&&M(O.$id)}j.TUnknown=_t;function qn(O){return Ce(O,"Unsafe")}j.TUnsafe=qn;function Hn(O){return Ce(O,"Void")&&O.type==="void"&&M(O.$id)}j.TVoid=Hn;function $o(O){return o.IsObject(O)&&O[e.Readonly]==="Readonly"}j.TReadonly=$o;function qr(O){return o.IsObject(O)&&O[e.Optional]==="Optional"}j.TOptional=qr;function ot(O){return o.IsObject(O)&&(re(O)||Ee(O)||fe(O)||J(O)||R(O)||ce(O)||be(O)||ve(O)||Le(O)||Qe(O)||We(O)||_e(O)||$e(O)||Se(O)||at(O)||Rt(O)||Bt(O)||Et(O)||cr(O)||ur(O)||Ot(O)||Fr(O)||On(O)||Vr(O)||rt(O)||Ur(O)||An(O)||In(O)||_t(O)||qn(O)||Hn(O)||H(O)&&t.Has(O[e.Kind]))}j.TSchema=ot})(s||(e.TypeGuard=s={}));var c;(function(j){function g(E){return E[e.Kind]==="Intersect"?E.allOf.every($=>g($)):E[e.Kind]==="Union"?E.anyOf.some($=>g($)):E[e.Kind]==="Undefined"?!0:E[e.Kind]==="Not"?!g(E.not):!1}j.Check=g})(c||(e.ExtendsUndefined=c={}));class d extends n{}e.TypeExtendsError=d;var u;(function(j){j[j.Union=0]="Union",j[j.True=1]="True",j[j.False=2]="False"})(u||(e.TypeExtendsResult=u={}));var h;(function(j){function g(k){return k===u.False?k:u.True}function E(k){throw new d(k)}function $(k){return s.TNever(k)||s.TIntersect(k)||s.TUnion(k)||s.TUnknown(k)||s.TAny(k)}function _(k,w){return s.TNever(w)?Ce():s.TIntersect(w)?ve(k,w):s.TUnion(w)?q(k,w):s.TUnknown(w)?he():s.TAny(w)?v():E("StructuralRight")}function v(k,w){return u.True}function C(k,w){return s.TIntersect(w)?ve(k,w):s.TUnion(w)&&w.anyOf.some(ye=>s.TAny(ye)||s.TUnknown(ye))?u.True:s.TUnion(w)?u.Union:s.TUnknown(w)||s.TAny(w)?u.True:u.Union}function M(k,w){return s.TUnknown(k)?u.False:s.TAny(k)?u.Union:s.TNever(k)?u.True:u.False}function U(k,w){return s.TObject(w)&&On(w)?u.True:$(w)?_(k,w):s.TArray(w)?g(de(k.items,w.items)):u.False}function ne(k,w){return $(w)?_(k,w):s.TAsyncIterator(w)?g(de(k.items,w.items)):u.False}function ee(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):s.TBigInt(w)?u.True:u.False}function re(k,w){return s.TLiteral(k)&&o.IsBoolean(k.const)||s.TBoolean(k)?u.True:u.False}function Ee(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):s.TBoolean(w)?u.True:u.False}function R(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TConstructor(w)?k.parameters.length>w.parameters.length?u.False:k.parameters.every((ye,Be)=>g(de(w.parameters[Be],ye))===u.True)?g(de(k.returns,w.returns)):u.False:u.False}function J(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):s.TDate(w)?u.True:u.False}function fe(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TFunction(w)?k.parameters.length>w.parameters.length?u.False:k.parameters.every((ye,Be)=>g(de(w.parameters[Be],ye))===u.True)?g(de(k.returns,w.returns)):u.False:u.False}function ce(k,w){return s.TLiteral(k)&&o.IsNumber(k.const)||s.TNumber(k)||s.TInteger(k)?u.True:u.False}function be(k,w){return s.TInteger(w)||s.TNumber(w)?u.True:$(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):u.False}function ve(k,w){return w.allOf.every(ye=>de(k,ye)===u.True)?u.True:u.False}function Le(k,w){return k.allOf.some(ye=>de(ye,w)===u.True)?u.True:u.False}function Qe(k,w){return $(w)?_(k,w):s.TIterator(w)?g(de(k.items,w.items)):u.False}function We(k,w){return s.TLiteral(w)&&w.const===k.const?u.True:$(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):s.TString(w)?Hn(k):s.TNumber(w)?_e(k):s.TInteger(w)?ce(k):s.TBoolean(w)?re(k):u.False}function Ce(k,w){return u.False}function H(k,w){return u.True}function oe(k){let[w,ye]=[k,0];for(;s.TNot(w);)w=w.not,ye+=1;return ye%2===0?w:e.Type.Unknown()}function ie(k,w){return s.TNot(k)?de(oe(k),w):s.TNot(w)?de(k,oe(w)):E("Invalid fallthrough for Not")}function ue(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):s.TNull(w)?u.True:u.False}function _e(k,w){return s.TLiteralNumber(k)||s.TNumber(k)||s.TInteger(k)?u.True:u.False}function $e(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):s.TInteger(w)||s.TNumber(w)?u.True:u.False}function Se(k,w){return Object.getOwnPropertyNames(k.properties).length===w}function at(k){return On(k)}function Rt(k){return Se(k,0)||Se(k,1)&&"description"in k.properties&&s.TUnion(k.properties.description)&&k.properties.description.anyOf.length===2&&(s.TString(k.properties.description.anyOf[0])&&s.TUndefined(k.properties.description.anyOf[1])||s.TString(k.properties.description.anyOf[1])&&s.TUndefined(k.properties.description.anyOf[0]))}function Bt(k){return Se(k,0)}function Et(k){return Se(k,0)}function cr(k){return Se(k,0)}function Co(k){return Se(k,0)}function ur(k){return On(k)}function Ot(k){const w=e.Type.Number();return Se(k,0)||Se(k,1)&&"length"in k.properties&&g(de(k.properties.length,w))===u.True}function Fr(k){return Se(k,0)}function On(k){const w=e.Type.Number();return Se(k,0)||Se(k,1)&&"length"in k.properties&&g(de(k.properties.length,w))===u.True}function Vr(k){const w=e.Type.Function([e.Type.Any()],e.Type.Any());return Se(k,0)||Se(k,1)&&"then"in k.properties&&g(de(k.properties.then,w))===u.True}function dr(k,w){return de(k,w)===u.False||s.TOptional(k)&&!s.TOptional(w)?u.False:u.True}function rt(k,w){return s.TUnknown(k)?u.False:s.TAny(k)?u.Union:s.TNever(k)||s.TLiteralString(k)&&at(w)||s.TLiteralNumber(k)&&Bt(w)||s.TLiteralBoolean(k)&&Et(w)||s.TSymbol(k)&&Rt(w)||s.TBigInt(k)&&cr(w)||s.TString(k)&&at(w)||s.TSymbol(k)&&Rt(w)||s.TNumber(k)&&Bt(w)||s.TInteger(k)&&Bt(w)||s.TBoolean(k)&&Et(w)||s.TUint8Array(k)&&ur(w)||s.TDate(k)&&Co(w)||s.TConstructor(k)&&Fr(w)||s.TFunction(k)&&Ot(w)?u.True:s.TRecord(k)&&s.TString(An(k))?w[e.Hint]==="Record"?u.True:u.False:s.TRecord(k)&&s.TNumber(An(k))?Se(w,0)?u.True:u.False:u.False}function Ur(k,w){return $(w)?_(k,w):s.TRecord(w)?_t(k,w):s.TObject(w)?(()=>{for(const ye of Object.getOwnPropertyNames(w.properties)){if(!(ye in k.properties)&&!s.TOptional(w.properties[ye]))return u.False;if(s.TOptional(w.properties[ye]))return u.True;if(dr(k.properties[ye],w.properties[ye])===u.False)return u.False}return u.True})():u.False}function mn(k,w){return $(w)?_(k,w):s.TObject(w)&&Vr(w)?u.True:s.TPromise(w)?g(de(k.item,w.item)):u.False}function An(k){return e.PatternNumberExact in k.patternProperties?e.Type.Number():e.PatternStringExact in k.patternProperties?e.Type.String():E("Unknown record key pattern")}function In(k){return e.PatternNumberExact in k.patternProperties?k.patternProperties[e.PatternNumberExact]:e.PatternStringExact in k.patternProperties?k.patternProperties[e.PatternStringExact]:E("Unable to get record value schema")}function _t(k,w){const[ye,Be]=[An(w),In(w)];return s.TLiteralString(k)&&s.TNumber(ye)&&g(de(k,Be))===u.True?u.True:s.TUint8Array(k)&&s.TNumber(ye)||s.TString(k)&&s.TNumber(ye)||s.TArray(k)&&s.TNumber(ye)?de(k,Be):s.TObject(k)?(()=>{for(const Ge of Object.getOwnPropertyNames(k.properties))if(dr(Be,k.properties[Ge])===u.False)return u.False;return u.True})():u.False}function qn(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?de(In(k),In(w)):u.False}function Hn(k,w){return s.TLiteral(k)&&o.IsString(k.const)||s.TString(k)?u.True:u.False}function $o(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):s.TString(w)?u.True:u.False}function qr(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):s.TSymbol(w)?u.True:u.False}function ot(k,w){return s.TTemplateLiteral(k)?de(F.Resolve(k),w):s.TTemplateLiteral(w)?de(k,F.Resolve(w)):E("Invalid fallthrough for TemplateLiteral")}function O(k,w){return s.TArray(w)&&k.items!==void 0&&k.items.every(ye=>de(ye,w.items)===u.True)}function N(k,w){return s.TNever(k)?u.True:s.TUnknown(k)?u.False:s.TAny(k)?u.Union:u.False}function A(k,w){return $(w)?_(k,w):s.TObject(w)&&On(w)||s.TArray(w)&&O(k,w)?u.True:s.TTuple(w)?o.IsUndefined(k.items)&&!o.IsUndefined(w.items)||!o.IsUndefined(k.items)&&o.IsUndefined(w.items)?u.False:o.IsUndefined(k.items)&&!o.IsUndefined(w.items)||k.items.every((ye,Be)=>de(ye,w.items[Be])===u.True)?u.True:u.False:u.False}function D(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):s.TUint8Array(w)?u.True:u.False}function K(k,w){return $(w)?_(k,w):s.TObject(w)?rt(k,w):s.TRecord(w)?_t(k,w):s.TVoid(w)?He(k):s.TUndefined(w)?u.True:u.False}function q(k,w){return w.anyOf.some(ye=>de(k,ye)===u.True)?u.True:u.False}function me(k,w){return k.anyOf.every(ye=>de(ye,w)===u.True)?u.True:u.False}function he(k,w){return u.True}function De(k,w){return s.TNever(w)?Ce():s.TIntersect(w)?ve(k,w):s.TUnion(w)?q(k,w):s.TAny(w)?v():s.TString(w)?Hn(k):s.TNumber(w)?_e(k):s.TInteger(w)?ce(k):s.TBoolean(w)?re(k):s.TArray(w)?M(k):s.TTuple(w)?N(k):s.TObject(w)?rt(k,w):s.TUnknown(w)?u.True:u.False}function He(k,w){return s.TUndefined(k)||s.TUndefined(k)?u.True:u.False}function Ye(k,w){return s.TIntersect(w)?ve(k,w):s.TUnion(w)?q(k,w):s.TUnknown(w)?he():s.TAny(w)?v():s.TObject(w)?rt(k,w):s.TVoid(w)?u.True:u.False}function de(k,w){return s.TTemplateLiteral(k)||s.TTemplateLiteral(w)?ot(k,w):s.TNot(k)||s.TNot(w)?ie(k,w):s.TAny(k)?C(k,w):s.TArray(k)?U(k,w):s.TBigInt(k)?ee(k,w):s.TBoolean(k)?Ee(k,w):s.TAsyncIterator(k)?ne(k,w):s.TConstructor(k)?R(k,w):s.TDate(k)?J(k,w):s.TFunction(k)?fe(k,w):s.TInteger(k)?be(k,w):s.TIntersect(k)?Le(k,w):s.TIterator(k)?Qe(k,w):s.TLiteral(k)?We(k,w):s.TNever(k)?H():s.TNull(k)?ue(k,w):s.TNumber(k)?$e(k,w):s.TObject(k)?Ur(k,w):s.TRecord(k)?qn(k,w):s.TString(k)?$o(k,w):s.TSymbol(k)?qr(k,w):s.TTuple(k)?A(k,w):s.TPromise(k)?mn(k,w):s.TUint8Array(k)?D(k,w):s.TUndefined(k)?K(k,w):s.TUnion(k)?me(k,w):s.TUnknown(k)?De(k,w):s.TVoid(k)?Ye(k,w):E(`Unknown left type operand '${k[e.Kind]}'`)}function Ue(k,w){return de(k,w)}j.Extends=Ue})(h||(e.TypeExtends=h={}));var l;(function(j){function g(U){return U.map(ne=>v(ne))}function E(U){return new Date(U.getTime())}function $(U){return new Uint8Array(U)}function _(U){const ne=Object.getOwnPropertyNames(U).reduce((re,Ee)=>({...re,[Ee]:v(U[Ee])}),{}),ee=Object.getOwnPropertySymbols(U).reduce((re,Ee)=>({...re,[Ee]:v(U[Ee])}),{});return{...ne,...ee}}function v(U){return o.IsArray(U)?g(U):o.IsDate(U)?E(U):o.IsUint8Array(U)?$(U):o.IsObject(U)?_(U):U}function C(U){return U.map(ne=>M(ne))}j.Rest=C;function M(U,ne={}){return{...v(U),...ne}}j.Type=M})(l||(e.TypeClone=l={}));var f;(function(j){function g(R){return R.map(J=>{const{[e.Optional]:fe,...ce}=l.Type(J);return ce})}function E(R){return R.every(J=>s.TOptional(J))}function $(R){return R.some(J=>s.TOptional(J))}function _(R){return E(R.allOf)?e.Type.Optional(e.Type.Intersect(g(R.allOf))):R}function v(R){return $(R.anyOf)?e.Type.Optional(e.Type.Union(g(R.anyOf))):R}function C(R){return R[e.Kind]==="Intersect"?_(R):R[e.Kind]==="Union"?v(R):R}function M(R,J){const fe=R.allOf.reduce((ce,be)=>{const ve=re(be,J);return ve[e.Kind]==="Never"?ce:[...ce,ve]},[]);return C(e.Type.Intersect(fe))}function U(R,J){const fe=R.anyOf.map(ce=>re(ce,J));return C(e.Type.Union(fe))}function ne(R,J){const fe=R.properties[J];return o.IsUndefined(fe)?e.Type.Never():e.Type.Union([fe])}function ee(R,J){const fe=R.items;if(o.IsUndefined(fe))return e.Type.Never();const ce=fe[J];return o.IsUndefined(ce)?e.Type.Never():ce}function re(R,J){return R[e.Kind]==="Intersect"?M(R,J):R[e.Kind]==="Union"?U(R,J):R[e.Kind]==="Object"?ne(R,J):R[e.Kind]==="Tuple"?ee(R,J):e.Type.Never()}function Ee(R,J,fe={}){const ce=J.map(be=>re(R,be.toString()));return C(e.Type.Union(ce,fe))}j.Resolve=Ee})(f||(e.IndexedAccessor=f={}));var m;(function(j){function g(ee){const[re,Ee]=[ee.slice(0,1),ee.slice(1)];return`${re.toLowerCase()}${Ee}`}function E(ee){const[re,Ee]=[ee.slice(0,1),ee.slice(1)];return`${re.toUpperCase()}${Ee}`}function $(ee){return ee.toUpperCase()}function _(ee){return ee.toLowerCase()}function v(ee,re){const Ee=P.ParseExact(ee.pattern);if(!W.Check(Ee))return{...ee,pattern:C(ee.pattern,re)};const fe=[...G.Generate(Ee)].map(ve=>e.Type.Literal(ve)),ce=M(fe,re),be=e.Type.Union(ce);return e.Type.TemplateLiteral([be])}function C(ee,re){return typeof ee=="string"?re==="Uncapitalize"?g(ee):re==="Capitalize"?E(ee):re==="Uppercase"?$(ee):re==="Lowercase"?_(ee):ee:ee.toString()}function M(ee,re){if(ee.length===0)return[];const[Ee,...R]=ee;return[ne(Ee,re),...M(R,re)]}function U(ee,re){return s.TTemplateLiteral(ee)?v(ee,re):s.TUnion(ee)?e.Type.Union(M(ee.anyOf,re)):s.TLiteral(ee)?e.Type.Literal(C(ee.const,re)):ee}function ne(ee,re){return U(ee,re)}j.Map=ne})(m||(e.Intrinsic=m={}));var y;(function(j){function g(C,M){return e.Type.Intersect(C.allOf.map(U=>_(U,M)),{...C})}function E(C,M){return e.Type.Union(C.anyOf.map(U=>_(U,M)),{...C})}function $(C,M){return M(C)}function _(C,M){return C[e.Kind]==="Intersect"?g(C,M):C[e.Kind]==="Union"?E(C,M):C[e.Kind]==="Object"?$(C,M):C}function v(C,M,U){return{..._(l.Type(C),M),...U}}j.Map=v})(y||(e.ObjectMap=y={}));var b;(function(j){function g(ne){return ne[0]==="^"&&ne[ne.length-1]==="$"?ne.slice(1,ne.length-1):ne}function E(ne,ee){return ne.allOf.reduce((re,Ee)=>[...re,...C(Ee,ee)],[])}function $(ne,ee){const re=ne.anyOf.map(Ee=>C(Ee,ee));return[...re.reduce((Ee,R)=>R.map(J=>re.every(fe=>fe.includes(J))?Ee.add(J):Ee)[0],new Set)]}function _(ne,ee){return Object.getOwnPropertyNames(ne.properties)}function v(ne,ee){return ee.includePatterns?Object.getOwnPropertyNames(ne.patternProperties):[]}function C(ne,ee){return s.TIntersect(ne)?E(ne,ee):s.TUnion(ne)?$(ne,ee):s.TObject(ne)?_(ne):s.TRecord(ne)?v(ne,ee):[]}function M(ne,ee){return[...new Set(C(ne,ee))]}j.ResolveKeys=M;function U(ne){return`^(${M(ne,{includePatterns:!0}).map(Ee=>`(${g(Ee)})`).join("|")})$`}j.ResolvePattern=U})(b||(e.KeyResolver=b={}));class S extends n{}e.KeyArrayResolverError=S;var T;(function(j){function g(E){return Array.isArray(E)?E:s.TUnionLiteral(E)?E.anyOf.map($=>$.const.toString()):s.TLiteral(E)?[E.const]:s.TTemplateLiteral(E)?(()=>{const $=P.ParseExact(E.pattern);if(!W.Check($))throw new S("Cannot resolve keys from infinite template expression");return[...G.Generate($)]})():[]}j.Resolve=g})(T||(e.KeyArrayResolver=T={}));var I;(function(j){function*g($){for(const _ of $.anyOf)_[e.Kind]==="Union"?yield*g(_):yield _}function E($){return e.Type.Union([...g($)],{...$})}j.Resolve=E})(I||(e.UnionResolver=I={}));class x extends n{}e.TemplateLiteralPatternError=x;var B;(function(j){function g(v){throw new x(v)}function E(v){return v.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function $(v,C){return s.TTemplateLiteral(v)?v.pattern.slice(1,v.pattern.length-1):s.TUnion(v)?`(${v.anyOf.map(M=>$(M,C)).join("|")})`:s.TNumber(v)?`${C}${e.PatternNumber}`:s.TInteger(v)?`${C}${e.PatternNumber}`:s.TBigInt(v)?`${C}${e.PatternNumber}`:s.TString(v)?`${C}${e.PatternString}`:s.TLiteral(v)?`${C}${E(v.const.toString())}`:s.TBoolean(v)?`${C}${e.PatternBoolean}`:g(`Unexpected Kind '${v[e.Kind]}'`)}function _(v){return`^${v.map(C=>$(C,"")).join("")}$`}j.Create=_})(B||(e.TemplateLiteralPattern=B={}));var F;(function(j){function g(E){const $=P.ParseExact(E.pattern);if(!W.Check($))return e.Type.String();const _=[...G.Generate($)].map(v=>e.Type.Literal(v));return e.Type.Union(_)}j.Resolve=g})(F||(e.TemplateLiteralResolver=F={}));class L extends n{}e.TemplateLiteralParserError=L;var P;(function(j){function g(R,J,fe){return R[J]===fe&&R.charCodeAt(J-1)!==92}function E(R,J){return g(R,J,"(")}function $(R,J){return g(R,J,")")}function _(R,J){return g(R,J,"|")}function v(R){if(!(E(R,0)&&$(R,R.length-1)))return!1;let J=0;for(let fe=0;fe<R.length;fe++)if(E(R,fe)&&(J+=1),$(R,fe)&&(J-=1),J===0&&fe!==R.length-1)return!1;return!0}function C(R){return R.slice(1,R.length-1)}function M(R){let J=0;for(let fe=0;fe<R.length;fe++)if(E(R,fe)&&(J+=1),$(R,fe)&&(J-=1),_(R,fe)&&J===0)return!0;return!1}function U(R){for(let J=0;J<R.length;J++)if(E(R,J))return!0;return!1}function ne(R){let[J,fe]=[0,0];const ce=[];for(let ve=0;ve<R.length;ve++)if(E(R,ve)&&(J+=1),$(R,ve)&&(J-=1),_(R,ve)&&J===0){const Le=R.slice(fe,ve);Le.length>0&&ce.push(re(Le)),fe=ve+1}const be=R.slice(fe);return be.length>0&&ce.push(re(be)),ce.length===0?{type:"const",const:""}:ce.length===1?ce[0]:{type:"or",expr:ce}}function ee(R){function J(be,ve){if(!E(be,ve))throw new L("TemplateLiteralParser: Index must point to open parens");let Le=0;for(let Qe=ve;Qe<be.length;Qe++)if(E(be,Qe)&&(Le+=1),$(be,Qe)&&(Le-=1),Le===0)return[ve,Qe];throw new L("TemplateLiteralParser: Unclosed group parens in expression")}function fe(be,ve){for(let Le=ve;Le<be.length;Le++)if(E(be,Le))return[ve,Le];return[ve,be.length]}const ce=[];for(let be=0;be<R.length;be++)if(E(R,be)){const[ve,Le]=J(R,be),Qe=R.slice(ve,Le+1);ce.push(re(Qe)),be=Le}else{const[ve,Le]=fe(R,be),Qe=R.slice(ve,Le);Qe.length>0&&ce.push(re(Qe)),be=Le-1}return ce.length===0?{type:"const",const:""}:ce.length===1?ce[0]:{type:"and",expr:ce}}function re(R){return v(R)?re(C(R)):M(R)?ne(R):U(R)?ee(R):{type:"const",const:R}}j.Parse=re;function Ee(R){return re(R.slice(1,R.length-1))}j.ParseExact=Ee})(P||(e.TemplateLiteralParser=P={}));class Y extends n{}e.TemplateLiteralFiniteError=Y;var W;(function(j){function g(C){throw new Y(C)}function E(C){return C.type==="or"&&C.expr.length===2&&C.expr[0].type==="const"&&C.expr[0].const==="0"&&C.expr[1].type==="const"&&C.expr[1].const==="[1-9][0-9]*"}function $(C){return C.type==="or"&&C.expr.length===2&&C.expr[0].type==="const"&&C.expr[0].const==="true"&&C.expr[1].type==="const"&&C.expr[1].const==="false"}function _(C){return C.type==="const"&&C.const===".*"}function v(C){return $(C)?!0:E(C)||_(C)?!1:C.type==="and"?C.expr.every(M=>v(M)):C.type==="or"?C.expr.every(M=>v(M)):C.type==="const"?!0:g("Unknown expression type")}j.Check=v})(W||(e.TemplateLiteralFinite=W={}));class X extends n{}e.TemplateLiteralGeneratorError=X;var G;(function(j){function*g(C){if(C.length===1)return yield*C[0];for(const M of C[0])for(const U of g(C.slice(1)))yield`${M}${U}`}function*E(C){return yield*g(C.expr.map(M=>[...v(M)]))}function*$(C){for(const M of C.expr)yield*v(M)}function*_(C){return yield C.const}function*v(C){return C.type==="and"?yield*E(C):C.type==="or"?yield*$(C):C.type==="const"?yield*_(C):(()=>{throw new X("Unknown expression")})()}j.Generate=v})(G||(e.TemplateLiteralGenerator=G={}));var z;(function(j){function*g(v){const C=v.trim().replace(/"|'/g,"");return C==="boolean"?yield e.Type.Boolean():C==="number"?yield e.Type.Number():C==="bigint"?yield e.Type.BigInt():C==="string"?yield e.Type.String():yield(()=>{const M=C.split("|").map(U=>e.Type.Literal(U.trim()));return M.length===0?e.Type.Never():M.length===1?M[0]:e.Type.Union(M)})()}function*E(v){if(v[1]!=="{"){const C=e.Type.Literal("$"),M=$(v.slice(1));return yield*[C,...M]}for(let C=2;C<v.length;C++)if(v[C]==="}"){const M=g(v.slice(2,C)),U=$(v.slice(C+1));return yield*[...M,...U]}yield e.Type.Literal(v)}function*$(v){for(let C=0;C<v.length;C++)if(v[C]==="$"){const M=e.Type.Literal(v.slice(0,C)),U=E(v.slice(C));return yield*[M,...U]}yield e.Type.Literal(v)}function _(v){return[...$(v)]}j.Parse=_})(z||(e.TemplateLiteralDslParser=z={}));class Q{constructor(g){this.schema=g}Decode(g){return new te(this.schema,g)}}e.TransformDecodeBuilder=Q;class te{constructor(g,E){this.schema=g,this.decode=E}Encode(g){const E=l.Type(this.schema);return s.TTransform(E)?(()=>{const v={Encode:C=>E[e.Transform].Encode(g(C)),Decode:C=>this.decode(E[e.Transform].Decode(C))};return{...E,[e.Transform]:v}})():(()=>{const $={Decode:this.decode,Encode:g};return{...E,[e.Transform]:$}})()}}e.TransformEncodeBuilder=te;let ke=0;class Ne extends n{}e.TypeBuilderError=Ne;class Ze{Create(g){return g}Throw(g){throw new Ne(g)}Discard(g,E){return E.reduce(($,_)=>{const{[_]:v,...C}=$;return C},g)}Strict(g){return JSON.parse(JSON.stringify(g))}}e.TypeBuilder=Ze;class qe extends Ze{ReadonlyOptional(g){return this.Readonly(this.Optional(g))}Readonly(g){return{...l.Type(g),[e.Readonly]:"Readonly"}}Optional(g){return{...l.Type(g),[e.Optional]:"Optional"}}Any(g={}){return this.Create({...g,[e.Kind]:"Any"})}Array(g,E={}){return this.Create({...E,[e.Kind]:"Array",type:"array",items:l.Type(g)})}Boolean(g={}){return this.Create({...g,[e.Kind]:"Boolean",type:"boolean"})}Capitalize(g,E={}){return{...m.Map(l.Type(g),"Capitalize"),...E}}Composite(g,E){const $=e.Type.Intersect(g,{}),v=b.ResolveKeys($,{includePatterns:!1}).reduce((C,M)=>({...C,[M]:e.Type.Index($,[M])}),{});return e.Type.Object(v,E)}Enum(g,E={}){if(o.IsUndefined(g))return this.Throw("Enum undefined or empty");const $=Object.getOwnPropertyNames(g).filter(C=>isNaN(C)).map(C=>g[C]),v=[...new Set($)].map(C=>e.Type.Literal(C));return this.Union(v,{...E,[e.Hint]:"Enum"})}Extends(g,E,$,_,v={}){switch(h.Extends(g,E)){case u.Union:return this.Union([l.Type($,v),l.Type(_,v)]);case u.True:return l.Type($,v);case u.False:return l.Type(_,v)}}Exclude(g,E,$={}){return s.TTemplateLiteral(g)?this.Exclude(F.Resolve(g),E,$):s.TTemplateLiteral(E)?this.Exclude(g,F.Resolve(E),$):s.TUnion(g)?(()=>{const _=g.anyOf.filter(v=>h.Extends(v,E)===u.False);return _.length===1?l.Type(_[0],$):this.Union(_,$)})():h.Extends(g,E)!==u.False?this.Never($):l.Type(g,$)}Extract(g,E,$={}){return s.TTemplateLiteral(g)?this.Extract(F.Resolve(g),E,$):s.TTemplateLiteral(E)?this.Extract(g,F.Resolve(E),$):s.TUnion(g)?(()=>{const _=g.anyOf.filter(v=>h.Extends(v,E)!==u.False);return _.length===1?l.Type(_[0],$):this.Union(_,$)})():h.Extends(g,E)!==u.False?l.Type(g,$):this.Never($)}Index(g,E,$={}){return s.TArray(g)&&s.TNumber(E)?l.Type(g.items,$):s.TTuple(g)&&s.TNumber(E)?(()=>{const v=(o.IsUndefined(g.items)?[]:g.items).map(C=>l.Type(C));return this.Union(v,$)})():(()=>{const _=T.Resolve(E),v=l.Type(g);return f.Resolve(v,_,$)})()}Integer(g={}){return this.Create({...g,[e.Kind]:"Integer",type:"integer"})}Intersect(g,E={}){if(g.length===0)return e.Type.Never();if(g.length===1)return l.Type(g[0],E);g.some(C=>s.TTransform(C))&&this.Throw("Cannot intersect transform types");const $=g.every(C=>s.TObject(C)),_=l.Rest(g),v=s.TSchema(E.unevaluatedProperties)?{unevaluatedProperties:l.Type(E.unevaluatedProperties)}:{};return E.unevaluatedProperties===!1||s.TSchema(E.unevaluatedProperties)||$?this.Create({...E,...v,[e.Kind]:"Intersect",type:"object",allOf:_}):this.Create({...E,...v,[e.Kind]:"Intersect",allOf:_})}KeyOf(g,E={}){return s.TRecord(g)?(()=>{const $=Object.getOwnPropertyNames(g.patternProperties)[0];return $===e.PatternNumberExact?this.Number(E):$===e.PatternStringExact?this.String(E):this.Throw("Unable to resolve key type from Record key pattern")})():s.TTuple(g)?(()=>{const _=(o.IsUndefined(g.items)?[]:g.items).map((v,C)=>e.Type.Literal(C.toString()));return this.Union(_,E)})():s.TArray(g)?this.Number(E):(()=>{const $=b.ResolveKeys(g,{includePatterns:!1});if($.length===0)return this.Never(E);const _=$.map(v=>this.Literal(v));return this.Union(_,E)})()}Literal(g,E={}){return this.Create({...E,[e.Kind]:"Literal",const:g,type:typeof g})}Lowercase(g,E={}){return{...m.Map(l.Type(g),"Lowercase"),...E}}Never(g={}){return this.Create({...g,[e.Kind]:"Never",not:{}})}Not(g,E){return this.Create({...E,[e.Kind]:"Not",not:l.Type(g)})}Null(g={}){return this.Create({...g,[e.Kind]:"Null",type:"null"})}Number(g={}){return this.Create({...g,[e.Kind]:"Number",type:"number"})}Object(g,E={}){const $=Object.getOwnPropertyNames(g),_=$.filter(U=>s.TOptional(g[U])),v=$.filter(U=>!_.includes(U)),C=s.TSchema(E.additionalProperties)?{additionalProperties:l.Type(E.additionalProperties)}:{},M=$.reduce((U,ne)=>({...U,[ne]:l.Type(g[ne])}),{});return v.length>0?this.Create({...E,...C,[e.Kind]:"Object",type:"object",properties:M,required:v}):this.Create({...E,...C,[e.Kind]:"Object",type:"object",properties:M})}Omit(g,E,$={}){const _=T.Resolve(E);return y.Map(this.Discard(l.Type(g),["$id",e.Transform]),v=>{o.IsArray(v.required)&&(v.required=v.required.filter(C=>!_.includes(C)),v.required.length===0&&delete v.required);for(const C of Object.getOwnPropertyNames(v.properties))_.includes(C)&&delete v.properties[C];return this.Create(v)},$)}Partial(g,E={}){return y.Map(this.Discard(l.Type(g),["$id",e.Transform]),$=>{const _=Object.getOwnPropertyNames($.properties).reduce((v,C)=>({...v,[C]:this.Optional($.properties[C])}),{});return this.Object(_,this.Discard($,["required"]))},E)}Pick(g,E,$={}){const _=T.Resolve(E);return y.Map(this.Discard(l.Type(g),["$id",e.Transform]),v=>{o.IsArray(v.required)&&(v.required=v.required.filter(C=>_.includes(C)),v.required.length===0&&delete v.required);for(const C of Object.getOwnPropertyNames(v.properties))_.includes(C)||delete v.properties[C];return this.Create(v)},$)}Record(g,E,$={}){return s.TTemplateLiteral(g)?(()=>{const _=P.ParseExact(g.pattern);return W.Check(_)?this.Object([...G.Generate(_)].reduce((v,C)=>({...v,[C]:l.Type(E)}),{}),$):this.Create({...$,[e.Kind]:"Record",type:"object",patternProperties:{[g.pattern]:l.Type(E)}})})():s.TUnion(g)?(()=>{const _=I.Resolve(g);if(s.TUnionLiteral(_)){const v=_.anyOf.reduce((C,M)=>({...C,[M.const]:l.Type(E)}),{});return this.Object(v,{...$,[e.Hint]:"Record"})}else this.Throw("Record key of type union contains non-literal types")})():s.TLiteral(g)?o.IsString(g.const)||o.IsNumber(g.const)?this.Object({[g.const]:l.Type(E)},$):this.Throw("Record key of type literal is not of type string or number"):s.TInteger(g)||s.TNumber(g)?this.Create({...$,[e.Kind]:"Record",type:"object",patternProperties:{[e.PatternNumberExact]:l.Type(E)}}):s.TString(g)?(()=>{const _=o.IsUndefined(g.pattern)?e.PatternStringExact:g.pattern;return this.Create({...$,[e.Kind]:"Record",type:"object",patternProperties:{[_]:l.Type(E)}})})():this.Never()}Recursive(g,E={}){o.IsUndefined(E.$id)&&(E.$id=`T${ke++}`);const $=g({[e.Kind]:"This",$ref:`${E.$id}`});return $.$id=E.$id,this.Create({...E,[e.Hint]:"Recursive",...$})}Ref(g,E={}){return o.IsString(g)?this.Create({...E,[e.Kind]:"Ref",$ref:g}):(o.IsUndefined(g.$id)&&this.Throw("Reference target type must specify an $id"),this.Create({...E,[e.Kind]:"Ref",$ref:g.$id}))}Required(g,E={}){return y.Map(this.Discard(l.Type(g),["$id",e.Transform]),$=>{const _=Object.getOwnPropertyNames($.properties).reduce((v,C)=>({...v,[C]:this.Discard($.properties[C],[e.Optional])}),{});return this.Object(_,$)},E)}Rest(g){return s.TTuple(g)&&!o.IsUndefined(g.items)?l.Rest(g.items):s.TIntersect(g)?l.Rest(g.allOf):s.TUnion(g)?l.Rest(g.anyOf):[]}String(g={}){return this.Create({...g,[e.Kind]:"String",type:"string"})}TemplateLiteral(g,E={}){const $=o.IsString(g)?B.Create(z.Parse(g)):B.Create(g);return this.Create({...E,[e.Kind]:"TemplateLiteral",type:"string",pattern:$})}Transform(g){return new Q(g)}Tuple(g,E={}){const[$,_,v]=[!1,g.length,g.length],C=l.Rest(g),M=g.length>0?{...E,[e.Kind]:"Tuple",type:"array",items:C,additionalItems:$,minItems:_,maxItems:v}:{...E,[e.Kind]:"Tuple",type:"array",minItems:_,maxItems:v};return this.Create(M)}Uncapitalize(g,E={}){return{...m.Map(l.Type(g),"Uncapitalize"),...E}}Union(g,E={}){return s.TTemplateLiteral(g)?F.Resolve(g):(()=>{const $=g;if($.length===0)return this.Never(E);if($.length===1)return this.Create(l.Type($[0],E));const _=l.Rest($);return this.Create({...E,[e.Kind]:"Union",anyOf:_})})()}Unknown(g={}){return this.Create({...g,[e.Kind]:"Unknown"})}Unsafe(g={}){return this.Create({...g,[e.Kind]:g[e.Kind]||"Unsafe"})}Uppercase(g,E={}){return{...m.Map(l.Type(g),"Uppercase"),...E}}}e.JsonTypeBuilder=qe;class nt extends qe{AsyncIterator(g,E={}){return this.Create({...E,[e.Kind]:"AsyncIterator",type:"AsyncIterator",items:l.Type(g)})}Awaited(g,E={}){const $=_=>_.length>0?(()=>{const[v,...C]=_;return[this.Awaited(v),...$(C)]})():_;return s.TIntersect(g)?e.Type.Intersect($(g.allOf)):s.TUnion(g)?e.Type.Union($(g.anyOf)):s.TPromise(g)?this.Awaited(g.item):l.Type(g,E)}BigInt(g={}){return this.Create({...g,[e.Kind]:"BigInt",type:"bigint"})}ConstructorParameters(g,E={}){return this.Tuple([...g.parameters],{...E})}Constructor(g,E,$){const[_,v]=[l.Rest(g),l.Type(E)];return this.Create({...$,[e.Kind]:"Constructor",type:"Constructor",parameters:_,returns:v})}Date(g={}){return this.Create({...g,[e.Kind]:"Date",type:"Date"})}Function(g,E,$){const[_,v]=[l.Rest(g),l.Type(E)];return this.Create({...$,[e.Kind]:"Function",type:"Function",parameters:_,returns:v})}InstanceType(g,E={}){return l.Type(g.returns,E)}Iterator(g,E={}){return this.Create({...E,[e.Kind]:"Iterator",type:"Iterator",items:l.Type(g)})}Parameters(g,E={}){return this.Tuple(g.parameters,{...E})}Promise(g,E={}){return this.Create({...E,[e.Kind]:"Promise",type:"Promise",item:l.Type(g)})}RegExp(g,E={}){const $=o.IsString(g)?g:g.source;return this.Create({...E,[e.Kind]:"String",type:"string",pattern:$})}RegEx(g,E={}){return this.RegExp(g,E)}ReturnType(g,E={}){return l.Type(g.returns,E)}Symbol(g){return this.Create({...g,[e.Kind]:"Symbol",type:"symbol"})}Undefined(g={}){return this.Create({...g,[e.Kind]:"Undefined",type:"undefined"})}Uint8Array(g={}){return this.Create({...g,[e.Kind]:"Uint8Array",type:"Uint8Array"})}Void(g={}){return this.Create({...g,[e.Kind]:"Void",type:"void"})}}e.JavaScriptTypeBuilder=nt,e.JsonType=new qe,e.Type=new nt})(p);const bm=p.Type.Object({prefix:p.Type.Optional(p.Type.String()),suffix:p.Type.Optional(p.Type.String()),volume:p.Type.Optional(p.Type.Number())}),Ll=p.Type.Object({soundOnNewLine:p.Type.Optional(p.Type.String()),soundPerLetter:p.Type.Optional(bm)}),Tm=p.Type.Object({defaultAudio:p.Type.Optional(Ll),characterAudio:p.Type.Optional(p.Type.Record(p.Type.String(),Ll))}),vm=p.Type.Object({src:p.Type.String(),path:p.Type.Optional(p.Type.String()),volume:p.Type.Optional(p.Type.Number()),rate:p.Type.Optional(p.Type.Number()),html5:p.Type.Optional(p.Type.Boolean()),fadeInTime:p.Type.Optional(p.Type.Number()),fadeInDelay:p.Type.Optional(p.Type.Number()),fadeOutTime:p.Type.Optional(p.Type.Number()),loop:p.Type.Optional(p.Type.Boolean())}),Sm=p.Type.Record(p.Type.String(),vm),wm=p.Type.Object({volume:p.Type.Optional(p.Type.Number()),defaultMusic:p.Type.Optional(p.Type.String()),musicFadeInTime:p.Type.Optional(p.Type.Number()),musicFadeOutTime:p.Type.Optional(p.Type.Number()),musicFadeInDelay:p.Type.Optional(p.Type.Number())}),km=p.Type.Record(p.Type.String(),p.Type.String()),Ml=p.Type.Object({files:Sm,audioTriggers:km,options:wm,dialogAudio:p.Type.Optional(Tm)}),Rl={files:{},audioTriggers:{},options:{volume:1,musicFadeInTime:.5,musicFadeInDelay:.5,musicFadeOutTime:.5}},Bl=p.Type.Object({backgrounds:p.Type.Object({width:p.Type.Number(),height:p.Type.Number()}),dialogBottomPadding:p.Type.Union([p.Type.Number(),p.Type.String()]),minTextWidth:p.Type.Optional(p.Type.Number()),verticalLayoutThreshold:p.Type.Number(),defaultFontSize:p.Type.Optional(p.Type.Number()),portraits:p.Type.Object({width:p.Type.Number(),height:p.Type.Number(),offset:p.Type.Optional(p.Type.Object({landscape:p.Type.Optional(p.Type.Object({right:p.Type.Number(),bottom:p.Type.Number()})),portrait:p.Type.Optional(p.Type.Object({right:p.Type.Number(),bottom:p.Type.Number()}))}))})}),Cm={backgrounds:{width:880,height:720},dialogBottomPadding:70,verticalLayoutThreshold:600,defaultFontSize:16,portraits:{width:100,height:100}},Ro=p.Type.Object({name:p.Type.String(),description:p.Type.Optional(p.Type.String())}),$m=p.Type.Intersect([Ro,p.Type.Object({type:p.Type.Literal("number"),defaultValue:p.Type.Number(),step:p.Type.Number(),minValue:p.Type.Number(),maxValue:p.Type.Number()})]),Em=p.Type.Intersect([Ro,p.Type.Object({type:p.Type.Literal("integer"),defaultValue:p.Type.Number(),step:p.Type.Number(),minValue:p.Type.Number(),maxValue:p.Type.Number()})]),Om=p.Type.Intersect([Ro,p.Type.Object({type:p.Type.Literal("boolean"),defaultValue:p.Type.Boolean()})]),Am=p.Type.Intersect([Ro,p.Type.Object({type:p.Type.Literal("string"),defaultValue:p.Type.String()})]),Im=p.Type.Union([$m,Em,Om,Am]);function Nm(e){return e.type==="number"}function Fl(e){return e.type==="integer"}function Pm(e){return e.type==="boolean"}function jm(e){return e.type==="string"}const Vl=p.Type.Object({customSettings:p.Type.Optional(p.Type.Record(p.Type.String(),Im))}),Bo="###_--_~=:;_JUMP",es="###_--_~=:;_RETURN",Dm="###_--_~=:;_OK",Fo="###_--_~=:;_STOP";function xm(e){return e===Bo||e===es||e===Dm||e===Fo}const Lm="3.9.8",Mm=new Date("2024-02-19T14:24:03.786Z"),Rm=400,Vo=20,Uo="@empty",Ul={background:Uo},Bm=p.Type.Optional(p.Type.Object({debugMenu:p.Type.Optional(p.Type.String()),jumpMenu:p.Type.Optional(p.Type.String())})),ql=p.Type.Optional(p.Type.Object({animateText:p.Type.Optional(p.Type.Boolean()),textSpeed:p.Type.Optional(p.Type.Number()),timeBetweenLines:p.Type.Optional(p.Type.Number()),overlayMode:p.Type.Optional(p.Type.Boolean()),rightOffset:p.Type.Optional(p.Type.Number()),bottomOffset:p.Type.Optional(p.Type.Number()),width:p.Type.Optional(p.Type.Number()),height:p.Type.Optional(p.Type.Number()),hideDuringTransition:p.Type.Optional(p.Type.Boolean()),showAfterScriptEnd:p.Type.Optional(p.Type.Boolean())})),Hl=p.Type.Object({engineSplashScreen:p.Type.Optional(p.Type.Object({skip:p.Type.Optional(p.Type.Boolean()),fadeDuration:p.Type.Optional(p.Type.Number()),timeBeforeFadeout:p.Type.Optional(p.Type.Number()),overrideText:p.Type.Optional(p.Type.String()),overrideLogo:p.Type.Optional(p.Type.String())})),gameSplashScreen:p.Type.Optional(p.Type.Object({startButtonText:p.Type.Optional(p.Type.String())}))}),Kl=p.Type.Object({timeOnScreen:p.Type.Number(),alsoPrintInDialogue:p.Type.Optional(p.Type.Boolean())}),Fm=p.Type.Object({name:p.Type.String(),icon:p.Type.String(),startingValue:p.Type.Number(),maxValue:p.Type.Optional(p.Type.Number()),minValue:p.Type.Optional(p.Type.Number()),decimals:p.Type.Optional(p.Type.Number()),prefix:p.Type.Optional(p.Type.String()),suffix:p.Type.Optional(p.Type.String()),hideName:p.Type.Optional(p.Type.Boolean()),formatting:p.Type.Optional(p.Type.Object({style:p.Type.Union([p.Type.Literal("decimal"),p.Type.Literal("currency"),p.Type.Literal("percent"),p.Type.Literal("unit")]),currency:p.Type.Optional(p.Type.String()),unit:p.Type.Optional(p.Type.String())}))}),Gl=p.Type.Record(p.Type.String(),Fm),zl=p.Type.Record(p.Type.String(),p.Type.Object({onlyInteractOutsideOfScripts:p.Type.Optional(p.Type.Boolean())})),Vm=p.Type.Object({delay:p.Type.Optional(p.Type.Number()),duration:p.Type.Optional(p.Type.Number())}),Wl=p.Type.Record(p.Type.String(),Vm),Um=p.Type.Object({text:p.Type.String(),cssClass:p.Type.Optional(p.Type.String())}),Ql=p.Type.Record(p.Type.String(),Um),Yl=p.Type.Object({showScriptFinishedMessage:p.Type.Optional(p.Type.Boolean())}),Jl=p.Type.Object({mode:p.Type.String(),slots:p.Type.Number(),runOnReload:p.Type.Optional(p.Type.String()),disabled:p.Type.Optional(p.Type.Boolean())}),Xl=p.Type.Array(p.Type.String()),qm=[],Zl=p.Type.Object({baseAssetsPath:p.Type.Optional(p.Type.String()),baseDataPath:p.Type.Optional(p.Type.String()),gameTitle:p.Type.String(),saveFileName:p.Type.String(),images:p.Type.Optional(p.Type.Record(p.Type.String(),p.Type.String())),layout:Bl,settings:p.Type.Optional(Vl),gameFlow:p.Type.Optional(p.Type.Object({labelToJumpOnScriptEnd:p.Type.Optional(p.Type.String())})),dialogPanel:p.Type.Optional(ql),splashScreens:p.Type.Optional(Hl),notifications:p.Type.Optional(Kl),hudStats:Gl,interactionTags:p.Type.Optional(zl),transitions:p.Type.Optional(Wl),menuButtons:p.Type.Optional(Ql),debugging:p.Type.Optional(Yl),saves:p.Type.Optional(Jl),hotkeys:Bm}),ts={baseAssetsPath:"",baseDataPath:"",gameTitle:"Narrat Game",saveFileName:"narrat save",images:{},layout:Cm,settings:{},gameFlow:{},dialogPanel:{overlayMode:!0,rightOffset:100,bottomOffset:50,width:475,height:680,textSpeed:Vo,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:{}},Hm=p.Type.Object({name:p.Type.String(),description:p.Type.String(),icon:p.Type.String(),onUse:p.Type.Optional(p.Type.Object({action:p.Type.String(),label:p.Type.String()})),tag:p.Type.Optional(p.Type.String()),category:p.Type.Optional(p.Type.String()),showIfEmpty:p.Type.Optional(p.Type.Boolean())}),ec=p.Type.Object({id:p.Type.String(),title:p.Type.String()}),tc=p.Type.Record(p.Type.String(),Hm);p.Type.Object({categories:p.Type.Array(ec),items:tc});const nc=p.Type.Object({categories:p.Type.Optional(p.Type.Array(ec)),items:p.Type.Optional(tc)}),rc={categories:[{id:"default",title:"Items"}],items:{}},Km=p.Type.Object({description:p.Type.String(),succeededDescription:p.Type.Optional(p.Type.String()),failedDescription:p.Type.Optional(p.Type.String()),hidden:p.Type.Optional(p.Type.Boolean())}),Gm=p.Type.Object({title:p.Type.String(),description:p.Type.String(),succeededDescription:p.Type.Optional(p.Type.String()),failedDescription:p.Type.Optional(p.Type.String()),endings:p.Type.Optional(p.Type.Record(p.Type.String(),p.Type.Object({success:p.Type.Boolean(),description:p.Type.String()}))),objectives:p.Type.Record(p.Type.String(),Km),category:p.Type.Optional(p.Type.String())}),zm=p.Type.Object({id:p.Type.String(),title:p.Type.String()}),Wm=p.Type.Record(p.Type.String(),Gm),oc=p.Type.Object({quests:Wm,categories:p.Type.Array(zm)}),ic={quests:{},categories:[{id:"default",title:"Quests"}]},sc=p.Type.Object({enabled:p.Type.Boolean(),background:p.Type.Optional(p.Type.String()),text:p.Type.Optional(p.Type.String()),cssClass:p.Type.Optional(p.Type.String()),position:p.Type.Object({left:p.Type.Number(),top:p.Type.Number(),width:p.Type.Optional(p.Type.Number()),height:p.Type.Optional(p.Type.Number())}),anchor:p.Type.Optional(p.Type.Object({x:p.Type.Number(),y:p.Type.Number()})),action:p.Type.Optional(p.Type.String()),actionType:p.Type.Optional(p.Type.String()),scriptClickable:p.Type.Optional(p.Type.Boolean()),tag:p.Type.Optional(p.Type.String())}),Qm=p.Type.Record(p.Type.String(),sc),ac=p.Type.Object({buttons:Qm,clickableDuringScriptsByDefault:p.Type.Optional(p.Type.Boolean())}),lc={buttons:{},clickableDuringScriptsByDefault:!1},Ym=p.Type.Intersect([sc,p.Type.Object({id:p.Type.String()})]),Jm=p.Type.Object({muted:p.Type.Optional(p.Type.Boolean()),loop:p.Type.Optional(p.Type.Boolean())}),Xm=p.Type.Object({background:p.Type.String(),video:p.Type.Optional(Jm),buttons:p.Type.Optional(p.Type.Array(p.Type.Union([p.Type.String(),Ym])))}),cc=p.Type.Record(p.Type.String(),Xm);p.Type.Object({screens:cc});const uc=p.Type.Object({screens:p.Type.Optional(cc)}),dc={screens:{}},Zm=p.Type.Object({name:p.Type.String(),description:p.Type.String(),startingLevel:p.Type.Number(),hidden:p.Type.Optional(p.Type.Boolean()),icon:p.Type.String()}),fc=p.Type.Record(p.Type.String(),Zm),pc=p.Type.Object({xpPerLevel:p.Type.Number(),notifyLevelUp:p.Type.Boolean()});p.Type.Object({skills:fc,skillOptions:pc});const mc=p.Type.Object({skills:p.Type.Optional(fc),skillOptions:p.Type.Optional(pc)}),hc={skills:{},skillOptions:{xpPerLevel:10,notifyLevelUp:!0}},eh=p.Type.Object({portraitCssClass:p.Type.Optional(p.Type.String()),color:p.Type.Optional(p.Type.String()),boxCss:p.Type.Optional(p.Type.Record(p.Type.String(),p.Type.Any())),nameCss:p.Type.Optional(p.Type.Record(p.Type.String(),p.Type.Any())),textCss:p.Type.Optional(p.Type.Record(p.Type.String(),p.Type.Any()))}),th=p.Type.Object({video:p.Type.String(),autoplay:p.Type.Optional(p.Type.Boolean()),loop:p.Type.Optional(p.Type.Boolean()),muted:p.Type.Optional(p.Type.Boolean()),width:p.Type.Optional(p.Type.Number()),height:p.Type.Optional(p.Type.Number())}),nh=p.Type.Object({image:p.Type.String(),width:p.Type.Optional(p.Type.Number()),height:p.Type.Optional(p.Type.Number())}),rh=p.Type.Union([p.Type.String(),th,nh]),oh=p.Type.Object({sprites:p.Type.Optional(p.Type.Record(p.Type.String(),rh)),name:p.Type.String(),style:p.Type.Optional(eh)}),yc=p.Type.Object({config:p.Type.Object({imagesPath:p.Type.String(),playerCharacter:p.Type.Optional(p.Type.String()),gameCharacter:p.Type.Optional(p.Type.String())}),characters:p.Type.Record(p.Type.String(),oh)}),gc={config:{imagesPath:"",playerCharacter:"player",gameCharacter:"game"},characters:{}},_c=p.Type.Object({cssClass:p.Type.Optional(p.Type.String()),textCssClass:p.Type.Optional(p.Type.String()),titleCssClass:p.Type.Optional(p.Type.String())}),bc=p.Type.Object({options:p.Type.Object({delay:p.Type.Optional(p.Type.Number()),width:p.Type.Number(),keywordsPrefix:p.Type.String(),screenEdgesMinimumMargin:p.Type.Optional(p.Type.Number()),styling:p.Type.Optional(_c)}),tooltips:p.Type.Array(p.Type.Object({keywords:p.Type.Array(p.Type.String()),title:p.Type.String(),description:p.Type.String(),styling:p.Type.Optional(_c)}))}),Tc={options:{delay:0,width:350,keywordsPrefix:"@@"},tooltips:[]},ih=p.Type.Object({name:p.Type.String(),description:p.Type.String(),icon:p.Type.Optional(p.Type.String()),lockedIcon:p.Type.Optional(p.Type.String()),secret:p.Type.Optional(p.Type.Boolean()),category:p.Type.Optional(p.Type.String())}),vc=p.Type.Object({id:p.Type.String(),title:p.Type.String()}),Sc=p.Type.Record(p.Type.String(),ih);p.Type.Object({defaultAchievementIcon:p.Type.String(),categories:p.Type.Array(vc),achievements:Sc,notifyNewAchievements:p.Type.Boolean(),secretAchievements:p.Type.Optional(p.Type.Object({censorDescription:p.Type.Optional(p.Type.Boolean()),censorName:p.Type.Optional(p.Type.Boolean()),hideUntilObtained:p.Type.Optional(p.Type.Boolean())}))});const wc=p.Type.Object({categories:p.Type.Optional(p.Type.Array(vc)),achievements:p.Type.Optional(Sc)}),kc={categories:[{id:"default",title:"Achievements"}],achievements:{},notifyNewAchievements:!0,defaultAchievementIcon:"img/achievements/trophy.png"},sh=p.Type.Object({diceRange:p.Type.Tuple([p.Type.Number(),p.Type.Number()]),diceCount:p.Type.Number(),difficultyText:p.Type.Array(p.Type.Tuple([p.Type.Number(),p.Type.String()])),extraPointsPerLevel:p.Type.Number(),extraDicePerLevel:p.Type.Optional(p.Type.Number()),successOnRollsBelowThreshold:p.Type.Boolean(),showDifficultyText:p.Type.Boolean(),showDifficultyNumber:p.Type.Boolean(),showDifficultyWithoutModifiers:p.Type.Boolean(),finalRollIsHighest:p.Type.Optional(p.Type.Boolean()),finalRollIsLowest:p.Type.Optional(p.Type.Boolean()),failOnRollsEqualToThreshold:p.Type.Optional(p.Type.Boolean())}),ah=p.Type.Object({skill:p.Type.String(),difficulty:p.Type.Number(),winsNeeded:p.Type.Optional(p.Type.Number()),hideAfterRoll:p.Type.Optional(p.Type.Boolean()),repeatable:p.Type.Optional(p.Type.Boolean())}),Cc=p.Type.Object({options:sh,skillChecks:p.Type.Record(p.Type.String(),ah)}),$c={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:{}},lh=p.Type.Object({cssClass:p.Type.Optional(p.Type.String()),textTemplate:p.Type.Optional(p.Type.String())}),Ec=p.Type.Record(p.Type.String(),lh);p.Type.Object({choiceTextTemplate:p.Type.String(),choicePrompts:Ec});const Oc=p.Type.Object({choiceTextTemplate:p.Type.Optional(p.Type.String()),choicePrompts:p.Type.Optional(Ec)}),Ac={choicePrompts:{},choiceTextTemplate:'<span class="choice-index">%{$index}. </span> <span class="choice-text">%{$choice}</span>'},Ic=p.Type.Object({delay:p.Type.Optional(p.Type.Number()),direction:p.Type.Optional(p.Type.String()),duration:p.Type.Optional(p.Type.Number()),easing:p.Type.Optional(p.Type.String()),endDelay:p.Type.Optional(p.Type.Number()),fill:p.Type.Optional(p.Type.String()),iterationStart:p.Type.Optional(p.Type.Number()),iterations:p.Type.Optional(p.Type.Number()),keyframes:p.Type.Optional(p.Type.Any())}),ns=p.Type.Array(p.Type.Any()),ch=p.Type.Object({keyframes:p.Type.Union([p.Type.String(),ns]),options:p.Type.Optional(Ic)});p.Type.Object({keyframes:ns,options:p.Type.Optional(Ic)});const Nc=p.Type.Object({animations:p.Type.Record(p.Type.String(),ch),keyframes:p.Type.Record(p.Type.String(),ns)}),Pc={animations:{},keyframes:{}},uh=p.Type.Object({name:p.Type.String(),type:p.Type.String(),optional:p.Type.Optional(p.Type.Boolean())}),dh=p.Type.Object({keyword:p.Type.String(),label:p.Type.String(),options:p.Type.Optional(p.Type.Array(uh))}),jc=p.Type.Object({macros:p.Type.Array(dh)}),Dc={macros:[]},rs=p.Type.Object({assets:p.Type.Record(p.Type.String(),p.Type.String())}),xc=p.Type.Object({images:p.Type.Optional(rs),audio:p.Type.Optional(rs),video:p.Type.Optional(rs)}),Lc={images:{assets:{}},audio:{assets:{}},video:{assets:{}}},br={common:ts,screens:dc,buttons:lc,skills:hc,skillChecks:$c,scripts:[],audio:Rl,tooltips:Tc,achievements:kc,items:rc,quests:ic,characters:gc,choices:Ac,animations:Pc,macros:Dc,preload:Lc};var fh=function(t){return ph(t)&&!mh(t)};function ph(e){return!!e&&typeof e=="object"}function mh(e){var t=Object.prototype.toString.call(e);return t==="[object RegExp]"||t==="[object Date]"||gh(e)}var hh=typeof Symbol=="function"&&Symbol.for,yh=hh?Symbol.for("react.element"):60103;function gh(e){return e.$$typeof===yh}function _h(e){return Array.isArray(e)?[]:{}}function Jr(e,t){return t.clone!==!1&&t.isMergeableObject(e)?Tr(_h(e),e,t):e}function bh(e,t,n){return e.concat(t).map(function(r){return Jr(r,n)})}function Th(e,t){if(!t.customMerge)return Tr;var n=t.customMerge(e);return typeof n=="function"?n:Tr}function vh(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter(function(t){return Object.propertyIsEnumerable.call(e,t)}):[]}function Mc(e){return Object.keys(e).concat(vh(e))}function Rc(e,t){try{return t in e}catch{return!1}}function Sh(e,t){return Rc(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))}function wh(e,t,n){var r={};return n.isMergeableObject(e)&&Mc(e).forEach(function(o){r[o]=Jr(e[o],n)}),Mc(t).forEach(function(o){Sh(e,o)||(Rc(e,o)&&n.isMergeableObject(t[o])?r[o]=Th(o,n)(e[o],t[o],n):r[o]=Jr(t[o],n))}),r}function Tr(e,t,n){n=n||{},n.arrayMerge=n.arrayMerge||bh,n.isMergeableObject=n.isMergeableObject||fh,n.cloneUnlessOtherwiseSpecified=Jr;var r=Array.isArray(t),o=Array.isArray(e),a=r===o;return a?r?n.arrayMerge(e,t,n):wh(e,t,n):Jr(t,n)}Tr.all=function(t,n){if(!Array.isArray(t))throw new Error("first argument should be an array");return t.reduce(function(r,o){return Tr(r,o,n)},{})};var kh=Tr,Ch=kh;const Yn=Bi(Ch),lt=et("config",{state:()=>({config:br,configModules:{}}),actions:{async setConfig(e){this.config=e},extendConfig(e){this.config=Yn(this.config,e)},generateSaveData(){return{playerCharacter:this.playerCharacter,gameCharacter:this.gameCharacter}},addConfigModule(e,t){this.configModules[e]=t},findConfigModuleKey(e){const t=Object.keys(this.configModules).find(n=>this.configModules[n].id===e.id);if(t)return t},reloadConfigModule(e,t){this.configModules[e].code=t,this.config[e]=t},loadSaveData(e){this.config.characters.config.playerCharacter=e.playerCharacter,this.config.characters.config.gameCharacter=e.gameCharacter}},getters:{playerCharacter(){return this.config.characters.config.playerCharacter??"player"},gameCharacter(){return this.config.characters.config.gameCharacter??"game"}}});function Bc(e){const t=Xe(),n=t.getSkillCheck(e.id);if(n&&n.happened&&(n.succeeded||!e.repeatable))return n;const r=_m(e);return Uc(mm(r,e)),r?t.passSkillCheck(e.id,e.hideAfterRoll):t.failSkillCheck(e.id,e.hideAfterRoll),t.getSkillCheck(e.id)}function $h(e,t=[]){const n=e.options,r=e.staticOptions,o=!!n.condition;if(o)return r.success;if(!o){for(const[a,s]of r.elseifs.entries())if(t[a]===!0)return s.branch}if(!o&&r.failure)return r.failure}function Fc(e){return typeof e=="object"}function Vc(e){return typeof e=="string"&&e.search(/\$/)===0}function Uc(e){const t={speaker:lt().gameCharacter,text:e,interactive:!1};Fe().addDialog(t)}async function os(e){Fe().addDialog(e)}function Eh(e,t){if(t<e.length)return e[t]}/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */function qc(e){return typeof e>"u"||e===null}function Oh(e){return typeof e=="object"&&e!==null}function Ah(e){return Array.isArray(e)?e:qc(e)?[]:[e]}function Ih(e,t){var n,r,o,a;if(t)for(a=Object.keys(t),n=0,r=a.length;n<r;n+=1)o=a[n],e[o]=t[o];return e}function Nh(e,t){var n="",r;for(r=0;r<t;r+=1)n+=e;return n}function Ph(e){return e===0&&Number.NEGATIVE_INFINITY===1/e}var jh=qc,Dh=Oh,xh=Ah,Lh=Nh,Mh=Ph,Rh=Ih,ct={isNothing:jh,isObject:Dh,toArray:xh,repeat:Lh,isNegativeZero:Mh,extend:Rh};function Hc(e,t){var n="",r=e.reason||"(unknown reason)";return e.mark?(e.mark.name&&(n+='in "'+e.mark.name+'" '),n+="("+(e.mark.line+1)+":"+(e.mark.column+1)+")",!t&&e.mark.snippet&&(n+=`
39
39
 
40
40
  `+e.mark.snippet),r+" "+n):r}function Xr(e,t){Error.call(this),this.name="YAMLException",this.reason=e,this.mark=t,this.message=Hc(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}Xr.prototype=Object.create(Error.prototype),Xr.prototype.constructor=Xr,Xr.prototype.toString=function(t){return this.name+": "+Hc(this,t)};var kt=Xr;function is(e,t,n,r,o){var a="",s="",c=Math.floor(o/2)-1;return r-t>c&&(a=" ... ",t=r-c+a.length),n-r>c&&(s=" ...",n=r+c-s.length),{str:a+e.slice(t,n).replace(/\t/g,"→")+s,pos:r-t+a.length}}function ss(e,t){return ct.repeat(" ",t-e.length)+e}function Bh(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),typeof t.indent!="number"&&(t.indent=1),typeof t.linesBefore!="number"&&(t.linesBefore=3),typeof t.linesAfter!="number"&&(t.linesAfter=2);for(var n=/\r?\n|\r|\0/g,r=[0],o=[],a,s=-1;a=n.exec(e.buffer);)o.push(a.index),r.push(a.index+a[0].length),e.position<=a.index&&s<0&&(s=r.length-2);s<0&&(s=r.length-1);var c="",d,u,h=Math.min(e.line+t.linesAfter,o.length).toString().length,l=t.maxLength-(t.indent+h+3);for(d=1;d<=t.linesBefore&&!(s-d<0);d++)u=is(e.buffer,r[s-d],o[s-d],e.position-(r[s]-r[s-d]),l),c=ct.repeat(" ",t.indent)+ss((e.line-d+1).toString(),h)+" | "+u.str+`
41
41
  `+c;for(u=is(e.buffer,r[s],o[s],e.position,l),c+=ct.repeat(" ",t.indent)+ss((e.line+1).toString(),h)+" | "+u.str+`
@@ -66,7 +66,7 @@ This will fail in production.`);c=zr,c._s.has(r)||(a?Qi(r,t,o,c):Ol(r,o,c),proce
66
66
  `+e.slice(o,a),o=a+1),s=c;return d+=`
67
67
  `,e.length-o>t&&s>o?d+=e.slice(o,s)+`
68
68
  `+e.slice(s+1):d+=e.slice(o),d.slice(1)}function Cg(e){for(var t="",n=0,r,o=0;o<e.length;n>=65536?o+=2:o++)n=no(e,o),r=Tt[n],!r&&to(n)?(t+=e[o],n>=65536&&(t+=e[o+1])):t+=r||yg(n);return t}function $g(e,t,n){var r="",o=e.tag,a,s,c;for(a=0,s=n.length;a<s;a+=1)c=n[a],e.replacer&&(c=e.replacer.call(n,String(a),c)),(vn(e,t,c,!1,!1)||typeof c>"u"&&vn(e,t,null,!1,!1))&&(r!==""&&(r+=","+(e.condenseFlow?"":" ")),r+=e.dump);e.tag=o,e.dump="["+r+"]"}function qu(e,t,n,r){var o="",a=e.tag,s,c,d;for(s=0,c=n.length;s<c;s+=1)d=n[s],e.replacer&&(d=e.replacer.call(n,String(s),d)),(vn(e,t+1,d,!0,!0,!1,!0)||typeof d>"u"&&vn(e,t+1,null,!0,!0,!1,!0))&&((!r||o!=="")&&(o+=hs(e,t)),e.dump&&Zr===e.dump.charCodeAt(0)?o+="-":o+="- ",o+=e.dump);e.tag=a,e.dump=o||"[]"}function Eg(e,t,n){var r="",o=e.tag,a=Object.keys(n),s,c,d,u,h;for(s=0,c=a.length;s<c;s+=1)h="",r!==""&&(h+=", "),e.condenseFlow&&(h+='"'),d=a[s],u=n[d],e.replacer&&(u=e.replacer.call(n,d,u)),vn(e,t,d,!1,!1)&&(e.dump.length>1024&&(h+="? "),h+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),vn(e,t,u,!1,!1)&&(h+=e.dump,r+=h));e.tag=o,e.dump="{"+r+"}"}function Og(e,t,n,r){var o="",a=e.tag,s=Object.keys(n),c,d,u,h,l,f;if(e.sortKeys===!0)s.sort();else if(typeof e.sortKeys=="function")s.sort(e.sortKeys);else if(e.sortKeys)throw new kt("sortKeys must be a boolean or a function");for(c=0,d=s.length;c<d;c+=1)f="",(!r||o!=="")&&(f+=hs(e,t)),u=s[c],h=n[u],e.replacer&&(h=e.replacer.call(n,u,h)),vn(e,t+1,u,!0,!0,!0)&&(l=e.tag!==null&&e.tag!=="?"||e.dump&&e.dump.length>1024,l&&(e.dump&&Zr===e.dump.charCodeAt(0)?f+="?":f+="? "),f+=e.dump,l&&(f+=hs(e,t)),vn(e,t+1,h,!0,l)&&(e.dump&&Zr===e.dump.charCodeAt(0)?f+=":":f+=": ",f+=e.dump,o+=f));e.tag=a,e.dump=o||"{}"}function Hu(e,t,n){var r,o,a,s,c,d;for(o=n?e.explicitTypes:e.implicitTypes,a=0,s=o.length;a<s;a+=1)if(c=o[a],(c.instanceOf||c.predicate)&&(!c.instanceOf||typeof t=="object"&&t instanceof c.instanceOf)&&(!c.predicate||c.predicate(t))){if(n?c.multi&&c.representName?e.tag=c.representName(t):e.tag=c.tag:e.tag="?",c.represent){if(d=e.styleMap[c.tag]||c.defaultStyle,$u.call(c.represent)==="[object Function]")r=c.represent(t,d);else if(Eu.call(c.represent,d))r=c.represent[d](t,d);else throw new kt("!<"+c.tag+'> tag resolver accepts not "'+d+'" style');e.dump=r}return!0}return!1}function vn(e,t,n,r,o,a,s){e.tag=null,e.dump=n,Hu(e,n,!1)||Hu(e,n,!0);var c=$u.call(e.dump),d=r,u;r&&(r=e.flowLevel<0||e.flowLevel>t);var h=c==="[object Object]"||c==="[object Array]",l,f;if(h&&(l=e.duplicates.indexOf(n),f=l!==-1),(e.tag!==null&&e.tag!=="?"||f||e.indent!==2&&t>0)&&(o=!1),f&&e.usedDuplicates[l])e.dump="*ref_"+l;else{if(h&&f&&!e.usedDuplicates[l]&&(e.usedDuplicates[l]=!0),c==="[object Object]")r&&Object.keys(e.dump).length!==0?(Og(e,t,e.dump,o),f&&(e.dump="&ref_"+l+e.dump)):(Eg(e,t,e.dump),f&&(e.dump="&ref_"+l+" "+e.dump));else if(c==="[object Array]")r&&e.dump.length!==0?(e.noArrayIndent&&!s&&t>0?qu(e,t-1,e.dump,o):qu(e,t,e.dump,o),f&&(e.dump="&ref_"+l+e.dump)):($g(e,t,e.dump),f&&(e.dump="&ref_"+l+" "+e.dump));else if(c==="[object String]")e.tag!=="?"&&wg(e,e.dump,t,a,d);else{if(c==="[object Undefined]")return!1;if(e.skipInvalid)return!1;throw new kt("unacceptable kind of an object to dump "+c)}e.tag!==null&&e.tag!=="?"&&(u=encodeURI(e.tag[0]==="!"?e.tag.slice(1):e.tag).replace(/!/g,"%21"),e.tag[0]==="!"?u="!"+u:u.slice(0,18)==="tag:yaml.org,2002:"?u="!!"+u.slice(18):u="!<"+u+">",e.dump=u+" "+e.dump)}return!0}function Ag(e,t){var n=[],r=[],o,a;for(gs(e,n,r),o=0,a=r.length;o<a;o+=1)t.duplicates.push(n[r[o]]);t.usedDuplicates=new Array(a)}function gs(e,t,n){var r,o,a;if(e!==null&&typeof e=="object")if(o=t.indexOf(e),o!==-1)n.indexOf(o)===-1&&n.push(o);else if(t.push(e),Array.isArray(e))for(o=0,a=e.length;o<a;o+=1)gs(e[o],t,n);else for(r=Object.keys(e),o=0,a=r.length;o<a;o+=1)gs(e[r[o]],t,n)}function Ig(e,t){t=t||{};var n=new _g(t);n.noRefs||Ag(e,n);var r=e;return n.replacer&&(r=n.replacer.call({"":r},"",r)),vn(n,0,r,!0,!0)?n.dump+`
69
- `:""}var Ng=Ig,Pg={dump:Ng};function _s(e,t){return function(){throw new Error("Function yaml."+e+" is removed in js-yaml 4. Use yaml."+t+" instead, which is now safe by default.")}}var jg=pt,Dg=Gc,xg=Yc,Lg=tu,Mg=nu,Rg=cs,Bg=Cu.load,Fg=Cu.loadAll,Vg=Pg.dump,Ug=kt,qg={binary:au,float:eu,map:Qc,null:Jc,pairs:cu,set:uu,timestamp:iu,bool:Xc,int:Zc,merge:su,omap:lu,seq:Wc,str:zc},Hg=_s("safeLoad","load"),Kg=_s("safeLoadAll","loadAll"),Gg=_s("safeDump","dump"),zg={Type:jg,Schema:Dg,FAILSAFE_SCHEMA:xg,JSON_SCHEMA:Lg,CORE_SCHEMA:Mg,DEFAULT_SCHEMA:Rg,load:Bg,loadAll:Fg,dump:Vg,YAMLException:Ug,types:qg,safeLoad:Hg,safeLoadAll:Kg,safeDump:Gg};function Qo(e){return new Promise((t,n)=>{const r=new XMLHttpRequest;r.onload=function(){r.status>=200&&r.status<300?t(r.responseText):(ae(`Failed to load file ${e}`,r.status),n(r.status))},r.open("GET",e),r.send()})}async function ro(e){try{const t=await Qo(e);let n;if(e.endsWith(".json"))n=JSON.parse(t);else if(e.endsWith(".yaml"))n=zg.load(t);else{const r=`Unsupported file type for data file ${e} (must be .json or .yaml)`;throw new Error(r)}if(!n)throw new Error(`Data loaded from ${e} is empty`);return n}catch(t){throw console.error(`Failed to load data file ${e}: ${t}`),t}}const Wg=(e,t)=>{const n={};for(const r in e)n[r]=t(e[r]);return n},Ku=(e,t)=>{for(const n in e){const r=e[n];t(r,n,e),typeof r=="object"&&r!==null&&Ku(r,t)}},Xn={};async function Qg(e){return Xn[e]?Xn[e]:Gu(e,e)}async function Yg(e){Ft.log("Loading images");const t=[],n=async(o,a)=>await Gu(o,a),r=(o,a)=>{t.push(n(o,a))};for(const o in e.common.images){const a=e.common.images[o];r(o,a)}if(e.preload.images)for(const o in e.preload.images.assets){const a=e.preload.images.assets[o];r(o,a)}for(const o in e.screens.screens){const a=e.screens.screens[o];if(a.background&&!e.common.images[a.background]&&!a.video&&r(a.background,a.background),a.buttons)for(const s in a.buttons){const c=a.buttons[s];typeof c=="object"&&c.background&&!e.common.images[c.background]&&r(c.background,c.background)}}return Promise.all(t)}async function Gu(e,t){if(Xn[e])return Xn[e];if(t===Uo){const r=new Image;return Xn[e]=r,r}const n=new Promise((r,o)=>{const a=new Image;a.onload=()=>{Xn[e]=a,r(a)},a.onerror=s=>{ae(`Failed to load image ${e} at ${t}`,s),o(s)},a.src=$t(t)});return Xn[e]=n,n}const Yo={};function Jg(e){return Yo[e]??{}}function zu(e,t,n){const r=Jg(e.transition),o=e.duration??r.duration??500,a=e.delay??r.delay??0;return{...e,resolve:n,duration:o,delay:a,oldScreen:t}}const vt=et("notifications",{state:()=>({notifications:[],enabled:!0}),actions:{async addNotification(e,t,n){if(!this.enabled)return;e=nn(e);const r=`${Date.now()}-${Math.random()*1e4}`;this.notifications.push({id:r,text:e,description:t,icon:n}),le().notifications.alsoPrintInDialogue&&Uc(`[NOTIFICATION] ${e}`),await At(le().notifications.timeOnScreen*1e3),this.deleteNotification(r)},deleteNotification(e){const t=this.findNotifications(e);t&&this.notifications.splice(this.notifications.indexOf(t),1)},findNotifications(e){return this.notifications.find(t=>t.id===e)},disableNotifications(){this.enabled=!1;for(const e in this.notifications)this.deleteNotification(e)},enableNotifications(){this.enabled=!0}}}),mt=et("inventory",{state:()=>({items:{},interactionTags:{}}),actions:{generateSaveData(){return{items:Re(this.items),interactionTags:Re(this.interactionTags)}},loadSaveData(e){this.items={...this.items,...e.items},this.interactionTags={...e.interactionTags}},updateConfig(e){Object.keys(e.items).forEach(t=>{this.items[t]||(this.items[t]={amount:0,id:t})})},reset(e){this.$reset(),this.updateConfig(e)},hasItem(e,t){var n;return t||(t=1),((n=this.items[e])==null?void 0:n.amount)>=t},getExistingItem(e){return this.items[e]},getItemAmount(e){var t;return((t=this.getExistingItem(e))==null?void 0:t.amount)||0},add(e){const t=this.getExistingItem(e.id);t?t.amount+=e.amount:this.items[e.id]={...e};const n=en(e.id).name,r=e.amount>1?`${n} x ${e.amount}`:n;vt().addNotification(`Received item: ${r}`)},enableInteraction(e){e||(e="default"),this.interactionTags[e]={blockedInteraction:!1}},disableInteraction(e){e||(e="default"),this.interactionTags[e]={blockedInteraction:!0}},onScriptStart(){const e=le().interactionTags;Object.keys(e).forEach(t=>{e[t].onlyInteractOutsideOfScripts&&this.disableInteraction(t)})},onScriptEnd(){const e=le().interactionTags;Object.keys(e).forEach(t=>{e[t].onlyInteractOutsideOfScripts&&this.enableInteraction(t)})},isInteractionTagBlocked(e){return e||(e="default"),this.interactionTags[e]?this.interactionTags[e].blockedInteraction:!1},remove(e){const t=this.getExistingItem(e.id);t&&(t.amount-=e.amount,vt().addNotification(`Lost item: ${en(e.id).name} x ${e.amount}`),t.amount<=0&&this.deleteItem(e.id))},deleteItem(e){this.getExistingItem(e)&&(this.items[e].amount=0)},canUseItem(e){var n;const t=en(e.id);return!!(t&&t.onUse&&!this.isInteractionTagBlocked(t.tag)&&!((n=Fe().currentDialog)!=null&&n.choices))},useItem(e){let t=!1;const n=en(e.id);if(e&&this.canUseItem(e)&&n){const r=n.onUse;t=!0,Qn("onItemUsed"),r.action==="jump"?we().jumpToLabel(r.label):r.action==="run"?we().runThenGoBackToPreviousDialog(r.label,!0):(t=!1,ae(`Unknown action ${r.action}`))}return t}}}),Ut=et("screens",{state:()=>({layers:[{screen:"default"}],buttons:{}}),actions:{setScreen(e,t,n){return new Promise(r=>{const o=this.layers[t||0];let a;const s=(o==null?void 0:o.screen)??null;if(s===e){r();return}n&&(a=zu(n,s,r)),this.layers[t||0]={screen:e,transition:a},a||r()})},finishTransition(e){const t=this.layers[e];if(!t)ae(`Tried to finish transition on layer ${e} but it doesn't exist`);else if(t.transition){const n=t.transition.resolve;delete t.transition,n()}},transitionScreen(e,t,n){return this.setScreen(e,n??0,t)},emptyLayer(e,t){return new Promise(n=>{const r=this.layers[e];if(!r){Zn(`Tried to empty layer ${e} but it doesn't exist`);return}if(t){const o=r.screen,a=zu(t,o,n);r.transition=a}r.screen="@empty",t||n()})},updateConfig(e){console.log("update config!");const t=Ve().buttons.buttons;for(const n in t)this.buttons[n]||(this.buttons[n]={state:t[n].enabled})},reset(e){this.$reset(),this.updateConfig(e)},changeButton(e,t){if(!this.buttons[e]){ae(`Tried to change button ${e} but it doesn't exist`);return}this.buttons[e].state=t},generateSaveData(){return{layers:Re(this.layers).filter(e=>e).map(e=>e.screen??null),buttons:Re(this.buttons)}},loadSaveData(e){this.layers=e.layers.map(t=>(t!==null&&typeof t!="string"&&(t=null),{screen:t})),this.buttons=Yn(this.buttons,e.buttons)},isButtonDisabled(e){const t=this.getButtonState(e);return t==="hidden"||t==="greyed"||t===!1},isButtonInteractible(e){const t=this.getButtonState(e);return t?t===!0:!1},isButtonClickable(e){if(!this.isButtonInteractible(e))return!1;const n=Vn(e);return!!Jo(n)},getButtonState(e){const t=Vn(e),n=this.buttons[e],r=t.tag||"default",o=n.state;return o===!0&&mt().isInteractionTagBlocked(r)?"greyed":o},clickOnButton(e){if(!this.isButtonClickable(e))return;const t=we(),n=Vn(e);Qn("onButtonClicked");const r=n.action;r&&(n.actionType==="run"?t.runLabelFunction(r):t.jumpToLabel(r))}},getters:{nonEmptyLayers(e){return e.layers.filter(t=>t)},isTransitioning(e){return e.layers.some(t=>t==null?void 0:t.transition)}}});function Jo(e){if(!Te().inScript)return!0;const t=Ci().clickableDuringScriptsByDefault;if(t)return e.scriptClickable!==!1;if(!t)return e.scriptClickable===!0}const Xg=["screenObject","sprite"];function Wu(e){return typeof e=="object"&&e!==null&&Xg.includes(e._entityType)}function Zg(e){return typeof e=="object"&&e!==null&&e._entityType==="sprite"}function e_(e){if(e.includes(" ")){const t=e.split(" ");return{label:t[0],args:t.slice(1)}}else return{label:e}}const xt=et("screenObjects",{state:()=>({tree:[],objectsList:{}}),actions:{addObject(e){e.parent?e.parent.children.push(e):this.tree.push(e),this.objectsList[e.id]=e},createObject(e){const t={_entityType:"screenObject",id:Gn(),name:"Screen Object",tags:[],x:0,y:0,anchor:{x:0,y:0},width:1,height:1,opacity:1,scale:1,layer:0,children:[],...e};return this.addObject(t),t},destroyObject(e){let t=e;typeof t=="string"&&(t=this.getObject(t));for(let n=t.children.length-1;n>=0;n--)this.destroyObject(t.children[n]);if(t.parent){const n=t.parent,r=n.children.indexOf(t);r!==-1?n.children.splice(r,1):console.warn(`Could not find object ${t.id} in parent's children`)}else{const n=this.tree.indexOf(t);n!==-1?this.tree.splice(n,1):console.warn(`Object to destroy not found in store (${t.id})`)}delete this.objectsList[t.id]},createSprite(e){const t=this.createObject(e);return t._entityType="sprite",Qg(e.image).then(n=>{const r=this.getObject(t.id);r.width===1&&r.height===1&&(r.width=n.width,r.height=n.height)}),t},getObject(e){return this.objectsList[e]},isScreenObjectClickable(e){return Jo(e)?!!e.onClick:!1},clickObject(e){if(this.isScreenObjectClickable(e)&&e.onClick){Qn("onSpriteClicked");let t;if(typeof e.onClick=="string"){const n=e_(e.onClick);t={label:n.label,args:n.args}}else t=e.onClick;t.method=t.method??e.clickMethod??"jump",t.args=t.args??[],t.method==="run"?we().runThenGoBackToPreviousDialog(t.label,...t.args):t.method==="jump"?we().jumpToLabel(t.label,...t.args):ae(`Unknown sprite click method ${e.clickMethod}`)}},generateSaveData(){return{tree:Re(this.tree.map(e=>e.id)),objectsList:Re(Wg(this.objectsList,e=>this.screenObjectToSave(e)))}},loadSaveData(e){this.objectsList=this.loadAllObjects(e.objectsList),this.tree=e.tree.map(t=>this.objectsList[t])},reset(){this.$reset()},screenObjectToSave(e){return{...e,children:e.children.map(t=>t.id),parent:e.parent?e.parent.id:void 0}},loadAllObjects(e){for(const t of Object.values(e)){const n=t;n.parent=n.parent?e[n.parent]:void 0,n.children=n.children.map(r=>e[r])}return e},emptyLayer(e){for(let t=this.tree.length-1;t>=0;t--){const n=this.tree[t];n.layer===e&&this.destroyObject(n)}},emptyAllLayers(){for(let e=this.tree.length-1;e>=0;e--){const t=this.tree[e];this.destroyObject(t)}}}});function Qu(e){return"save"in e}function Yu(e){return"globalSave"in e}function t_(e){return"config"in e}const n_=i.defineComponent({props:{percentage:Number,step:String},methods:{loadingStyle(){return{width:`${this.percentage*60}vw`}}},computed:{}}),r_={id:"loading-bar"},o_={id:"loading-text"};function i_(e,t,n,r,o,a){return i.openBlock(),i.createElementBlock("div",r_,[i.createElementVNode("div",{id:"inner-loading-bar",style:i.normalizeStyle(e.loadingStyle())},null,4),i.createElementVNode("div",o_,[i.createElementVNode("h3",null,"Loading "+i.toDisplayString(Math.floor(e.percentage*100))+"% - "+i.toDisplayString(e.step),1)])])}const s_=zt(n_,[["render",i_]]),a_="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",l_={id:"engine-splash-screen",class:"flex justify-center items-center"},c_={id:"engine-splash-title"},u_=["src"],bs=i.defineComponent({__name:"engine-splash",emits:["finished"],setup(e,{emit:t}){const n=t,r=i.ref("hidden"),o=i.computed(()=>({transitionDuration:`${h.value}s`})),a=i.computed(()=>({invisible:r.value!=="appear"})),s=Te(),c=i.computed(()=>{var m;return((m=le().splashScreens)==null?void 0:m.engineSplashScreen)??{}}),d=i.computed(()=>typeof c.value.overrideText=="string"?c.value.overrideText:"Made with narrat engine"),u=i.computed(()=>c.value.overrideLogo??a_),h=i.computed(()=>typeof c.value.fadeDuration=="number"?c.value.fadeDuration:.8),l=i.computed(()=>typeof c.value.timeBeforeFadeout=="number"?c.value.timeBeforeFadeout:1.5);i.onMounted(async()=>{if(await At(10),r.value="appear",c.value.skip||s.options.debug){f();return}await At(h.value*1e3),await At(l.value*1e3),r.value="disappear",await At(h.value*1e3),f()});function f(){s.loading.loaded?n("finished"):s.listener.once("gameLoaded",()=>{n("finished")})}return(m,y)=>(i.openBlock(),i.createElementBlock("div",l_,[i.createElementVNode("div",{id:"engine-splash-header",class:i.normalizeClass(["flex justify-center flex-col items-center",a.value]),style:i.normalizeStyle(o.value)},[i.createElementVNode("h1",c_,i.toDisplayString(d.value),1),i.createElementVNode("img",{src:u.value,alt:"Narrat Logo",id:"engine-splash-logo"},null,8,u_),i.createVNode(s_,{percentage:i.unref(s).loading.percentage,step:i.unref(s).loading.step},null,8,["percentage","step"])],6)]))}});class Ts{constructor(){xe(this,"listeners",{})}on(t,n){return this.listeners[t]||this.addEventToMap(t),this.listeners[t].add(n),n}off(t,n){return this.listeners[t]&&this.listeners[t].delete(n),n}once(t,n){const r=(...o)=>{this.off(t,r),n(...o)};return this.on(t,r)}emit(t,...n){this.listeners[t]&&this.listeners[t].forEach(r=>r(...n))}clear(){Object.keys(this.listeners).forEach(t=>{delete this.listeners[t]})}addEventToMap(t){this.listeners[t]=new Set}}class d_ extends Ts{setup(){const t=()=>{this.emit("preUpdate"),this.emit("update"),this.emit("postUpdate"),requestAnimationFrame(t)};t()}}const oo=new d_;Z.Vec2=void 0,(e=>{function t(y,b){return{x:y??0,y:b??0}}e.create=t;function n(y){return Math.sqrt(y.x*y.x+y.y*y.y)}e.magnitude=n;function r(y){const b=n(y);return b===0?t(0,0):{x:y.x/b,y:y.y/b}}e.normalize=r;function o(y,b){return{x:y.x+b.x,y:y.y+b.y}}e.add=o;function a(y,b){return{x:y.x-b.x,y:y.y-b.y}}e.subtract=a;function s(y,b){return{x:y.x*b.x,y:y.y*b.y}}e.multiply=s;function c(y,b){return{x:y.x*b,y:y.y*b}}e.scale=c;function d(y,b){return{x:y.x/b.x,y:y.y/b.y}}e.divide=d;function u(y,b){return n(a(y,b))}e.distance=u;function h(y,b,S){return{x:y.x+(b.x-y.x)*S,y:y.y+(b.y-y.y)*S}}e.lerp=h;function l(y,b){const S=Math.cos(b),T=Math.sin(b);return{x:y.x*S-y.y*T,y:y.x*T+y.y*S}}e.rotate=l;function f(y,b){const S=a(b,y);return e.normalize({x:-S.y,y:S.x})}e.normal=f;function m(y,b){return y.x*b.x+y.y*b.y}e.dot=m})(Z.Vec2||(Z.Vec2={}));function vs(e,t,n,r){const o=e/n,a=t/r;return Math.min(o,a)}const sn=et("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(e){this.$reset(),this.updateConfig(e)},getSetting(e){if(typeof this.baseSettings[e]<"u")return this.baseSettings[e];if(typeof this.customSettings[e]<"u")return this.customSettings[e];ae(`Setting ${e} does not exist.`)},getSettingSchema(e){if(typeof this.settingsSchema[e]<"u")return this.settingsSchema[e];if(typeof this.customSettingsSchema[e]<"u")return this.customSettingsSchema[e];ae(`Setting ${e} does not exist.`)},getAllSettingSchemas(){return{...this.settingsSchema,...this.customSettingsSchema}},setSetting(e,t){typeof this.baseSettings[e]<"u"?this.baseSettings[e]=t:typeof this.customSettings[e]<"u"?this.customSettings[e]=t:ae(`Setting ${e} does not exist.`),e==="fontSize"&&document.documentElement.style.setProperty("font-size",`${t}px`),e==="textSpeed"&&(le().dialogPanel.textSpeed=t),e==="animateText"&&(le().dialogPanel.animateText=t)},updateConfig(e){var t;if(this.setSetting("textSpeed",e.dialogPanel.textSpeed??Vo),this.setSetting("animateText",e.dialogPanel.animateText??!0),this.setSetting("fontSize",e.layout.defaultFontSize??16),(t=e.settings)!=null&&t.customSettings)for(const n in e.settings.customSettings)this.addCustomSetting(n,e.settings.customSettings[n])},addCustomSetting(e,t){this.customSettings[e]=t.defaultValue,this.customSettingsSchema[e]=t},generateSaveData(){return{baseSettings:Re(this.baseSettings),customSettings:Re(this.customSettings)}},loadSaveData(e){for(const t in e.baseSettings)this.setSetting(t,e.baseSettings[t]);for(const t in e.customSettings)typeof this.customSettings[t]<"u"&&this.setSetting(t,e.customSettings[t])}}});function io(e,t=50,n={}){let r;const o=n.isImmediate??!1,a=n.callback??!1,s=n.maxWait;let c=Date.now(),d=[];function u(){if(s!==void 0){const l=Date.now()-c;if(l+t>=s)return s-l}return t}const h=function(...l){const f=this;return new Promise((m,y)=>{const b=function(){if(r=void 0,c=Date.now(),!o){const I=e.apply(f,l);a&&a(I),d.forEach(({resolve:x})=>x(I)),d=[]}},S=o&&r===void 0;r!==void 0&&clearTimeout(r);const T=u();if(r=setTimeout(b,T),S){const I=e.apply(f,l);return a&&a(I),m(I)}d.push({resolve:m,reject:y})})};return h.cancel=function(l){r!==void 0&&clearTimeout(r),d.forEach(({reject:f})=>f(l)),d=[]},h}const Je=et("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(e){this.dialogPanelMode=e.dialogPanelMode},reset(){this.dialogPanelMode="auto"},updateScreenSize(e,t){this.screenHeight=t,this.screenWidth=e,e<le().layout.verticalLayoutThreshold?(this.layoutMode="vertical",document.querySelector("html").style.fontSize=`${sn().baseSettings.fontSize}px`??"40px"):(this.layoutMode="horizontal",document.querySelector("html").style.fontSize=`${sn().baseSettings.fontSize}px`??"16px")},setContainer(e){this.containerElement=e,this.resizeObserver&&this.resizeObserver.disconnect(),this.resizeObserver=new ResizeObserver(io(()=>{this.refreshScreenSize()},100,{maxWait:200})),this.resizeObserver.observe(e),this.refreshScreenSize()},refreshScreenSize(){const e=this.containerElement;e&&this.updateScreenSize(e.clientWidth,e.clientHeight)}},getters:{gameScaleRatio(e){return vs(this.screenWidth,this.screenHeight,this.gameWidth,this.gameHeight)},overlayMode(e){return!!(le().dialogPanel.overlayMode&&e.layoutMode==="horizontal")},gameWidth(){const e=le();return this.layoutMode==="vertical"||this.overlayMode?e.layout.backgrounds.width:e.layout.backgrounds.width+Ii()},gameHeight(){const e=le();return this.layoutMode==="vertical",e.layout.backgrounds.height},dialogWidth(){return this.layoutMode==="vertical"?this.viewportWidth:Ii()},dialogHeight(){return this.layoutMode==="vertical"?this.actualGameHeight-this.gameHeight:le().dialogPanel.height??this.gameHeight},actualGameHeight(){let e=this.gameHeight;return this.layoutMode==="vertical"&&(e=this.screenHeight/this.gameScaleRatio),e},viewportRatio(e){if(this.layoutMode==="vertical"){const t=le().layout.backgrounds;return e.screenWidth/t.width}return 1},viewportHeight(e){return le().layout.backgrounds.height*this.viewportRatio},viewportWidth(e){return le().layout.backgrounds.width*this.viewportRatio},showDialog(e){if(this.dialogPanelMode==="on")return!0;if(this.dialogPanelMode==="off")return!1;if(!this.overlayMode||this.layoutMode==="vertical")return!0;const t=Te().inScript;let n=!0;return Ut().isTransitioning&&le().dialogPanel.hideDuringTransition&&(n=!1),!le().dialogPanel.showAfterScriptEnd&&!t&&(n=!1),n},container(){return this.containerElement?this.containerElement:document.body},inputsContainer(){return Te().hasCustomContainer?this.container:window},narratApp(){return this.narratAppElement?this.narratAppElement:document.body}}});class f_ extends EventTarget{constructor(){super(...arguments);xe(this,"gamepadAvailable",!0);xe(this,"gameActions",{});xe(this,"keyboardState",{});xe(this,"actions",{});xe(this,"lastInputMethodUsed","km");xe(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=Je().inputsContainer;n.addEventListener("mousemove",r=>{this.mouseEvent()}),n.addEventListener("keydown",r=>{this.kbEvent();const o=this.getKeyboardState(r.key).current;this.keyboardState[r.key]={previous:o,current:!0}}),n.addEventListener("keyup",r=>{this.kbEvent();const o=this.getKeyboardState(r.key).current;this.keyboardState[r.key]={previous:o,current:!1}}),oo.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((o,a)=>this.getNarratButtonFromGamepad(o,o,a))}}updateAllNarratButtons(n,r){for(const[o,a]of n.buttons.entries()){const s=r.buttons[o];s.previous=Re(s.state),s.state=Re(a),s.previous.pressed!==s.state.pressed&&this.gamepadEvent()}}getNarratButtonFromGamepad(n,r,o){return{index:o,state:Re(r),previous:Re(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:Re(r)}}else{const r={config:n,value:Z.Vec2.create(0,0),fullState:{left:0,right:0,up:0,down:0}};this.actions[n.id]={state:r,previous:Re(r)}}}getAnalog(n){return this.actions[n]||ae(`Action ${n} does not exist`),this.actions[n].state}getButton(n){return this.actions[n]||ae(`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}update(){this.updateGamepad(),this.debugGamepad();for(const n of Object.values(this.gameActions))if(n.type==="button"){const r=this.actions[n.id],o=Re(r.state),a=r.state;r.previous=o,n.action==="press"&&(n.keybinds.some(c=>{let d=!1;if(typeof c.keyboardKey=="string"&&this.getKeyboardState(c.keyboardKey).current===!0&&(d=!0),typeof c.gamepadButton=="number"){const u=this.getGamepadState(c.gamepadButton);u&&u.current.pressed===!0&&(d=!0)}return d})?a.active=!0:a.active=!1,a.active&&!o.active?a.justPressed=!0:a.justPressed=!1,!a.active&&o.active?a.justReleased=!0:a.justReleased=!1)}else if(n.type==="analog"){const r=this.actions[n.id],o=r.state;Re(r.state),r.previous=Re(o);let a=Z.Vec2.create(0,0);n.keybinds.forEach(s=>{this.getKeyboardState(s.left).current&&(o.fullState.left=1,a.x-=1),this.getKeyboardState(s.right).current&&(o.fullState.right=1,a.x+=1),this.getKeyboardState(s.up).current&&(o.fullState.up=1,a.y-=1),this.getKeyboardState(s.down).current&&(o.fullState.down=1,a.y+=1)}),a=Z.Vec2.normalize(a),o.value=a}}}const xn=new f_,ht=et("menu",{state:()=>({menus:{},activeMenu:!1}),getters:{showSkills(){return Object.entries(dn().skills).length>0},showInventory(){return Object.entries(wi().items).length>0},showQuests(){return Object.entries(So().quests).length>0},showAchievements(){return Object.entries(wo().achievements).length>0},menuTabsToShow(e){return e.menus.menu.tabs.map(t=>{const n=le().menuButtons[t.id]||{};return{...t,...n}}).filter(t=>t.condition?t.condition():!0)},menu(e){return e.activeMenu?e.menus[e.activeMenu]:void 0},tab(){if(this.menu)return this.menu.tabs[this.menu.activeTab]}},actions:{setup(){},addMenu(e,t){this.menus[e]={...t,id:e}},addMenuOption(e,t){this.menus[e]||(this.menus[e]={id:e,label:e,tabs:[],activeTab:0}),this.menus[e].tabs.push(t)},setActiveTab(e){this.menu&&(this.menu.activeTab=e)},openMenu(e){this.activeMenu=e},closeMenu(){this.activeMenu=!1},toggleMenu(){this.activeMenu?this.activeMenu=!1:this.activeMenu="menu"}}}),p_=[{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}]}],Ke=et("inputs",{state:()=>({inputStack:[],baseInputListener:null,inputMode:"mk",inGameInputListener:null}),actions:{setupInputs(){xn.addEventListener("change-input",e=>{this.inputMode=e.detail});for(const e of p_)xn.addAction(e);this.listenToBaseNarratInputs(),oo.on("preUpdate",()=>{for(const[e,t]of Object.entries(xn.actions))if(t.state.config.type==="button"){const n=t;n.state.justPressed&&this.triggerListeners(e,"press",n),n.state.justReleased&&this.triggerListeners(e,"release",n)}else t.state.config.type})},createInGameInputListener(){this.inGameInputListener||(this.inGameInputListener=this.registerInputListener("in-game",{system:{press:()=>{ht().openMenu("system")}},menu:{press:()=>{ht().openMenu("menu")}}}))},removeInGameInputListener(){this.inGameInputListener&&(this.unregisterInputListener(this.inGameInputListener),this.inGameInputListener=null)},listenToContainerInputs(){xn.startListening()},listenToBaseNarratInputs(){},triggerListeners(e,t,n){const r=this.inputStack[this.inputStack.length-1];if(r&&r.actions[e]&&r.actions[e][t])if(n.state.config.type==="button"){const o=r.actions[e][t],a=n;o(n.state.config,a.state,a.previous)}else console.warn("Analog events not implemented yet")},getInputs(){return xn},registerInputListener(e,t){const r={id:`${Date.now()}-${Math.floor(Math.random()*1e8)}`,name:e,actions:t??{}};return this.inputStack.push(r),r},unregisterInputListener(e){const t=this.inputStack.findIndex(n=>n.id===e.id);if(t===-1)throw new Error("Input listener not found");this.inputStack.splice(t,1)},registerActions(e,t,n){e.actions[t]=n}}}),Nt=et("scenes-store",{state:()=>({scenes:{},activeScene:"engine-splash",currentOptions:{}}),getters:{isPlaying(e){return e.activeScene!=="engine-splash"&&e.activeScene!=="game-splash"&&e.activeScene!=="start-menu"}},actions:{generateSaveData(){return{activeScene:this.activeScene}},loadSaveData(e){},changeScene(e,t){const n=this.activeScene;if(n&&n!==e){const r=this.scenes[n];r.onLeaving&&r.onLeaving(),this.currentOptions={},this.activeScene=e,this.currentOptions=t||{},this.scenes[e].onStarting&&this.scenes[e].onStarting()}},getSceneConfig(e){return this.scenes[e]},onEngineSplashFinished(){this.changeScene("game-splash")},finishedScene(e){this.scenes[e].onFinished&&this.scenes[e].onFinished()},addNewScene(e){this.scenes[e.id]=e}}}),m_={id:"game-splash-screen",style:{height:"100%",padding:"20px"},class:"flex justify-center items-center"},h_={id:"game-splash-screen-header flex justify-center flex-col items-center",class:"flex justify-center flex-col items-center"},y_={class:"title",id:"game-splash-title"},Ss=i.defineComponent({__name:"game-splash",setup(e){const t=i.ref(null),n=Te(),r=i.computed(()=>{var d;return((d=le().splashScreens)==null?void 0:d.gameSplashScreen)??{}}),o=i.computed(()=>typeof r.value.startButtonText=="string"?r.value.startButtonText:"Press to start"),a=i.computed(()=>n.loading.loaded),s=i.computed(()=>le().gameTitle||"Narrat Game");function c(){Nt().changeScene("start-menu")}return i.onMounted(()=>{t.value=Ke().registerInputListener("game-splash",{continue:{press:()=>{c()}},system:{press:()=>{c()}}}),n.options.debug&&c()}),i.onUnmounted(()=>{t.value&&Ke().unregisterInputListener(t.value)}),(d,u)=>(i.openBlock(),i.createElementBlock("div",m_,[i.createElementVNode("div",h_,[i.createElementVNode("h1",y_,i.toDisplayString(s.value),1),a.value?(i.openBlock(),i.createElementBlock("button",{key:0,class:"nrt-button menu-button main-menu-button large splash-start-button override",onClick:c},i.toDisplayString(o.value),1)):i.createCommentVNode("",!0)])]))}});function Sn(e){if(!e.listener)return console.warn("No input listener provided for navigation"),null;const t=i.ref(-1),n=i.computed(()=>e.mode==="grid"?t.value%e.columns:0),r=i.ref([]),o=i.ref(xn.lastInputMethodUsed),a=i.ref(null);function s(){var W,X;return(W=e.container)!=null&&W.value?e.container.value.children:(X=e.elements)!=null&&X.value?e.elements.value.filter(G=>G!==null):[]}function c(){r.value=s()}const d=i.computed(()=>l(t.value));function u(W){return r.value?W>=0&&W<r.value.length:!1}function h(W){const X=t.value;if(u(W)&&(t.value=W,d.value)){o.value==="gamepad"&&d.value.classList.add("selected");const G=l(X);G&&X!==W&&G.classList.remove("selected"),e.onSelected&&e.onSelected(W)}}function l(W){return r.value?r.value[W]:null}function f(){r.value&&(t.value===0?e.loopForbidden||h(r.value.length-1):h(t.value-1))}function m(){r.value&&(t.value===r.value.length-1?e.loopForbidden||h(0):h(t.value+1))}function y(){if(!r.value)return;const W=e,X=t.value;!e.loopForbidden&&X<W.columns?h(r.value.length-1):h(t.value-e.columns)}function b(){if(!r.value)return;const W=e,X=t.value;!e.loopForbidden&&X>=r.value.length-W.columns?h(0):h(t.value+e.columns)}function S(){e.mode==="grid"?y():e.mode==="list"&&f()}function T(){e.mode==="grid"?b():e.mode==="list"&&m()}function I(){(e.mode==="grid"||e.mode==="list")&&f()}function x(){(e.mode==="grid"||e.mode==="list")&&m()}function B(){e.onChosen&&e.onChosen(t.value)}i.onMounted(()=>{Y()});function F(){e.listener&&(e.onlyVertical||(delete e.listener.actions.left,delete e.listener.actions.right),e.onlyHorizontal||(delete e.listener.actions.up,delete e.listener.actions.down),e.noChoosing||delete e.listener.actions.continue,a.value&&xn.removeEventListener("change-input",a.value))}function L(){d.value&&d.value.classList.add("selected")}function P(){d.value&&d.value.classList.remove("selected")}function Y(){e.listener&&(c(),a.value=W=>{o.value=W.detail,W.detail==="gamepad"?L():P()},xn.addEventListener("change-input",a.value),e.onlyVertical||(e.listener.actions.left={press:I},e.listener.actions.right={press:x}),e.onlyHorizontal||(e.listener.actions.up={press:S},e.listener.actions.down={press:T}),e.noChoosing||(e.listener.actions.continue={press:B}),h(0))}return i.onUnmounted(()=>{F()}),i.watch(()=>{var W;return(W=e.elements)==null?void 0:W.value},W=>{W&&c()}),{selectedIndex:t,selectedElement:d,currentColumn:n,buttonDown:T,buttonUp:S,buttonLeft:I,buttonRight:x,selectUp:y,selectDown:b,selectPrevious:f,selectNext:m,select:h,disable:F,mount:Y}}const g_={class:"used-save-slot flex flex-row justify-between items-center grow"},__={class:"flex flex-col save-slot-number-container"},b_={class:"save-slot-number"},T_={class:"flex flex-col justify-center save-info"},v_={key:1,class:"save-name"},S_={class:"flex flex-col"},w_={key:0},k_={key:1},C_={key:2},$_=["onClick"],ws=i.defineComponent({__name:"save-slot-ui",props:{saveSlot:{},id:{},actions:{},selected:{type:Boolean},inputListener:{}},emits:["choice","cancel"],setup(e,{expose:t,emit:n}){var B;const r=e,o=i.ref(null),a=i.ref(null),s=i.ref(null);t({slotContainer:s});const c=i.ref(((B=r.saveSlot.saveData)==null?void 0:B.metadata.name)??"Empty Save"),d=i.ref(0),u=i.computed(()=>r.saveSlot.saveData!==null),h=i.computed(()=>r.saveSlot.saveData),l=i.computed(()=>le().saves.mode),f=i.computed(()=>{const F=r.saveSlot.saveData;if(F&&F.screen.layers[0]){const L=xr(F.screen.layers[0]);if(L)return{backgroundImage:`url(${Lr(L.background)})`}}return!1}),m=n;function y(F){m("choice",F)}function b(F){return h.value?Fi(h.value.main.playTime/1e3):"00:00:00"}function S(){h.value&&Cp(r.saveSlot.id,c.value)}function T(){const F=le().saves.slots;let L="";const P=r.saveSlot.slotNumber;return P===0&&le().saves.mode==="manual"?"AUTO":(F>=10&&P<10&&(L+="0"),F>=100&&P<100&&(L+="0"),L+P)}function I(){o.value=Sn({mode:"list",container:a,listener:r.inputListener,onlyHorizontal:!0,onSelected:F=>{d.value=F},onChosen:F=>{y(F)}}),o.value.mount()}function x(){o.value.disable(),o.value=null}return i.watch(()=>r.selected,(F,L)=>{F&&!o.value&&I(),!F&&o.value&&x()}),i.onUnmounted(()=>{o.value&&x()}),(F,L)=>(i.openBlock(),i.createElementBlock("div",{class:"save-slot flex flex-row",ref_key:"slotContainer",ref:s},[i.createElementVNode("div",g_,[i.createElementVNode("div",__,[i.createElementVNode("h1",b_,i.toDisplayString(T()),1)]),f.value?(i.openBlock(),i.createElementBlock("div",{key:0,class:"save-slot-screenshot",style:i.normalizeStyle(f.value)},null,4)):i.createCommentVNode("",!0),i.createElementVNode("div",T_,[u.value?i.withDirectives((i.openBlock(),i.createElementBlock("input",{key:0,type:"text",class:"save-name","onUpdate:modelValue":L[0]||(L[0]=P=>c.value=P),onInput:S},null,544)),[[i.vModelText,c.value]]):(i.openBlock(),i.createElementBlock("h3",v_,i.toDisplayString(c.value),1)),i.createElementVNode("div",S_,[h.value?(i.openBlock(),i.createElementBlock("p",w_,i.toDisplayString(new Date(h.value.metadata.saveDate).toLocaleString()),1)):i.createCommentVNode("",!0),h.value?(i.openBlock(),i.createElementBlock("p",k_,"Play time: "+i.toDisplayString(b(F.saveSlot)),1)):i.createCommentVNode("",!0),l.value==="game-slots"?(i.openBlock(),i.createElementBlock("p",C_,i.toDisplayString(F.saveSlot.slotType==="auto"?"Auto Save":"Manual Save"),1)):i.createCommentVNode("",!0)])]),i.createElementVNode("div",{class:"flex flex-row",ref_key:"actionsContainer",ref:a},[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(F.actions,(P,Y)=>(i.openBlock(),i.createElementBlock("button",{class:i.normalizeClass(["nrt-button",{selected:F.selected&&Y===d.value}]),onClick:()=>y(Y),key:Y},[i.createElementVNode("h3",null,i.toDisplayString(P),1)],10,$_))),128))],512)])],512))}}),E_=i.createElementVNode("h3",{class:"title"},"Confirmation",-1),Xo=i.defineComponent({__name:"yes-no",props:{prompt:{type:String,required:!0},onConfirm:{type:Function,required:!1},onRefuse:{type:Function,required:!1}},emits:["choice"],setup(e,{emit:t}){const n=i.ref(Ke().registerInputListener("yes-no",{cancel:{press:()=>{s(!1)}},continue:{press:()=>{s(!0)}}})),r=i.ref(null);Sn({mode:"list",container:r,listener:n.value,onChosen:c=>{s(c===0)}});const o=e,a=t;function s(c){c===!0&&o.onConfirm?o.onConfirm():c===!1&&o.onRefuse&&o.onRefuse(),a("choice",c)}return i.onMounted(()=>{}),i.onUnmounted(()=>{n.value&&Ke().unregisterInputListener(n.value)}),(c,d)=>(i.openBlock(),i.createBlock(_n,{onClose:d[2]||(d[2]=()=>s(!1)),containerCssClass:"yes-no-modal"},{header:i.withCtx(()=>[E_]),body:i.withCtx(()=>[i.createElementVNode("h3",null,i.toDisplayString(e.prompt),1),i.createElementVNode("div",{class:"flex justify-center",ref_key:"buttonsContainer",ref:r},[i.createElementVNode("button",{class:"nrt-button",onClick:d[0]||(d[0]=()=>s(!0))},"Yes"),i.createElementVNode("button",{class:"nrt-button",onClick:d[1]||(d[1]=()=>s(!1))},"No")],512)]),_:1}))}}),O_={class:"nrt-title"},A_={key:0},I_={class:"saves-section"},N_=i.createElementVNode("h3",{class:"saves-section-title"},"Auto save",-1),P_={class:"saves-section"},j_=i.createElementVNode("h3",{class:"saves-section-title"},"Manual Saves",-1),D_={key:1,class:"saves-section"},x_=i.createElementVNode("h3",{class:"saves-section-title"},"Save Slots",-1),L_={class:"saves-container flex flex-col"},Ju=i.defineComponent({__name:"save-slots",props:{mode:{}},emits:["chosen","close"],setup(e,{emit:t}){const n=e,r=i.ref(Ke().registerInputListener("save-slots",{cancel:{press:()=>{Y()}}})),o=i.ref(0),a=i.reactive([]),s=i.computed(()=>a.slice(0,1)),c=i.computed(()=>a.slice(1)),d=i.ref([]),u=i.ref([]),h=i.ref([]),l=i.ref([]),f=i.ref([]);i.ref({mode:"list",elements:l,listener:r.value,onlyVertical:!0,noChoosing:!0,onSelected:G=>{o.value=G}});const m=Sn({mode:"list",elements:l,listener:r.value,onlyVertical:!0,noChoosing:!0,onSelected:G=>{o.value=G}}),y=i.computed(()=>{const G=o.value;return f.value.length<G+1?null:f.value[G].id}),b=i.reactive(n.mode==="load"?["Load","Delete"]:["Choose"]),S=i.computed(()=>le().saves.mode),T=i.reactive({prompt:"Are you sure you want to delete this save file?",saveToDelete:null,onConfirm:()=>{P(T.saveToDelete),T.saveToDelete=null},onRefuse:()=>{T.saveToDelete=null}}),I=i.reactive({prompt:"Are you sure you want to overwrite this save file?",saveToOverwrite:null,onConfirm:()=>{F(I.saveToOverwrite),I.saveToOverwrite=null},onRefuse:()=>{I.saveToOverwrite=null}}),x=t;i.onBeforeMount(()=>{bn().slots.forEach((Q,te)=>{a[te]=Q})});function B(){l.value=S.value==="manual"?[...u.value.map(z=>z.slotContainer),...h.value.map(z=>z.slotContainer)]:d.value.map(z=>z.slotContainer);const G=S.value==="manual"?[...s.value,...c.value]:a;f.value=G.map(z=>({id:z.id}))}i.onMounted(()=>{B()}),i.onUnmounted(()=>{m.value&&(m.value.disable(),m.value=null),r.value&&Ke().unregisterInputListener(r.value)});function F(G){x("chosen",{slotId:G})}function L(G){const z=X(G);if(z){if(le().saves.mode==="manual"&&z.slotType==="auto"){Te().alert("Sorry","Can't delete the auto save slot!");return}T.saveToDelete=G}}function P(G){kp(G);const z=a.find(Q=>Q.id===G);z&&(z.saveData=null),B()}function Y(){x("close")}function W(G,z){const Q=b[z];Q==="Load"?F(G):Q==="Delete"?L(G):Q==="Choose"&&(I.saveToOverwrite=G)}function X(G){return a.find(z=>z.id===G)}return(G,z)=>(i.openBlock(),i.createBlock(_n,{onClose:Y,containerCssClass:"save-modal",cantClose:!1},{header:i.withCtx(()=>[i.createElementVNode("h3",O_,i.toDisplayString(G.mode==="load"?"Choose a save to load":"Pick a slot to save the game"),1)]),body:i.withCtx(()=>[S.value==="manual"?(i.openBlock(),i.createElementBlock("div",A_,[i.createElementVNode("div",I_,[N_,i.createVNode(i.TransitionGroup,{name:"list",tag:"div"},{default:i.withCtx(()=>[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(s.value,Q=>(i.openBlock(),i.createBlock(ws,{key:Q.id,saveSlot:Q,id:Q.id,actions:b,onChoice:te=>W(Q.id,te),inputListener:r.value,selected:y.value===Q.id,ref_for:!0,ref_key:"autoSlotsElements",ref:u},null,8,["saveSlot","id","actions","onChoice","inputListener","selected"]))),128))]),_:1})]),i.createElementVNode("div",P_,[j_,i.createVNode(i.TransitionGroup,{name:"list",tag:"div"},{default:i.withCtx(()=>[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(c.value,Q=>(i.openBlock(),i.createBlock(ws,{key:Q.id,saveSlot:Q,id:Q.id,actions:b,onChoice:te=>W(Q.id,te),inputListener:r.value,selected:y.value===Q.id,ref_for:!0,ref_key:"manualSlotsElements",ref:h},null,8,["saveSlot","id","actions","onChoice","inputListener","selected"]))),128))]),_:1})])])):(i.openBlock(),i.createElementBlock("div",D_,[x_,i.createElementVNode("div",L_,[i.createVNode(i.TransitionGroup,{name:"list",tag:"div"},{default:i.withCtx(()=>[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(a,Q=>(i.openBlock(),i.createBlock(ws,{key:Q.id,saveSlot:Q,id:Q.id,actions:b,onChoice:te=>W(Q.id,te),selected:y.value===Q.id,inputListener:r.value,ref_for:!0,ref_key:"saveSlotsElements",ref:d},null,8,["saveSlot","id","actions","onChoice","selected","inputListener"]))),128))]),_:1})])])),T.saveToDelete?(i.openBlock(),i.createBlock(Xo,{key:2,prompt:T.prompt,onRefuse:T.onRefuse,onConfirm:T.onConfirm},null,8,["prompt","onRefuse","onConfirm"])):i.createCommentVNode("",!0),I.saveToOverwrite?(i.openBlock(),i.createBlock(Xo,{key:3,prompt:I.prompt,onRefuse:I.onRefuse,onConfirm:I.onConfirm},null,8,["prompt","onRefuse","onConfirm"])):i.createCommentVNode("",!0)]),_:1}))}}),M_=i.defineComponent({__name:"start-menu-button",props:{button:{}},emits:["click"],setup(e){return(t,n)=>(i.openBlock(),i.createElementBlock("button",{class:i.normalizeClass(["nrt-button menu-button main-menu-button large override",t.button.cssClass]),onClick:n[0]||(n[0]=r=>t.$emit("click"))},i.toDisplayString(t.button.title),3))}});class ks extends Ts{setup(t=!1){const r=t?"keydown":"keyup",o=io(s=>{qt.emit("debouncedKeydown",s)},10,{isImmediate:!0,maxWait:10}),a=Je().inputsContainer;a.addEventListener("keydown",s=>{qt.emit("keydown",s)}),a.addEventListener(r,s=>{o(s)})}}const qt=new ks,Cs=et("startMenu",{state:()=>({buttons:[]}),actions:{addButtonsFromPlugins(){Ie.plugins.forEach(t=>{t.startMenuButtons&&t.startMenuButtons.forEach(n=>{const r=window.narrat.app;n.popupComponent&&r.component(n.popupComponent.name,n.popupComponent.component),this.buttons.push(n)})})}}});function R_(){ad()}function Xu(){R_(),Te().menuReturn()}async function B_(e){if(le().saves.mode==="manual"){const t=Ui();t&&(e=t.id)}Te().setSaveSlot(e),ld(bn().globalSave),Zu(),we().runGame()}function Zu(){ft().stopAll(),Qn("onPressStart"),we().start(),Te().prepareToPlay(),Ie.callHook("onGameStart")}async function F_(e,t){if(le().saves.mode==="manual"){const n=Ui();n&&(t=n.id)}if(Te().setSaveSlot(t),Zu(),e.saveData){tT({gameSave:e.saveData,globalSave:bn().globalSave}),ft().reloadAudio(e.saveData.audio);const n=we(),r=le().saves.runOnReload;typeof r=="string"&&await we().runLabelFunction(r),n.jumpToLabel(e.saveData.vm.lastLabel)}}const V_={id:"game-menu"},U_={id:"game-header",class:"flex flex-col justify-between items-center"},q_={id:"game-title-container"},H_={id:"game-title-text"},K_={class:"nrt-title"},$s=zt(i.defineComponent({__name:"StartMenu",setup(e){const t=i.ref(Ke().registerInputListener("start-menu",{})),n=i.ref([]),r=i.ref(null),o=i.ref(!1),a=i.ref(!1),s=i.ref(null),c=i.ref(null),d=i.ref(!1),u=i.ref(!1),h=i.ref(null),l=Cs(),f=i.ref(!1),m=i.ref(null),y=i.computed(()=>l.buttons),b=Sn({mode:"list",container:r,listener:t.value,onChosen:Q=>{S(n.value[Q])}});function S(Q){switch(Q.id){case"continue":P();break;case"new-game":T();break;case"load-game":Y();break;case"exit":Te().exitGame();break;default:x(Q);break}}async function T(){o.value&&le().saves.mode==="manual"&&!le().saves.disabled?u.value=!0:I()}async function I(){if(c.value===null)if(le().saves.mode==="manual"){const Q=Ui();if(!Q){ae("No autosave found");return}c.value=Q.id}else{const Q=Sp();if(!Q){ae("No free slot found");return}c.value=Q}u.value=!1,await B_(c.value)}function x(Q){const te=y.value.findIndex(Ne=>Ne.id===Q.id),ke=y.value[te];ke.action&&ke.action(),ke.popupComponent&&(f.value=ke)}function B(){f.value=!1}function F(){u.value=!1}async function L(){if(!c.value)return;const Q=Gr(c.value);if(!Q){ae("No save file found");return}F_(Q,c.value)}function P(){typeof s.value=="string"&&(c.value=s.value,L())}function Y(){d.value=!0}function W({slotId:Q}){const te=Gr(Q);te&&te.saveData?(c.value=Q,L()):T()}i.onMounted(()=>{const Q=bn();Q.slots.some(te=>te.saveData)&&(o.value=!0),(le().saves.mode==="manual"||Q.slots.some(te=>!te.saveData))&&(a.value=!0),Q.lastSaveSlot&&Gr(Q.lastSaveSlot)&&(s.value=Q.lastSaveSlot),X(),h.value=qt.on("debouncedKeydown",te=>{te.key===" "&&I(),te.key==="c"&&P()}),i.nextTick(()=>{b.select(0)}),Lt().options.defaultMusic&&(m.value=um(Lt().options.defaultMusic))});function X(){const Q=le().saves.disabled;s.value&&!Q&&n.value.push(G({id:"continue",title:"Continue",cssClass:"continue-button"})),a.value&&n.value.push(G({id:"new-game",title:"New Game",cssClass:"start-button"})),o.value&&!Q&&n.value.push(G({id:"load-game",title:"Load Game",cssClass:"continue-button"}));for(const te of y.value)n.value.push({id:te.id,title:te.text,cssClass:`${te.id}-start-menu-button`});n.value.push(G({id:"exit",title:"Exit",cssClass:"exit-button"}))}function G({id:Q,title:te,cssClass:ke}){const Ne=le().menuButtons[Q];if(Ne){let Ze=ke;return Ne.cssClass&&(Ze=`${Ne.cssClass} ${ke}`),{id:Q,title:Ne.text??te,cssClass:Ze}}return{id:Q,title:te,cssClass:ke}}i.onUnmounted(()=>{if(t.value&&Ke().unregisterInputListener(t.value),h.value&&qt.off("debouncedKeydown",h.value),typeof m.value=="number"){const Q=Lt().options.defaultMusic;dm(Q,m.value)}});const z=i.computed(()=>le().gameTitle);return(Q,te)=>(i.openBlock(),i.createElementBlock("div",V_,[d.value?(i.openBlock(),i.createBlock(Ju,{key:0,mode:"load",onChosen:W,onClose:te[0]||(te[0]=ke=>d.value=!1)})):i.createCommentVNode("",!0),u.value?(i.openBlock(),i.createBlock(Xo,{key:1,prompt:"This will override your previous autosave, are you sure?",onConfirm:I,onRefuse:F})):i.createCommentVNode("",!0),i.createElementVNode("div",U_,[i.createElementVNode("div",q_,[i.createElementVNode("h1",H_,i.toDisplayString(z.value),1)]),i.createElementVNode("div",{class:"flex flex-col start-menu-buttons-container",ref_key:"buttonsContainer",ref:r},[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(n.value,ke=>(i.openBlock(),i.createBlock(M_,{key:ke.id,button:ke,onClick:Ne=>S(ke)},null,8,["button","onClick"]))),128))],512)]),f.value?(i.openBlock(),i.createBlock(i.Teleport,{key:2,to:"#narrat"},[i.createVNode(_n,{onClose:B,class:i.normalizeClass(`start-menu-popup-${f.value.id}`)},{header:i.withCtx(()=>[i.createElementVNode("h3",K_,i.toDisplayString(f.value.text),1)]),body:i.withCtx(()=>[f.value.popupComponent?(i.openBlock(),i.createBlock(i.resolveDynamicComponent(f.value.popupComponent.component),{key:0,onClose:B},null,32)):i.createCommentVNode("",!0)]),_:1},8,["class"])])):i.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-a3f319bb"]]);function Zo(e){const t=$i().characters[e];return t||ae(`Character ${e} not found`),t}function G_(e,t){const n=Zo(e);if(n&&(t||(t="default"),n.sprites)){const r=n.sprites[t];return r==="none"?void 0:typeof r=="string"?{image:r}:r}}function ed(e){return`${$i().config.imagesPath}${e}`}function z_(e){return typeof e=="object"&&Object.hasOwn(e,"image")}function W_(e){return typeof e=="object"&&Object.hasOwn(e,"video")}function Es(e){var t;return e?((t=Zo(e))==null?void 0:t.style)||{}:{}}const Q_=["src"],Y_=["autoplay","loop","muted"],J_=["src"],X_=i.defineComponent({__name:"dialog-picture",props:{picture:{},video:{},character:{},pose:{}},setup(e){const t=e,n=i.computed(()=>t.video),r=i.computed(()=>Je().layoutMode),o=i.computed(()=>{var d;const s={};if(!t.character)return{};t.character&&(s[t.character]=!0);const c=Zo(t.character);return(d=c==null?void 0:c.style)!=null&&d.portraitCssClass&&(s[c.style.portraitCssClass]=!0),s}),a=i.computed(()=>{var m,y;const s=Je(),c=le().layout;let d=0,u=0;const h=c.portraits;if(r.value==="vertical"){const b=((m=h.offset)==null?void 0:m.portrait)??{right:0,bottom:0};d=20+b.right,u=s.dialogHeight+b.bottom}else{const b=((y=h.offset)==null?void 0:y.landscape)??{right:0,bottom:0},S=le().dialogPanel.rightOffset??ts.dialogPanel.rightOffset;d=Ii()-10+b.right+S,u=200+b.bottom}let l=c.portraits.width,f=c.portraits.height;return t.video&&(l=t.video.width??l,f=t.video.height??f),t.picture&&(l=t.picture.width??l,f=t.picture.height??f),{right:`${d}px`,bottom:`${u}px`,width:`${l}px`,height:`${f}px`}});return(s,c)=>{var d;return i.openBlock(),i.createElementBlock("div",{class:i.normalizeClass(["dialog-picture override",o.value]),style:i.normalizeStyle(a.value)},[s.picture?(i.openBlock(),i.createElementBlock("img",{key:0,src:i.unref($t)(i.unref(ed)((d=s.picture)==null?void 0:d.image)),class:i.normalizeClass(["picture override",o.value])},null,10,Q_)):i.createCommentVNode("",!0),n.value?(i.openBlock(),i.createElementBlock("video",{key:1,class:"picture override",autoplay:n.value.autoplay!==!1,loop:n.value.loop!==!1,muted:!!n.value.muted},[i.createElementVNode("source",{src:i.unref($t)(i.unref(ed)(n.value.video))},null,8,J_)],8,Y_)):i.createCommentVNode("",!0)],6)}}});function Z_(){return Lt().dialogAudio}function td(e){const t=Z_();if(t){if(t.characterAudio&&t.characterAudio[e])return t.characterAudio[e];if(t.defaultAudio)return t.defaultAudio}}function nd(e,t){if(typeof t!="string")return;const n=td(e);return n==null?void 0:n.soundPerLetter}function eb(e,t){if(typeof t!="string")return;const n=nd(e,t);if(!n)return;const r=n;let o="";return r.prefix&&(o+=r.prefix),o+=t,r.suffix&&(o+=r.suffix),o}function tb(e,t){if(typeof t!="string")return;const n=t.toLowerCase(),r=eb(e,n);if(typeof r!="string")return;const o=Qt(r);if(o){const a=nd(e,n);let s=1;a.volume&&(s=a.volume);const c=ft().audioVolume("sound",r)*s;o.volume(c),o.play()}}function nb(e){const t=td(e);if(t!=null&&t.soundOnNewLine){const n=Qt(t.soundOnNewLine);if(n){const r=ft().audioVolume("sound",t.soundOnNewLine);n.volume(r),n.play()}}}const rb=["innerHTML"],ob=["innerHTML"],ib=["innerHTML"],sb={key:1},ab=["onClick","innerHTML"],lb={key:1},cb={key:2,class:"buttons-container"},ub=i.defineComponent({__name:"dialog-box",props:{options:{},active:{type:Boolean},inputListener:{}},setup(e,{expose:t}){const n=i.ref(null),r=i.ref(""),o=i.ref(!1),a=i.ref(null),s=i.ref(null),c=i.ref(!1),d=i.ref(null),u=i.ref(null),h=i.ref(null),l=i.ref(null),f=i.ref(null),m=e,y=i.ref(null);m.active&&(y.value=Sn({mode:"list",container:n,listener:m.inputListener,onlyVertical:!0,onChosen:R=>{ee.value&&M.value?F(M.value[R]):I(" ")}})),i.onMounted(()=>{ke(),c.value=!0}),i.onUnmounted(()=>{b(),z(),nt({unmounted:!0})});function b(){a.value&&(clearTimeout(a.value),a.value=null),S()}function S(){y.value&&(y.value.disable(),y.value=null)}function T(R){I(R.key)}function I(R){if(!ee.value){c.value&&s&&R===" "&&nt({pressedSpace:!0});return}if(ee.value&&m.options.textField&&R==="Enter"&&X(),ee.value&&!m.options.textField){let J=-1;switch(R){case" ":J=0;break;case"1":J=0;break;case"2":J=1;break;case"3":J=2;break;case"4":J=3;break;case"5":J=4;break;case"6":J=5;break;case"7":J=6;break;case"8":J=7;break}J!==-1&&M.value&&J<M.value.length?F(M.value[J]):J===0&&F(J)}}function x(){ee.value||c.value&&s&&nt({pressedSpace:!0})}function B(){o.value||F(0)}function F(R){L();let J;typeof R=="object"?J=R.originalIndex:J=R,Te().playerAnswered(J)}function L(){b(),nt({unmounted:!0}),o.value=!0}function P(R){const J={};return R.allowed||(J.pointerEvents="none",J.textDecoration="line-through"),J}function Y(R,J){const fe={index:R+1,choice:J.choice};let ce='<span class="choice-index">%{$index}. </span> <span class="choice-text">%{$choice}</span>';if(Va().choiceTextTemplate&&(ce=Va().choiceTextTemplate),J.flag){const be=wf(J.flag);be!=null&&be.textTemplate&&(ce=be.textTemplate)}return Al(fe,ce)}function W(R){const J={};if(R.allowed||(J["strike-anim"]=!0),R.seenBefore&&(J["seen-before"]=!0),R.flag){const fe=wf(R.flag);fe!=null&&fe.cssClass&&(J[fe.cssClass]=!0)}return J}function X(){const R=r.value;z(),Te().playerAnswered(R)}function G(){m.options.textField&&(a.value=setTimeout(()=>{ee.value&&(f.value=Ke().registerInputListener("text-field-input-grabber",{}),l.value&&l.value.focus())},100))}function z(){f.value&&(Ke().unregisterInputListener(f.value),f.value=null)}function Q(R,J){const fe=m.options.text.substring(R,J);s.value.text+=fe;const ce=fe.substring(0,1);return tb(m.options.styleId,ce),J}function te(R){const J=R[0];return s.value.text+=J,s.value.skippedChars+=J.length,J.length}function ke(){if(!m.options.old)if(Fe().playMode==="skip")Ne();else if(nb(m.options.styleId),le().dialogPanel.animateText){s.value={text:"",index:0,startTime:Date.now(),timer:null,skippedChars:0,tags:sm(m.options.text),finished:!1};const R=s.value;R.timer=setInterval(()=>{qe()},30)}else E.value&&(d.value=setTimeout(()=>{nt()},(le().dialogPanel.textSpeed??Vo)*m.options.text.length))}function Ne(){Fe().playMode==="skip"&&!m.options.old&&(E.value?u.value=setTimeout(()=>{nt()},100):(Fe().toggleSkip(),nt({unmounted:!0})))}function Ze(){Fe().playMode==="auto"&&!m.options.old&&E.value&&ee&&B()}function qe(){const R=s.value;if(!R)return;const J=R.index,fe=Date.now()-R.startTime;let ce=!1,be=Math.round(fe/(le().dialogPanel.textSpeed??Vo))+R.skippedChars;if(be>m.options.text.length&&(ce=!0,R.finished=!0,be=m.options.text.length),be!==R.index){let ve=J;for(;R.tags.length>0&&be>=R.tags[0].index;){ve=Q(ve,R.tags[0].index);const Le=te(R.tags.shift());ve+=Le,be+=Le}ve=Q(ve,be),R.index=ve}ce&&nt()}function nt({unmounted:R,pressedSpace:J}={}){G(),setTimeout(()=>{y.value&&y.value.select(0)},10),s.value&&(s.value.timer&&clearInterval(s.value.timer),s.value=null),d.value&&!J&&clearTimeout(d.value),u.value&&clearTimeout(u.value),h.value&&clearTimeout(h.value),!R&&!J&&Fe().playMode!=="normal"&&E&&(h.value=setTimeout(()=>{B()},Fe().playMode==="auto"?le().dialogPanel.timeBetweenLines??br.common.dialogPanel.timeBetweenLines:0))}const j=i.computed(()=>m.options.title?" &nbsp;–&nbsp; ":""),g=i.computed(()=>({...Es(m.options.styleId).boxCss})),E=i.computed(()=>!M.value&&!m.options.textField),$=i.computed(()=>{const R={};return m.options.title&&(R["dialog-box-followup"]=!0),m.options.old?R["dialog-box-old"]=!0:R["dialog-box-new"]=!0,R}),_=i.computed(()=>{const R=Es(m.options.styleId);return{color:R.color,...R.nameCss}}),v=i.computed(()=>Es(m.options.styleId).textCss),C=i.computed(()=>s.value?s.value.text:m.options.text),M=i.computed(()=>{if(m.options.choices)return m.options.choices}),U=i.computed(()=>Fe().playMode==="skip"),ne=i.computed(()=>Fe().playMode==="auto"),ee=i.computed(()=>m.active&&c.value&&!o.value&&!h.value&&!s.value&&m.options.interactive&&!Ee.value),re=Te(),Ee=i.computed(()=>re.paused);return i.watch(()=>m.options,(R,J)=>{!J.old&&R.old&&s&&nt({unmounted:!0})}),i.watch(U,(R,J)=>{R&&!J&&Ne()}),i.watch(ne,(R,J)=>{R&&!J&&Ze()}),t({keyboardEvent:T}),(R,J)=>{const fe=i.resolveDirective("visible");return i.openBlock(),i.createElementBlock("div",{class:i.normalizeClass(["dialog-box w-full override",$.value]),style:i.normalizeStyle(g.value)},[i.createElementVNode("div",{class:"dialog-content",onClick:x},[R.options.title?(i.openBlock(),i.createElementBlock("span",{key:0,class:"dialog-title override",style:i.normalizeStyle(_.value),innerHTML:R.options.title},null,12,rb)):i.createCommentVNode("",!0),i.createElementVNode("span",{class:"dialog-text dialog-separator override",style:i.normalizeStyle(v.value),innerHTML:j.value},null,12,ob),i.createElementVNode("span",{class:i.normalizeClass(["dialog-text override",R.options.cssClass]),style:i.normalizeStyle(v.value),innerHTML:C.value},null,14,ib),R.options.old?i.createCommentVNode("",!0):i.withDirectives((i.openBlock(),i.createElementBlock("div",sb,[M.value?(i.openBlock(),i.createElementBlock("div",{key:0,class:"dialog-choices",ref_key:"choicesDiv",ref:n},[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(M.value,(ce,be)=>(i.openBlock(),i.createElementBlock("p",{key:be,style:i.normalizeStyle(P(ce)),class:i.normalizeClass([W(ce),"dialog-choice override"]),onClick:ve=>F(ce),innerHTML:Y(be,ce)},null,14,ab))),128))],512)):R.options.textField?(i.openBlock(),i.createElementBlock("div",lb,[i.withDirectives(i.createElementVNode("input",{autofocus:"",type:"text",class:"label-input nrt-input",ref_key:"playerInput",ref:l,id:"player-input-field","onUpdate:modelValue":J[0]||(J[0]=ce=>r.value=ce)},null,512),[[i.vModelText,r.value]]),i.createElementVNode("button",{onClick:X,class:"nrt-button",id:"player-input-submit"}," Submit ")])):(i.openBlock(),i.createElementBlock("div",cb,[i.createElementVNode("div",{onClick:J[1]||(J[1]=ce=>F(0)),ref:"continue",class:"interact-button nrt-button override"}," Continue ",512)]))])),[[fe,ee.value]])])],6)}}}),db={key:0,class:"auto-play-feedback-container"},fb=i.defineComponent({__name:"AutoPlayFeedback",setup(e){const t=Fe(),n=i.computed(()=>t.playMode==="auto"),r=i.computed(()=>t.playMode==="skip"),o=i.computed(()=>n.value?"auto-play-feedback-auto":r.value?"auto-play-feedback-skip":{}),a=i.computed(()=>n.value?"Auto Play":r.value?"Skip":"");return(s,c)=>a.value?(i.openBlock(),i.createElementBlock("div",db,[i.createElementVNode("div",{class:i.normalizeClass(["auto-play-feedback",o.value])},i.toDisplayString(a.value),3)])):i.createCommentVNode("",!0)}}),pb=i.createElementVNode("div",{class:"anchor"},null,-1),Os=i.defineComponent({__name:"game-dialog",setup(e){const t=i.computed(()=>Je().layoutMode),n=i.computed(()=>Ke().inGameInputListener),r=i.ref(Te().inScript),o=i.ref(null),a=Je(),s=we(),c=i.computed(()=>s.stack),d=Fe(),u=i.computed(()=>d.dialog),h=i.ref(null),l=i.ref(null),f=i.ref(null),m=i.computed(()=>{let z="0px";const Q=le().layout.dialogBottomPadding;return typeof Q=="number"?z=`${Q}px`:typeof Q=="string"&&(z=Q),{paddingBottom:z}}),y=i.computed(()=>{if(u.value.length>0)return u.value[u.value.length-1]}),b=i.computed(()=>{if(y.value)return y.value.speaker}),S=i.computed(()=>{if(y.value)return y.value.pose}),T=i.computed(()=>{if(y.value){const z=b.value;let Q=S.value;return z?(Q||(Q="idle"),Q):void 0}}),I=i.computed(()=>{if(!T.value)return;const z=b.value;return G_(z,T.value)}),x=i.computed(()=>{const z=I.value;if(z_(z))return z}),B=i.computed(()=>{const z=I.value;if(W_(z))return z}),F=i.computed(()=>a.dialogWidth),L=i.computed(()=>Te().inScript);i.watch(L,z=>{z?r.value=!0:Fe().playMode!=="normal"?(Fe().playMode==="skip"&&(Fe().playMode="normal"),o.value=setTimeout(()=>{r.value=!1},500)):r.value=!1}),i.onMounted(()=>{if(n.value){const Q=n.value;Q.actions.autoPlay={press:()=>{Fe().toggleAutoPlay()}},Q.actions.skip={press:()=>{Fe().toggleSkip()}}}const z=Q=>{l.value&&l.value.keyboardEvent&&l.value.keyboardEvent(Q)};z.value=qt.on("debouncedKeydown",z)}),i.onUnmounted(()=>{n.value&&(delete n.value.actions.autoPlay,delete n.value.actions.skip),f.value&&qt.off("debouncedKeydown",f.value),o.value&&clearTimeout(o.value)});const P=i.computed(()=>{let z;const Q=`${Je().dialogHeight}px`,te={};if(Je().overlayMode){te.position="absolute";const ke=le().dialogPanel.rightOffset??br.common.dialogPanel.rightOffset;te.right=`${ke}px`;const Ne=le().dialogPanel.bottomOffset??br.common.dialogPanel.bottomOffset;te.bottom=`${Ne}px`}return{...te,width:t.value==="horizontal"?`${F.value}px`:"100%",height:Q,transform:z,transformOrigin:"right"}});function Y(){Fe().toggleAutoPlay()}function W(){Fe().toggleSkip()}function X(z,Q){const te=Zo(z.speaker);let ke=(te==null?void 0:te.name)??"Missing Character";return Q>=1&&u.value[Q-1].speaker===z.speaker&&(ke=void 0),z.choices&&z.choices.forEach(Ne=>{Ne.choice=nn(Ne.choice)}),{title:ke??"",text:z.text,cssClass:z.cssClass,styleId:z.speaker,choices:z.choices,old:Q<u.value.length-1,interactive:z.interactive,textField:z.textField}}function G(z){return z===d.dialog.length-1&&c.value.length>0}return i.watch(u.value,z=>{if(h.value){const Q=h.value;Q.scrollTop=Q.scrollHeight+1e8}}),(z,Q)=>(i.openBlock(),i.createElementBlock(i.Fragment,null,[i.createVNode(fb),i.createVNode(i.Transition,{name:"fade"},{default:i.withCtx(()=>[(x.value||B.value)&&i.unref(a).showDialog?(i.openBlock(),i.createBlock(X_,{key:0,picture:x.value,video:B.value,character:b.value,pose:S.value},null,8,["picture","video","character","pose"])):i.createCommentVNode("",!0)]),_:1}),i.createVNode(i.Transition,{name:"dialog-transition"},{default:i.withCtx(()=>[i.unref(a).showDialog?(i.openBlock(),i.createElementBlock("div",{key:0,class:"dialog override",ref_key:"dialogRef",ref:h,style:i.normalizeStyle(P.value)},[i.createVNode(i.TransitionGroup,{name:"list",tag:"div",class:"dialog-container w-full override",style:i.normalizeStyle(m.value)},{default:i.withCtx(()=>[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(u.value,(te,ke)=>(i.openBlock(),i.createBlock(ub,{ref_for:!0,ref:Ne=>l.value=Ne,key:te.id,options:X(te,ke),active:G(ke),inputListener:n.value},null,8,["options","active","inputListener"]))),128))]),_:1},8,["style"]),(i.openBlock(),i.createBlock(i.Teleport,{to:"#narrat-app"},[i.createElementVNode("div",{class:"auto-skip-buttons flex"},[i.createElementVNode("div",{class:"nrt-button menu-toggle-button auto-button auto",onClick:Y}," Auto "),i.createElementVNode("div",{class:"nrt-button menu-toggle-button auto-button skip",onClick:W}," Skip ")])])),pb],4)):i.createCommentVNode("",!0)]),_:1})],64))}}),mb=["id"],hb=["src"],yb={class:"tab-title"},rd=i.defineComponent({__name:"tab-selector",props:{tab:{},active:{type:Boolean}},emits:["click"],setup(e,{emit:t}){const n=e,r=t,o=i.computed(()=>n.active?"tab-active":"tab-inactive");function a(){r("click")}return(s,c)=>(i.openBlock(),i.createElementBlock("div",{class:i.normalizeClass(["tab",o.value]),id:`tab-${s.tab.id}`,onClick:a},[i.createElementVNode("div",{class:i.normalizeClass(["tab-title-container",s.active?"active":""])},[s.tab.icon?(i.openBlock(),i.createElementBlock("img",{key:0,src:s.tab.icon,alt:"tab icon",class:"tab-icon"},null,8,hb)):i.createCommentVNode("",!0),i.createElementVNode("span",yb,i.toDisplayString(s.tab.label),1)],2)],10,mb))}}),gb={class:"tabs-controller"},_b={key:0,class:"tabs-controller__tabs"},bb={key:1,class:"tab-content"},Tb={key:2},vb=[i.createElementVNode("div",{class:"tab-content__empty"},[i.createElementVNode("p",null,"No tab selected")],-1)],Sb=i.defineComponent({__name:"TabsController",props:{tabs:{},defaultTab:{}},emits:["tab-change","close"],setup(e,{emit:t}){const n=i.ref(Ke().registerInputListener("tabs-controller",{cancel:{press:()=>{r("close")}},system:{press:()=>{r("close")}},menu:{press:()=>{r("close")}},previousTab:{press:()=>{a.value>0&&s(a.value-1)}},nextTab:{press:()=>{a.value<o.tabs.length-1&&s(a.value+1)}}})),r=t,o=e,a=i.ref(o.defaultTab);function s(d){a.value=d,r("tab-change",d)}const c=i.computed(()=>o.tabs[a.value]);return i.onUnmounted(()=>{n.value&&(Ke().unregisterInputListener(n.value),n.value=null)}),(d,u)=>(i.openBlock(),i.createElementBlock("div",gb,[d.tabs.length>1?(i.openBlock(),i.createElementBlock("div",_b,[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(d.tabs,(h,l)=>(i.openBlock(),i.createBlock(rd,{key:h.id,tab:h,active:l===a.value,onClick:()=>s(l),inputListener:n.value},null,8,["tab","active","onClick","inputListener"]))),128))])):i.createCommentVNode("",!0),c.value?(i.openBlock(),i.createElementBlock("div",bb,[c.value?(i.openBlock(),i.createBlock(i.resolveDynamicComponent(c.value.component),{key:0,inputListener:n.value,onClose:u[0]||(u[0]=h=>d.$emit("close"))},null,40,["inputListener"])):i.createCommentVNode("",!0)])):(i.openBlock(),i.createElementBlock("div",Tb,vb))]))}}),wb={class:"menu-container menu-toggle"},kb=["onClick","id"],Cb={class:"nrt-title"},As=i.defineComponent({__name:"menu-buttons",setup(e){const t=ht(),n=i.ref(null);i.onMounted(()=>{Ie.callHook("onGameMounted")}),i.onUnmounted(()=>{n.value&&qt.off("keydown",n.value),Ie.callHook("onGameUnmounted")});function r(h){ht().activeMenu=h}const o=i.computed(()=>t.menus),a=i.computed(()=>t.menu),s=i.computed(()=>{var h;return(((h=a.value)==null?void 0:h.tabs)??[]).filter(l=>l.condition?l.condition():!0).map(l=>({id:l.id,label:l.text,component:l.component}))});function c(){t.closeMenu()}function d(h){t.setActiveTab(h)}function u(){return c()}return(h,l)=>(i.openBlock(),i.createElementBlock("div",wb,[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(o.value,(f,m)=>(i.openBlock(),i.createElementBlock("button",{key:f.id,onClick:y=>r(f.id),id:f.cssId??`${m}-menu-button`,class:"nrt-button menu-toggle-button"},i.toDisplayString(f.label),9,kb))),128)),a.value?(i.openBlock(),i.createBlock(i.Teleport,{key:0,to:"#narrat"},[i.createVNode(_n,{containerCssClass:{[a.value.cssClass]:!0,"menu-modal":!0},onClose:c},{header:i.withCtx(()=>{var f;return[i.createElementVNode("h3",Cb,i.toDisplayString(((f=i.unref(t).tab)==null?void 0:f.text)??a.value.label),1)]}),body:i.withCtx(()=>[i.createVNode(Sb,{onTabChange:d,onClose:u,tabs:s.value,defaultTab:a.value.activeTab},null,8,["tabs","defaultTab"])]),_:1},8,["containerCssClass"])])):i.createCommentVNode("",!0)]))}});function od(e){const t={};return e.selected&&(t.selected=!0),e.clickable&&e.viewportClickable&&!e.transitioning&&(t.interactable=!0),(!e.clickable||!e.viewportClickable)&&(t["nrt-disabled"]=!0),e.transitioning&&(t.transitioning=!0),e.greyed&&(t.greyed=!0),e.hidden&&(t.hidden=!0),e.cssClass&&(t[e.cssClass]=!0),t}function $b(e,t,n){return{selected:t,clickable:e.onClick!==void 0,viewportClickable:Jo(e),transitioning:n,greyed:!1,hidden:!1,cssClass:e.cssClass}}function Eb(e,t,n){const r=Vn(e),o=Ut().getButtonState(e);return{selected:t,clickable:Ut().isButtonInteractible(e),viewportClickable:Jo(r),transitioning:n,greyed:o==="greyed",hidden:o==="hidden"||o===!1,cssClass:r.cssClass}}function Ob(e,t,n){return od(Eb(e,t,n))}function Ab(e,t,n){return od($b(e,t,n))}const Ib=["id"],Nb=["innerHTML"],Pb=i.defineComponent({__name:"screen-object",props:{screenObject:{},layerSelected:{type:Boolean},transitioning:{type:Boolean},activeInteractive:{}},setup(e){const t=e,n=xt();function r(c){t.transitioning||t.screenObject.onClick&&n.clickObject(c)}const o=i.computed(()=>{if(!t.layerSelected)return!1;const c=t.activeInteractive;return c.type==="screenObject"&&c.id===t.screenObject.id}),a=i.computed(()=>Ab(t.screenObject,o.value,t.transitioning)),s=i.computed(()=>{const c={};t.screenObject.opacity!==1&&(c.opacity=t.screenObject.opacity);let d=t.screenObject.x,u=t.screenObject.y,h=t.screenObject.width,l=t.screenObject.height;if(t.screenObject.anchor){const m=t.screenObject.anchor;d=t.screenObject.x-h*m.x,u=t.screenObject.y-l*m.y,c.transformOrigin=`${m.x*100}% ${m.y*100}%`}t.screenObject.scale&&(h=h*t.screenObject.scale,l=l*t.screenObject.scale);const f={...c,left:`${d}px`,top:`${u}px`,width:`${h}px`,height:`${l}px`};return Zg(t.screenObject)&&(f.backgroundImage=`url(${Lr(t.screenObject.image)})`),f});return(c,d)=>{const u=i.resolveComponent("ScreenObject",!0);return i.openBlock(),i.createElementBlock("div",{tabindex:"-1",class:i.normalizeClass(["viewport-object",a.value]),id:`viewport-object-${t.screenObject.id}`,onClick:d[0]||(d[0]=h=>r(c.screenObject)),style:i.normalizeStyle(s.value)},[i.createElementVNode("span",{innerHTML:t.screenObject.text?i.unref(nn)(t.screenObject.text):void 0},null,8,Nb),(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(t.screenObject.children,h=>(i.openBlock(),i.createBlock(u,{transitioning:c.transitioning,key:h.id,screenObject:h},null,8,["transitioning","screenObject"]))),128))],14,Ib)}}}),jb=["id","innerHTML"],Db=i.defineComponent({__name:"viewport-button",props:{id:{},layerSelected:{type:Boolean},transitioning:{type:Boolean},activeInteractive:{}},setup(e){const t=e,n=Ut();i.computed(()=>n.getButtonState(t.id));const r=i.computed(()=>Vn(t.id)),o=r.value.background?Lr(r.value.background):null,a=i.computed(()=>{if(!t.layerSelected)return!1;const h=t.activeInteractive;return h.type==="button"&&h.id===t.id});i.computed(()=>n.isButtonClickable(t.id));const s=i.computed(()=>{const h=r.value.text??"";return nn(h)}),c=i.computed(()=>Ob(t.id,a.value,t.transitioning)),d=i.computed(()=>{const h={};r.value.position.width&&(h.width=`${r.value.position.width}px`),r.value.position.height&&(h.height=`${r.value.position.height}px`),r.value.background&&(h.backgroundImage=`url(${o})`);let l=r.value.position.left,f=r.value.position.top;return r.value.anchor&&(l=r.value.position.left-r.value.position.width*r.value.anchor.x,f=r.value.position.top-r.value.position.height*r.value.anchor.y),{...h,left:`${l}px`,top:`${f}px`}});function u(){n.clickOnButton(t.id)}return(h,l)=>(i.openBlock(),i.createElementBlock("div",{tabindex:"-1",class:i.normalizeClass(["viewport-button",c.value]),id:`viewport-button-${h.id}`,onClick:l[0]||(l[0]=f=>u()),style:i.normalizeStyle(d.value),innerHTML:s.value},null,14,jb))}}),xb=["id"],Lb=["id","loop","muted"],Mb=["src"],Rb=["id"],Is=i.defineComponent({__name:"screen-layer",props:{layer:{},layerIndex:{},transitioning:{type:Boolean},activeInteractive:{}},setup(e){const t=e,n=Te(),r=xt(),o=i.computed(()=>!!(t.activeInteractive&&t.activeInteractive.layer===t.layerIndex)),a=i.computed(()=>r.tree.filter(S=>S.layer===t.layerIndex)),s=i.computed(()=>le().layout.backgrounds.width),c=i.computed(()=>le().layout.backgrounds.height),d=i.computed(()=>t.layer),u=i.computed(()=>{const S=xr(d.value);return S||ae(`Screen ${d.value} doesn't have a config`),S}),h=i.computed(()=>n.isInGame),l=i.computed(()=>u.value.buttons||[]),f=i.computed(()=>u.value.video),m=i.computed(()=>({width:`${s.value}px`,height:`${c.value}px`})),y=i.computed(()=>{let S;return u.value.background!==Uo&&(S=`url(${Lr(u.value.background)})`),{backgroundImage:S,position:"absolute",left:0,top:0,width:`${s.value}px`,height:`${c.value}px`}}),b=i.computed(()=>({position:"absolute",left:0,top:0,width:`${s.value}px`,height:`${c.value}px`}));return(S,T)=>h.value?(i.openBlock(),i.createElementBlock("div",{key:0,class:"viewport-layer",id:`viewport-layer-${d.value}`,style:i.normalizeStyle(m.value)},[f.value?(i.openBlock(),i.createElementBlock("video",{key:0,class:"viewport-layer-background",id:`viewport-layer-background-${d.value}`,style:i.normalizeStyle(b.value),autoplay:"",loop:f.value.loop!==!1,muted:!!f.value.muted},[i.createElementVNode("source",{src:i.unref($t)(u.value.background)},null,8,Mb)],12,Lb)):(i.openBlock(),i.createElementBlock("div",{key:1,class:"viewport-layer-background",id:`viewport-layer-background-${d.value}`,style:i.normalizeStyle(y.value)},null,12,Rb)),(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(l.value,I=>(i.openBlock(),i.createBlock(Db,{key:I,id:I,layerSelected:o.value,transitioning:S.transitioning,activeInteractive:S.activeInteractive},null,8,["id","layerSelected","transitioning","activeInteractive"]))),128)),(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(a.value,I=>(i.openBlock(),i.createBlock(Pb,{key:I.id,screenObject:I,transitioning:S.transitioning,layerSelected:o.value,activeInteractive:S.activeInteractive},null,8,["screenObject","transitioning","layerSelected","activeInteractive"]))),128))],12,xb)):i.createCommentVNode("",!0)}}),Bb=i.defineComponent({__name:"NarratTransition",props:{name:{type:String,required:!0},duration:{type:Number,required:!0},delay:Number},emits:["complete"],setup(e,{emit:t}){i.useSlots();const n=t,r=e,o=i.ref("start"),a=i.reactive({oldSlotClasses:{},oldSlotStyle:{},newSlotClasses:{},newSlotStyle:{}});return i.onMounted(async()=>{const s=`narrat-transition-${r.name}`;a.newSlotClasses={[`${s}-enter-from`]:!0},a.oldSlotClasses={[`${s}-leave-active`]:!0},await At(30),a.oldSlotStyle={transitionDuration:`${r.duration/1e3}s`},a.newSlotStyle={transitionDuration:`${r.duration/1e3}s`},a.oldSlotClasses[`${s}-leave-to`]=!0,a.newSlotClasses[`${s}-enter-active`]=!0,await At(r.delay??0),delete a.newSlotClasses[`${s}-enter-from`],await At(r.duration),o.value="end",n("complete")}),(s,c)=>(i.openBlock(),i.createElementBlock(i.Fragment,null,[o.value!=="end"?(i.openBlock(),i.createElementBlock("div",{key:0,class:i.normalizeClass(["transition-holder",a.oldSlotClasses]),style:i.normalizeStyle(a.oldSlotStyle)},[i.renderSlot(s.$slots,"oldElement")],6)):i.createCommentVNode("",!0),i.createElementVNode("div",{class:i.normalizeClass(["transition-holder",a.newSlotClasses]),style:i.normalizeStyle(a.newSlotStyle)},[i.renderSlot(s.$slots,"newElement")],6)],64))}});function id(e,t,n){return e<t?t:e>n?n:e}const Ns=i.defineComponent({__name:"screens",setup(e){const t=i.computed(()=>Ke().inGameInputListener),n=Te(),r=Ut(),o=xt(),a=i.ref(0),s=i.computed(()=>r.nonEmptyLayers),c=i.computed(()=>{const y=[];return s.value.reduce((b,S,T)=>{const x=xr(S.screen).buttons;if(x)for(const F of x)r.isButtonClickable(F)&&b.push({id:F,type:"button",layer:T});const B=o.tree.filter(F=>F.layer===T);for(const F of B)o.isScreenObjectClickable(F)&&b.push({id:F.id,type:"screenObject",layer:T});return b},y)}),d=i.computed(()=>{if(c.value.length===0)return null;let y=a.value;return y>c.value.length-1&&(y=c.value.length-1),c.value[y]}),u=i.computed(()=>le().layout.backgrounds.width),h=i.computed(()=>le().layout.backgrounds.height),l=i.computed(()=>n.isInGame);function f(y){r.finishTransition(y)}const m=i.computed(()=>{const y=u.value;return{height:`${h.value}px`,width:`${y}px`}});return i.onMounted(()=>{i.nextTick(()=>{if(t.value){const y=t.value.actions;y.previousTab={press:()=>{a.value>0?a.value--:a.value=c.value.length-1,a.value=id(a.value,0,c.value.length-1)}},y.left=y.previousTab,y.nextTab={press:()=>{a.value<c.value.length-1?a.value++:a.value=0,a.value=id(a.value,0,c.value.length-1)}},y.right=y.nextTab,y.viewportSelect={press:()=>{if(d.value){const b=d.value;b.type==="button"?r.clickOnButton(b.id):b.type==="screenObject"&&o.clickObject(o.getObject(b.id))}}}}})}),i.onUnmounted(()=>{if(t.value){const y=t.value;delete y.actions.previousTab,delete y.actions.left,delete y.actions.nextTab,delete y.actions.right}}),(y,b)=>l.value?(i.openBlock(),i.createElementBlock("div",{key:0,class:"viewport",id:"narrat-viewport",style:i.normalizeStyle(m.value)},[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(s.value,(S,T)=>(i.openBlock(),i.createElementBlock("div",{key:S.screen??"",class:"layer-container"},[S.transition?(i.openBlock(),i.createBlock(Bb,{key:0,name:S.transition.transition,duration:S.transition.duration,delay:S.transition.delay,onComplete:()=>f(T)},{oldElement:i.withCtx(()=>[S.transition.oldScreen?(i.openBlock(),i.createBlock(Is,{key:0,layer:S.transition.oldScreen,layerIndex:T,transitioning:!0},null,8,["layer","layerIndex"])):i.createCommentVNode("",!0)]),newElement:i.withCtx(()=>[S.screen?(i.openBlock(),i.createBlock(Is,{key:0,layer:S.screen,layerIndex:T,transitioning:!0},null,8,["layer","layerIndex"])):i.createCommentVNode("",!0)]),_:2},1032,["name","duration","delay","onComplete"])):S.screen?(i.openBlock(),i.createBlock(Is,{key:1,layer:S.screen,layerIndex:T,transitioning:!1,activeInteractive:d.value},null,8,["layer","layerIndex","activeInteractive"])):i.createCommentVNode("",!0)]))),128))],4)):i.createCommentVNode("",!0)}}),Pt=et("hud",{state:()=>({hudStats:{},visible:!0}),actions:{updateConfig(e){for(const t in e.hudStats)this.hudStats[t]||(this.hudStats[t]={value:e.hudStats[t].startingValue})},reset(e){this.$reset(),this.updateConfig(e)},setStat(e,t){this.hudStats[e].value=t,this.getStat(e).value<(sr(e).minValue??0)&&(this.hudStats[e].value=sr(e).minValue??0),this.getStat(e).value>(sr(e).maxValue??1/0)&&(this.hudStats[e].value=sr(e).maxValue??1/0)},addStat(e,t){this.setStat(e,this.getStatValue(e)+t)},getStat(e){return this.hudStats[e]},getStatValue(e){return this.hudStats[e].value},generateSaveData(){return{hudStats:Re(this.hudStats),visible:this.visible}},loadSaveData(e){this.hudStats=Yn(this.hudStats,e.hudStats),this.visible=e.visible},setVisibility(e){this.visible=e}}}),Fb=i.defineComponent({data(){return{}},methods:{getStatImage(e){return $t(this.statsConfig[e].icon)},formatStat(e,t){var c;const n=sr(e),r=n.decimals??2,o=Math.floor(t*10**r)/10**r,a={};(c=n.formatting)!=null&&c.style&&(a.style=n.formatting.style,n.formatting.style==="currency"&&(a.currency=n.formatting.currency??"USD",a.currencyDisplay="narrowSymbol"),n.formatting.style==="unit"&&(a.unit=n.formatting.unit??"day"));let s;try{s=o.toLocaleString(void 0,a)}catch(d){ae(`Error formatting HUD stat, probably using an invalid config: ${d}`),console.error(d),s=o.toLocaleString()}return s},statPrefix(e){const t=sr(e);return t.prefix??(t.suffix||t.hideName?"":t.name)},statSuffix(e){return sr(e).suffix??""}},computed:{...Yr(Pt,["hudStats"]),...Yr(Je,["layoutMode"]),statsConfig(){return le().hudStats},stats(){return this.hudStats},hudStyle(){let e="0";return this.layoutMode==="horizontal"&&(e=`${Ii()+(le().dialogPanel.rightOffset??br.common.dialogPanel.rightOffset)}px`),{right:e}},hasHud(){return Pt().visible===!1?!1:Object.keys(Pt().hudStats).length>0}}}),Vb=["src"],Ub=["innerHTML"],qb=["innerHTML"];function Hb(e,t,n,r,o,a){return e.hasHud?(i.openBlock(),i.createElementBlock("div",{key:0,class:"hud",style:i.normalizeStyle(e.hudStyle)},[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(e.stats,(s,c)=>(i.openBlock(),i.createElementBlock("div",{key:c,class:"hud-stat"},[i.createElementVNode("img",{class:"hud-icon",src:e.getStatImage(c)},null,8,Vb),i.createElementVNode("span",{class:"bold hud-text",innerHTML:e.statPrefix(c)},null,8,Ub),i.createElementVNode("span",null,i.toDisplayString(e.formatStat(c,s.value)),1),e.statSuffix?(i.openBlock(),i.createElementBlock("span",{key:0,innerHTML:e.statSuffix(c)},null,8,qb)):i.createCommentVNode("",!0)]))),128))],4)):i.createCommentVNode("",!0)}const Ps=zt(Fb,[["render",Hb]]),js=i.defineComponent({__name:"in-game",setup(e){const t=Ke(),n=i.computed(()=>t.inGameInputListener),r=Te(),o=Je(),a=i.computed(()=>o.layoutMode),s=i.computed(()=>r.saving),c=i.ref(null),d=Fe(),u=i.ref(null),h=i.computed(()=>s.value&&!s.value.withPrompt||s.value&&c.value),l=i.computed(()=>{let b="row";return a.value==="vertical"&&(b="column"),{flexDirection:b}});function f(b){if(c.value=null,b===null){xs(b,!1);return}xs(b,!0)}function m(){c.value=!0}function y(){c.value=!1,xs(null,!1),c.value=null}return i.onBeforeMount(()=>{t.createInGameInputListener()}),i.onMounted(()=>{u.value=qt.on("debouncedKeydown",b=>{Te().debugMode||((b.key==="a"||b.key==="A")&&d.toggleAutoPlay(),(b.key==="s"||b.key==="S")&&d.toggleSkip())})}),i.onUnmounted(()=>{n.value&&t.removeInGameInputListener(),u.value&&qt.off("debouncedKeydown",u.value)}),i.computed(()=>Pt().visible===!1?!1:Object.keys(Pt().hudStats).length>0),(b,S)=>(i.openBlock(),i.createElementBlock("div",{class:"game",style:i.normalizeStyle(l.value)},[i.createVNode(Ps),i.createVNode(As),i.createVNode(Ns),i.createVNode(Os),h.value?(i.openBlock(),i.createBlock(Ju,{key:0,mode:"pick",onChosen:f,onClose:S[0]||(S[0]=()=>f(null))})):i.createCommentVNode("",!0),s.value&&s.value.withPrompt&&c.value===null?(i.openBlock(),i.createBlock(Xo,{key:1,prompt:"Would you like to save the game?",onConfirm:m,onRefuse:y})):i.createCommentVNode("",!0)],4))}}),Kb={class:"chapter-title-scene"},Gb=["innerHTML"],zb=["innerHTML"],Wb=i.defineComponent({__name:"chapter-title",props:{options:{}},setup(e){const t=e,n=i.ref(null);function r(){n.value=null,Nt().changeScene("playing"),we().jumpToLabel(t.options.next_label)}return i.onMounted(()=>{n.value=setTimeout(r,t.options.duration??2e3)}),i.onUnmounted(()=>{n.value&&(clearTimeout(n.value),n.value=null)}),(o,a)=>(i.openBlock(),i.createElementBlock("div",Kb,[i.createElementVNode("h1",{class:"title chapter-title",innerHTML:t.options.title},null,8,Gb),t.options.subtitle?(i.openBlock(),i.createElementBlock("h2",{key:0,class:"subtitle chapter-subtitle",innerHTML:t.options.subtitle},null,8,zb)):i.createCommentVNode("",!0)]))}}),sd={"engine-splash":{id:"engine-splash",component:i.shallowRef(bs),props:{}},"game-splash":{id:"game-splash",component:i.shallowRef(Ss),props:{}},"start-menu":{id:"start-menu",component:i.shallowRef($s),props:{}},playing:{id:"playing",component:i.shallowRef(js),props:{}},"chapter-title":{id:"chapter-title",component:i.shallowRef(Wb),props:{}}};let an={};function Qb(e){an=e}function Yb(){sd["engine-splash"].onFinished=()=>{Nt().onEngineSplashFinished()},Nt().scenes=sd}function Jb(){return an}function ad(){for(const e in an){const t=an[e],n=t.store();let r;t_(t)&&(r=Ve()[t.config]),n.reset&&!t.avoidReset&&n.reset(r)}Ie.plugins.forEach(e=>{e.reset&&e.reset()})}function Xb(){const e={},t={};for(const n in an){const r=an[n];if(Qu(r)){const o=r.store();o.generateSaveData?e[r.save]=o.generateSaveData():ae(`Store ${n} has no generateSaveData method. Trying to generate save data for ${r.save}`)}if(Yu(r)){const o=r.store();o.generateGlobalSaveData?t[r.globalSave]=o.generateGlobalSaveData():ae(`Store ${n} has no generateGlobalSaveData method. Trying to generate save data for ${r.globalSave}`)}}return Ie.plugins.forEach(n=>{n.save&&(e.plugins[n.pluginId]=n.save())}),Ie.customStores().forEach(([n,r])=>{if(r.save){const o=r.save();o&&(o.customStores[n]=o)}}),{gameSave:e,globalSave:t}}function Zb(e){for(const t in an){const n=an[t];if(Qu(n)){const r=n.store();r.loadSaveData?r.loadSaveData(e[n.save]):ae(`Store ${t} has no loadSaveData method. Trying to load save data for ${n.save}`)}}Ie.plugins.forEach(t=>{t.load&&e.plugins[t.pluginId]&&t.load(e.plugins[t.pluginId])}),Ie.customStores().forEach(([t,n])=>{n.load&&n.load(e.customStores[t])})}function ld(e){for(const t in an){const n=an[t];if(Yu(n)){const r=n.store();r.loadGlobalSaveData?r.loadGlobalSaveData(e[n.globalSave]):ae(`Store ${t} has no loadGlobalSaveData method. Trying to load global save data for ${n.globalSave}`)}}}function eT(e){Zb(e.gameSave),ld(e.globalSave)}function Ds({slotId:e,name:t}){const n=Te(),r=e??n.saveSlot;n.saveData=Ep({slot:r,name:t,extractedSave:Xb()})}function tT(e){eT(e)}function cd(){we().globalData={},bn().globalSave.data={},Ds({})}function ud({saveName:e,withPrompt:t}){return new Promise(n=>{we().hasJumped?Te().startManualSave(n,e,t):n()})}function xs(e,t){var r;const n=Te();if(!n.saving){ae("No saving in progress!");return}if(!t||!e){n.cancelManualSave();return}n.saveData?(Op(n.saveData,mr(n.playTime.start,n.playTime.previousPlaytime),e.slotId,(r=n.saving)==null?void 0:r.name),n.alert("Success","Game saved!")):ae("There was no data to save!"),n.cancelManualSave()}const we=et("vm",{state:()=>({stack:[],data:{},globalData:{},lastLabel:"main",script:{},labelStack:["main"],commandsWaitingForPlayerAnswer:[],hasJumped:!1}),actions:{generateSaveData(){return{lastLabel:this.lastLabel,data:Ha(this.data,e=>Wu(e)?{_entityType:e._entityType,id:e.id}:e)}},generateGlobalSaveData(){return{data:Re(this.globalData)}},loadSaveData(e){this.lastLabel=e.lastLabel,this.data=e.data,this.findEntitiesInData(this.data)},loadGlobalSaveData(e){this.globalData=e.data},findEntitiesInData(e){Ku(this.data,(t,n,r)=>{if(Wu(t)){const o=xt().getObject(t.id);o?r[n]=o:Zn(`Trying to reload sprite ${n} (${JSON.stringify(t)} - ${t.id}) but it does not exist.`)}})},setReturnValue(e){this.currentFrame.returnValue=e},waitForPlayerAnswer(e){this.commandsWaitingForPlayerAnswer.push(e)},popAnswerQueue(){return this.commandsWaitingForPlayerAnswer.pop()},addScopedVariable(e,t){this.currentFrame&&(this.currentFrame.scope[e]=t)},async loadScripts(e){this.readGlobalData();const t=await this.loadConfigScriptFiles(e),n=Te().options.scripts;this.addAllScripts([...t,...n])},async loadConfigScriptFiles(e){const t=[];for(const r of e)t.push(Qo(Ai(r)));return(await Promise.all(t)).map((r,o)=>({fileName:e[o],code:r,id:e[o],type:"script"}))},addAllScripts(e){const t=Date.now();for(const r of e)Ie.addNarratScript(r);const n=Date.now();Ft.log(`scripts parsed in ${n-t} ms`)},start(){this.setStack({currentIndex:0,branchData:{branch:Ie.script.main.branch},label:"main"}),this.setStack({currentIndex:0,branchData:{branch:Ie.script.main.branch},label:"main"})},setLastLabel(e){this.lastLabel=e},reset(){this.$reset(),this.stack=[],this.data={},this.hasJumped=!0,this.setStack({currentIndex:0,branchData:{branch:Ie.script.main.branch},label:"main"})},readGlobalData(){this.globalData=bn().globalSave.data},setScript(e){Ie.script=e},overrideData(e){this.data=e},setStack(e){this.stack=[];const t=this.frameOptionsToFrame(e);this.lastLabel=e.label,this.stack.push(t)},frameOptionsToFrame(e){const t=e.branchData,n={...e,blocks:[],scope:{},returnValue:null};if(this.addBlock(n,{branchData:t,currentIndex:e.currentIndex}),e.scope&&(n.scope=e.scope),e.args&&e.branchData.args)for(const[r,o]of e.branchData.args.entries())e.args.length>r&&(n.scope[o]=e.args[r]);return n},addBlock(e,t){e.blocks.push(t)},async addAndRunBlock(e){const t=this.currentFrame;if(!t)throw new Error("No frame to add block to");return this.addBlock(t,e),await this.runBlock()},setData(e,t){const n=Mr();Of(n,e,t)},addInstruction(e,t){const n=Mr();Af(n,e,t)},addFrame(e){if(!e.label)if(this.currentFrame)e.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 t=this.frameOptionsToFrame(e);this.stack.push(t)},async addAndRunFrame(e){return await this.addFrame(e),await this.runFrame()},async runFrame(){if(!this.currentFrame)throw new Error("Tried to run a frame but there is no current frame");let t;for(;this.currentBlock;){const n=await this.runBlock();if(n===Bo||n===Fo)return this.cleanFrame(),n;if(n===es)return this.cleanFrame()}return this.cleanFrame(),t},cleanFrame(){const e=this.currentFrame,{returnValue:t}=e;return this.stack.splice(this.stack.length-1,1),t},async runBlock(){const e=this.currentBlock;if(!e)throw new Error("Tried to run a block but there is no current block");let t;for(;this.currentLine;){if(t=await this.runLineOnly(),xm(t))return this.cleanBlock(),t;e.currentIndex++}return this.cleanBlock(),t},cleanBlock(){if(!this.currentFrame){ae("Tried to clean a block but there is no current frame");return}if(!this.currentFrame.blocks){ae("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 e=await this.runFrame();for(;e===Bo;){const t=this.jumpTarget;if(!t){ae("Tried to jump but no target was set");return}this.hasJumped=!0,this.setStack(t),await Ds({}),e=await this.runFrame()}e!==Fo&&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(le().gameFlow.labelToJumpOnScriptEnd&&this.lastLabel!==le().gameFlow.labelToJumpOnScriptEnd){this.jumpToLabel(le().gameFlow.labelToJumpOnScriptEnd);return}Te().endingScript(),Te().options.debug&&le().debugging.showScriptFinishedMessage},async runLineOnly(){const e=this.currentLine;if(!e){ae("There is no line of script to run.");return}return Te().startingScript(),await yd(e)},async runLabelFunction(e,...t){const n=Ie.script[e];if(!n){ae(`Tried to run a label that doesn't exist: ${e}`);return}const r={currentIndex:0,branchData:n,label:e,args:t};return this.addAndRunFrame(r)},runCustomFrame(e){this.addAndRunFrame(e)},async jumpToLabel(e,...t){const n=Ie.script[e];if(!n){ae(`Label ${e} doesn't exist. Is the file with this label added in the list of script files to load in the config?`);return}e!==this.lastLabel&&(this.hasJumped=!0),this.setLastLabel(e),this.setStack({currentIndex:0,branchData:n,args:t,label:e}),this.runGame()},async runThenGoBackToPreviousDialog(e,...t){const n=Fe(),r=n.dialog[n.dialog.length-1],o=Te().inScript,a=await this.runLabelFunction(e,...t);return o?n.dialog.push(r):Te().endingScript(),a}},getters:{currentFrame(e){return e.stack[e.stack.length-1]},scope(){var e;return((e=this.currentFrame)==null?void 0:e.scope)??{}},currentBlock(){const e=this.currentFrame;return e?e.blocks[e.blocks.length-1]:void 0},currentLine(){const e=this.currentBlock;if(e&&e.branchData.branch.length>e.currentIndex)return e.branchData.branch[e.currentIndex]},commandWaitingForAnswer(){if(this.commandsWaitingForPlayerAnswer.length>0)return this.commandsWaitingForPlayerAnswer[0]}}}),dd=new Ao;dd.setupDebugger(!1);const Ht=dd.logger;function nT(e){return rT((t,n,r)=>_T(t,n,r),e.code,e.fileName)}function rT(e,t,n){const r={fileName:n,currentLine:0,error:(s,c)=>e(r,s,c),processCommandsFunction:Ls,indentSize:0};r.indentSize=fT(r,t);const o=cT(r,t);r.currentLine=0,Ht.log(o);const a={};for(const s of o){s.code.search(":")===-1&&r.error(s.line,"First indentation level should only be used to specify labels");const d=s.code.replace(":","").split(/ +/g),u=d[0],h=d.slice(1);s.branch||r.error(s.line,"This line should have a branch but doesn't"),a[u]={branch:Ls(r,s.branch,void 0),args:h}}return a}function Ls(e,t,n){const r=e.currentLine;if(!t){let s=0;return n&&(s=n.line),e.error(s,"Processing of command failed because the current branch has no lines inside"),[]}const o={processCommandsFunction:Ls,parserContext:e,lines:t,currentLine:0,line:t[0]},a=[];for(;o.currentLine<t.length;){const s=t[o.currentLine];o.line=s;const c=Ms(e,s,s.expression),d=Ie.commands[c.command.operator];let u=d==null?void 0:d.parser;u||(u=Ie.commands.text.parser),Ht.log(Ie.commands.text);const{newLine:h}=u(o,c);o.currentLine=h,e.currentLine=r+h,a.push(c)}return a}function Ms(e,t,n){Ht.log(n),typeof n[0]!="string"&&e.error(t.line,"Expression operator should be a string");const r={code:t.code,fileName:e.fileName,line:t.line,command:{staticOptions:{},commandType:n[0],operator:n[0],args:n.slice(1).map(s=>oT(e,t,s)),options:{}}},o=n[0];if(!Ie.commands[o]){const s=["else","success","failure"];!im(o)&&!s.includes(o)&&e.error(t.line,`Unknown command ${o}`)}return r}function oT(e,t,n){return Array.isArray(n)?Ms(e,t,n):n}function iT(e){return e==="true"?!0:e==="false"?!1:e==="undefined"?void 0:e===null?null:isNaN(Number(e))?e:Number(e)}function sT(e,t){t.charAt(t.length-1)===":"&&(t=t.substr(0,t.length-1));const n=aT(t),[r]=pd(e,n);return r}function aT(e){const t=/(["'])(?:\\\1|.)*?\1/g,n=[];let r;for(;(r=t.exec(e))!=null;)n.push(r);let o=0,a=[];for(const s of n){const c=s.index;if(c>o){const u=e.substr(o,c-o),h=fd(u);a=[...a,...h]}const d=s[0].replace(/\\/g,"");a.push(`$$"${d.substring(1,d.length-1)}`),o=c+s[0].length}return a=[...a,...fd(e.substr(o))],a.push(")"),a}function fd(e){e=e.replace(/: *$/g,"");let t=e.split(" ").filter(n=>n);return t=t.reduce((n,r)=>[...n,...r.split(/(\(|\))/g)].filter(o=>o&&o),[]),t.map(n=>iT(n))}function pd(e,t){Ht.log("===============");let n=[],r=0,o=md(t)+r,a=Rs(t)+r;for(Ht.log(`Parsing expression: ${t}`),Ht.log(`Parenthesis start index: ${o} - end: ${a}`);o!==-1&&a>o;){n=[...n,...t.slice(r,o)];const d=t.slice(o+1);Ht.log(`Found a sub expression. Before: ${n} - After: ${d}`),r=o;const[u,h]=pd(e,d),l=r+h;n.push(u),r=l+1;const f=t.slice(r);Ht.log(`Sub expression came back: ${u} - rest of string: ${f}`),o=md(f),o!==-1&&(o+=r),a=Rs(f),a!==-1&&(a+=r)}a!==-1&&Ht.log("Found parenthesis end before new opening parenthesis, close this expression");const s=Rs(t.slice(r))+r;if(s===-1)return e.error(e.currentLine,'Expression is not closed (missing ")" closing parenthesis)'),[n,s];const c=t.slice(r,s);return Ht.log(`End of expression: ${s} - ${c}`),Ht.log("==================="),n=[...n,...c],lT(e,n),[n,s+1]}function lT(e,t){t.length<1&&e.error(e.currentLine,"Expression is empty")}function md(e){return e.findIndex(t=>t==="(")}function Rs(e){return e.findIndex(t=>t===")")}function cT(e,t){const n=t.split(/\r?\n|$/).map(o=>{const a=o.search(/ *\/\//g);return a!==-1?o.substr(0,a):o});return hd(e,n,0,0).lines}function hd(e,t,n,r){let o=!0,a=n;const s=[];for(;o&&!(a>=t.length);){let c=t[a];if(c.search(/^\s*$/)!==-1)a++;else{const d=dT(e,c);if(c=c.substring(d*e.indentSize),uT(e,d,a),d<r)o=!1;else if(d>r){(s.length===0||d-r!==1)&&e.error(a,"Wrong double indentation");const u=hd(e,t,a,d);s[s.length-1].branch=u.lines,a=u.endLine}else{const u=sT(e,c),h={code:c,indentation:d,line:a,expression:u};s.push(h),a++,e.currentLine=a}}}return{lines:s,endLine:a}}function uT(e,t,n){t%1!==0&&e.error(n,`Indentation level of ${t} incorrect. Expected indentation of ${e.indentSize} spaces for this file.`)}function dT(e,t){return t.search(/[^ ]/)/e.indentSize}function fT(e,t){const n=/\n( *)/,r=t.match(n);return!r||r.length<2?(e.error(0,"Can't detect indentation level. Make sure you indent with at least 2 spaces and consistently"),0):(Ht.log(r),r[1].length)}class pT{constructor(){xe(this,"plugins",[]);xe(this,"pinia");xe(this,"script",{});xe(this,"scripts",[]);xe(this,"commands",{})}addCommand(t){this.commands[t.keyword]=t}addPlugin(t){if(this.plugins.push(t),t.customCommands)for(const n of t.customCommands)this.addCommand(n)}callHook(t,...n){for(const r of this.plugins)typeof r[t]=="function"&&r[t](...n)}addNarratScript(t){const n=nT(t);this.script={...this.script,...n},this.scripts.push(t)}customStores(){const t=[];for(const n of this.plugins)if(n.customStores)for(const r in n.customStores)t.push([r,n.customStores[r](this.pinia)]);return t}addCustomSettings(){for(const t of this.plugins)if(t.customSettings)for(const n in t.customSettings)sn().addCustomSetting(n,t.customSettings[n])}}const Ie=new pT;async function yd(e,t){var r;const n=we();try{return await ei(e,t)}catch(o){console.error(o),console.error(e),ae(`Narrat script runtime error at <span class="error-filename">${e.fileName}:${e.line+1}</span>
69
+ `:""}var Ng=Ig,Pg={dump:Ng};function _s(e,t){return function(){throw new Error("Function yaml."+e+" is removed in js-yaml 4. Use yaml."+t+" instead, which is now safe by default.")}}var jg=pt,Dg=Gc,xg=Yc,Lg=tu,Mg=nu,Rg=cs,Bg=Cu.load,Fg=Cu.loadAll,Vg=Pg.dump,Ug=kt,qg={binary:au,float:eu,map:Qc,null:Jc,pairs:cu,set:uu,timestamp:iu,bool:Xc,int:Zc,merge:su,omap:lu,seq:Wc,str:zc},Hg=_s("safeLoad","load"),Kg=_s("safeLoadAll","loadAll"),Gg=_s("safeDump","dump"),zg={Type:jg,Schema:Dg,FAILSAFE_SCHEMA:xg,JSON_SCHEMA:Lg,CORE_SCHEMA:Mg,DEFAULT_SCHEMA:Rg,load:Bg,loadAll:Fg,dump:Vg,YAMLException:Ug,types:qg,safeLoad:Hg,safeLoadAll:Kg,safeDump:Gg};function Qo(e){return new Promise((t,n)=>{const r=new XMLHttpRequest;r.onload=function(){r.status>=200&&r.status<300?t(r.responseText):(ae(`Failed to load file ${e}`,r.status),n(r.status))},r.open("GET",e),r.send()})}async function ro(e){try{const t=await Qo(e);let n;if(e.endsWith(".json"))n=JSON.parse(t);else if(e.endsWith(".yaml"))n=zg.load(t);else{const r=`Unsupported file type for data file ${e} (must be .json or .yaml)`;throw new Error(r)}if(!n)throw new Error(`Data loaded from ${e} is empty`);return n}catch(t){throw console.error(`Failed to load data file ${e}: ${t}`),t}}const Wg=(e,t)=>{const n={};for(const r in e)n[r]=t(e[r]);return n},Ku=(e,t)=>{for(const n in e){const r=e[n];t(r,n,e),typeof r=="object"&&r!==null&&Ku(r,t)}},Xn={};async function Qg(e){return Xn[e]?Xn[e]:Gu(e,e)}async function Yg(e){Ft.log("Loading images");const t=[],n=async(o,a)=>await Gu(o,a),r=(o,a)=>{t.push(n(o,a))};for(const o in e.common.images){const a=e.common.images[o];r(o,a)}if(e.preload.images)for(const o in e.preload.images.assets){const a=e.preload.images.assets[o];r(o,a)}for(const o in e.screens.screens){const a=e.screens.screens[o];if(a.background&&!e.common.images[a.background]&&!a.video&&r(a.background,a.background),a.buttons)for(const s in a.buttons){const c=a.buttons[s];typeof c=="object"&&c.background&&!e.common.images[c.background]&&r(c.background,c.background)}}return Promise.all(t)}async function Gu(e,t){if(Xn[e])return Xn[e];if(t===Uo){const r=new Image;return Xn[e]=r,r}const n=new Promise((r,o)=>{const a=new Image;a.onload=()=>{Xn[e]=a,r(a)},a.onerror=s=>{ae(`Failed to load image ${e} at ${t}`,s),o(s)},a.src=$t(t)});return Xn[e]=n,n}const Yo={};function Jg(e){return Yo[e]??{}}function zu(e,t,n){const r=Jg(e.transition),o=e.duration??r.duration??500,a=e.delay??r.delay??0;return{...e,resolve:n,duration:o,delay:a,oldScreen:t}}const vt=et("notifications",{state:()=>({notifications:[],enabled:!0}),actions:{async addNotification(e,t,n){if(!this.enabled)return;e=nn(e);const r=`${Date.now()}-${Math.random()*1e4}`;this.notifications.push({id:r,text:e,description:t,icon:n}),le().notifications.alsoPrintInDialogue&&Uc(`[NOTIFICATION] ${e}`),await At(le().notifications.timeOnScreen*1e3),this.deleteNotification(r)},deleteNotification(e){const t=this.findNotifications(e);t&&this.notifications.splice(this.notifications.indexOf(t),1)},findNotifications(e){return this.notifications.find(t=>t.id===e)},disableNotifications(){this.enabled=!1;for(const e in this.notifications)this.deleteNotification(e)},enableNotifications(){this.enabled=!0}}}),mt=et("inventory",{state:()=>({items:{},interactionTags:{}}),actions:{generateSaveData(){return{items:Re(this.items),interactionTags:Re(this.interactionTags)}},loadSaveData(e){this.items={...this.items,...e.items},this.interactionTags={...e.interactionTags}},updateConfig(e){Object.keys(e.items).forEach(t=>{this.items[t]||(this.items[t]={amount:0,id:t})})},reset(e){this.$reset(),this.updateConfig(e)},hasItem(e,t){var n;return t||(t=1),((n=this.items[e])==null?void 0:n.amount)>=t},getExistingItem(e){return this.items[e]},getItemAmount(e){var t;return((t=this.getExistingItem(e))==null?void 0:t.amount)||0},add(e){const t=this.getExistingItem(e.id);t?t.amount+=e.amount:this.items[e.id]={...e};const n=en(e.id).name,r=e.amount>1?`${n} x ${e.amount}`:n;vt().addNotification(`Received item: ${r}`)},enableInteraction(e){e||(e="default"),this.interactionTags[e]={blockedInteraction:!1}},disableInteraction(e){e||(e="default"),this.interactionTags[e]={blockedInteraction:!0}},onScriptStart(){const e=le().interactionTags;Object.keys(e).forEach(t=>{e[t].onlyInteractOutsideOfScripts&&this.disableInteraction(t)})},onScriptEnd(){const e=le().interactionTags;Object.keys(e).forEach(t=>{e[t].onlyInteractOutsideOfScripts&&this.enableInteraction(t)})},isInteractionTagBlocked(e){return e||(e="default"),this.interactionTags[e]?this.interactionTags[e].blockedInteraction:!1},remove(e){const t=this.getExistingItem(e.id);t&&(t.amount-=e.amount,vt().addNotification(`Lost item: ${en(e.id).name} x ${e.amount}`),t.amount<=0&&this.deleteItem(e.id))},deleteItem(e){this.getExistingItem(e)&&(this.items[e].amount=0)},canUseItem(e){var n;const t=en(e.id);return!!(t&&t.onUse&&!this.isInteractionTagBlocked(t.tag)&&!((n=Fe().currentDialog)!=null&&n.choices))},useItem(e){let t=!1;const n=en(e.id);if(e&&this.canUseItem(e)&&n){const r=n.onUse;t=!0,Qn("onItemUsed"),r.action==="jump"?we().jumpToLabel(r.label):r.action==="run"?we().runThenGoBackToPreviousDialog(r.label,!0):(t=!1,ae(`Unknown action ${r.action}`))}return t}}}),Ut=et("screens",{state:()=>({layers:[{screen:"default"}],buttons:{}}),actions:{setScreen(e,t,n){return new Promise(r=>{const o=this.layers[t||0];let a;const s=(o==null?void 0:o.screen)??null;if(s===e){r();return}n&&(a=zu(n,s,r)),this.layers[t||0]={screen:e,transition:a},a||r()})},finishTransition(e){const t=this.layers[e];if(!t)ae(`Tried to finish transition on layer ${e} but it doesn't exist`);else if(t.transition){const n=t.transition.resolve;delete t.transition,n()}},transitionScreen(e,t,n){return this.setScreen(e,n??0,t)},emptyLayer(e,t){return new Promise(n=>{const r=this.layers[e];if(!r){Zn(`Tried to empty layer ${e} but it doesn't exist`);return}if(t){const o=r.screen,a=zu(t,o,n);r.transition=a}r.screen="@empty",t||n()})},updateConfig(e){console.log("update config!");const t=Ve().buttons.buttons;for(const n in t)this.buttons[n]||(this.buttons[n]={state:t[n].enabled})},reset(e){this.$reset(),this.updateConfig(e)},changeButton(e,t){if(!this.buttons[e]){ae(`Tried to change button ${e} but it doesn't exist`);return}this.buttons[e].state=t},generateSaveData(){return{layers:Re(this.layers).filter(e=>e).map(e=>e.screen??null),buttons:Re(this.buttons)}},loadSaveData(e){this.layers=e.layers.map(t=>(t!==null&&typeof t!="string"&&(t=null),{screen:t})),this.buttons=Yn(this.buttons,e.buttons)},isButtonDisabled(e){const t=this.getButtonState(e);return t==="hidden"||t==="greyed"||t===!1},isButtonInteractible(e){const t=this.getButtonState(e);return t?t===!0:!1},isButtonClickable(e){if(!this.isButtonInteractible(e))return!1;const n=Vn(e);return!!Jo(n)},getButtonState(e){const t=Vn(e),n=this.buttons[e],r=t.tag||"default",o=n.state;return o===!0&&mt().isInteractionTagBlocked(r)?"greyed":o},clickOnButton(e){if(!this.isButtonClickable(e))return;const t=we(),n=Vn(e);Qn("onButtonClicked");const r=n.action;r&&(n.actionType==="run"?t.runLabelFunction(r):t.jumpToLabel(r))}},getters:{nonEmptyLayers(e){return e.layers.filter(t=>t)},isTransitioning(e){return e.layers.some(t=>t==null?void 0:t.transition)}}});function Jo(e){if(!Te().inScript)return!0;const t=Ci().clickableDuringScriptsByDefault;if(t)return e.scriptClickable!==!1;if(!t)return e.scriptClickable===!0}const Xg=["screenObject","sprite"];function Wu(e){return typeof e=="object"&&e!==null&&Xg.includes(e._entityType)}function Zg(e){return typeof e=="object"&&e!==null&&e._entityType==="sprite"}function e_(e){if(e.includes(" ")){const t=e.split(" ");return{label:t[0],args:t.slice(1)}}else return{label:e}}const xt=et("screenObjects",{state:()=>({tree:[],objectsList:{}}),actions:{addObject(e){e.parent?e.parent.children.push(e):this.tree.push(e),this.objectsList[e.id]=e},createObject(e){const t={_entityType:"screenObject",id:Gn(),name:"Screen Object",tags:[],x:0,y:0,anchor:{x:0,y:0},width:1,height:1,opacity:1,scale:1,layer:0,children:[],...e};return this.addObject(t),t},destroyObject(e){let t=e;typeof t=="string"&&(t=this.getObject(t));for(let n=t.children.length-1;n>=0;n--)this.destroyObject(t.children[n]);if(t.parent){const n=t.parent,r=n.children.indexOf(t);r!==-1?n.children.splice(r,1):console.warn(`Could not find object ${t.id} in parent's children`)}else{const n=this.tree.indexOf(t);n!==-1?this.tree.splice(n,1):console.warn(`Object to destroy not found in store (${t.id})`)}delete this.objectsList[t.id]},createSprite(e){const t=this.createObject(e);return t._entityType="sprite",Qg(e.image).then(n=>{const r=this.getObject(t.id);r.width===1&&r.height===1&&(r.width=n.width,r.height=n.height)}),t},getObject(e){return this.objectsList[e]},isScreenObjectClickable(e){return Jo(e)?!!e.onClick:!1},clickObject(e){if(this.isScreenObjectClickable(e)&&e.onClick){Qn("onSpriteClicked");let t;if(typeof e.onClick=="string"){const n=e_(e.onClick);t={label:n.label,args:n.args}}else t=e.onClick;t.method=t.method??e.clickMethod??"jump",t.args=t.args??[],t.method==="run"?we().runThenGoBackToPreviousDialog(t.label,...t.args):t.method==="jump"?we().jumpToLabel(t.label,...t.args):ae(`Unknown sprite click method ${e.clickMethod}`)}},generateSaveData(){return{tree:Re(this.tree.map(e=>e.id)),objectsList:Re(Wg(this.objectsList,e=>this.screenObjectToSave(e)))}},loadSaveData(e){this.objectsList=this.loadAllObjects(e.objectsList),this.tree=e.tree.map(t=>this.objectsList[t])},reset(){this.$reset()},screenObjectToSave(e){return{...e,children:e.children.map(t=>t.id),parent:e.parent?e.parent.id:void 0}},loadAllObjects(e){for(const t of Object.values(e)){const n=t;n.parent=n.parent?e[n.parent]:void 0,n.children=n.children.map(r=>e[r])}return e},emptyLayer(e){for(let t=this.tree.length-1;t>=0;t--){const n=this.tree[t];n.layer===e&&this.destroyObject(n)}},emptyAllLayers(){for(let e=this.tree.length-1;e>=0;e--){const t=this.tree[e];this.destroyObject(t)}}}});function Qu(e){return"save"in e}function Yu(e){return"globalSave"in e}function t_(e){return"config"in e}const n_=i.defineComponent({props:{percentage:Number,step:String},methods:{loadingStyle(){return{width:`${this.percentage*60}vw`}}},computed:{}}),r_={id:"loading-bar"},o_={id:"loading-text"};function i_(e,t,n,r,o,a){return i.openBlock(),i.createElementBlock("div",r_,[i.createElementVNode("div",{id:"inner-loading-bar",style:i.normalizeStyle(e.loadingStyle())},null,4),i.createElementVNode("div",o_,[i.createElementVNode("h3",null,"Loading "+i.toDisplayString(Math.floor(e.percentage*100))+"% - "+i.toDisplayString(e.step),1)])])}const s_=zt(n_,[["render",i_]]),a_="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",l_={id:"engine-splash-screen",class:"flex justify-center items-center"},c_={id:"engine-splash-title"},u_=["src"],bs=i.defineComponent({__name:"engine-splash",emits:["finished"],setup(e,{emit:t}){const n=t,r=i.ref("hidden"),o=i.computed(()=>({transitionDuration:`${h.value}s`})),a=i.computed(()=>({invisible:r.value!=="appear"})),s=Te(),c=i.computed(()=>{var m;return((m=le().splashScreens)==null?void 0:m.engineSplashScreen)??{}}),d=i.computed(()=>typeof c.value.overrideText=="string"?c.value.overrideText:"Made with narrat engine"),u=i.computed(()=>c.value.overrideLogo??a_),h=i.computed(()=>typeof c.value.fadeDuration=="number"?c.value.fadeDuration:.8),l=i.computed(()=>typeof c.value.timeBeforeFadeout=="number"?c.value.timeBeforeFadeout:1.5);i.onMounted(async()=>{if(await At(10),r.value="appear",c.value.skip||s.options.debug){f();return}await At(h.value*1e3),await At(l.value*1e3),r.value="disappear",await At(h.value*1e3),f()});function f(){s.loading.loaded?n("finished"):s.listener.once("gameLoaded",()=>{n("finished")})}return(m,y)=>(i.openBlock(),i.createElementBlock("div",l_,[i.createElementVNode("div",{id:"engine-splash-header",class:i.normalizeClass(["flex justify-center flex-col items-center",a.value]),style:i.normalizeStyle(o.value)},[i.createElementVNode("h1",c_,i.toDisplayString(d.value),1),i.createElementVNode("img",{src:u.value,alt:"Narrat Logo",id:"engine-splash-logo"},null,8,u_),i.createVNode(s_,{percentage:i.unref(s).loading.percentage,step:i.unref(s).loading.step},null,8,["percentage","step"])],6)]))}});class Ts{constructor(){xe(this,"listeners",{})}on(t,n){return this.listeners[t]||this.addEventToMap(t),this.listeners[t].add(n),n}off(t,n){return this.listeners[t]&&this.listeners[t].delete(n),n}once(t,n){const r=(...o)=>{this.off(t,r),n(...o)};return this.on(t,r)}emit(t,...n){this.listeners[t]&&this.listeners[t].forEach(r=>r(...n))}clear(){Object.keys(this.listeners).forEach(t=>{delete this.listeners[t]})}addEventToMap(t){this.listeners[t]=new Set}}class d_ extends Ts{setup(){const t=()=>{this.emit("preUpdate"),this.emit("update"),this.emit("postUpdate"),requestAnimationFrame(t)};t()}}const oo=new d_;Z.Vec2=void 0,(e=>{function t(y,b){return{x:y??0,y:b??0}}e.create=t;function n(y){return Math.sqrt(y.x*y.x+y.y*y.y)}e.magnitude=n;function r(y){const b=n(y);return b===0?t(0,0):{x:y.x/b,y:y.y/b}}e.normalize=r;function o(y,b){return{x:y.x+b.x,y:y.y+b.y}}e.add=o;function a(y,b){return{x:y.x-b.x,y:y.y-b.y}}e.subtract=a;function s(y,b){return{x:y.x*b.x,y:y.y*b.y}}e.multiply=s;function c(y,b){return{x:y.x*b,y:y.y*b}}e.scale=c;function d(y,b){return{x:y.x/b.x,y:y.y/b.y}}e.divide=d;function u(y,b){return n(a(y,b))}e.distance=u;function h(y,b,S){return{x:y.x+(b.x-y.x)*S,y:y.y+(b.y-y.y)*S}}e.lerp=h;function l(y,b){const S=Math.cos(b),T=Math.sin(b);return{x:y.x*S-y.y*T,y:y.x*T+y.y*S}}e.rotate=l;function f(y,b){const S=a(b,y);return e.normalize({x:-S.y,y:S.x})}e.normal=f;function m(y,b){return y.x*b.x+y.y*b.y}e.dot=m})(Z.Vec2||(Z.Vec2={}));function vs(e,t,n,r){const o=e/n,a=t/r;return Math.min(o,a)}const sn=et("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(e){this.$reset(),this.updateConfig(e)},getSetting(e){if(typeof this.baseSettings[e]<"u")return this.baseSettings[e];if(typeof this.customSettings[e]<"u")return this.customSettings[e];ae(`Setting ${e} does not exist.`)},getSettingSchema(e){if(typeof this.settingsSchema[e]<"u")return this.settingsSchema[e];if(typeof this.customSettingsSchema[e]<"u")return this.customSettingsSchema[e];ae(`Setting ${e} does not exist.`)},getAllSettingSchemas(){return{...this.settingsSchema,...this.customSettingsSchema}},setSetting(e,t){typeof this.baseSettings[e]<"u"?this.baseSettings[e]=t:typeof this.customSettings[e]<"u"?this.customSettings[e]=t:ae(`Setting ${e} does not exist.`),e==="fontSize"&&document.documentElement.style.setProperty("font-size",`${t}px`),e==="textSpeed"&&(le().dialogPanel.textSpeed=t),e==="animateText"&&(le().dialogPanel.animateText=t)},updateConfig(e){var t;if(this.setSetting("textSpeed",e.dialogPanel.textSpeed??Vo),this.setSetting("animateText",e.dialogPanel.animateText??!0),this.setSetting("fontSize",e.layout.defaultFontSize??16),(t=e.settings)!=null&&t.customSettings)for(const n in e.settings.customSettings)this.addCustomSetting(n,e.settings.customSettings[n])},addCustomSetting(e,t){this.customSettings[e]=t.defaultValue,this.customSettingsSchema[e]=t},generateSaveData(){return{baseSettings:Re(this.baseSettings),customSettings:Re(this.customSettings)}},loadSaveData(e){for(const t in e.baseSettings)this.setSetting(t,e.baseSettings[t]);for(const t in e.customSettings)typeof this.customSettings[t]<"u"&&this.setSetting(t,e.customSettings[t])}}});function io(e,t=50,n={}){let r;const o=n.isImmediate??!1,a=n.callback??!1,s=n.maxWait;let c=Date.now(),d=[];function u(){if(s!==void 0){const l=Date.now()-c;if(l+t>=s)return s-l}return t}const h=function(...l){const f=this;return new Promise((m,y)=>{const b=function(){if(r=void 0,c=Date.now(),!o){const I=e.apply(f,l);a&&a(I),d.forEach(({resolve:x})=>x(I)),d=[]}},S=o&&r===void 0;r!==void 0&&clearTimeout(r);const T=u();if(r=setTimeout(b,T),S){const I=e.apply(f,l);return a&&a(I),m(I)}d.push({resolve:m,reject:y})})};return h.cancel=function(l){r!==void 0&&clearTimeout(r),d.forEach(({reject:f})=>f(l)),d=[]},h}const Je=et("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(e){this.dialogPanelMode=e.dialogPanelMode},reset(){this.dialogPanelMode="auto"},updateScreenSize(e,t){this.screenHeight=t,this.screenWidth=e,e<le().layout.verticalLayoutThreshold?(this.layoutMode="vertical",document.querySelector("html").style.fontSize=`${sn().baseSettings.fontSize}px`??"40px"):(this.layoutMode="horizontal",document.querySelector("html").style.fontSize=`${sn().baseSettings.fontSize}px`??"16px")},setContainer(e){this.containerElement=e,this.resizeObserver&&this.resizeObserver.disconnect(),this.resizeObserver=new ResizeObserver(io(()=>{this.refreshScreenSize()},100,{maxWait:200})),this.resizeObserver.observe(e),this.refreshScreenSize()},refreshScreenSize(){const e=this.containerElement;e&&this.updateScreenSize(e.clientWidth,e.clientHeight)}},getters:{gameScaleRatio(e){return vs(this.screenWidth,this.screenHeight,this.gameWidth,this.gameHeight)},overlayMode(e){return!!(le().dialogPanel.overlayMode&&e.layoutMode==="horizontal")},gameWidth(){const e=le();return this.layoutMode==="vertical"||this.overlayMode?e.layout.backgrounds.width:e.layout.backgrounds.width+Ii()},gameHeight(){const e=le();return this.layoutMode==="vertical",e.layout.backgrounds.height},dialogWidth(){return this.layoutMode==="vertical"?this.viewportWidth:Ii()},dialogHeight(){return this.layoutMode==="vertical"?this.actualGameHeight-this.gameHeight:le().dialogPanel.height??this.gameHeight},actualGameHeight(){let e=this.gameHeight;return this.layoutMode==="vertical"&&(e=this.screenHeight/this.gameScaleRatio),e},viewportRatio(e){if(this.layoutMode==="vertical"){const t=le().layout.backgrounds;return e.screenWidth/t.width}return 1},viewportHeight(e){return le().layout.backgrounds.height*this.viewportRatio},viewportWidth(e){return le().layout.backgrounds.width*this.viewportRatio},showDialog(e){if(this.dialogPanelMode==="on")return!0;if(this.dialogPanelMode==="off")return!1;if(!this.overlayMode||this.layoutMode==="vertical")return!0;const t=Te().inScript;let n=!0;return Ut().isTransitioning&&le().dialogPanel.hideDuringTransition&&(n=!1),!le().dialogPanel.showAfterScriptEnd&&!t&&(n=!1),n},container(){return this.containerElement?this.containerElement:document.body},inputsContainer(){return Te().hasCustomContainer?this.container:window},narratApp(){return this.narratAppElement?this.narratAppElement:document.body}}});class f_ extends EventTarget{constructor(){super(...arguments);xe(this,"gamepadAvailable",!0);xe(this,"gameActions",{});xe(this,"keyboardState",{});xe(this,"actions",{});xe(this,"lastInputMethodUsed","km");xe(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=Je().inputsContainer;n.addEventListener("mousemove",r=>{this.mouseEvent()}),n.addEventListener("keydown",r=>{this.kbEvent();const o=this.getKeyboardState(r.key).current;this.keyboardState[r.key]={previous:o,current:!0}}),n.addEventListener("keyup",r=>{this.kbEvent();const o=this.getKeyboardState(r.key).current;this.keyboardState[r.key]={previous:o,current:!1}}),oo.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((o,a)=>this.getNarratButtonFromGamepad(o,o,a))}}updateAllNarratButtons(n,r){for(const[o,a]of n.buttons.entries()){const s=r.buttons[o];s.previous=Re(s.state),s.state=Re(a),s.previous.pressed!==s.state.pressed&&this.gamepadEvent()}}getNarratButtonFromGamepad(n,r,o){return{index:o,state:Re(r),previous:Re(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:Re(r)}}else{const r={config:n,value:Z.Vec2.create(0,0),fullState:{left:0,right:0,up:0,down:0}};this.actions[n.id]={state:r,previous:Re(r)}}}getAnalog(n){return this.actions[n]||ae(`Action ${n} does not exist`),this.actions[n].state}getButton(n){return this.actions[n]||ae(`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}update(){this.updateGamepad(),this.debugGamepad();for(const n of Object.values(this.gameActions))if(n.type==="button"){const r=this.actions[n.id],o=Re(r.state),a=r.state;r.previous=o,n.action==="press"&&(n.keybinds.some(c=>{let d=!1;if(typeof c.keyboardKey=="string"&&this.getKeyboardState(c.keyboardKey).current===!0&&(d=!0),typeof c.gamepadButton=="number"){const u=this.getGamepadState(c.gamepadButton);u&&u.current.pressed===!0&&(d=!0)}return d})?a.active=!0:a.active=!1,a.active&&!o.active?a.justPressed=!0:a.justPressed=!1,!a.active&&o.active?a.justReleased=!0:a.justReleased=!1)}else if(n.type==="analog"){const r=this.actions[n.id],o=r.state;Re(r.state),r.previous=Re(o);let a=Z.Vec2.create(0,0);n.keybinds.forEach(s=>{this.getKeyboardState(s.left).current&&(o.fullState.left=1,a.x-=1),this.getKeyboardState(s.right).current&&(o.fullState.right=1,a.x+=1),this.getKeyboardState(s.up).current&&(o.fullState.up=1,a.y-=1),this.getKeyboardState(s.down).current&&(o.fullState.down=1,a.y+=1)}),a=Z.Vec2.normalize(a),o.value=a}}}const xn=new f_,ht=et("menu",{state:()=>({menus:{},activeMenu:!1}),getters:{showSkills(){return Object.entries(dn().skills).length>0},showInventory(){return Object.entries(wi().items).length>0},showQuests(){return Object.entries(So().quests).length>0},showAchievements(){return Object.entries(wo().achievements).length>0},menuTabsToShow(e){return e.menus.menu.tabs.map(t=>{const n=le().menuButtons[t.id]||{};return{...t,...n}}).filter(t=>t.condition?t.condition():!0)},menu(e){return e.activeMenu?e.menus[e.activeMenu]:void 0},tab(){if(this.menu)return this.menu.tabs[this.menu.activeTab]}},actions:{setup(){},addMenu(e,t){this.menus[e]={...t,id:e}},addMenuOption(e,t){this.menus[e]||(this.menus[e]={id:e,label:e,tabs:[],activeTab:0}),this.menus[e].tabs.push(t)},setActiveTab(e){this.menu&&(this.menu.activeTab=e)},openMenu(e){this.activeMenu=e},closeMenu(){this.activeMenu=!1},toggleMenu(){this.activeMenu?this.activeMenu=!1:this.activeMenu="menu"}}}),p_=[{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}]}],Ke=et("inputs",{state:()=>({inputStack:[],baseInputListener:null,inputMode:"mk",inGameInputListener:null}),actions:{setupInputs(){xn.addEventListener("change-input",e=>{this.inputMode=e.detail});for(const e of p_)xn.addAction(e);this.listenToBaseNarratInputs(),oo.on("preUpdate",()=>{for(const[e,t]of Object.entries(xn.actions))if(t.state.config.type==="button"){const n=t;n.state.justPressed&&this.triggerListeners(e,"press",n),n.state.justReleased&&this.triggerListeners(e,"release",n)}else t.state.config.type})},createInGameInputListener(){this.inGameInputListener||(this.inGameInputListener=this.registerInputListener("in-game",{system:{press:()=>{ht().openMenu("system")}},menu:{press:()=>{ht().openMenu("menu")}}}))},removeInGameInputListener(){this.inGameInputListener&&(this.unregisterInputListener(this.inGameInputListener),this.inGameInputListener=null)},listenToContainerInputs(){xn.startListening()},listenToBaseNarratInputs(){},triggerListeners(e,t,n){const r=this.inputStack[this.inputStack.length-1];if(r&&r.actions[e]&&r.actions[e][t])if(n.state.config.type==="button"){const o=r.actions[e][t],a=n;o(n.state.config,a.state,a.previous)}else console.warn("Analog events not implemented yet")},getInputs(){return xn},registerInputListener(e,t){const r={id:`${Date.now()}-${Math.floor(Math.random()*1e8)}`,name:e,actions:t??{}};return this.inputStack.push(r),r},unregisterInputListener(e){const t=this.inputStack.findIndex(n=>n.id===e.id);if(t===-1)throw new Error("Input listener not found");this.inputStack.splice(t,1)},registerActions(e,t,n){e.actions[t]=n}}}),Nt=et("scenes-store",{state:()=>({scenes:{},activeScene:"engine-splash",currentOptions:{}}),getters:{isPlaying(e){return e.activeScene!=="engine-splash"&&e.activeScene!=="game-splash"&&e.activeScene!=="start-menu"}},actions:{generateSaveData(){return{activeScene:this.activeScene}},loadSaveData(e){},changeScene(e,t){const n=this.activeScene;if(n&&n!==e){const r=this.scenes[n];r.onLeaving&&r.onLeaving(),this.currentOptions={},this.activeScene=e,this.currentOptions=t||{},this.scenes[e].onStarting&&this.scenes[e].onStarting()}},getSceneConfig(e){return this.scenes[e]},onEngineSplashFinished(){this.changeScene("game-splash")},finishedScene(e){this.scenes[e].onFinished&&this.scenes[e].onFinished()},addNewScene(e){this.scenes[e.id]=e}}}),m_={id:"game-splash-screen",style:{height:"100%",padding:"20px"},class:"flex justify-center items-center"},h_={id:"game-splash-screen-header flex justify-center flex-col items-center",class:"flex justify-center flex-col items-center"},y_={class:"title",id:"game-splash-title"},Ss=i.defineComponent({__name:"game-splash",setup(e){const t=i.ref(null),n=Te(),r=i.computed(()=>{var d;return((d=le().splashScreens)==null?void 0:d.gameSplashScreen)??{}}),o=i.computed(()=>typeof r.value.startButtonText=="string"?r.value.startButtonText:"Press to start"),a=i.computed(()=>n.loading.loaded),s=i.computed(()=>le().gameTitle||"Narrat Game");function c(){Nt().changeScene("start-menu")}return i.onMounted(()=>{t.value=Ke().registerInputListener("game-splash",{continue:{press:()=>{c()}},system:{press:()=>{c()}}}),n.options.debug&&c()}),i.onUnmounted(()=>{t.value&&Ke().unregisterInputListener(t.value)}),(d,u)=>(i.openBlock(),i.createElementBlock("div",m_,[i.createElementVNode("div",h_,[i.createElementVNode("h1",y_,i.toDisplayString(s.value),1),a.value?(i.openBlock(),i.createElementBlock("button",{key:0,class:"nrt-button menu-button main-menu-button large splash-start-button override",onClick:c},i.toDisplayString(o.value),1)):i.createCommentVNode("",!0)])]))}});function Sn(e){if(!e.listener)return console.warn("No input listener provided for navigation"),null;const t=i.ref(-1),n=i.computed(()=>e.mode==="grid"?t.value%e.columns:0),r=i.ref([]),o=i.ref(xn.lastInputMethodUsed),a=i.ref(null);function s(){var W,X;return(W=e.container)!=null&&W.value?e.container.value.children:(X=e.elements)!=null&&X.value?e.elements.value.filter(G=>G!==null):[]}function c(){r.value=s()}const d=i.computed(()=>l(t.value));function u(W){return r.value?W>=0&&W<r.value.length:!1}function h(W){const X=t.value;if(u(W)&&(t.value=W,d.value)){o.value==="gamepad"&&d.value.classList.add("selected");const G=l(X);G&&X!==W&&G.classList.remove("selected"),e.onSelected&&e.onSelected(W)}}function l(W){return r.value?r.value[W]:null}function f(){r.value&&(t.value===0?e.loopForbidden||h(r.value.length-1):h(t.value-1))}function m(){r.value&&(t.value===r.value.length-1?e.loopForbidden||h(0):h(t.value+1))}function y(){if(!r.value)return;const W=e,X=t.value;!e.loopForbidden&&X<W.columns?h(r.value.length-1):h(t.value-e.columns)}function b(){if(!r.value)return;const W=e,X=t.value;!e.loopForbidden&&X>=r.value.length-W.columns?h(0):h(t.value+e.columns)}function S(){e.mode==="grid"?y():e.mode==="list"&&f()}function T(){e.mode==="grid"?b():e.mode==="list"&&m()}function I(){(e.mode==="grid"||e.mode==="list")&&f()}function x(){(e.mode==="grid"||e.mode==="list")&&m()}function B(){e.onChosen&&e.onChosen(t.value)}i.onMounted(()=>{Y()});function F(){e.listener&&(e.onlyVertical||(delete e.listener.actions.left,delete e.listener.actions.right),e.onlyHorizontal||(delete e.listener.actions.up,delete e.listener.actions.down),e.noChoosing||delete e.listener.actions.continue,a.value&&xn.removeEventListener("change-input",a.value))}function L(){d.value&&d.value.classList.add("selected")}function P(){d.value&&d.value.classList.remove("selected")}function Y(){e.listener&&(c(),a.value=W=>{o.value=W.detail,W.detail==="gamepad"?L():P()},xn.addEventListener("change-input",a.value),e.onlyVertical||(e.listener.actions.left={press:I},e.listener.actions.right={press:x}),e.onlyHorizontal||(e.listener.actions.up={press:S},e.listener.actions.down={press:T}),e.noChoosing||(e.listener.actions.continue={press:B}),h(0))}return i.onUnmounted(()=>{F()}),i.watch(()=>{var W;return(W=e.elements)==null?void 0:W.value},W=>{W&&c()}),{selectedIndex:t,selectedElement:d,currentColumn:n,buttonDown:T,buttonUp:S,buttonLeft:I,buttonRight:x,selectUp:y,selectDown:b,selectPrevious:f,selectNext:m,select:h,disable:F,mount:Y}}const g_={class:"used-save-slot flex flex-row justify-between items-center grow"},__={class:"flex flex-col save-slot-number-container"},b_={class:"save-slot-number"},T_={class:"flex flex-col justify-center save-info"},v_={key:1,class:"save-name"},S_={class:"flex flex-col"},w_={key:0},k_={key:1},C_={key:2},$_=["onClick"],ws=i.defineComponent({__name:"save-slot-ui",props:{saveSlot:{},id:{},actions:{},selected:{type:Boolean},inputListener:{}},emits:["choice","cancel"],setup(e,{expose:t,emit:n}){var B;const r=e,o=i.ref(null),a=i.ref(null),s=i.ref(null);t({slotContainer:s});const c=i.ref(((B=r.saveSlot.saveData)==null?void 0:B.metadata.name)??"Empty Save"),d=i.ref(0),u=i.computed(()=>r.saveSlot.saveData!==null),h=i.computed(()=>r.saveSlot.saveData),l=i.computed(()=>le().saves.mode),f=i.computed(()=>{const F=r.saveSlot.saveData;if(F&&F.screens.layers[0]){const L=xr(F.screens.layers[0]);if(L)return{backgroundImage:`url(${Lr(L.background)})`}}return!1}),m=n;function y(F){m("choice",F)}function b(F){return h.value?Fi(h.value.main.playTime/1e3):"00:00:00"}function S(){h.value&&Cp(r.saveSlot.id,c.value)}function T(){const F=le().saves.slots;let L="";const P=r.saveSlot.slotNumber;return P===0&&le().saves.mode==="manual"?"AUTO":(F>=10&&P<10&&(L+="0"),F>=100&&P<100&&(L+="0"),L+P)}function I(){o.value=Sn({mode:"list",container:a,listener:r.inputListener,onlyHorizontal:!0,onSelected:F=>{d.value=F},onChosen:F=>{y(F)}}),o.value.mount()}function x(){o.value.disable(),o.value=null}return i.watch(()=>r.selected,(F,L)=>{F&&!o.value&&I(),!F&&o.value&&x()}),i.onUnmounted(()=>{o.value&&x()}),(F,L)=>(i.openBlock(),i.createElementBlock("div",{class:"save-slot flex flex-row",ref_key:"slotContainer",ref:s},[i.createElementVNode("div",g_,[i.createElementVNode("div",__,[i.createElementVNode("h1",b_,i.toDisplayString(T()),1)]),f.value?(i.openBlock(),i.createElementBlock("div",{key:0,class:"save-slot-screenshot",style:i.normalizeStyle(f.value)},null,4)):i.createCommentVNode("",!0),i.createElementVNode("div",T_,[u.value?i.withDirectives((i.openBlock(),i.createElementBlock("input",{key:0,type:"text",class:"save-name","onUpdate:modelValue":L[0]||(L[0]=P=>c.value=P),onInput:S},null,544)),[[i.vModelText,c.value]]):(i.openBlock(),i.createElementBlock("h3",v_,i.toDisplayString(c.value),1)),i.createElementVNode("div",S_,[h.value?(i.openBlock(),i.createElementBlock("p",w_,i.toDisplayString(new Date(h.value.metadata.saveDate).toLocaleString()),1)):i.createCommentVNode("",!0),h.value?(i.openBlock(),i.createElementBlock("p",k_,"Play time: "+i.toDisplayString(b(F.saveSlot)),1)):i.createCommentVNode("",!0),l.value==="game-slots"?(i.openBlock(),i.createElementBlock("p",C_,i.toDisplayString(F.saveSlot.slotType==="auto"?"Auto Save":"Manual Save"),1)):i.createCommentVNode("",!0)])]),i.createElementVNode("div",{class:"flex flex-row",ref_key:"actionsContainer",ref:a},[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(F.actions,(P,Y)=>(i.openBlock(),i.createElementBlock("button",{class:i.normalizeClass(["nrt-button",{selected:F.selected&&Y===d.value}]),onClick:()=>y(Y),key:Y},[i.createElementVNode("h3",null,i.toDisplayString(P),1)],10,$_))),128))],512)])],512))}}),E_=i.createElementVNode("h3",{class:"title"},"Confirmation",-1),Xo=i.defineComponent({__name:"yes-no",props:{prompt:{type:String,required:!0},onConfirm:{type:Function,required:!1},onRefuse:{type:Function,required:!1}},emits:["choice"],setup(e,{emit:t}){const n=i.ref(Ke().registerInputListener("yes-no",{cancel:{press:()=>{s(!1)}},continue:{press:()=>{s(!0)}}})),r=i.ref(null);Sn({mode:"list",container:r,listener:n.value,onChosen:c=>{s(c===0)}});const o=e,a=t;function s(c){c===!0&&o.onConfirm?o.onConfirm():c===!1&&o.onRefuse&&o.onRefuse(),a("choice",c)}return i.onMounted(()=>{}),i.onUnmounted(()=>{n.value&&Ke().unregisterInputListener(n.value)}),(c,d)=>(i.openBlock(),i.createBlock(_n,{onClose:d[2]||(d[2]=()=>s(!1)),containerCssClass:"yes-no-modal"},{header:i.withCtx(()=>[E_]),body:i.withCtx(()=>[i.createElementVNode("h3",null,i.toDisplayString(e.prompt),1),i.createElementVNode("div",{class:"flex justify-center",ref_key:"buttonsContainer",ref:r},[i.createElementVNode("button",{class:"nrt-button",onClick:d[0]||(d[0]=()=>s(!0))},"Yes"),i.createElementVNode("button",{class:"nrt-button",onClick:d[1]||(d[1]=()=>s(!1))},"No")],512)]),_:1}))}}),O_={class:"nrt-title"},A_={key:0},I_={class:"saves-section"},N_=i.createElementVNode("h3",{class:"saves-section-title"},"Auto save",-1),P_={class:"saves-section"},j_=i.createElementVNode("h3",{class:"saves-section-title"},"Manual Saves",-1),D_={key:1,class:"saves-section"},x_=i.createElementVNode("h3",{class:"saves-section-title"},"Save Slots",-1),L_={class:"saves-container flex flex-col"},Ju=i.defineComponent({__name:"save-slots",props:{mode:{}},emits:["chosen","close"],setup(e,{emit:t}){const n=e,r=i.ref(Ke().registerInputListener("save-slots",{cancel:{press:()=>{Y()}}})),o=i.ref(0),a=i.reactive([]),s=i.computed(()=>a.slice(0,1)),c=i.computed(()=>a.slice(1)),d=i.ref([]),u=i.ref([]),h=i.ref([]),l=i.ref([]),f=i.ref([]);i.ref({mode:"list",elements:l,listener:r.value,onlyVertical:!0,noChoosing:!0,onSelected:G=>{o.value=G}});const m=Sn({mode:"list",elements:l,listener:r.value,onlyVertical:!0,noChoosing:!0,onSelected:G=>{o.value=G}}),y=i.computed(()=>{const G=o.value;return f.value.length<G+1?null:f.value[G].id}),b=i.reactive(n.mode==="load"?["Load","Delete"]:["Choose"]),S=i.computed(()=>le().saves.mode),T=i.reactive({prompt:"Are you sure you want to delete this save file?",saveToDelete:null,onConfirm:()=>{P(T.saveToDelete),T.saveToDelete=null},onRefuse:()=>{T.saveToDelete=null}}),I=i.reactive({prompt:"Are you sure you want to overwrite this save file?",saveToOverwrite:null,onConfirm:()=>{F(I.saveToOverwrite),I.saveToOverwrite=null},onRefuse:()=>{I.saveToOverwrite=null}}),x=t;i.onBeforeMount(()=>{bn().slots.forEach((Q,te)=>{a[te]=Q})});function B(){l.value=S.value==="manual"?[...u.value.map(z=>z.slotContainer),...h.value.map(z=>z.slotContainer)]:d.value.map(z=>z.slotContainer);const G=S.value==="manual"?[...s.value,...c.value]:a;f.value=G.map(z=>({id:z.id}))}i.onMounted(()=>{B()}),i.onUnmounted(()=>{m.value&&(m.value.disable(),m.value=null),r.value&&Ke().unregisterInputListener(r.value)});function F(G){x("chosen",{slotId:G})}function L(G){const z=X(G);if(z){if(le().saves.mode==="manual"&&z.slotType==="auto"){Te().alert("Sorry","Can't delete the auto save slot!");return}T.saveToDelete=G}}function P(G){kp(G);const z=a.find(Q=>Q.id===G);z&&(z.saveData=null),B()}function Y(){x("close")}function W(G,z){const Q=b[z];Q==="Load"?F(G):Q==="Delete"?L(G):Q==="Choose"&&(I.saveToOverwrite=G)}function X(G){return a.find(z=>z.id===G)}return(G,z)=>(i.openBlock(),i.createBlock(_n,{onClose:Y,containerCssClass:"save-modal",cantClose:!1},{header:i.withCtx(()=>[i.createElementVNode("h3",O_,i.toDisplayString(G.mode==="load"?"Choose a save to load":"Pick a slot to save the game"),1)]),body:i.withCtx(()=>[S.value==="manual"?(i.openBlock(),i.createElementBlock("div",A_,[i.createElementVNode("div",I_,[N_,i.createVNode(i.TransitionGroup,{name:"list",tag:"div"},{default:i.withCtx(()=>[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(s.value,Q=>(i.openBlock(),i.createBlock(ws,{key:Q.id,saveSlot:Q,id:Q.id,actions:b,onChoice:te=>W(Q.id,te),inputListener:r.value,selected:y.value===Q.id,ref_for:!0,ref_key:"autoSlotsElements",ref:u},null,8,["saveSlot","id","actions","onChoice","inputListener","selected"]))),128))]),_:1})]),i.createElementVNode("div",P_,[j_,i.createVNode(i.TransitionGroup,{name:"list",tag:"div"},{default:i.withCtx(()=>[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(c.value,Q=>(i.openBlock(),i.createBlock(ws,{key:Q.id,saveSlot:Q,id:Q.id,actions:b,onChoice:te=>W(Q.id,te),inputListener:r.value,selected:y.value===Q.id,ref_for:!0,ref_key:"manualSlotsElements",ref:h},null,8,["saveSlot","id","actions","onChoice","inputListener","selected"]))),128))]),_:1})])])):(i.openBlock(),i.createElementBlock("div",D_,[x_,i.createElementVNode("div",L_,[i.createVNode(i.TransitionGroup,{name:"list",tag:"div"},{default:i.withCtx(()=>[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(a,Q=>(i.openBlock(),i.createBlock(ws,{key:Q.id,saveSlot:Q,id:Q.id,actions:b,onChoice:te=>W(Q.id,te),selected:y.value===Q.id,inputListener:r.value,ref_for:!0,ref_key:"saveSlotsElements",ref:d},null,8,["saveSlot","id","actions","onChoice","selected","inputListener"]))),128))]),_:1})])])),T.saveToDelete?(i.openBlock(),i.createBlock(Xo,{key:2,prompt:T.prompt,onRefuse:T.onRefuse,onConfirm:T.onConfirm},null,8,["prompt","onRefuse","onConfirm"])):i.createCommentVNode("",!0),I.saveToOverwrite?(i.openBlock(),i.createBlock(Xo,{key:3,prompt:I.prompt,onRefuse:I.onRefuse,onConfirm:I.onConfirm},null,8,["prompt","onRefuse","onConfirm"])):i.createCommentVNode("",!0)]),_:1}))}}),M_=i.defineComponent({__name:"start-menu-button",props:{button:{}},emits:["click"],setup(e){return(t,n)=>(i.openBlock(),i.createElementBlock("button",{class:i.normalizeClass(["nrt-button menu-button main-menu-button large override",t.button.cssClass]),onClick:n[0]||(n[0]=r=>t.$emit("click"))},i.toDisplayString(t.button.title),3))}});class ks extends Ts{setup(t=!1){const r=t?"keydown":"keyup",o=io(s=>{qt.emit("debouncedKeydown",s)},10,{isImmediate:!0,maxWait:10}),a=Je().inputsContainer;a.addEventListener("keydown",s=>{qt.emit("keydown",s)}),a.addEventListener(r,s=>{o(s)})}}const qt=new ks,Cs=et("startMenu",{state:()=>({buttons:[]}),actions:{addButtonsFromPlugins(){Ie.plugins.forEach(t=>{t.startMenuButtons&&t.startMenuButtons.forEach(n=>{const r=window.narrat.app;n.popupComponent&&r.component(n.popupComponent.name,n.popupComponent.component),this.buttons.push(n)})})}}});function R_(){ad()}function Xu(){R_(),Te().menuReturn()}async function B_(e){if(le().saves.mode==="manual"){const t=Ui();t&&(e=t.id)}Te().setSaveSlot(e),ld(bn().globalSave),Zu(),we().runGame()}function Zu(){ft().stopAll(),Qn("onPressStart"),we().start(),Te().prepareToPlay(),Ie.callHook("onGameStart")}async function F_(e,t){if(le().saves.mode==="manual"){const n=Ui();n&&(t=n.id)}if(Te().setSaveSlot(t),Zu(),e.saveData){tT({gameSave:e.saveData,globalSave:bn().globalSave}),ft().reloadAudio(e.saveData.audio);const n=we(),r=le().saves.runOnReload;typeof r=="string"&&await we().runLabelFunction(r),n.jumpToLabel(e.saveData.vm.lastLabel)}}const V_={id:"game-menu"},U_={id:"game-header",class:"flex flex-col justify-between items-center"},q_={id:"game-title-container"},H_={id:"game-title-text"},K_={class:"nrt-title"},$s=zt(i.defineComponent({__name:"StartMenu",setup(e){const t=i.ref(Ke().registerInputListener("start-menu",{})),n=i.ref([]),r=i.ref(null),o=i.ref(!1),a=i.ref(!1),s=i.ref(null),c=i.ref(null),d=i.ref(!1),u=i.ref(!1),h=i.ref(null),l=Cs(),f=i.ref(!1),m=i.ref(null),y=i.computed(()=>l.buttons),b=Sn({mode:"list",container:r,listener:t.value,onChosen:Q=>{S(n.value[Q])}});function S(Q){switch(Q.id){case"continue":P();break;case"new-game":T();break;case"load-game":Y();break;case"exit":Te().exitGame();break;default:x(Q);break}}async function T(){o.value&&le().saves.mode==="manual"&&!le().saves.disabled?u.value=!0:I()}async function I(){if(c.value===null)if(le().saves.mode==="manual"){const Q=Ui();if(!Q){ae("No autosave found");return}c.value=Q.id}else{const Q=Sp();if(!Q){ae("No free slot found");return}c.value=Q}u.value=!1,await B_(c.value)}function x(Q){const te=y.value.findIndex(Ne=>Ne.id===Q.id),ke=y.value[te];ke.action&&ke.action(),ke.popupComponent&&(f.value=ke)}function B(){f.value=!1}function F(){u.value=!1}async function L(){if(!c.value)return;const Q=Gr(c.value);if(!Q){ae("No save file found");return}F_(Q,c.value)}function P(){typeof s.value=="string"&&(c.value=s.value,L())}function Y(){d.value=!0}function W({slotId:Q}){const te=Gr(Q);te&&te.saveData?(c.value=Q,L()):T()}i.onMounted(()=>{const Q=bn();Q.slots.some(te=>te.saveData)&&(o.value=!0),(le().saves.mode==="manual"||Q.slots.some(te=>!te.saveData))&&(a.value=!0),Q.lastSaveSlot&&Gr(Q.lastSaveSlot)&&(s.value=Q.lastSaveSlot),X(),h.value=qt.on("debouncedKeydown",te=>{te.key===" "&&I(),te.key==="c"&&P()}),i.nextTick(()=>{b.select(0)}),Lt().options.defaultMusic&&(m.value=um(Lt().options.defaultMusic))});function X(){const Q=le().saves.disabled;s.value&&!Q&&n.value.push(G({id:"continue",title:"Continue",cssClass:"continue-button"})),a.value&&n.value.push(G({id:"new-game",title:"New Game",cssClass:"start-button"})),o.value&&!Q&&n.value.push(G({id:"load-game",title:"Load Game",cssClass:"continue-button"}));for(const te of y.value)n.value.push({id:te.id,title:te.text,cssClass:`${te.id}-start-menu-button`});n.value.push(G({id:"exit",title:"Exit",cssClass:"exit-button"}))}function G({id:Q,title:te,cssClass:ke}){const Ne=le().menuButtons[Q];if(Ne){let Ze=ke;return Ne.cssClass&&(Ze=`${Ne.cssClass} ${ke}`),{id:Q,title:Ne.text??te,cssClass:Ze}}return{id:Q,title:te,cssClass:ke}}i.onUnmounted(()=>{if(t.value&&Ke().unregisterInputListener(t.value),h.value&&qt.off("debouncedKeydown",h.value),typeof m.value=="number"){const Q=Lt().options.defaultMusic;dm(Q,m.value)}});const z=i.computed(()=>le().gameTitle);return(Q,te)=>(i.openBlock(),i.createElementBlock("div",V_,[d.value?(i.openBlock(),i.createBlock(Ju,{key:0,mode:"load",onChosen:W,onClose:te[0]||(te[0]=ke=>d.value=!1)})):i.createCommentVNode("",!0),u.value?(i.openBlock(),i.createBlock(Xo,{key:1,prompt:"This will override your previous autosave, are you sure?",onConfirm:I,onRefuse:F})):i.createCommentVNode("",!0),i.createElementVNode("div",U_,[i.createElementVNode("div",q_,[i.createElementVNode("h1",H_,i.toDisplayString(z.value),1)]),i.createElementVNode("div",{class:"flex flex-col start-menu-buttons-container",ref_key:"buttonsContainer",ref:r},[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(n.value,ke=>(i.openBlock(),i.createBlock(M_,{key:ke.id,button:ke,onClick:Ne=>S(ke)},null,8,["button","onClick"]))),128))],512)]),f.value?(i.openBlock(),i.createBlock(i.Teleport,{key:2,to:"#narrat"},[i.createVNode(_n,{onClose:B,class:i.normalizeClass(`start-menu-popup-${f.value.id}`)},{header:i.withCtx(()=>[i.createElementVNode("h3",K_,i.toDisplayString(f.value.text),1)]),body:i.withCtx(()=>[f.value.popupComponent?(i.openBlock(),i.createBlock(i.resolveDynamicComponent(f.value.popupComponent.component),{key:0,onClose:B},null,32)):i.createCommentVNode("",!0)]),_:1},8,["class"])])):i.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-a3f319bb"]]);function Zo(e){const t=$i().characters[e];return t||ae(`Character ${e} not found`),t}function G_(e,t){const n=Zo(e);if(n&&(t||(t="default"),n.sprites)){const r=n.sprites[t];return r==="none"?void 0:typeof r=="string"?{image:r}:r}}function ed(e){return`${$i().config.imagesPath}${e}`}function z_(e){return typeof e=="object"&&Object.hasOwn(e,"image")}function W_(e){return typeof e=="object"&&Object.hasOwn(e,"video")}function Es(e){var t;return e?((t=Zo(e))==null?void 0:t.style)||{}:{}}const Q_=["src"],Y_=["autoplay","loop","muted"],J_=["src"],X_=i.defineComponent({__name:"dialog-picture",props:{picture:{},video:{},character:{},pose:{}},setup(e){const t=e,n=i.computed(()=>t.video),r=i.computed(()=>Je().layoutMode),o=i.computed(()=>{var d;const s={};if(!t.character)return{};t.character&&(s[t.character]=!0);const c=Zo(t.character);return(d=c==null?void 0:c.style)!=null&&d.portraitCssClass&&(s[c.style.portraitCssClass]=!0),s}),a=i.computed(()=>{var m,y;const s=Je(),c=le().layout;let d=0,u=0;const h=c.portraits;if(r.value==="vertical"){const b=((m=h.offset)==null?void 0:m.portrait)??{right:0,bottom:0};d=20+b.right,u=s.dialogHeight+b.bottom}else{const b=((y=h.offset)==null?void 0:y.landscape)??{right:0,bottom:0},S=le().dialogPanel.rightOffset??ts.dialogPanel.rightOffset;d=Ii()-10+b.right+S,u=200+b.bottom}let l=c.portraits.width,f=c.portraits.height;return t.video&&(l=t.video.width??l,f=t.video.height??f),t.picture&&(l=t.picture.width??l,f=t.picture.height??f),{right:`${d}px`,bottom:`${u}px`,width:`${l}px`,height:`${f}px`}});return(s,c)=>{var d;return i.openBlock(),i.createElementBlock("div",{class:i.normalizeClass(["dialog-picture override",o.value]),style:i.normalizeStyle(a.value)},[s.picture?(i.openBlock(),i.createElementBlock("img",{key:0,src:i.unref($t)(i.unref(ed)((d=s.picture)==null?void 0:d.image)),class:i.normalizeClass(["picture override",o.value])},null,10,Q_)):i.createCommentVNode("",!0),n.value?(i.openBlock(),i.createElementBlock("video",{key:1,class:"picture override",autoplay:n.value.autoplay!==!1,loop:n.value.loop!==!1,muted:!!n.value.muted},[i.createElementVNode("source",{src:i.unref($t)(i.unref(ed)(n.value.video))},null,8,J_)],8,Y_)):i.createCommentVNode("",!0)],6)}}});function Z_(){return Lt().dialogAudio}function td(e){const t=Z_();if(t){if(t.characterAudio&&t.characterAudio[e])return t.characterAudio[e];if(t.defaultAudio)return t.defaultAudio}}function nd(e,t){if(typeof t!="string")return;const n=td(e);return n==null?void 0:n.soundPerLetter}function eb(e,t){if(typeof t!="string")return;const n=nd(e,t);if(!n)return;const r=n;let o="";return r.prefix&&(o+=r.prefix),o+=t,r.suffix&&(o+=r.suffix),o}function tb(e,t){if(typeof t!="string")return;const n=t.toLowerCase(),r=eb(e,n);if(typeof r!="string")return;const o=Qt(r);if(o){const a=nd(e,n);let s=1;a.volume&&(s=a.volume);const c=ft().audioVolume("sound",r)*s;o.volume(c),o.play()}}function nb(e){const t=td(e);if(t!=null&&t.soundOnNewLine){const n=Qt(t.soundOnNewLine);if(n){const r=ft().audioVolume("sound",t.soundOnNewLine);n.volume(r),n.play()}}}const rb=["innerHTML"],ob=["innerHTML"],ib=["innerHTML"],sb={key:1},ab=["onClick","innerHTML"],lb={key:1},cb={key:2,class:"buttons-container"},ub=i.defineComponent({__name:"dialog-box",props:{options:{},active:{type:Boolean},inputListener:{}},setup(e,{expose:t}){const n=i.ref(null),r=i.ref(""),o=i.ref(!1),a=i.ref(null),s=i.ref(null),c=i.ref(!1),d=i.ref(null),u=i.ref(null),h=i.ref(null),l=i.ref(null),f=i.ref(null),m=e,y=i.ref(null);m.active&&(y.value=Sn({mode:"list",container:n,listener:m.inputListener,onlyVertical:!0,onChosen:R=>{ee.value&&M.value?F(M.value[R]):I(" ")}})),i.onMounted(()=>{ke(),c.value=!0}),i.onUnmounted(()=>{b(),z(),nt({unmounted:!0})});function b(){a.value&&(clearTimeout(a.value),a.value=null),S()}function S(){y.value&&(y.value.disable(),y.value=null)}function T(R){I(R.key)}function I(R){if(!ee.value){c.value&&s&&R===" "&&nt({pressedSpace:!0});return}if(ee.value&&m.options.textField&&R==="Enter"&&X(),ee.value&&!m.options.textField){let J=-1;switch(R){case" ":J=0;break;case"1":J=0;break;case"2":J=1;break;case"3":J=2;break;case"4":J=3;break;case"5":J=4;break;case"6":J=5;break;case"7":J=6;break;case"8":J=7;break}J!==-1&&M.value&&J<M.value.length?F(M.value[J]):J===0&&F(J)}}function x(){ee.value||c.value&&s&&nt({pressedSpace:!0})}function B(){o.value||F(0)}function F(R){L();let J;typeof R=="object"?J=R.originalIndex:J=R,Te().playerAnswered(J)}function L(){b(),nt({unmounted:!0}),o.value=!0}function P(R){const J={};return R.allowed||(J.pointerEvents="none",J.textDecoration="line-through"),J}function Y(R,J){const fe={index:R+1,choice:J.choice};let ce='<span class="choice-index">%{$index}. </span> <span class="choice-text">%{$choice}</span>';if(Va().choiceTextTemplate&&(ce=Va().choiceTextTemplate),J.flag){const be=wf(J.flag);be!=null&&be.textTemplate&&(ce=be.textTemplate)}return Al(fe,ce)}function W(R){const J={};if(R.allowed||(J["strike-anim"]=!0),R.seenBefore&&(J["seen-before"]=!0),R.flag){const fe=wf(R.flag);fe!=null&&fe.cssClass&&(J[fe.cssClass]=!0)}return J}function X(){const R=r.value;z(),Te().playerAnswered(R)}function G(){m.options.textField&&(a.value=setTimeout(()=>{ee.value&&(f.value=Ke().registerInputListener("text-field-input-grabber",{}),l.value&&l.value.focus())},100))}function z(){f.value&&(Ke().unregisterInputListener(f.value),f.value=null)}function Q(R,J){const fe=m.options.text.substring(R,J);s.value.text+=fe;const ce=fe.substring(0,1);return tb(m.options.styleId,ce),J}function te(R){const J=R[0];return s.value.text+=J,s.value.skippedChars+=J.length,J.length}function ke(){if(!m.options.old)if(Fe().playMode==="skip")Ne();else if(nb(m.options.styleId),le().dialogPanel.animateText){s.value={text:"",index:0,startTime:Date.now(),timer:null,skippedChars:0,tags:sm(m.options.text),finished:!1};const R=s.value;R.timer=setInterval(()=>{qe()},30)}else E.value&&(d.value=setTimeout(()=>{nt()},(le().dialogPanel.textSpeed??Vo)*m.options.text.length))}function Ne(){Fe().playMode==="skip"&&!m.options.old&&(E.value?u.value=setTimeout(()=>{nt()},100):(Fe().toggleSkip(),nt({unmounted:!0})))}function Ze(){Fe().playMode==="auto"&&!m.options.old&&E.value&&ee&&B()}function qe(){const R=s.value;if(!R)return;const J=R.index,fe=Date.now()-R.startTime;let ce=!1,be=Math.round(fe/(le().dialogPanel.textSpeed??Vo))+R.skippedChars;if(be>m.options.text.length&&(ce=!0,R.finished=!0,be=m.options.text.length),be!==R.index){let ve=J;for(;R.tags.length>0&&be>=R.tags[0].index;){ve=Q(ve,R.tags[0].index);const Le=te(R.tags.shift());ve+=Le,be+=Le}ve=Q(ve,be),R.index=ve}ce&&nt()}function nt({unmounted:R,pressedSpace:J}={}){G(),setTimeout(()=>{y.value&&y.value.select(0)},10),s.value&&(s.value.timer&&clearInterval(s.value.timer),s.value=null),d.value&&!J&&clearTimeout(d.value),u.value&&clearTimeout(u.value),h.value&&clearTimeout(h.value),!R&&!J&&Fe().playMode!=="normal"&&E&&(h.value=setTimeout(()=>{B()},Fe().playMode==="auto"?le().dialogPanel.timeBetweenLines??br.common.dialogPanel.timeBetweenLines:0))}const j=i.computed(()=>m.options.title?" &nbsp;–&nbsp; ":""),g=i.computed(()=>({...Es(m.options.styleId).boxCss})),E=i.computed(()=>!M.value&&!m.options.textField),$=i.computed(()=>{const R={};return m.options.title&&(R["dialog-box-followup"]=!0),m.options.old?R["dialog-box-old"]=!0:R["dialog-box-new"]=!0,R}),_=i.computed(()=>{const R=Es(m.options.styleId);return{color:R.color,...R.nameCss}}),v=i.computed(()=>Es(m.options.styleId).textCss),C=i.computed(()=>s.value?s.value.text:m.options.text),M=i.computed(()=>{if(m.options.choices)return m.options.choices}),U=i.computed(()=>Fe().playMode==="skip"),ne=i.computed(()=>Fe().playMode==="auto"),ee=i.computed(()=>m.active&&c.value&&!o.value&&!h.value&&!s.value&&m.options.interactive&&!Ee.value),re=Te(),Ee=i.computed(()=>re.paused);return i.watch(()=>m.options,(R,J)=>{!J.old&&R.old&&s&&nt({unmounted:!0})}),i.watch(U,(R,J)=>{R&&!J&&Ne()}),i.watch(ne,(R,J)=>{R&&!J&&Ze()}),t({keyboardEvent:T}),(R,J)=>{const fe=i.resolveDirective("visible");return i.openBlock(),i.createElementBlock("div",{class:i.normalizeClass(["dialog-box w-full override",$.value]),style:i.normalizeStyle(g.value)},[i.createElementVNode("div",{class:"dialog-content",onClick:x},[R.options.title?(i.openBlock(),i.createElementBlock("span",{key:0,class:"dialog-title override",style:i.normalizeStyle(_.value),innerHTML:R.options.title},null,12,rb)):i.createCommentVNode("",!0),i.createElementVNode("span",{class:"dialog-text dialog-separator override",style:i.normalizeStyle(v.value),innerHTML:j.value},null,12,ob),i.createElementVNode("span",{class:i.normalizeClass(["dialog-text override",R.options.cssClass]),style:i.normalizeStyle(v.value),innerHTML:C.value},null,14,ib),R.options.old?i.createCommentVNode("",!0):i.withDirectives((i.openBlock(),i.createElementBlock("div",sb,[M.value?(i.openBlock(),i.createElementBlock("div",{key:0,class:"dialog-choices",ref_key:"choicesDiv",ref:n},[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(M.value,(ce,be)=>(i.openBlock(),i.createElementBlock("p",{key:be,style:i.normalizeStyle(P(ce)),class:i.normalizeClass([W(ce),"dialog-choice override"]),onClick:ve=>F(ce),innerHTML:Y(be,ce)},null,14,ab))),128))],512)):R.options.textField?(i.openBlock(),i.createElementBlock("div",lb,[i.withDirectives(i.createElementVNode("input",{autofocus:"",type:"text",class:"label-input nrt-input",ref_key:"playerInput",ref:l,id:"player-input-field","onUpdate:modelValue":J[0]||(J[0]=ce=>r.value=ce)},null,512),[[i.vModelText,r.value]]),i.createElementVNode("button",{onClick:X,class:"nrt-button",id:"player-input-submit"}," Submit ")])):(i.openBlock(),i.createElementBlock("div",cb,[i.createElementVNode("div",{onClick:J[1]||(J[1]=ce=>F(0)),ref:"continue",class:"interact-button nrt-button override"}," Continue ",512)]))])),[[fe,ee.value]])])],6)}}}),db={key:0,class:"auto-play-feedback-container"},fb=i.defineComponent({__name:"AutoPlayFeedback",setup(e){const t=Fe(),n=i.computed(()=>t.playMode==="auto"),r=i.computed(()=>t.playMode==="skip"),o=i.computed(()=>n.value?"auto-play-feedback-auto":r.value?"auto-play-feedback-skip":{}),a=i.computed(()=>n.value?"Auto Play":r.value?"Skip":"");return(s,c)=>a.value?(i.openBlock(),i.createElementBlock("div",db,[i.createElementVNode("div",{class:i.normalizeClass(["auto-play-feedback",o.value])},i.toDisplayString(a.value),3)])):i.createCommentVNode("",!0)}}),pb=i.createElementVNode("div",{class:"anchor"},null,-1),Os=i.defineComponent({__name:"game-dialog",setup(e){const t=i.computed(()=>Je().layoutMode),n=i.computed(()=>Ke().inGameInputListener),r=i.ref(Te().inScript),o=i.ref(null),a=Je(),s=we(),c=i.computed(()=>s.stack),d=Fe(),u=i.computed(()=>d.dialog),h=i.ref(null),l=i.ref(null),f=i.ref(null),m=i.computed(()=>{let z="0px";const Q=le().layout.dialogBottomPadding;return typeof Q=="number"?z=`${Q}px`:typeof Q=="string"&&(z=Q),{paddingBottom:z}}),y=i.computed(()=>{if(u.value.length>0)return u.value[u.value.length-1]}),b=i.computed(()=>{if(y.value)return y.value.speaker}),S=i.computed(()=>{if(y.value)return y.value.pose}),T=i.computed(()=>{if(y.value){const z=b.value;let Q=S.value;return z?(Q||(Q="idle"),Q):void 0}}),I=i.computed(()=>{if(!T.value)return;const z=b.value;return G_(z,T.value)}),x=i.computed(()=>{const z=I.value;if(z_(z))return z}),B=i.computed(()=>{const z=I.value;if(W_(z))return z}),F=i.computed(()=>a.dialogWidth),L=i.computed(()=>Te().inScript);i.watch(L,z=>{z?r.value=!0:Fe().playMode!=="normal"?(Fe().playMode==="skip"&&(Fe().playMode="normal"),o.value=setTimeout(()=>{r.value=!1},500)):r.value=!1}),i.onMounted(()=>{if(n.value){const Q=n.value;Q.actions.autoPlay={press:()=>{Fe().toggleAutoPlay()}},Q.actions.skip={press:()=>{Fe().toggleSkip()}}}const z=Q=>{l.value&&l.value.keyboardEvent&&l.value.keyboardEvent(Q)};z.value=qt.on("debouncedKeydown",z)}),i.onUnmounted(()=>{n.value&&(delete n.value.actions.autoPlay,delete n.value.actions.skip),f.value&&qt.off("debouncedKeydown",f.value),o.value&&clearTimeout(o.value)});const P=i.computed(()=>{let z;const Q=`${Je().dialogHeight}px`,te={};if(Je().overlayMode){te.position="absolute";const ke=le().dialogPanel.rightOffset??br.common.dialogPanel.rightOffset;te.right=`${ke}px`;const Ne=le().dialogPanel.bottomOffset??br.common.dialogPanel.bottomOffset;te.bottom=`${Ne}px`}return{...te,width:t.value==="horizontal"?`${F.value}px`:"100%",height:Q,transform:z,transformOrigin:"right"}});function Y(){Fe().toggleAutoPlay()}function W(){Fe().toggleSkip()}function X(z,Q){const te=Zo(z.speaker);let ke=(te==null?void 0:te.name)??"Missing Character";return Q>=1&&u.value[Q-1].speaker===z.speaker&&(ke=void 0),z.choices&&z.choices.forEach(Ne=>{Ne.choice=nn(Ne.choice)}),{title:ke??"",text:z.text,cssClass:z.cssClass,styleId:z.speaker,choices:z.choices,old:Q<u.value.length-1,interactive:z.interactive,textField:z.textField}}function G(z){return z===d.dialog.length-1&&c.value.length>0}return i.watch(u.value,z=>{if(h.value){const Q=h.value;Q.scrollTop=Q.scrollHeight+1e8}}),(z,Q)=>(i.openBlock(),i.createElementBlock(i.Fragment,null,[i.createVNode(fb),i.createVNode(i.Transition,{name:"fade"},{default:i.withCtx(()=>[(x.value||B.value)&&i.unref(a).showDialog?(i.openBlock(),i.createBlock(X_,{key:0,picture:x.value,video:B.value,character:b.value,pose:S.value},null,8,["picture","video","character","pose"])):i.createCommentVNode("",!0)]),_:1}),i.createVNode(i.Transition,{name:"dialog-transition"},{default:i.withCtx(()=>[i.unref(a).showDialog?(i.openBlock(),i.createElementBlock("div",{key:0,class:"dialog override",ref_key:"dialogRef",ref:h,style:i.normalizeStyle(P.value)},[i.createVNode(i.TransitionGroup,{name:"list",tag:"div",class:"dialog-container w-full override",style:i.normalizeStyle(m.value)},{default:i.withCtx(()=>[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(u.value,(te,ke)=>(i.openBlock(),i.createBlock(ub,{ref_for:!0,ref:Ne=>l.value=Ne,key:te.id,options:X(te,ke),active:G(ke),inputListener:n.value},null,8,["options","active","inputListener"]))),128))]),_:1},8,["style"]),(i.openBlock(),i.createBlock(i.Teleport,{to:"#narrat-app"},[i.createElementVNode("div",{class:"auto-skip-buttons flex"},[i.createElementVNode("div",{class:"nrt-button menu-toggle-button auto-button auto",onClick:Y}," Auto "),i.createElementVNode("div",{class:"nrt-button menu-toggle-button auto-button skip",onClick:W}," Skip ")])])),pb],4)):i.createCommentVNode("",!0)]),_:1})],64))}}),mb=["id"],hb=["src"],yb={class:"tab-title"},rd=i.defineComponent({__name:"tab-selector",props:{tab:{},active:{type:Boolean}},emits:["click"],setup(e,{emit:t}){const n=e,r=t,o=i.computed(()=>n.active?"tab-active":"tab-inactive");function a(){r("click")}return(s,c)=>(i.openBlock(),i.createElementBlock("div",{class:i.normalizeClass(["tab",o.value]),id:`tab-${s.tab.id}`,onClick:a},[i.createElementVNode("div",{class:i.normalizeClass(["tab-title-container",s.active?"active":""])},[s.tab.icon?(i.openBlock(),i.createElementBlock("img",{key:0,src:s.tab.icon,alt:"tab icon",class:"tab-icon"},null,8,hb)):i.createCommentVNode("",!0),i.createElementVNode("span",yb,i.toDisplayString(s.tab.label),1)],2)],10,mb))}}),gb={class:"tabs-controller"},_b={key:0,class:"tabs-controller__tabs"},bb={key:1,class:"tab-content"},Tb={key:2},vb=[i.createElementVNode("div",{class:"tab-content__empty"},[i.createElementVNode("p",null,"No tab selected")],-1)],Sb=i.defineComponent({__name:"TabsController",props:{tabs:{},defaultTab:{}},emits:["tab-change","close"],setup(e,{emit:t}){const n=i.ref(Ke().registerInputListener("tabs-controller",{cancel:{press:()=>{r("close")}},system:{press:()=>{r("close")}},menu:{press:()=>{r("close")}},previousTab:{press:()=>{a.value>0&&s(a.value-1)}},nextTab:{press:()=>{a.value<o.tabs.length-1&&s(a.value+1)}}})),r=t,o=e,a=i.ref(o.defaultTab);function s(d){a.value=d,r("tab-change",d)}const c=i.computed(()=>o.tabs[a.value]);return i.onUnmounted(()=>{n.value&&(Ke().unregisterInputListener(n.value),n.value=null)}),(d,u)=>(i.openBlock(),i.createElementBlock("div",gb,[d.tabs.length>1?(i.openBlock(),i.createElementBlock("div",_b,[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(d.tabs,(h,l)=>(i.openBlock(),i.createBlock(rd,{key:h.id,tab:h,active:l===a.value,onClick:()=>s(l),inputListener:n.value},null,8,["tab","active","onClick","inputListener"]))),128))])):i.createCommentVNode("",!0),c.value?(i.openBlock(),i.createElementBlock("div",bb,[c.value?(i.openBlock(),i.createBlock(i.resolveDynamicComponent(c.value.component),{key:0,inputListener:n.value,onClose:u[0]||(u[0]=h=>d.$emit("close"))},null,40,["inputListener"])):i.createCommentVNode("",!0)])):(i.openBlock(),i.createElementBlock("div",Tb,vb))]))}}),wb={class:"menu-container menu-toggle"},kb=["onClick","id"],Cb={class:"nrt-title"},As=i.defineComponent({__name:"menu-buttons",setup(e){const t=ht(),n=i.ref(null);i.onMounted(()=>{Ie.callHook("onGameMounted")}),i.onUnmounted(()=>{n.value&&qt.off("keydown",n.value),Ie.callHook("onGameUnmounted")});function r(h){ht().activeMenu=h}const o=i.computed(()=>t.menus),a=i.computed(()=>t.menu),s=i.computed(()=>{var h;return(((h=a.value)==null?void 0:h.tabs)??[]).filter(l=>l.condition?l.condition():!0).map(l=>({id:l.id,label:l.text,component:l.component}))});function c(){t.closeMenu()}function d(h){t.setActiveTab(h)}function u(){return c()}return(h,l)=>(i.openBlock(),i.createElementBlock("div",wb,[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(o.value,(f,m)=>(i.openBlock(),i.createElementBlock("button",{key:f.id,onClick:y=>r(f.id),id:f.cssId??`${m}-menu-button`,class:"nrt-button menu-toggle-button"},i.toDisplayString(f.label),9,kb))),128)),a.value?(i.openBlock(),i.createBlock(i.Teleport,{key:0,to:"#narrat"},[i.createVNode(_n,{containerCssClass:{[a.value.cssClass]:!0,"menu-modal":!0},onClose:c},{header:i.withCtx(()=>{var f;return[i.createElementVNode("h3",Cb,i.toDisplayString(((f=i.unref(t).tab)==null?void 0:f.text)??a.value.label),1)]}),body:i.withCtx(()=>[i.createVNode(Sb,{onTabChange:d,onClose:u,tabs:s.value,defaultTab:a.value.activeTab},null,8,["tabs","defaultTab"])]),_:1},8,["containerCssClass"])])):i.createCommentVNode("",!0)]))}});function od(e){const t={};return e.selected&&(t.selected=!0),e.clickable&&e.viewportClickable&&!e.transitioning&&(t.interactable=!0),(!e.clickable||!e.viewportClickable)&&(t["nrt-disabled"]=!0),e.transitioning&&(t.transitioning=!0),e.greyed&&(t.greyed=!0),e.hidden&&(t.hidden=!0),e.cssClass&&(t[e.cssClass]=!0),t}function $b(e,t,n){return{selected:t,clickable:e.onClick!==void 0,viewportClickable:Jo(e),transitioning:n,greyed:!1,hidden:!1,cssClass:e.cssClass}}function Eb(e,t,n){const r=Vn(e),o=Ut().getButtonState(e);return{selected:t,clickable:Ut().isButtonInteractible(e),viewportClickable:Jo(r),transitioning:n,greyed:o==="greyed",hidden:o==="hidden"||o===!1,cssClass:r.cssClass}}function Ob(e,t,n){return od(Eb(e,t,n))}function Ab(e,t,n){return od($b(e,t,n))}const Ib=["id"],Nb=["innerHTML"],Pb=i.defineComponent({__name:"screen-object",props:{screenObject:{},layerSelected:{type:Boolean},transitioning:{type:Boolean},activeInteractive:{}},setup(e){const t=e,n=xt();function r(c){t.transitioning||t.screenObject.onClick&&n.clickObject(c)}const o=i.computed(()=>{if(!t.layerSelected)return!1;const c=t.activeInteractive;return c.type==="screenObject"&&c.id===t.screenObject.id}),a=i.computed(()=>Ab(t.screenObject,o.value,t.transitioning)),s=i.computed(()=>{const c={};t.screenObject.opacity!==1&&(c.opacity=t.screenObject.opacity);let d=t.screenObject.x,u=t.screenObject.y,h=t.screenObject.width,l=t.screenObject.height;if(t.screenObject.anchor){const m=t.screenObject.anchor;d=t.screenObject.x-h*m.x,u=t.screenObject.y-l*m.y,c.transformOrigin=`${m.x*100}% ${m.y*100}%`}t.screenObject.scale&&(h=h*t.screenObject.scale,l=l*t.screenObject.scale);const f={...c,left:`${d}px`,top:`${u}px`,width:`${h}px`,height:`${l}px`};return Zg(t.screenObject)&&(f.backgroundImage=`url(${Lr(t.screenObject.image)})`),f});return(c,d)=>{const u=i.resolveComponent("ScreenObject",!0);return i.openBlock(),i.createElementBlock("div",{tabindex:"-1",class:i.normalizeClass(["viewport-object",a.value]),id:`viewport-object-${t.screenObject.id}`,onClick:d[0]||(d[0]=h=>r(c.screenObject)),style:i.normalizeStyle(s.value)},[i.createElementVNode("span",{innerHTML:t.screenObject.text?i.unref(nn)(t.screenObject.text):void 0},null,8,Nb),(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(t.screenObject.children,h=>(i.openBlock(),i.createBlock(u,{transitioning:c.transitioning,key:h.id,screenObject:h},null,8,["transitioning","screenObject"]))),128))],14,Ib)}}}),jb=["id","innerHTML"],Db=i.defineComponent({__name:"viewport-button",props:{id:{},layerSelected:{type:Boolean},transitioning:{type:Boolean},activeInteractive:{}},setup(e){const t=e,n=Ut();i.computed(()=>n.getButtonState(t.id));const r=i.computed(()=>Vn(t.id)),o=r.value.background?Lr(r.value.background):null,a=i.computed(()=>{if(!t.layerSelected)return!1;const h=t.activeInteractive;return h.type==="button"&&h.id===t.id});i.computed(()=>n.isButtonClickable(t.id));const s=i.computed(()=>{const h=r.value.text??"";return nn(h)}),c=i.computed(()=>Ob(t.id,a.value,t.transitioning)),d=i.computed(()=>{const h={};r.value.position.width&&(h.width=`${r.value.position.width}px`),r.value.position.height&&(h.height=`${r.value.position.height}px`),r.value.background&&(h.backgroundImage=`url(${o})`);let l=r.value.position.left,f=r.value.position.top;return r.value.anchor&&(l=r.value.position.left-r.value.position.width*r.value.anchor.x,f=r.value.position.top-r.value.position.height*r.value.anchor.y),{...h,left:`${l}px`,top:`${f}px`}});function u(){n.clickOnButton(t.id)}return(h,l)=>(i.openBlock(),i.createElementBlock("div",{tabindex:"-1",class:i.normalizeClass(["viewport-button",c.value]),id:`viewport-button-${h.id}`,onClick:l[0]||(l[0]=f=>u()),style:i.normalizeStyle(d.value),innerHTML:s.value},null,14,jb))}}),xb=["id"],Lb=["id","loop","muted"],Mb=["src"],Rb=["id"],Is=i.defineComponent({__name:"screen-layer",props:{layer:{},layerIndex:{},transitioning:{type:Boolean},activeInteractive:{}},setup(e){const t=e,n=Te(),r=xt(),o=i.computed(()=>!!(t.activeInteractive&&t.activeInteractive.layer===t.layerIndex)),a=i.computed(()=>r.tree.filter(S=>S.layer===t.layerIndex)),s=i.computed(()=>le().layout.backgrounds.width),c=i.computed(()=>le().layout.backgrounds.height),d=i.computed(()=>t.layer),u=i.computed(()=>{const S=xr(d.value);return S||ae(`Screen ${d.value} doesn't have a config`),S}),h=i.computed(()=>n.isInGame),l=i.computed(()=>u.value.buttons||[]),f=i.computed(()=>u.value.video),m=i.computed(()=>({width:`${s.value}px`,height:`${c.value}px`})),y=i.computed(()=>{let S;return u.value.background!==Uo&&(S=`url(${Lr(u.value.background)})`),{backgroundImage:S,position:"absolute",left:0,top:0,width:`${s.value}px`,height:`${c.value}px`}}),b=i.computed(()=>({position:"absolute",left:0,top:0,width:`${s.value}px`,height:`${c.value}px`}));return(S,T)=>h.value?(i.openBlock(),i.createElementBlock("div",{key:0,class:"viewport-layer",id:`viewport-layer-${d.value}`,style:i.normalizeStyle(m.value)},[f.value?(i.openBlock(),i.createElementBlock("video",{key:0,class:"viewport-layer-background",id:`viewport-layer-background-${d.value}`,style:i.normalizeStyle(b.value),autoplay:"",loop:f.value.loop!==!1,muted:!!f.value.muted},[i.createElementVNode("source",{src:i.unref($t)(u.value.background)},null,8,Mb)],12,Lb)):(i.openBlock(),i.createElementBlock("div",{key:1,class:"viewport-layer-background",id:`viewport-layer-background-${d.value}`,style:i.normalizeStyle(y.value)},null,12,Rb)),(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(l.value,I=>(i.openBlock(),i.createBlock(Db,{key:I,id:I,layerSelected:o.value,transitioning:S.transitioning,activeInteractive:S.activeInteractive},null,8,["id","layerSelected","transitioning","activeInteractive"]))),128)),(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(a.value,I=>(i.openBlock(),i.createBlock(Pb,{key:I.id,screenObject:I,transitioning:S.transitioning,layerSelected:o.value,activeInteractive:S.activeInteractive},null,8,["screenObject","transitioning","layerSelected","activeInteractive"]))),128))],12,xb)):i.createCommentVNode("",!0)}}),Bb=i.defineComponent({__name:"NarratTransition",props:{name:{type:String,required:!0},duration:{type:Number,required:!0},delay:Number},emits:["complete"],setup(e,{emit:t}){i.useSlots();const n=t,r=e,o=i.ref("start"),a=i.reactive({oldSlotClasses:{},oldSlotStyle:{},newSlotClasses:{},newSlotStyle:{}});return i.onMounted(async()=>{const s=`narrat-transition-${r.name}`;a.newSlotClasses={[`${s}-enter-from`]:!0},a.oldSlotClasses={[`${s}-leave-active`]:!0},await At(30),a.oldSlotStyle={transitionDuration:`${r.duration/1e3}s`},a.newSlotStyle={transitionDuration:`${r.duration/1e3}s`},a.oldSlotClasses[`${s}-leave-to`]=!0,a.newSlotClasses[`${s}-enter-active`]=!0,await At(r.delay??0),delete a.newSlotClasses[`${s}-enter-from`],await At(r.duration),o.value="end",n("complete")}),(s,c)=>(i.openBlock(),i.createElementBlock(i.Fragment,null,[o.value!=="end"?(i.openBlock(),i.createElementBlock("div",{key:0,class:i.normalizeClass(["transition-holder",a.oldSlotClasses]),style:i.normalizeStyle(a.oldSlotStyle)},[i.renderSlot(s.$slots,"oldElement")],6)):i.createCommentVNode("",!0),i.createElementVNode("div",{class:i.normalizeClass(["transition-holder",a.newSlotClasses]),style:i.normalizeStyle(a.newSlotStyle)},[i.renderSlot(s.$slots,"newElement")],6)],64))}});function id(e,t,n){return e<t?t:e>n?n:e}const Ns=i.defineComponent({__name:"screens",setup(e){const t=i.computed(()=>Ke().inGameInputListener),n=Te(),r=Ut(),o=xt(),a=i.ref(0),s=i.computed(()=>r.nonEmptyLayers),c=i.computed(()=>{const y=[];return s.value.reduce((b,S,T)=>{const x=xr(S.screen).buttons;if(x)for(const F of x)r.isButtonClickable(F)&&b.push({id:F,type:"button",layer:T});const B=o.tree.filter(F=>F.layer===T);for(const F of B)o.isScreenObjectClickable(F)&&b.push({id:F.id,type:"screenObject",layer:T});return b},y)}),d=i.computed(()=>{if(c.value.length===0)return null;let y=a.value;return y>c.value.length-1&&(y=c.value.length-1),c.value[y]}),u=i.computed(()=>le().layout.backgrounds.width),h=i.computed(()=>le().layout.backgrounds.height),l=i.computed(()=>n.isInGame);function f(y){r.finishTransition(y)}const m=i.computed(()=>{const y=u.value;return{height:`${h.value}px`,width:`${y}px`}});return i.onMounted(()=>{i.nextTick(()=>{if(t.value){const y=t.value.actions;y.previousTab={press:()=>{a.value>0?a.value--:a.value=c.value.length-1,a.value=id(a.value,0,c.value.length-1)}},y.left=y.previousTab,y.nextTab={press:()=>{a.value<c.value.length-1?a.value++:a.value=0,a.value=id(a.value,0,c.value.length-1)}},y.right=y.nextTab,y.viewportSelect={press:()=>{if(d.value){const b=d.value;b.type==="button"?r.clickOnButton(b.id):b.type==="screenObject"&&o.clickObject(o.getObject(b.id))}}}}})}),i.onUnmounted(()=>{if(t.value){const y=t.value;delete y.actions.previousTab,delete y.actions.left,delete y.actions.nextTab,delete y.actions.right}}),(y,b)=>l.value?(i.openBlock(),i.createElementBlock("div",{key:0,class:"viewport",id:"narrat-viewport",style:i.normalizeStyle(m.value)},[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(s.value,(S,T)=>(i.openBlock(),i.createElementBlock("div",{key:S.screen??"",class:"layer-container"},[S.transition?(i.openBlock(),i.createBlock(Bb,{key:0,name:S.transition.transition,duration:S.transition.duration,delay:S.transition.delay,onComplete:()=>f(T)},{oldElement:i.withCtx(()=>[S.transition.oldScreen?(i.openBlock(),i.createBlock(Is,{key:0,layer:S.transition.oldScreen,layerIndex:T,transitioning:!0},null,8,["layer","layerIndex"])):i.createCommentVNode("",!0)]),newElement:i.withCtx(()=>[S.screen?(i.openBlock(),i.createBlock(Is,{key:0,layer:S.screen,layerIndex:T,transitioning:!0},null,8,["layer","layerIndex"])):i.createCommentVNode("",!0)]),_:2},1032,["name","duration","delay","onComplete"])):S.screen?(i.openBlock(),i.createBlock(Is,{key:1,layer:S.screen,layerIndex:T,transitioning:!1,activeInteractive:d.value},null,8,["layer","layerIndex","activeInteractive"])):i.createCommentVNode("",!0)]))),128))],4)):i.createCommentVNode("",!0)}}),Pt=et("hud",{state:()=>({hudStats:{},visible:!0}),actions:{updateConfig(e){for(const t in e.hudStats)this.hudStats[t]||(this.hudStats[t]={value:e.hudStats[t].startingValue})},reset(e){this.$reset(),this.updateConfig(e)},setStat(e,t){this.hudStats[e].value=t,this.getStat(e).value<(sr(e).minValue??0)&&(this.hudStats[e].value=sr(e).minValue??0),this.getStat(e).value>(sr(e).maxValue??1/0)&&(this.hudStats[e].value=sr(e).maxValue??1/0)},addStat(e,t){this.setStat(e,this.getStatValue(e)+t)},getStat(e){return this.hudStats[e]},getStatValue(e){return this.hudStats[e].value},generateSaveData(){return{hudStats:Re(this.hudStats),visible:this.visible}},loadSaveData(e){this.hudStats=Yn(this.hudStats,e.hudStats),this.visible=e.visible},setVisibility(e){this.visible=e}}}),Fb=i.defineComponent({data(){return{}},methods:{getStatImage(e){return $t(this.statsConfig[e].icon)},formatStat(e,t){var c;const n=sr(e),r=n.decimals??2,o=Math.floor(t*10**r)/10**r,a={};(c=n.formatting)!=null&&c.style&&(a.style=n.formatting.style,n.formatting.style==="currency"&&(a.currency=n.formatting.currency??"USD",a.currencyDisplay="narrowSymbol"),n.formatting.style==="unit"&&(a.unit=n.formatting.unit??"day"));let s;try{s=o.toLocaleString(void 0,a)}catch(d){ae(`Error formatting HUD stat, probably using an invalid config: ${d}`),console.error(d),s=o.toLocaleString()}return s},statPrefix(e){const t=sr(e);return t.prefix??(t.suffix||t.hideName?"":t.name)},statSuffix(e){return sr(e).suffix??""}},computed:{...Yr(Pt,["hudStats"]),...Yr(Je,["layoutMode"]),statsConfig(){return le().hudStats},stats(){return this.hudStats},hudStyle(){let e="0";return this.layoutMode==="horizontal"&&(e=`${Ii()+(le().dialogPanel.rightOffset??br.common.dialogPanel.rightOffset)}px`),{right:e}},hasHud(){return Pt().visible===!1?!1:Object.keys(Pt().hudStats).length>0}}}),Vb=["src"],Ub=["innerHTML"],qb=["innerHTML"];function Hb(e,t,n,r,o,a){return e.hasHud?(i.openBlock(),i.createElementBlock("div",{key:0,class:"hud",style:i.normalizeStyle(e.hudStyle)},[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(e.stats,(s,c)=>(i.openBlock(),i.createElementBlock("div",{key:c,class:"hud-stat"},[i.createElementVNode("img",{class:"hud-icon",src:e.getStatImage(c)},null,8,Vb),i.createElementVNode("span",{class:"bold hud-text",innerHTML:e.statPrefix(c)},null,8,Ub),i.createElementVNode("span",null,i.toDisplayString(e.formatStat(c,s.value)),1),e.statSuffix?(i.openBlock(),i.createElementBlock("span",{key:0,innerHTML:e.statSuffix(c)},null,8,qb)):i.createCommentVNode("",!0)]))),128))],4)):i.createCommentVNode("",!0)}const Ps=zt(Fb,[["render",Hb]]),js=i.defineComponent({__name:"in-game",setup(e){const t=Ke(),n=i.computed(()=>t.inGameInputListener),r=Te(),o=Je(),a=i.computed(()=>o.layoutMode),s=i.computed(()=>r.saving),c=i.ref(null),d=Fe(),u=i.ref(null),h=i.computed(()=>s.value&&!s.value.withPrompt||s.value&&c.value),l=i.computed(()=>{let b="row";return a.value==="vertical"&&(b="column"),{flexDirection:b}});function f(b){if(c.value=null,b===null){xs(b,!1);return}xs(b,!0)}function m(){c.value=!0}function y(){c.value=!1,xs(null,!1),c.value=null}return i.onBeforeMount(()=>{t.createInGameInputListener()}),i.onMounted(()=>{u.value=qt.on("debouncedKeydown",b=>{Te().debugMode||((b.key==="a"||b.key==="A")&&d.toggleAutoPlay(),(b.key==="s"||b.key==="S")&&d.toggleSkip())})}),i.onUnmounted(()=>{n.value&&t.removeInGameInputListener(),u.value&&qt.off("debouncedKeydown",u.value)}),i.computed(()=>Pt().visible===!1?!1:Object.keys(Pt().hudStats).length>0),(b,S)=>(i.openBlock(),i.createElementBlock("div",{class:"game",style:i.normalizeStyle(l.value)},[i.createVNode(Ps),i.createVNode(As),i.createVNode(Ns),i.createVNode(Os),h.value?(i.openBlock(),i.createBlock(Ju,{key:0,mode:"pick",onChosen:f,onClose:S[0]||(S[0]=()=>f(null))})):i.createCommentVNode("",!0),s.value&&s.value.withPrompt&&c.value===null?(i.openBlock(),i.createBlock(Xo,{key:1,prompt:"Would you like to save the game?",onConfirm:m,onRefuse:y})):i.createCommentVNode("",!0)],4))}}),Kb={class:"chapter-title-scene"},Gb=["innerHTML"],zb=["innerHTML"],Wb=i.defineComponent({__name:"chapter-title",props:{options:{}},setup(e){const t=e,n=i.ref(null);function r(){n.value=null,Nt().changeScene("playing"),we().jumpToLabel(t.options.next_label)}return i.onMounted(()=>{n.value=setTimeout(r,t.options.duration??2e3)}),i.onUnmounted(()=>{n.value&&(clearTimeout(n.value),n.value=null)}),(o,a)=>(i.openBlock(),i.createElementBlock("div",Kb,[i.createElementVNode("h1",{class:"title chapter-title",innerHTML:t.options.title},null,8,Gb),t.options.subtitle?(i.openBlock(),i.createElementBlock("h2",{key:0,class:"subtitle chapter-subtitle",innerHTML:t.options.subtitle},null,8,zb)):i.createCommentVNode("",!0)]))}}),sd={"engine-splash":{id:"engine-splash",component:i.shallowRef(bs),props:{}},"game-splash":{id:"game-splash",component:i.shallowRef(Ss),props:{}},"start-menu":{id:"start-menu",component:i.shallowRef($s),props:{}},playing:{id:"playing",component:i.shallowRef(js),props:{}},"chapter-title":{id:"chapter-title",component:i.shallowRef(Wb),props:{}}};let an={};function Qb(e){an=e}function Yb(){sd["engine-splash"].onFinished=()=>{Nt().onEngineSplashFinished()},Nt().scenes=sd}function Jb(){return an}function ad(){for(const e in an){const t=an[e],n=t.store();let r;t_(t)&&(r=Ve()[t.config]),n.reset&&!t.avoidReset&&n.reset(r)}Ie.plugins.forEach(e=>{e.reset&&e.reset()})}function Xb(){const e={},t={};for(const n in an){const r=an[n];if(Qu(r)){const o=r.store();o.generateSaveData?e[r.save]=o.generateSaveData():ae(`Store ${n} has no generateSaveData method. Trying to generate save data for ${r.save}`)}if(Yu(r)){const o=r.store();o.generateGlobalSaveData?t[r.globalSave]=o.generateGlobalSaveData():ae(`Store ${n} has no generateGlobalSaveData method. Trying to generate save data for ${r.globalSave}`)}}return Ie.plugins.forEach(n=>{n.save&&(e.plugins[n.pluginId]=n.save())}),Ie.customStores().forEach(([n,r])=>{if(r.save){const o=r.save();o&&(o.customStores[n]=o)}}),{gameSave:e,globalSave:t}}function Zb(e){for(const t in an){const n=an[t];if(Qu(n)){const r=n.store();r.loadSaveData?r.loadSaveData(e[n.save]):ae(`Store ${t} has no loadSaveData method. Trying to load save data for ${n.save}`)}}Ie.plugins.forEach(t=>{t.load&&e.plugins[t.pluginId]&&t.load(e.plugins[t.pluginId])}),Ie.customStores().forEach(([t,n])=>{n.load&&n.load(e.customStores[t])})}function ld(e){for(const t in an){const n=an[t];if(Yu(n)){const r=n.store();r.loadGlobalSaveData?r.loadGlobalSaveData(e[n.globalSave]):ae(`Store ${t} has no loadGlobalSaveData method. Trying to load global save data for ${n.globalSave}`)}}}function eT(e){Zb(e.gameSave),ld(e.globalSave)}function Ds({slotId:e,name:t}){const n=Te(),r=e??n.saveSlot;n.saveData=Ep({slot:r,name:t,extractedSave:Xb()})}function tT(e){eT(e)}function cd(){we().globalData={},bn().globalSave.data={},Ds({})}function ud({saveName:e,withPrompt:t}){return new Promise(n=>{we().hasJumped?Te().startManualSave(n,e,t):n()})}function xs(e,t){var r;const n=Te();if(!n.saving){ae("No saving in progress!");return}if(!t||!e){n.cancelManualSave();return}n.saveData?(Op(n.saveData,mr(n.playTime.start,n.playTime.previousPlaytime),e.slotId,(r=n.saving)==null?void 0:r.name),n.alert("Success","Game saved!")):ae("There was no data to save!"),n.cancelManualSave()}const we=et("vm",{state:()=>({stack:[],data:{},globalData:{},lastLabel:"main",script:{},labelStack:["main"],commandsWaitingForPlayerAnswer:[],hasJumped:!1}),actions:{generateSaveData(){return{lastLabel:this.lastLabel,data:Ha(this.data,e=>Wu(e)?{_entityType:e._entityType,id:e.id}:e)}},generateGlobalSaveData(){return{data:Re(this.globalData)}},loadSaveData(e){this.lastLabel=e.lastLabel,this.data=e.data,this.findEntitiesInData(this.data)},loadGlobalSaveData(e){this.globalData=e.data},findEntitiesInData(e){Ku(this.data,(t,n,r)=>{if(Wu(t)){const o=xt().getObject(t.id);o?r[n]=o:Zn(`Trying to reload sprite ${n} (${JSON.stringify(t)} - ${t.id}) but it does not exist.`)}})},setReturnValue(e){this.currentFrame.returnValue=e},waitForPlayerAnswer(e){this.commandsWaitingForPlayerAnswer.push(e)},popAnswerQueue(){return this.commandsWaitingForPlayerAnswer.pop()},addScopedVariable(e,t){this.currentFrame&&(this.currentFrame.scope[e]=t)},async loadScripts(e){this.readGlobalData();const t=await this.loadConfigScriptFiles(e),n=Te().options.scripts;this.addAllScripts([...t,...n])},async loadConfigScriptFiles(e){const t=[];for(const r of e)t.push(Qo(Ai(r)));return(await Promise.all(t)).map((r,o)=>({fileName:e[o],code:r,id:e[o],type:"script"}))},addAllScripts(e){const t=Date.now();for(const r of e)Ie.addNarratScript(r);const n=Date.now();Ft.log(`scripts parsed in ${n-t} ms`)},start(){this.setStack({currentIndex:0,branchData:{branch:Ie.script.main.branch},label:"main"}),this.setStack({currentIndex:0,branchData:{branch:Ie.script.main.branch},label:"main"})},setLastLabel(e){this.lastLabel=e},reset(){this.$reset(),this.stack=[],this.data={},this.hasJumped=!0,this.setStack({currentIndex:0,branchData:{branch:Ie.script.main.branch},label:"main"})},readGlobalData(){this.globalData=bn().globalSave.data},setScript(e){Ie.script=e},overrideData(e){this.data=e},setStack(e){this.stack=[];const t=this.frameOptionsToFrame(e);this.lastLabel=e.label,this.stack.push(t)},frameOptionsToFrame(e){const t=e.branchData,n={...e,blocks:[],scope:{},returnValue:null};if(this.addBlock(n,{branchData:t,currentIndex:e.currentIndex}),e.scope&&(n.scope=e.scope),e.args&&e.branchData.args)for(const[r,o]of e.branchData.args.entries())e.args.length>r&&(n.scope[o]=e.args[r]);return n},addBlock(e,t){e.blocks.push(t)},async addAndRunBlock(e){const t=this.currentFrame;if(!t)throw new Error("No frame to add block to");return this.addBlock(t,e),await this.runBlock()},setData(e,t){const n=Mr();Of(n,e,t)},addInstruction(e,t){const n=Mr();Af(n,e,t)},addFrame(e){if(!e.label)if(this.currentFrame)e.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 t=this.frameOptionsToFrame(e);this.stack.push(t)},async addAndRunFrame(e){return await this.addFrame(e),await this.runFrame()},async runFrame(){if(!this.currentFrame)throw new Error("Tried to run a frame but there is no current frame");let t;for(;this.currentBlock;){const n=await this.runBlock();if(n===Bo||n===Fo)return this.cleanFrame(),n;if(n===es)return this.cleanFrame()}return this.cleanFrame(),t},cleanFrame(){const e=this.currentFrame,{returnValue:t}=e;return this.stack.splice(this.stack.length-1,1),t},async runBlock(){const e=this.currentBlock;if(!e)throw new Error("Tried to run a block but there is no current block");let t;for(;this.currentLine;){if(t=await this.runLineOnly(),xm(t))return this.cleanBlock(),t;e.currentIndex++}return this.cleanBlock(),t},cleanBlock(){if(!this.currentFrame){ae("Tried to clean a block but there is no current frame");return}if(!this.currentFrame.blocks){ae("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 e=await this.runFrame();for(;e===Bo;){const t=this.jumpTarget;if(!t){ae("Tried to jump but no target was set");return}this.hasJumped=!0,this.setStack(t),await Ds({}),e=await this.runFrame()}e!==Fo&&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(le().gameFlow.labelToJumpOnScriptEnd&&this.lastLabel!==le().gameFlow.labelToJumpOnScriptEnd){this.jumpToLabel(le().gameFlow.labelToJumpOnScriptEnd);return}Te().endingScript(),Te().options.debug&&le().debugging.showScriptFinishedMessage},async runLineOnly(){const e=this.currentLine;if(!e){ae("There is no line of script to run.");return}return Te().startingScript(),await yd(e)},async runLabelFunction(e,...t){const n=Ie.script[e];if(!n){ae(`Tried to run a label that doesn't exist: ${e}`);return}const r={currentIndex:0,branchData:n,label:e,args:t};return this.addAndRunFrame(r)},runCustomFrame(e){this.addAndRunFrame(e)},async jumpToLabel(e,...t){const n=Ie.script[e];if(!n){ae(`Label ${e} doesn't exist. Is the file with this label added in the list of script files to load in the config?`);return}e!==this.lastLabel&&(this.hasJumped=!0),this.setLastLabel(e),this.setStack({currentIndex:0,branchData:n,args:t,label:e}),this.runGame()},async runThenGoBackToPreviousDialog(e,...t){const n=Fe(),r=n.dialog[n.dialog.length-1],o=Te().inScript,a=await this.runLabelFunction(e,...t);return o?n.dialog.push(r):Te().endingScript(),a}},getters:{currentFrame(e){return e.stack[e.stack.length-1]},scope(){var e;return((e=this.currentFrame)==null?void 0:e.scope)??{}},currentBlock(){const e=this.currentFrame;return e?e.blocks[e.blocks.length-1]:void 0},currentLine(){const e=this.currentBlock;if(e&&e.branchData.branch.length>e.currentIndex)return e.branchData.branch[e.currentIndex]},commandWaitingForAnswer(){if(this.commandsWaitingForPlayerAnswer.length>0)return this.commandsWaitingForPlayerAnswer[0]}}}),dd=new Ao;dd.setupDebugger(!1);const Ht=dd.logger;function nT(e){return rT((t,n,r)=>_T(t,n,r),e.code,e.fileName)}function rT(e,t,n){const r={fileName:n,currentLine:0,error:(s,c)=>e(r,s,c),processCommandsFunction:Ls,indentSize:0};r.indentSize=fT(r,t);const o=cT(r,t);r.currentLine=0,Ht.log(o);const a={};for(const s of o){s.code.search(":")===-1&&r.error(s.line,"First indentation level should only be used to specify labels");const d=s.code.replace(":","").split(/ +/g),u=d[0],h=d.slice(1);s.branch||r.error(s.line,"This line should have a branch but doesn't"),a[u]={branch:Ls(r,s.branch,void 0),args:h}}return a}function Ls(e,t,n){const r=e.currentLine;if(!t){let s=0;return n&&(s=n.line),e.error(s,"Processing of command failed because the current branch has no lines inside"),[]}const o={processCommandsFunction:Ls,parserContext:e,lines:t,currentLine:0,line:t[0]},a=[];for(;o.currentLine<t.length;){const s=t[o.currentLine];o.line=s;const c=Ms(e,s,s.expression),d=Ie.commands[c.command.operator];let u=d==null?void 0:d.parser;u||(u=Ie.commands.text.parser),Ht.log(Ie.commands.text);const{newLine:h}=u(o,c);o.currentLine=h,e.currentLine=r+h,a.push(c)}return a}function Ms(e,t,n){Ht.log(n),typeof n[0]!="string"&&e.error(t.line,"Expression operator should be a string");const r={code:t.code,fileName:e.fileName,line:t.line,command:{staticOptions:{},commandType:n[0],operator:n[0],args:n.slice(1).map(s=>oT(e,t,s)),options:{}}},o=n[0];if(!Ie.commands[o]){const s=["else","success","failure"];!im(o)&&!s.includes(o)&&e.error(t.line,`Unknown command ${o}`)}return r}function oT(e,t,n){return Array.isArray(n)?Ms(e,t,n):n}function iT(e){return e==="true"?!0:e==="false"?!1:e==="undefined"?void 0:e===null?null:isNaN(Number(e))?e:Number(e)}function sT(e,t){t.charAt(t.length-1)===":"&&(t=t.substr(0,t.length-1));const n=aT(t),[r]=pd(e,n);return r}function aT(e){const t=/(["'])(?:\\\1|.)*?\1/g,n=[];let r;for(;(r=t.exec(e))!=null;)n.push(r);let o=0,a=[];for(const s of n){const c=s.index;if(c>o){const u=e.substr(o,c-o),h=fd(u);a=[...a,...h]}const d=s[0].replace(/\\/g,"");a.push(`$$"${d.substring(1,d.length-1)}`),o=c+s[0].length}return a=[...a,...fd(e.substr(o))],a.push(")"),a}function fd(e){e=e.replace(/: *$/g,"");let t=e.split(" ").filter(n=>n);return t=t.reduce((n,r)=>[...n,...r.split(/(\(|\))/g)].filter(o=>o&&o),[]),t.map(n=>iT(n))}function pd(e,t){Ht.log("===============");let n=[],r=0,o=md(t)+r,a=Rs(t)+r;for(Ht.log(`Parsing expression: ${t}`),Ht.log(`Parenthesis start index: ${o} - end: ${a}`);o!==-1&&a>o;){n=[...n,...t.slice(r,o)];const d=t.slice(o+1);Ht.log(`Found a sub expression. Before: ${n} - After: ${d}`),r=o;const[u,h]=pd(e,d),l=r+h;n.push(u),r=l+1;const f=t.slice(r);Ht.log(`Sub expression came back: ${u} - rest of string: ${f}`),o=md(f),o!==-1&&(o+=r),a=Rs(f),a!==-1&&(a+=r)}a!==-1&&Ht.log("Found parenthesis end before new opening parenthesis, close this expression");const s=Rs(t.slice(r))+r;if(s===-1)return e.error(e.currentLine,'Expression is not closed (missing ")" closing parenthesis)'),[n,s];const c=t.slice(r,s);return Ht.log(`End of expression: ${s} - ${c}`),Ht.log("==================="),n=[...n,...c],lT(e,n),[n,s+1]}function lT(e,t){t.length<1&&e.error(e.currentLine,"Expression is empty")}function md(e){return e.findIndex(t=>t==="(")}function Rs(e){return e.findIndex(t=>t===")")}function cT(e,t){const n=t.split(/\r?\n|$/).map(o=>{const a=o.search(/ *\/\//g);return a!==-1?o.substr(0,a):o});return hd(e,n,0,0).lines}function hd(e,t,n,r){let o=!0,a=n;const s=[];for(;o&&!(a>=t.length);){let c=t[a];if(c.search(/^\s*$/)!==-1)a++;else{const d=dT(e,c);if(c=c.substring(d*e.indentSize),uT(e,d,a),d<r)o=!1;else if(d>r){(s.length===0||d-r!==1)&&e.error(a,"Wrong double indentation");const u=hd(e,t,a,d);s[s.length-1].branch=u.lines,a=u.endLine}else{const u=sT(e,c),h={code:c,indentation:d,line:a,expression:u};s.push(h),a++,e.currentLine=a}}}return{lines:s,endLine:a}}function uT(e,t,n){t%1!==0&&e.error(n,`Indentation level of ${t} incorrect. Expected indentation of ${e.indentSize} spaces for this file.`)}function dT(e,t){return t.search(/[^ ]/)/e.indentSize}function fT(e,t){const n=/\n( *)/,r=t.match(n);return!r||r.length<2?(e.error(0,"Can't detect indentation level. Make sure you indent with at least 2 spaces and consistently"),0):(Ht.log(r),r[1].length)}class pT{constructor(){xe(this,"plugins",[]);xe(this,"pinia");xe(this,"script",{});xe(this,"scripts",[]);xe(this,"commands",{})}addCommand(t){this.commands[t.keyword]=t}addPlugin(t){if(this.plugins.push(t),t.customCommands)for(const n of t.customCommands)this.addCommand(n)}callHook(t,...n){for(const r of this.plugins)typeof r[t]=="function"&&r[t](...n)}addNarratScript(t){const n=nT(t);this.script={...this.script,...n},this.scripts.push(t)}customStores(){const t=[];for(const n of this.plugins)if(n.customStores)for(const r in n.customStores)t.push([r,n.customStores[r](this.pinia)]);return t}addCustomSettings(){for(const t of this.plugins)if(t.customSettings)for(const n in t.customSettings)sn().addCustomSetting(n,t.customSettings[n])}}const Ie=new pT;async function yd(e,t){var r;const n=we();try{return await ei(e,t)}catch(o){console.error(o),console.error(e),ae(`Narrat script runtime error at <span class="error-filename">${e.fileName}:${e.line+1}</span>
70
70
  <b>${o}</b>
71
71
  Script: ${e.code}
72
72
  Label: ${((r=n.currentFrame)==null?void 0:r.label)||"none"}`)}}async function mT(e,t){const n=e.command,r=Ie.commands[n.commandType];if(r){const o={args:[],options:{},operator:n.operator,staticOptions:n.staticOptions,code:e.code,commandType:n.commandType,fileName:e.fileName,line:e.line},a=r.argTypes;o.options={};for(const[s,c]of n.args.entries()){let d;if(Fc(c))d=await ei(c,t);else if(typeof c=="string")if(c.search(Il)===0)d=nn(c.substring(3));else if(Vc(c)){const u=Mr(),h=zS(u,c);if(h){const[l,f]=h;d=l[f]}else d=c}else d=c;else d=c;if(o.args.push(d),Array.isArray(a)&&a.length>s){const u=a[s];d!==null&&(o.options[u.name]=d)}}return o}else throw new Error(`${n.commandType} is not a valid command`)}async function ei(e,t){const n=await mT(e,t),r=Ie.commands[n.commandType];if(r)return await r.run(n,t);throw new Error(`${n.commandType} is not a valid command`)}async function hT(e){Qn("onPlayerAnswered");const t=we(),n=t.popAnswerQueue(),r=t.currentLine;try{if(n){const o=Ie.commands[n.commandType];if(o)return await o.processPlayerAnswer(n,e)}}catch(o){console.error(o),ae(`Error after player answer at ${r.fileName}:${r.line+1} (${r.code}<br /> - Error: ${o}`)}}function yT(){return{baseAssetsPath:"",baseDataPath:"",configPath:"data/config.json",logging:!1,debug:!1,scripts:[],container:"#game-holder"}}class gT extends Ts{}const Te=et("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 gT,inScript:!1}),actions:{setLoadingStep(e,t){this.loading.step=e,this.loading.percentage=t},gameLoaded(){this.loading.loaded=!0,this.listener.emit("gameLoaded")},async alert(e,t){return new Promise(n=>{this.alerts.push({title:e,text:t,resolver:n,id:Gn()})})},closeAlert(e){const t=this.alerts.findIndex(n=>n.id===e);t!==-1&&(this.alerts[t].resolver(),this.alerts.splice(t,1))},startingScript(){mt().onScriptStart(),this.inScript=!0},endingScript(){mt().onScriptEnd(),this.inScript=!1},prepareToPlay(){this.ready=!0,this.startPlaying(),Nt().changeScene("playing")},setSaveSlot(e){this.saveSlot=e,vp(e)},startManualSave(e,t,n){this.saving={name:t,withPrompt:n,resolver:e}},cancelManualSave(){this.saving&&(this.saving.resolver(),this.saving=null)},playerAnswered(e){hT(e)},menuReturn(){Nt().changeScene("start-menu")},createError(e){this.errors.push({text:e,type:"error"})},createWarning(e){this.errors.push({text:e,type:"warning"})},clearErrors(){this.errors=[]},pause(){this.paused=!0},unpause(){this.paused=!1},setOptions(e){this.options=e},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:mr(this.playTime.start,this.playTime.previousPlaytime)}},loadSaveData(e){this.playTime.previousPlaytime=e.playTime},exitGame(){window.close()}},getters:{isInGame(e){return Nt().isPlaying},totalPlayTime(e){return mr(e.playTime.start,e.playTime.previousPlaytime)},sessionPlayTime(e){return mr(e.playTime.start,0)},hasCustomContainer(e){return(e.options.container??"")!=="#game-holder"}}});function _T(e,t,n){console.error(`Parser error: ${e.fileName}:${e.currentLine}`,n);const r=`[Parser Error] in <span class="error-filename">${e.fileName}:${t+1}</span> - <b>${n}</b>`;ae(r)}function ae(e,...t){const n=Te();console.error(e,...t),e=e.replace(/[\r\n]/g,`