narrat 2.10.8 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -175,7 +175,7 @@ Only state can be modified.`);a[0]="$state",Bl=!1,r.set(o,a,r.state.value),Bl=!0
175
175
  Found in store "${C.$id}".`),p&&o&&n.hydrate&&n.hydrate(C.$state,p),l=!0,f=!0,C}function Jr(t,e,n){let r,i;const o=typeof e=="function";typeof t=="string"?(r=t,i=o?n:e):(i=t,r=t.id);function a(s,u){const l=b.getCurrentInstance();if(s=s||l&&b.inject(P8),s&&Mf(s),!Z1)throw new Error(`[\u{1F34D}]: getActivePinia was called with no active Pinia. Did you forget to install pinia?
176
176
  const pinia = createPinia()
177
177
  app.use(pinia)
178
- This will fail in production.`);s=Z1,s._s.has(r)||(o?ib(r,e,i,s):W8(r,i,s),a._pinia=s);const f=s._s.get(r);if(u){const c="__hot:"+r,d=o?ib(c,e,i,s,!0):W8(c,Ho({},i),s,!0);u._hotUpdate(d),delete s.state.value[c],s._s.delete(c)}if(Ds&&l&&l.proxy&&!u){const c=l.proxy,d="_pStores"in c?c._pStores:c._pStores={};d[r]=f}return f}return a.$id=r,a}function Za(t,e){return Array.isArray(e)?e.reduce((n,r)=>(n[r]=function(){return t(this.$pinia)[r]},n),{}):Object.keys(e).reduce((n,r)=>(n[r]=function(){const i=t(this.$pinia),o=e[r];return typeof o=="function"?o.call(this,i):i[o]},n),{})}const K8=["music","ambiant","sound"],J8=dZ(K8),Gr=Jr("audio",{state:()=>{const t=new Map;for(const e in J8)t.set(e,{channels:[],options:{volume:1}});return{modes:t,masterVolume:1}},actions:{stopAll(){this.modes.forEach(t=>{t.channels.forEach((e,n)=>{e&&(this.actuallyStopChannel(e),t.channels[n]=null)})})},async stopChannel(t,e){const n=this.getAudioChannel(t,e);if(!!n){if(this.setAudioChannel(t,e,null),Aa().options.musicFadeOutTime){const r=Fl(n.audio);r&&r.fade(r.volume(n.howlerId),0,Aa().options.musicFadeOutTime*1e3,n.howlerId),await _o(Aa().options.musicFadeOutTime*1e3)}this.actuallyStopChannel(n)}},async pauseChannel(t,e){const n=this.getAudioChannel(t,e);if(!n)return;const r=Fl(n.audio);if(!r){Kt(`Could not find audio ${n.audio}`);return}r.pause(n.howlerId)},async playChannel(t,e,n){if(Ya.Howler.ctx.state==="suspended"){console.warn("Audio context not started yet, skipping audio");return}const r=this.getAudioChannel(t,n);if(t==="sound")return this.actuallyPlayChannel(t,n,e);r&&r.audio!==e?await this.changeChannel(t,e,n):r&&r.audio===e||await this.actuallyPlayChannel(t,n,e)},async changeChannel(t,e,n){this.getAudioChannel(t,n)&&t!=="sound"&&await this.stopChannel(t,n),await this.actuallyPlayChannel(t,n,e)},actuallyStopChannel(t){HZ(t.audio,t.howlerId)},getAudioChannel(t,e){return this.modes.get(t).channels[e]||null},setAudioChannel(t,e,n){this.modes.get(t).channels[e]=n},async actuallyPlayChannel(t,e,n){const r=Fl(n);if(!r){Kt(`Could not find audio ${n}`);return}if(t!=="sound"){const i=r.play();r.volume(0,i),r.pause(i),this.setAudioChannel(t,e,{audio:n,howlerId:i}),await _o(Aa().options.musicFadeInDelay*1e3);const o=this.getAudioChannel(t,e);o!==null&&o.audio===n&&(r.play(i),r.fade(0,this.modeVolume(t),Aa().options.musicFadeInTime*1e3,i))}else if(t==="sound"){const i=r.play();r.volume(this.modeVolume(t),i),this.setAudioChannel(t,e,{audio:n,howlerId:i})}},reloadAudio(t){for(const e in t.modes){if(e==="sound")continue;const n=e;this.modes.get(n).options=pi(t.modes[n].options);for(const r in t.modes[n].channels){const i=t.modes[n].channels[r];i&&i.audio&&this.actuallyPlayChannel(n,Number(r),i.audio)}}},stopSound(t){const e=Fl(t);e&&e.stop()},generateSaveData(){const t={};for(const e in J8){const n=this.modes.get(e);t[e]={options:pi(n.options),channels:pi(n.channels).map(r=>r?{audio:r.audio}:{audio:null})}}return{modes:t,masterVolume:this.masterVolume}},loadSaveData(t){this.masterVolume=t.masterVolume},reset(){this.stopAll()},setModeVolume(t,e){const n=this.modes.get(t);n.options.volume=e;for(const r in n.channels){const i=n.channels[r];if(i){const o=Fl(i.audio);o&&o.volume(this.modeVolume(t),i.howlerId)}}},setMasterVolume(t){this.masterVolume=t,Ya.Howler.volume(t)},modeVolume(t){return this.masterVolume*this.modes.get(t).options.volume}}}),G8={};Ya.Howler.volume(.5);let ob={};async function VZ(t){Zo.log("Loading audio");const e=[];Ya.Howler.volume(t.options.volume);for(const n in t.files){const r=t.files[n];r.src||(r.src=r.path,r.path||console.error(`Audio config for ${n} doesn't have any \`src\` value to find the file`),console.warn("Using `path` for audio and musics is deprecated. Please replace `path` with `src` in your config file!")),e.push(qZ(n,t.files[n]))}return t.audioTriggers&&(ob=t.audioTriggers),Promise.all(e)}function Eu(t){ob[t]&&Gr().playChannel("sound",ob[t],0)}async function qZ(t,e){return new Promise((n,r)=>{Zo.log(`Loading audio ${e.src}`);const i=new Ya.Howl({...e,src:Ma(e.src)});i.load(),G8[t]=i,n()})}function HZ(t,e){const n=Fl(t);if(!n){Au(`Could not find music ${t}`);return}n.stop(e)}function Fl(t){return G8[t]}const Vl={};async function UZ(t){return Vl[t]?Vl[t]:Q8(t,t)}async function WZ(t){Zo.log("Loading images");let e=0,n=0;const r=[],i=async(a,s)=>{n++;const u=await Q8(a,s);return e++,console.log(`Loaded ${e} / ${n} images`),u},o=(a,s)=>{r.push(i(a,s))};for(const a in t.images){const s=t.images[a];o(a,s)}for(const a in t.screens.screens){const s=t.screens.screens[a];if(s.background&&!t.images[s.background]&&o(s.background,s.background),s.buttons)for(const u in s.buttons){const l=s.buttons[u];typeof l=="object"&&l.background&&!t.images[l.background]&&o(l.background,l.background)}}return Promise.all(r)}async function Q8(t,e){if(Vl[t])return Vl[t];const n=new Promise((r,i)=>{Zo.log(`Loading image ${t} at ${e}`);const o=new Image;o.onload=()=>{Vl[t]=o,Zo.log(`Loaded image ${t} successfully`),r(o)},o.onerror=a=>{Kt(`Failed to load image ${t} at ${e}`,a),i(a)},o.src=Ma(e)});return Vl[t]=n,n}function ql(){return`${Date.now()}-${Math.floor(Math.random()*1e11)}-${Math.floor(Math.random()*1e11)}`}const Y8="gameSave",am="###_--_~=:;_JUMP",ab="###_--_~=:;_RETURN",KZ="###_--_~=:;_OK",sm="###_--_~=:;_STOP";function JZ(t){return t===am||t===ab||t===KZ||t===sm}const GZ="2.10.8",QZ=new Date("2023-02-14T10:29:13.921Z"),YZ=400,sb=20,X8="1.4.0";let Fr;function Z8(){if(Fr)return Fr;if(!Fr){let t=null;try{const e=localStorage.getItem(Y8);e&&(t=JSON.parse(e)),t&&typeof t=="object"&&t.slots&&t.slots[0]&&t.slots[0].id||(t=null,localStorage.clear())}catch(e){Au(`Save file deleted because it was either broken or an outdated format: ${e}`)}t?Fr=t:Fr=ZZ()}return XZ(Fr),e7(Fr),um(),Fr}function XZ(t){t.version}function ZZ(){const t={version:X8,slots:[]};return e7(t),t}function e7(t){var n;const e=(n=gt().saves.slots)!=null?n:10;t.slots.length<1&&(t.slots[0]={slotType:"auto",id:ql(),saveData:null,slotNumber:0}),t.slots[0].slotType="auto";for(let r=1;r<e+1;r++)t.slots.length<=r&&(t.slots[r]={slotNumber:r,slotType:gt().saves.mode==="manual"?"manual":"auto",id:ql(),saveData:null})}function t7(t,e){const n=nee(e);if(Fr.slots[n])Fr.slots[n].saveData=t;else{Kt(`Tried to save to slot ${e} but it doesn't exist`);return}um()}function eee(t){Fr.lastSaveSlot=t}function um(){localStorage.setItem(Y8,JSON.stringify(Fr))}function tee(){const t=Fr.slots.find(e=>!e.saveData);return t?t.id:!1}function nee(t){return Fr.slots.findIndex(e=>e.id===t)}function Pf(t){return Fr.slots.find(e=>e.id===t)}function ub(){return Fr.slots.find(t=>t.slotType==="auto")}function ree(t){const e=Fr.slots.findIndex(n=>n.id===t);Fr.slots[e].saveData=null,um()}function iee(t,e){const n=Pf(t);n&&n.saveData&&(n.saveData.metadata.name=e),um()}function oee(){return{saveDate:new Date().toISOString(),name:"New Save"}}const lm=Jr("tooltips",{state:()=>({tooltip:null}),actions:{addCustomTooltip(t){t.title&&(t.title=es(t.title)),t.text=es(t.text),this.tooltip=t},addTooltip(t,e){var r,i;const n=QD(t);n&&this.addCustomTooltip({title:n.title,text:n.description,x:(r=e==null?void 0:e.x)!=null?r:window.screenX,y:(i=e==null?void 0:e.y)!=null?i:window.screenY,width:ed().options.width})},deleteTooltip(){this.tooltip=null}}});function lb(){return window}function aee(t){const e=ed().options.keywordsPrefix,n=new RegExp(`${e}(\\w*)`,"gi");return t=t.replace(n,see),t}lb().onTooltipEnter=(t,e)=>{const n={x:t.clientX,y:t.clientY-20};lm().addTooltip(e,n)},lb().onTooltipLeave=()=>{lm().deleteTooltip()};function see(t,e){const n=e.toLowerCase();return QD(n)?`<span class='highlighted-tooltip-keyword'
178
+ This will fail in production.`);s=Z1,s._s.has(r)||(o?ib(r,e,i,s):W8(r,i,s),a._pinia=s);const f=s._s.get(r);if(u){const c="__hot:"+r,d=o?ib(c,e,i,s,!0):W8(c,Ho({},i),s,!0);u._hotUpdate(d),delete s.state.value[c],s._s.delete(c)}if(Ds&&l&&l.proxy&&!u){const c=l.proxy,d="_pStores"in c?c._pStores:c._pStores={};d[r]=f}return f}return a.$id=r,a}function Za(t,e){return Array.isArray(e)?e.reduce((n,r)=>(n[r]=function(){return t(this.$pinia)[r]},n),{}):Object.keys(e).reduce((n,r)=>(n[r]=function(){const i=t(this.$pinia),o=e[r];return typeof o=="function"?o.call(this,i):i[o]},n),{})}const K8=["music","ambiant","sound"],J8=dZ(K8),Gr=Jr("audio",{state:()=>{const t=new Map;for(const e in J8)t.set(e,{channels:[],options:{volume:1}});return{modes:t,masterVolume:1}},actions:{stopAll(){this.modes.forEach(t=>{t.channels.forEach((e,n)=>{e&&(this.actuallyStopChannel(e),t.channels[n]=null)})})},async stopChannel(t,e){const n=this.getAudioChannel(t,e);if(!!n){if(this.setAudioChannel(t,e,null),Aa().options.musicFadeOutTime){const r=Fl(n.audio);r&&r.fade(r.volume(n.howlerId),0,Aa().options.musicFadeOutTime*1e3,n.howlerId),await _o(Aa().options.musicFadeOutTime*1e3)}this.actuallyStopChannel(n)}},async pauseChannel(t,e){const n=this.getAudioChannel(t,e);if(!n)return;const r=Fl(n.audio);if(!r){Kt(`Could not find audio ${n.audio}`);return}r.pause(n.howlerId)},async playChannel(t,e,n){if(Ya.Howler.ctx.state==="suspended"){console.warn("Audio context not started yet, skipping audio");return}const r=this.getAudioChannel(t,n);if(t==="sound")return this.actuallyPlayChannel(t,n,e);r&&r.audio!==e?await this.changeChannel(t,e,n):r&&r.audio===e||await this.actuallyPlayChannel(t,n,e)},async changeChannel(t,e,n){this.getAudioChannel(t,n)&&t!=="sound"&&await this.stopChannel(t,n),await this.actuallyPlayChannel(t,n,e)},actuallyStopChannel(t){HZ(t.audio,t.howlerId)},getAudioChannel(t,e){return this.modes.get(t).channels[e]||null},setAudioChannel(t,e,n){this.modes.get(t).channels[e]=n},async actuallyPlayChannel(t,e,n){const r=Fl(n);if(!r){Kt(`Could not find audio ${n}`);return}if(t!=="sound"){const i=r.play();r.volume(0,i),r.pause(i),this.setAudioChannel(t,e,{audio:n,howlerId:i}),await _o(Aa().options.musicFadeInDelay*1e3);const o=this.getAudioChannel(t,e);o!==null&&o.audio===n&&(r.play(i),r.fade(0,this.modeVolume(t)*r.volume(),Aa().options.musicFadeInTime*1e3,i))}else if(t==="sound"){const i=r.play();r.volume(this.modeVolume(t)*r.volume(),i),this.setAudioChannel(t,e,{audio:n,howlerId:i})}},reloadAudio(t){for(const e in t.modes){if(e==="sound")continue;const n=e;this.modes.get(n).options=pi(t.modes[n].options);for(const r in t.modes[n].channels){const i=t.modes[n].channels[r];i&&i.audio&&this.actuallyPlayChannel(n,Number(r),i.audio)}}},stopSound(t){const e=Fl(t);e&&e.stop()},generateSaveData(){const t={};for(const e in J8){const n=this.modes.get(e);t[e]={options:pi(n.options),channels:pi(n.channels).map(r=>r?{audio:r.audio}:{audio:null})}}return{modes:t,masterVolume:this.masterVolume}},loadSaveData(t){this.masterVolume=t.masterVolume},reset(){this.stopAll()},setModeVolume(t,e){const n=this.modes.get(t);n.options.volume=e;for(const r in n.channels){const i=n.channels[r];if(i){const o=Fl(i.audio);o&&o.volume(this.modeVolume(t),i.howlerId)}}},setMasterVolume(t){this.masterVolume=t,Ya.Howler.volume(t)},modeVolume(t){return this.masterVolume*this.modes.get(t).options.volume}}}),G8={};Ya.Howler.volume(.5);let ob={};async function VZ(t){Zo.log("Loading audio");const e=[];Ya.Howler.volume(t.options.volume);for(const n in t.files){const r=t.files[n];r.src||(r.src=r.path,r.path||console.error(`Audio config for ${n} doesn't have any \`src\` value to find the file`),console.warn("Using `path` for audio and musics is deprecated. Please replace `path` with `src` in your config file!")),e.push(qZ(n,t.files[n]))}return t.audioTriggers&&(ob=t.audioTriggers),Promise.all(e)}function Eu(t){ob[t]&&Gr().playChannel("sound",ob[t],0)}async function qZ(t,e){return new Promise((n,r)=>{Zo.log(`Loading audio ${e.src}`);const i=new Ya.Howl({...e,src:Ma(e.src)});i.load(),G8[t]=i,n()})}function HZ(t,e){const n=Fl(t);if(!n){Au(`Could not find music ${t}`);return}n.stop(e)}function Fl(t){return G8[t]}const Vl={};async function UZ(t){return Vl[t]?Vl[t]:Q8(t,t)}async function WZ(t){Zo.log("Loading images");let e=0,n=0;const r=[],i=async(a,s)=>{n++;const u=await Q8(a,s);return e++,console.log(`Loaded ${e} / ${n} images`),u},o=(a,s)=>{r.push(i(a,s))};for(const a in t.images){const s=t.images[a];o(a,s)}for(const a in t.screens.screens){const s=t.screens.screens[a];if(s.background&&!t.images[s.background]&&o(s.background,s.background),s.buttons)for(const u in s.buttons){const l=s.buttons[u];typeof l=="object"&&l.background&&!t.images[l.background]&&o(l.background,l.background)}}return Promise.all(r)}async function Q8(t,e){if(Vl[t])return Vl[t];const n=new Promise((r,i)=>{Zo.log(`Loading image ${t} at ${e}`);const o=new Image;o.onload=()=>{Vl[t]=o,Zo.log(`Loaded image ${t} successfully`),r(o)},o.onerror=a=>{Kt(`Failed to load image ${t} at ${e}`,a),i(a)},o.src=Ma(e)});return Vl[t]=n,n}function ql(){return`${Date.now()}-${Math.floor(Math.random()*1e11)}-${Math.floor(Math.random()*1e11)}`}const Y8="gameSave",am="###_--_~=:;_JUMP",ab="###_--_~=:;_RETURN",KZ="###_--_~=:;_OK",sm="###_--_~=:;_STOP";function JZ(t){return t===am||t===ab||t===KZ||t===sm}const GZ="2.11.0",QZ=new Date("2023-04-08T18:21:56.034Z"),YZ=400,sb=20,X8="1.4.0";let Fr;function Z8(){if(Fr)return Fr;if(!Fr){let t=null;try{const e=localStorage.getItem(Y8);e&&(t=JSON.parse(e)),t&&typeof t=="object"&&t.slots&&t.slots[0]&&t.slots[0].id||(t=null,localStorage.clear())}catch(e){Au(`Save file deleted because it was either broken or an outdated format: ${e}`)}t?Fr=t:Fr=ZZ()}return XZ(Fr),e7(Fr),um(),Fr}function XZ(t){t.version}function ZZ(){const t={version:X8,slots:[]};return e7(t),t}function e7(t){var n;const e=(n=gt().saves.slots)!=null?n:10;t.slots.length<1&&(t.slots[0]={slotType:"auto",id:ql(),saveData:null,slotNumber:0}),t.slots[0].slotType="auto";for(let r=1;r<e+1;r++)t.slots.length<=r&&(t.slots[r]={slotNumber:r,slotType:gt().saves.mode==="manual"?"manual":"auto",id:ql(),saveData:null})}function t7(t,e){const n=nee(e);if(Fr.slots[n])Fr.slots[n].saveData=t;else{Kt(`Tried to save to slot ${e} but it doesn't exist`);return}um()}function eee(t){Fr.lastSaveSlot=t}function um(){localStorage.setItem(Y8,JSON.stringify(Fr))}function tee(){const t=Fr.slots.find(e=>!e.saveData);return t?t.id:!1}function nee(t){return Fr.slots.findIndex(e=>e.id===t)}function Pf(t){return Fr.slots.find(e=>e.id===t)}function ub(){return Fr.slots.find(t=>t.slotType==="auto")}function ree(t){const e=Fr.slots.findIndex(n=>n.id===t);Fr.slots[e].saveData=null,um()}function iee(t,e){const n=Pf(t);n&&n.saveData&&(n.saveData.metadata.name=e),um()}function oee(){return{saveDate:new Date().toISOString(),name:"New Save"}}const lm=Jr("tooltips",{state:()=>({tooltip:null}),actions:{addCustomTooltip(t){t.title&&(t.title=es(t.title)),t.text=es(t.text),this.tooltip=t},addTooltip(t,e){var r,i;const n=QD(t);n&&this.addCustomTooltip({title:n.title,text:n.description,x:(r=e==null?void 0:e.x)!=null?r:window.screenX,y:(i=e==null?void 0:e.y)!=null?i:window.screenY,width:ed().options.width})},deleteTooltip(){this.tooltip=null}}});function lb(){return window}function aee(t){const e=ed().options.keywordsPrefix,n=new RegExp(`${e}(\\w*)`,"gi");return t=t.replace(n,see),t}lb().onTooltipEnter=(t,e)=>{const n={x:t.clientX,y:t.clientY-20};lm().addTooltip(e,n)},lb().onTooltipLeave=()=>{lm().deleteTooltip()};function see(t,e){const n=e.toLowerCase();return QD(n)?`<span class='highlighted-tooltip-keyword'
179
179
  onmouseenter="onTooltipEnter(event, '${n}')"
180
180
  onmouseleave="onTooltipLeave()">${e}</span>`:n}function es(t){const e=t.replace(/%{[^}]*}/g,n=>{const r=n.substr(2,n.length-3);return n7(r)});return aee(e)}function n7(t){const e=ic(),[n,r]=qm(e,t);return n[r]}const r7=/\$\$"/,uee=t=>typeof t=="string"&&t.search(r7)===0;function lee(t){let e=null;const n=[],r=/<[^>]*>/g;do e=r.exec(t),e&&n.push(e);while(e);return n}const zn=Jr("dialog",{state:()=>({dialog:[],playMode:"normal"}),actions:{generateSaveData(){return{dialog:pi(this.dialog)}},loadSaveData(t){this.dialog=t.dialog},addDialog(t){var e;this.dialog.push({...t,interactive:(e=t.interactive)!=null?e:!1,id:ql(),text:es(t.text)}),this.dialog.length>200&&this.dialog.shift()},toggleAutoPlay(){this.playMode=this.playMode==="auto"?"normal":"auto"},toggleSkip(){this.playMode=this.playMode==="skip"?"normal":"skip"},clearDialog(){this.dialog.splice(0,this.dialog.length)},reset(){this.dialog=[],this.playMode="normal"}},getters:{currentDialog(){return this.dialog[this.dialog.length-1]}}});function cee(t,e){return t-e*Co().skillChecks.skillMultiplier}function i7(t,e){const n=cee(t,e),r=Co().skillChecks;let i=!1,o=0,a=r.difficultyText[0][1];for(;!i;)r.difficultyText.length>o&&n>=r.difficultyText[o][0]?a=r.difficultyText[o][1]:i=!0,o++;return a}function fee({skill:t,skillCheckId:e,value:n}){const r=_r(),i=r.getSkillCheck(e),o=Ek(t),a=r.skills[t].level,s=i7(n,a);let u=!0,l=`<span class='skill-check'>[<span class='skill-check-name'>${o.name}</span> - `;return i.happened?i.succeeded?l="":(u=!1,l+=` <span class='skill-check-difficulty'>${s}</span> - <span class='skill-check-failed'>FAILED</span>]</span>`):l+=` <span class='skill-check-difficulty'>${s}</span>]</span>`,{difficultyText:l,allowed:u}}function dee(t,e){const n=_r(),r=Ek(e.skill),i=i7(e.value,n.skills[e.skill].level);return`<span class='passive-skill-check skill-check'>[<span class='skill-check-name'>${r.name}</span> - <span class='skill-check-difficulty'>${i}</span> - ${t?'<span class="skill-check-success">Success</span>':'<span class="skill-check-failed">Failure</span>'}]</span>`}function hee(t){const{skillChecks:e}=Co(),n=_r(),r=Math.floor(Math.random()*e.rollRange),i=n.skills[t].level*e.skillMultiplier,o=r+i;return Zo.log(`[SKILL CHECK] Roll: ${o}. (Base roll: ${r}, modifier: ${i} - Skill level: ${n.skills[t].level})`),{roll:o,unmodifiedRoll:r}}function pee(t){const{skills:e,skillChecks:n}=Co();let r=!0;const{roll:i}=hee(t.skill);i<=n.failureChance-1&&(r=!1);const o=e[t.skill];return i<t.value&&(r=!1),Zo.log(`[SKILL CHECK ${o.name}]: ${r?"\u2705":"\u274C"}`,`(${t.id}) - ${i}/${t.value}`),Eu(r?"onSkillCheckSuccess":"onSkillCheckFailure"),r}function o7(t){const e=_r(),n=e.getSkillCheck(t.id);if(n&&n.happened&&(n.succeeded||!t.repeatable))return n;const r=pee(t);return u7(dee(r,t)),r?e.passSkillCheck(t.id,t.hideAfterRoll):e.failSkillCheck(t.id,t.hideAfterRoll),e.getSkillCheck(t.id)}function mee(t){const e=t.options,n=t.staticOptions,r=!!e.condition;if(r)return n.success;if(!r&&n.failure)return n.failure}function a7(t){return typeof t=="object"}function s7(t){return typeof t=="string"&&t.search(/\$/)===0}function u7(t){const e={speaker:"game",text:t,interactive:!1};zn().addDialog(e)}async function cb(t){zn().addDialog(t)}function vee(t,e){if(e<t.length)return t[e]}/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */function l7(t){return typeof t>"u"||t===null}function gee(t){return typeof t=="object"&&t!==null}function yee(t){return Array.isArray(t)?t:l7(t)?[]:[t]}function bee(t,e){var n,r,i,o;if(e)for(o=Object.keys(e),n=0,r=o.length;n<r;n+=1)i=o[n],t[i]=e[i];return t}function kee(t,e){var n="",r;for(r=0;r<e;r+=1)n+=t;return n}function wee(t){return t===0&&Number.NEGATIVE_INFINITY===1/t}var _ee=l7,xee=gee,jee=yee,See=kee,Cee=wee,$ee=bee,Pr={isNothing:_ee,isObject:xee,toArray:jee,repeat:See,isNegativeZero:Cee,extend:$ee};function c7(t,e){var n="",r=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(n+='in "'+t.mark.name+'" '),n+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!e&&t.mark.snippet&&(n+=`
181
181
 
@@ -208,10 +208,10 @@ This will fail in production.`);s=Z1,s._s.has(r)||(o?ib(r,e,i,s):W8(r,i,s),a._pi
208
208
  `+t.slice(i,o),i=o+1),a=s;return u+=`
209
209
  `,t.length-i>e&&a>i?u+=t.slice(i,a)+`
210
210
  `+t.slice(a+1):u+=t.slice(i),u.slice(1)}function pne(t){for(var e="",n=0,r,i=0;i<t.length;n>=65536?i+=2:i++)n=Rf(t,i),r=fi[n],!r&&Df(n)?(e+=t[i],n>=65536&&(e+=t[i+1])):e+=r||one(n);return e}function mne(t,e,n){var r="",i=t.tag,o,a,s;for(o=0,a=n.length;o<a;o+=1)s=n[o],t.replacer&&(s=t.replacer.call(n,String(o),s)),(ts(t,e,s,!1,!1)||typeof s>"u"&&ts(t,e,null,!1,!1))&&(r!==""&&(r+=","+(t.condenseFlow?"":" ")),r+=t.dump);t.tag=i,t.dump="["+r+"]"}function lL(t,e,n,r){var i="",o=t.tag,a,s,u;for(a=0,s=n.length;a<s;a+=1)u=n[a],t.replacer&&(u=t.replacer.call(n,String(a),u)),(ts(t,e+1,u,!0,!0,!1,!0)||typeof u>"u"&&ts(t,e+1,null,!0,!0,!1,!0))&&((!r||i!=="")&&(i+=wb(t,e)),t.dump&&If===t.dump.charCodeAt(0)?i+="-":i+="- ",i+=t.dump);t.tag=o,t.dump=i||"[]"}function vne(t,e,n){var r="",i=t.tag,o=Object.keys(n),a,s,u,l,f;for(a=0,s=o.length;a<s;a+=1)f="",r!==""&&(f+=", "),t.condenseFlow&&(f+='"'),u=o[a],l=n[u],t.replacer&&(l=t.replacer.call(n,u,l)),ts(t,e,u,!1,!1)&&(t.dump.length>1024&&(f+="? "),f+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),ts(t,e,l,!1,!1)&&(f+=t.dump,r+=f));t.tag=i,t.dump="{"+r+"}"}function gne(t,e,n,r){var i="",o=t.tag,a=Object.keys(n),s,u,l,f,c,d;if(t.sortKeys===!0)a.sort();else if(typeof t.sortKeys=="function")a.sort(t.sortKeys);else if(t.sortKeys)throw new Mi("sortKeys must be a boolean or a function");for(s=0,u=a.length;s<u;s+=1)d="",(!r||i!=="")&&(d+=wb(t,e)),l=a[s],f=n[l],t.replacer&&(f=t.replacer.call(n,l,f)),ts(t,e+1,l,!0,!0,!0)&&(c=t.tag!==null&&t.tag!=="?"||t.dump&&t.dump.length>1024,c&&(t.dump&&If===t.dump.charCodeAt(0)?d+="?":d+="? "),d+=t.dump,c&&(d+=wb(t,e)),ts(t,e+1,f,!0,c)&&(t.dump&&If===t.dump.charCodeAt(0)?d+=":":d+=": ",d+=t.dump,i+=d));t.tag=o,t.dump=i||"{}"}function cL(t,e,n){var r,i,o,a,s,u;for(i=n?t.explicitTypes:t.implicitTypes,o=0,a=i.length;o<a;o+=1)if(s=i[o],(s.instanceOf||s.predicate)&&(!s.instanceOf||typeof e=="object"&&e instanceof s.instanceOf)&&(!s.predicate||s.predicate(e))){if(n?s.multi&&s.representName?t.tag=s.representName(e):t.tag=s.tag:t.tag="?",s.represent){if(u=t.styleMap[s.tag]||s.defaultStyle,W7.call(s.represent)==="[object Function]")r=s.represent(e,u);else if(K7.call(s.represent,u))r=s.represent[u](e,u);else throw new Mi("!<"+s.tag+'> tag resolver accepts not "'+u+'" style');t.dump=r}return!0}return!1}function ts(t,e,n,r,i,o,a){t.tag=null,t.dump=n,cL(t,n,!1)||cL(t,n,!0);var s=W7.call(t.dump),u=r,l;r&&(r=t.flowLevel<0||t.flowLevel>e);var f=s==="[object Object]"||s==="[object Array]",c,d;if(f&&(c=t.duplicates.indexOf(n),d=c!==-1),(t.tag!==null&&t.tag!=="?"||d||t.indent!==2&&e>0)&&(i=!1),d&&t.usedDuplicates[c])t.dump="*ref_"+c;else{if(f&&d&&!t.usedDuplicates[c]&&(t.usedDuplicates[c]=!0),s==="[object Object]")r&&Object.keys(t.dump).length!==0?(gne(t,e,t.dump,i),d&&(t.dump="&ref_"+c+t.dump)):(vne(t,e,t.dump),d&&(t.dump="&ref_"+c+" "+t.dump));else if(s==="[object Array]")r&&t.dump.length!==0?(t.noArrayIndent&&!a&&e>0?lL(t,e-1,t.dump,i):lL(t,e,t.dump,i),d&&(t.dump="&ref_"+c+t.dump)):(mne(t,e,t.dump),d&&(t.dump="&ref_"+c+" "+t.dump));else if(s==="[object String]")t.tag!=="?"&&dne(t,t.dump,e,o,u);else{if(s==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new Mi("unacceptable kind of an object to dump "+s)}t.tag!==null&&t.tag!=="?"&&(l=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?l="!"+l:l.slice(0,18)==="tag:yaml.org,2002:"?l="!!"+l.slice(18):l="!<"+l+">",t.dump=l+" "+t.dump)}return!0}function yne(t,e){var n=[],r=[],i,o;for(xb(t,n,r),i=0,o=r.length;i<o;i+=1)e.duplicates.push(n[r[i]]);e.usedDuplicates=new Array(o)}function xb(t,e,n){var r,i,o;if(t!==null&&typeof t=="object")if(i=e.indexOf(t),i!==-1)n.indexOf(i)===-1&&n.push(i);else if(e.push(t),Array.isArray(t))for(i=0,o=t.length;i<o;i+=1)xb(t[i],e,n);else for(r=Object.keys(t),i=0,o=r.length;i<o;i+=1)xb(t[r[i]],e,n)}function bne(t,e){e=e||{};var n=new sne(e);n.noRefs||yne(t,n);var r=t;return n.replacer&&(r=n.replacer.call({"":r},"",r)),ts(n,0,r,!0,!0)?n.dump+`
211
- `:""}var kne=bne,wne={dump:kne};function jb(t,e){return function(){throw new Error("Function yaml."+t+" is removed in js-yaml 4. Use yaml."+e+" instead, which is now safe by default.")}}var _ne=Qr,xne=d7,jne=v7,Sne=w7,Cne=_7,$ne=mb,One=U7.load,Ene=U7.loadAll,Tne=wne.dump,Ane=Mi,Mne={binary:$7,float:k7,map:m7,null:g7,pairs:E7,set:T7,timestamp:S7,bool:y7,int:b7,merge:C7,omap:O7,seq:p7,str:h7},Pne=jb("safeLoad","load"),Nne=jb("safeLoadAll","loadAll"),Ine=jb("safeDump","dump"),Lne={Type:_ne,Schema:xne,FAILSAFE_SCHEMA:jne,JSON_SCHEMA:Sne,CORE_SCHEMA:Cne,DEFAULT_SCHEMA:$ne,load:One,loadAll:Ene,dump:Tne,YAMLException:Ane,types:Mne,safeLoad:Pne,safeLoadAll:Nne,safeDump:Ine};function Sb(t){return new Promise((e,n)=>{const r=new XMLHttpRequest;r.onload=function(){r.status>=200&&r.status<300?e(r.responseText):(Kt(`Failed to load file ${t}`,r.status),n(r.status))},r.open("GET",t),r.send()})}async function vm(t){try{const e=await Sb(t);let n;if(t.endsWith(".json"))n=JSON.parse(e);else if(t.endsWith(".yaml"))n=Lne.load(e);else{const r=`Unsupported file type for data file ${t} (must be .json or .yaml)`;throw new Error(r)}if(!n)throw new Error(`Data loaded from ${t} is empty`);return n}catch(e){throw console.error(`Failed to load data file ${t}: ${e}`),e}}const Dne=(t,e)=>{const n={};for(const r in t)n[r]=e(t[r]);return n},fL=(t,e)=>{for(const n in t){const r=t[n];e(r,n,t),typeof r=="object"&&r!==null&&fL(r,e)}},dL=new Gm;dL.setupDebugger(!1);const xo=dL.logger;function Rne(t,e,n){const r={fileName:n,currentLine:0,error:(a,s)=>t(r,a,s),processCommandsFunction:Cb,indentSize:0};r.indentSize=Kne(r,e);const i=Hne(r,e);r.currentLine=0,xo.log(i);const o={};for(const a of i){a.code.search(":")===-1&&r.error(a.line,"First indentation level should only be used to specify labels");const u=a.code.replace(":","").split(/ +/g),l=u[0],f=u.slice(1);a.branch||r.error(a.line,"This line should have a branch but doesn't"),o[l]={branch:Cb(r,a.branch,void 0),args:f}}return o}function Cb(t,e,n){const r=t.currentLine,i={processCommandsFunction:Cb,parserContext:t,lines:e,currentLine:0,line:e[0]},o=[];if(!e){let a=0;return n&&(a=n.line),t.error(a,"Processing of command failed because the current branch has no lines inside"),[]}for(;i.currentLine<e.length;){const a=e[i.currentLine];i.line=a;const s=hL(t,a,a.expression),u=Fn.commands[s.command.operator];let l=u==null?void 0:u.parser;l||(l=Fn.commands.text.parser),xo.log(Fn.commands.text);const{newLine:f}=l(i,s);i.currentLine=f,t.currentLine=r+f,o.push(s)}return o}function hL(t,e,n){xo.log(n),typeof n[0]!="string"&&t.error(e.line,"Expression operator should be a string");const r={code:e.code,fileName:t.fileName,line:e.line,command:{staticOptions:{},commandType:n[0],operator:n[0],args:n.slice(1).map(a=>Bne(t,e,a)),options:{}}},i=n[0];if(!Fn.commands[i]){const a=["else","success","failure"];!uee(i)&&!a.includes(i)&&t.error(e.line,`Unknown command ${i}`)}return r}function Bne(t,e,n){return Array.isArray(n)?hL(t,e,n):n}function zne(t){return t==="true"?!0:t==="false"?!1:t==="undefined"?void 0:t===null?null:isNaN(Number(t))?t:Number(t)}function Fne(t,e){e.charAt(e.length-1)===":"&&(e=e.substr(0,e.length-1));const n=Vne(e),[r]=mL(t,n);return r}function Vne(t){const e=/(["'])(?:\\\1|.)*?\1/g,n=[];let r;for(;(r=e.exec(t))!=null;)n.push(r);let i=0,o=[];for(const a of n){const s=a.index;if(s>i){const l=t.substr(i,s-i),f=pL(l);o=[...o,...f]}const u=a[0].replace(/\\/g,"");o.push(`$$"${u.substring(1,u.length-1)}`),i=s+a[0].length}return o=[...o,...pL(t.substr(i))],o.push(")"),o}function pL(t){t=t.replace(/: *$/g,"");let e=t.split(" ").filter(n=>n);return e=e.reduce((n,r)=>[...n,...r.split(/(\(|\))/g)].filter(i=>i&&i),[]),e.map(n=>zne(n))}function mL(t,e){xo.log("===============");let n=[],r=0,i=vL(e)+r,o=$b(e)+r;for(xo.log(`Parsing expression: ${e}`),xo.log(`Parenthesis start index: ${i} - end: ${o}`);i!==-1&&o>i;){n=[...n,...e.slice(r,i)];const u=e.slice(i+1);xo.log(`Found a sub expression. Before: ${n} - After: ${u}`),r=i;const[l,f]=mL(t,u),c=r+f;n.push(l),r=c+1;const d=e.slice(r);xo.log(`Sub expression came back: ${l} - rest of string: ${d}`),i=vL(d),i!==-1&&(i+=r),o=$b(d),o!==-1&&(o+=r)}o!==-1&&xo.log("Found parenthesis end before new opening parenthesis, close this expression");const a=$b(e.slice(r))+r;if(a===-1)return t.error(t.currentLine,'Expression is not closed (missing ")" closing parenthesis)'),[n,a];const s=e.slice(r,a);return xo.log(`End of expression: ${a} - ${s}`),xo.log("==================="),n=[...n,...s],qne(t,n),[n,a+1]}function qne(t,e){e.length<1&&t.error(t.currentLine,"Expression is empty")}function vL(t){return t.findIndex(e=>e==="(")}function $b(t){return t.findIndex(e=>e===")")}function Hne(t,e){const n=e.split(/\r?\n|$/).map(i=>{const o=i.search(/ *\/\//g);return o!==-1?i.substr(0,o):i});return gL(t,n,0,0).lines}function gL(t,e,n,r){let i=!0,o=n;const a=[];for(;i&&!(o>=e.length);){let s=e[o];if(s.search(/^\s*$/)!==-1)o++;else{const u=Wne(t,s);if(s=s.substring(u*t.indentSize),Une(t,u,o),u<r)i=!1;else if(u>r){(a.length===0||u-r!==1)&&t.error(o,"Wrong double indentation");const l=gL(t,e,o,u);a[a.length-1].branch=l.lines,o=l.endLine}else{const l=Fne(t,s),f={code:s,indentation:u,line:o,expression:l};a.push(f),o++,t.currentLine=o}}}return{lines:a,endLine:o}}function Une(t,e,n){e%1!==0&&t.error(n,`Indentation level of ${e} incorrect. Expected indentation of ${t.indentSize} spaces for this file.`)}function Wne(t,e){return e.search(/[^ ]/)/t.indentSize}function Kne(t,e){const n=/\n( *)/,r=e.match(n);return!r||r.length<2?(t.error(0,"Can't detect indentation level. Make sure you indent with at least 2 spaces and consistently"),0):(xo.log(r),r[1].length)}function yL(t){if(!Gt().inScript)return!0;const e=$k().clickableDuringScriptsByDefault;if(e)return t.scriptClickable!==!1;if(!e)return t.scriptClickable===!0}const Jne=["screenObject","sprite"];function bL(t){return typeof t=="object"&&t!==null&&Jne.includes(t._entityType)}function Gne(t){return typeof t=="object"&&t!==null&&t._entityType==="sprite"}function Qne(t){if(t.includes(" ")){const e=t.split(" ");return{label:e[0],args:e.slice(1)}}else return{label:t}}const io=Jr("screenObjects",{state:()=>({tree:[],objectsList:{}}),actions:{addObject(t){t.parent?t.parent.children.push(t):this.tree.push(t),this.objectsList[t.id]=t},createObject(t){const e={_entityType:"screenObject",id:ql(),name:"Screen Object",tags:[],x:0,y:0,anchor:{x:0,y:0},width:1,height:1,opacity:1,scale:1,layer:0,children:[],...t};return this.addObject(e),e},destroyObject(t){let e=t;typeof e=="string"&&(e=this.getObject(e));for(const n of e.children)this.destroyObject(n);if(e.parent){const n=e.parent,r=n.children.indexOf(e);r!==-1?n.children.splice(r,1):Au(`Could not find object ${e.id} in parent's children`)}else{const n=this.tree.indexOf(e);n!==-1?this.tree.splice(n,1):Au(`Object to destroy not found in store (${e.id})`)}delete this.objectsList[e.id]},createSprite(t){const e=this.createObject(t);return e._entityType="sprite",UZ(t.image).then(n=>{const r=this.getObject(e.id);r.width===1&&r.height===1&&(r.width=n.width,r.height=n.height)}),e},getObject(t){return this.objectsList[t]},clickObject(t){var e,n,r;if(!!yL(t)&&t.onClick){console.log("click",Date.now()),Eu("onSpriteClicked");let i;if(typeof t.onClick=="string"){const o=Qne(t.onClick);i={label:o.label,args:o.args}}else i=t.onClick;i.method=(n=(e=i.method)!=null?e:t.clickMethod)!=null?n:"jump",i.args=(r=i.args)!=null?r:[],i.method==="run"?wn().runThenGoBackToPreviousDialog(i.label,...i.args):i.method==="jump"?wn().jumpToLabel(i.label,...i.args):Kt(`Unknown sprite click method ${t.clickMethod}`)}},generateSaveData(){return{tree:pi(this.tree.map(t=>t.id)),objectsList:pi(Dne(this.objectsList,t=>this.screenObjectToSave(t)))}},loadSaveData(t){this.objectsList=this.loadAllObjects(t.objectsList),this.tree=t.tree.map(e=>this.objectsList[e])},reset(){this.tree=[],this.objectsList={}},screenObjectToSave(t){return{...t,children:t.children.map(e=>e.id),parent:t.parent?t.parent.id:void 0}},loadAllObjects(t){for(const e of Object.values(t)){const n=e;n.parent=n.parent?t[n.parent]:void 0,n.children=n.children.map(r=>t[r])}return t}}}),wn=Jr("vm",{state:()=>({stack:[],data:{},lastLabel:"main",script:{},labelStack:["main"],commandsWaitingForPlayerAnswer:[],hasJumped:!1}),actions:{generateSaveData(){return{lastLabel:this.lastLabel,data:Ak(this.data,t=>bL(t)?{_entityType:t._entityType,id:t.id}:t)}},loadSaveData(t){this.lastLabel=t.lastLabel,this.data=t.data,this.findEntitiesInData(this.data)},findEntitiesInData(t){fL(this.data,(e,n,r)=>{if(bL(e)){const i=io().getObject(e.id);i?r[n]=i:Au(`Trying to reload sprite ${n} (${JSON.stringify(e)} - ${e.id}) but it does not exist.`)}})},setReturnValue(t){this.currentFrame.returnValue=t},waitForPlayerAnswer(t){this.commandsWaitingForPlayerAnswer.push(t)},popAnswerQueue(){return this.commandsWaitingForPlayerAnswer.pop()},addScopedVariable(t,e){this.currentFrame&&(this.currentFrame.scope[t]=e)},async loadScripts(t){const e=[];for(const a of t)e.push(Sb(Tk(a)));const n=await Promise.all(e),r=Date.now();let i={};for(const a in n){const s=n[a];i={...i,...Rne((u,l,f)=>vre(u,l,f),s,t[a])}}const o=Date.now();Zo.log(`script parsed in ${o-r} ms`),this.setScript(i)},start(){this.setStack({currentIndex:0,branchData:{branch:this.script.main.branch},label:"main"}),this.setStack({currentIndex:0,branchData:{branch:this.script.main.branch},label:"main"})},setLastLabel(t){this.lastLabel=t},reset(){this.stack=[],this.data={},this.hasJumped=!0,this.setStack({currentIndex:0,branchData:{branch:this.script.main.branch},label:"main"})},setScript(t){this.script=t},overrideData(t){this.data=t},setStack(t){this.stack=[];const e=this.frameOptionsToFrame(t);this.lastLabel=t.label,this.stack.push(e)},frameOptionsToFrame(t){const e=t.branchData,n={...t,blocks:[],scope:{},returnValue:null};if(this.addBlock(n,{branchData:e,currentIndex:t.currentIndex}),t.scope&&(n.scope=t.scope),t.args&&t.branchData.args)for(const[r,i]of t.branchData.args.entries())t.args.length>r&&(n.scope[i]=t.args[r]);return n},addBlock(t,e){t.blocks.push(e)},async addAndRunBlock(t){const e=this.currentFrame;if(!e)throw new Error("No frame to add block to");return this.addBlock(e,t),await this.runBlock()},setData(t,e){const n=ic();eR(n,t,e)},addInstruction(t,e){const n=ic();tR(n,t,e)},addFrame(t){if(!t.label)if(this.currentFrame)t.label=this.currentFrame.label;else throw new Error("Tried to add a new frame but no label was passed and there is no current frame label");const e=this.frameOptionsToFrame(t);this.stack.push(e)},async addAndRunFrame(t){return await this.addFrame(t),await this.runFrame()},async runFrame(){if(!this.currentFrame)throw new Error("Tried to run a frame but there is no current frame");let e;for(;this.currentBlock;){const n=await this.runBlock();if(n===am||n===sm)return this.cleanFrame(),n;if(n===ab)return this.cleanFrame()}return this.cleanFrame(),e},cleanFrame(){const t=this.currentFrame,{returnValue:e}=t;return this.stack.splice(this.stack.length-1,1),e},async runBlock(){const t=this.currentBlock;if(!t)throw new Error("Tried to run a block but there is no current block");let e;for(;this.currentLine;){if(e=await this.runLineOnly(),JZ(e))return this.cleanBlock(),e;t.currentIndex++}return this.cleanBlock(),e},cleanBlock(){if(!this.currentFrame){Kt("Tried to clean a block but there is no current frame");return}if(!this.currentFrame.blocks){Kt("Tried to clean a block but there is no current block");return}this.currentFrame.blocks.splice(this.currentFrame.blocks.length-1,1)},async runGame(){let t=await this.runFrame();for(;t===am;){const e=this.jumpTarget;if(!e){Kt("Tried to jump but no target was set");return}this.hasJumped=!0,this.setStack(e),await Gt().autoSaveGame({}),t=await this.runFrame()}t!==sm&&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(gt().gameFlow.labelToJumpOnScriptEnd&&this.lastLabel!==gt().gameFlow.labelToJumpOnScriptEnd){this.jumpToLabel(gt().gameFlow.labelToJumpOnScriptEnd);return}Gt().endingScript(),Gt().options.debug&&(zn(),gt().debugging.showScriptFinishedMessage)},async runLineOnly(){const t=this.currentLine;if(!t){Kt("There is no line of script to run.");return}return Gt().startingScript(),await kL(t)},async runLabelFunction(t,...e){const n=this.script[t];if(!n){Kt(`Tried to run a label that doesn't exist: ${t}`);return}const r={currentIndex:0,branchData:n,label:t,args:e};return this.addAndRunFrame(r)},runCustomFrame(t){this.addAndRunFrame(t)},async jumpToLabel(t,...e){const n=this.script[t];if(!n){Kt(`Label ${t} doesn't exist. Is the file with this label added in the list of script files to load in the config?`);return}t!==this.lastLabel&&(this.hasJumped=!0),this.setLastLabel(t),this.setStack({currentIndex:0,branchData:n,args:e,label:t}),this.runGame()},async runThenGoBackToPreviousDialog(t,...e){const n=zn(),r=n.dialog[n.dialog.length-1],i=Gt().inScript,o=await this.runLabelFunction(t,...e);return i?n.dialog.push(r):Gt().endingScript(),o}},getters:{currentFrame(t){return t.stack[t.stack.length-1]},scope(){var t,e;return(e=(t=this.currentFrame)==null?void 0:t.scope)!=null?e:{}},currentBlock(){const t=this.currentFrame;return t?t.blocks[t.blocks.length-1]:void 0},currentLine(){const t=this.currentBlock;if(t&&t.branchData.branch.length>t.currentIndex)return t.branchData.branch[t.currentIndex]},commandWaitingForAnswer(){if(this.commandsWaitingForPlayerAnswer.length>0)return this.commandsWaitingForPlayerAnswer[0]}}});class Yne{constructor(){ei(this,"plugins",[]);ei(this,"pinia");ei(this,"commands",{})}addCommand(e){this.commands[e.keyword]=e}addPlugin(e){if(this.plugins.push(e),e.customCommands)for(const n of e.customCommands)this.addCommand(n)}callHook(e,...n){for(const r of this.plugins)typeof r[e]=="function"&&r[e](...n)}customStores(){const e=[];for(const n of this.plugins)if(n.customStores)for(const r in n.customStores)e.push([r,n.customStores[r](this.pinia)]);return e}}const Fn=new Yne;async function kL(t,e){var r;const n=wn();try{return await Ob(t,e)}catch(i){console.error(i),console.error(t),Kt(`Narrat script runtime error at <span class="error-filename">${t.fileName}:${t.line+1}</span>
211
+ `:""}var kne=bne,wne={dump:kne};function jb(t,e){return function(){throw new Error("Function yaml."+t+" is removed in js-yaml 4. Use yaml."+e+" instead, which is now safe by default.")}}var _ne=Qr,xne=d7,jne=v7,Sne=w7,Cne=_7,$ne=mb,One=U7.load,Ene=U7.loadAll,Tne=wne.dump,Ane=Mi,Mne={binary:$7,float:k7,map:m7,null:g7,pairs:E7,set:T7,timestamp:S7,bool:y7,int:b7,merge:C7,omap:O7,seq:p7,str:h7},Pne=jb("safeLoad","load"),Nne=jb("safeLoadAll","loadAll"),Ine=jb("safeDump","dump"),Lne={Type:_ne,Schema:xne,FAILSAFE_SCHEMA:jne,JSON_SCHEMA:Sne,CORE_SCHEMA:Cne,DEFAULT_SCHEMA:$ne,load:One,loadAll:Ene,dump:Tne,YAMLException:Ane,types:Mne,safeLoad:Pne,safeLoadAll:Nne,safeDump:Ine};function Sb(t){return new Promise((e,n)=>{const r=new XMLHttpRequest;r.onload=function(){r.status>=200&&r.status<300?e(r.responseText):(Kt(`Failed to load file ${t}`,r.status),n(r.status))},r.open("GET",t),r.send()})}async function vm(t){try{const e=await Sb(t);let n;if(t.endsWith(".json"))n=JSON.parse(e);else if(t.endsWith(".yaml"))n=Lne.load(e);else{const r=`Unsupported file type for data file ${t} (must be .json or .yaml)`;throw new Error(r)}if(!n)throw new Error(`Data loaded from ${t} is empty`);return n}catch(e){throw console.error(`Failed to load data file ${t}: ${e}`),e}}const Dne=(t,e)=>{const n={};for(const r in t)n[r]=e(t[r]);return n},fL=(t,e)=>{for(const n in t){const r=t[n];e(r,n,t),typeof r=="object"&&r!==null&&fL(r,e)}},dL=new Gm;dL.setupDebugger(!1);const xo=dL.logger;function Rne(t,e,n){const r={fileName:n,currentLine:0,error:(a,s)=>t(r,a,s),processCommandsFunction:Cb,indentSize:0};r.indentSize=Kne(r,e);const i=Hne(r,e);r.currentLine=0,xo.log(i);const o={};for(const a of i){a.code.search(":")===-1&&r.error(a.line,"First indentation level should only be used to specify labels");const u=a.code.replace(":","").split(/ +/g),l=u[0],f=u.slice(1);a.branch||r.error(a.line,"This line should have a branch but doesn't"),o[l]={branch:Cb(r,a.branch,void 0),args:f}}return o}function Cb(t,e,n){const r=t.currentLine,i={processCommandsFunction:Cb,parserContext:t,lines:e,currentLine:0,line:e[0]},o=[];if(!e){let a=0;return n&&(a=n.line),t.error(a,"Processing of command failed because the current branch has no lines inside"),[]}for(;i.currentLine<e.length;){const a=e[i.currentLine];i.line=a;const s=hL(t,a,a.expression),u=Fn.commands[s.command.operator];let l=u==null?void 0:u.parser;l||(l=Fn.commands.text.parser),xo.log(Fn.commands.text);const{newLine:f}=l(i,s);i.currentLine=f,t.currentLine=r+f,o.push(s)}return o}function hL(t,e,n){xo.log(n),typeof n[0]!="string"&&t.error(e.line,"Expression operator should be a string");const r={code:e.code,fileName:t.fileName,line:e.line,command:{staticOptions:{},commandType:n[0],operator:n[0],args:n.slice(1).map(a=>Bne(t,e,a)),options:{}}},i=n[0];if(!Fn.commands[i]){const a=["else","success","failure"];!uee(i)&&!a.includes(i)&&t.error(e.line,`Unknown command ${i}`)}return r}function Bne(t,e,n){return Array.isArray(n)?hL(t,e,n):n}function zne(t){return t==="true"?!0:t==="false"?!1:t==="undefined"?void 0:t===null?null:isNaN(Number(t))?t:Number(t)}function Fne(t,e){e.charAt(e.length-1)===":"&&(e=e.substr(0,e.length-1));const n=Vne(e),[r]=mL(t,n);return r}function Vne(t){const e=/(["'])(?:\\\1|.)*?\1/g,n=[];let r;for(;(r=e.exec(t))!=null;)n.push(r);let i=0,o=[];for(const a of n){const s=a.index;if(s>i){const l=t.substr(i,s-i),f=pL(l);o=[...o,...f]}const u=a[0].replace(/\\/g,"");o.push(`$$"${u.substring(1,u.length-1)}`),i=s+a[0].length}return o=[...o,...pL(t.substr(i))],o.push(")"),o}function pL(t){t=t.replace(/: *$/g,"");let e=t.split(" ").filter(n=>n);return e=e.reduce((n,r)=>[...n,...r.split(/(\(|\))/g)].filter(i=>i&&i),[]),e.map(n=>zne(n))}function mL(t,e){xo.log("===============");let n=[],r=0,i=vL(e)+r,o=$b(e)+r;for(xo.log(`Parsing expression: ${e}`),xo.log(`Parenthesis start index: ${i} - end: ${o}`);i!==-1&&o>i;){n=[...n,...e.slice(r,i)];const u=e.slice(i+1);xo.log(`Found a sub expression. Before: ${n} - After: ${u}`),r=i;const[l,f]=mL(t,u),c=r+f;n.push(l),r=c+1;const d=e.slice(r);xo.log(`Sub expression came back: ${l} - rest of string: ${d}`),i=vL(d),i!==-1&&(i+=r),o=$b(d),o!==-1&&(o+=r)}o!==-1&&xo.log("Found parenthesis end before new opening parenthesis, close this expression");const a=$b(e.slice(r))+r;if(a===-1)return t.error(t.currentLine,'Expression is not closed (missing ")" closing parenthesis)'),[n,a];const s=e.slice(r,a);return xo.log(`End of expression: ${a} - ${s}`),xo.log("==================="),n=[...n,...s],qne(t,n),[n,a+1]}function qne(t,e){e.length<1&&t.error(t.currentLine,"Expression is empty")}function vL(t){return t.findIndex(e=>e==="(")}function $b(t){return t.findIndex(e=>e===")")}function Hne(t,e){const n=e.split(/\r?\n|$/).map(i=>{const o=i.search(/ *\/\//g);return o!==-1?i.substr(0,o):i});return gL(t,n,0,0).lines}function gL(t,e,n,r){let i=!0,o=n;const a=[];for(;i&&!(o>=e.length);){let s=e[o];if(s.search(/^\s*$/)!==-1)o++;else{const u=Wne(t,s);if(s=s.substring(u*t.indentSize),Une(t,u,o),u<r)i=!1;else if(u>r){(a.length===0||u-r!==1)&&t.error(o,"Wrong double indentation");const l=gL(t,e,o,u);a[a.length-1].branch=l.lines,o=l.endLine}else{const l=Fne(t,s),f={code:s,indentation:u,line:o,expression:l};a.push(f),o++,t.currentLine=o}}}return{lines:a,endLine:o}}function Une(t,e,n){e%1!==0&&t.error(n,`Indentation level of ${e} incorrect. Expected indentation of ${t.indentSize} spaces for this file.`)}function Wne(t,e){return e.search(/[^ ]/)/t.indentSize}function Kne(t,e){const n=/\n( *)/,r=e.match(n);return!r||r.length<2?(t.error(0,"Can't detect indentation level. Make sure you indent with at least 2 spaces and consistently"),0):(xo.log(r),r[1].length)}function yL(t){if(!Gt().inScript)return!0;const e=$k().clickableDuringScriptsByDefault;if(e)return t.scriptClickable!==!1;if(!e)return t.scriptClickable===!0}const Jne=["screenObject","sprite"];function bL(t){return typeof t=="object"&&t!==null&&Jne.includes(t._entityType)}function Gne(t){return typeof t=="object"&&t!==null&&t._entityType==="sprite"}function Qne(t){if(t.includes(" ")){const e=t.split(" ");return{label:e[0],args:e.slice(1)}}else return{label:t}}const io=Jr("screenObjects",{state:()=>({tree:[],objectsList:{}}),actions:{addObject(t){t.parent?t.parent.children.push(t):this.tree.push(t),this.objectsList[t.id]=t},createObject(t){const e={_entityType:"screenObject",id:ql(),name:"Screen Object",tags:[],x:0,y:0,anchor:{x:0,y:0},width:1,height:1,opacity:1,scale:1,layer:0,children:[],...t};return this.addObject(e),e},destroyObject(t){let e=t;typeof e=="string"&&(e=this.getObject(e));for(const n of e.children)this.destroyObject(n);if(e.parent){const n=e.parent,r=n.children.indexOf(e);r!==-1?n.children.splice(r,1):Au(`Could not find object ${e.id} in parent's children`)}else{const n=this.tree.indexOf(e);n!==-1?this.tree.splice(n,1):Au(`Object to destroy not found in store (${e.id})`)}delete this.objectsList[e.id]},createSprite(t){const e=this.createObject(t);return e._entityType="sprite",UZ(t.image).then(n=>{const r=this.getObject(e.id);r.width===1&&r.height===1&&(r.width=n.width,r.height=n.height)}),e},getObject(t){return this.objectsList[t]},clickObject(t){var e,n,r;if(!!yL(t)&&t.onClick){console.log("click",Date.now()),Eu("onSpriteClicked");let i;if(typeof t.onClick=="string"){const o=Qne(t.onClick);i={label:o.label,args:o.args}}else i=t.onClick;i.method=(n=(e=i.method)!=null?e:t.clickMethod)!=null?n:"jump",i.args=(r=i.args)!=null?r:[],i.method==="run"?wn().runThenGoBackToPreviousDialog(i.label,...i.args):i.method==="jump"?wn().jumpToLabel(i.label,...i.args):Kt(`Unknown sprite click method ${t.clickMethod}`)}},generateSaveData(){return{tree:pi(this.tree.map(t=>t.id)),objectsList:pi(Dne(this.objectsList,t=>this.screenObjectToSave(t)))}},loadSaveData(t){this.objectsList=this.loadAllObjects(t.objectsList),this.tree=t.tree.map(e=>this.objectsList[e])},reset(){this.$reset()},screenObjectToSave(t){return{...t,children:t.children.map(e=>e.id),parent:t.parent?t.parent.id:void 0}},loadAllObjects(t){for(const e of Object.values(t)){const n=e;n.parent=n.parent?t[n.parent]:void 0,n.children=n.children.map(r=>t[r])}return t}}}),wn=Jr("vm",{state:()=>({stack:[],data:{},lastLabel:"main",script:{},labelStack:["main"],commandsWaitingForPlayerAnswer:[],hasJumped:!1}),actions:{generateSaveData(){return{lastLabel:this.lastLabel,data:Ak(this.data,t=>bL(t)?{_entityType:t._entityType,id:t.id}:t)}},loadSaveData(t){this.lastLabel=t.lastLabel,this.data=t.data,this.findEntitiesInData(this.data)},findEntitiesInData(t){fL(this.data,(e,n,r)=>{if(bL(e)){const i=io().getObject(e.id);i?r[n]=i:Au(`Trying to reload sprite ${n} (${JSON.stringify(e)} - ${e.id}) but it does not exist.`)}})},setReturnValue(t){this.currentFrame.returnValue=t},waitForPlayerAnswer(t){this.commandsWaitingForPlayerAnswer.push(t)},popAnswerQueue(){return this.commandsWaitingForPlayerAnswer.pop()},addScopedVariable(t,e){this.currentFrame&&(this.currentFrame.scope[t]=e)},async loadScripts(t){const e=[];for(const a of t)e.push(Sb(Tk(a)));const n=await Promise.all(e),r=Date.now();let i={};for(const a in n){const s=n[a];i={...i,...Rne((u,l,f)=>vre(u,l,f),s,t[a])}}const o=Date.now();Zo.log(`script parsed in ${o-r} ms`),this.setScript(i)},start(){this.setStack({currentIndex:0,branchData:{branch:this.script.main.branch},label:"main"}),this.setStack({currentIndex:0,branchData:{branch:this.script.main.branch},label:"main"})},setLastLabel(t){this.lastLabel=t},reset(){this.stack=[],this.data={},this.hasJumped=!0,this.setStack({currentIndex:0,branchData:{branch:this.script.main.branch},label:"main"})},setScript(t){this.script=t},overrideData(t){this.data=t},setStack(t){this.stack=[];const e=this.frameOptionsToFrame(t);this.lastLabel=t.label,this.stack.push(e)},frameOptionsToFrame(t){const e=t.branchData,n={...t,blocks:[],scope:{},returnValue:null};if(this.addBlock(n,{branchData:e,currentIndex:t.currentIndex}),t.scope&&(n.scope=t.scope),t.args&&t.branchData.args)for(const[r,i]of t.branchData.args.entries())t.args.length>r&&(n.scope[i]=t.args[r]);return n},addBlock(t,e){t.blocks.push(e)},async addAndRunBlock(t){const e=this.currentFrame;if(!e)throw new Error("No frame to add block to");return this.addBlock(e,t),await this.runBlock()},setData(t,e){const n=ic();eR(n,t,e)},addInstruction(t,e){const n=ic();tR(n,t,e)},addFrame(t){if(!t.label)if(this.currentFrame)t.label=this.currentFrame.label;else throw new Error("Tried to add a new frame but no label was passed and there is no current frame label");const e=this.frameOptionsToFrame(t);this.stack.push(e)},async addAndRunFrame(t){return await this.addFrame(t),await this.runFrame()},async runFrame(){if(!this.currentFrame)throw new Error("Tried to run a frame but there is no current frame");let e;for(;this.currentBlock;){const n=await this.runBlock();if(n===am||n===sm)return this.cleanFrame(),n;if(n===ab)return this.cleanFrame()}return this.cleanFrame(),e},cleanFrame(){const t=this.currentFrame,{returnValue:e}=t;return this.stack.splice(this.stack.length-1,1),e},async runBlock(){const t=this.currentBlock;if(!t)throw new Error("Tried to run a block but there is no current block");let e;for(;this.currentLine;){if(e=await this.runLineOnly(),JZ(e))return this.cleanBlock(),e;t.currentIndex++}return this.cleanBlock(),e},cleanBlock(){if(!this.currentFrame){Kt("Tried to clean a block but there is no current frame");return}if(!this.currentFrame.blocks){Kt("Tried to clean a block but there is no current block");return}this.currentFrame.blocks.splice(this.currentFrame.blocks.length-1,1)},async runGame(){let t=await this.runFrame();for(;t===am;){const e=this.jumpTarget;if(!e){Kt("Tried to jump but no target was set");return}this.hasJumped=!0,this.setStack(e),await Gt().autoSaveGame({}),t=await this.runFrame()}t!==sm&&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(gt().gameFlow.labelToJumpOnScriptEnd&&this.lastLabel!==gt().gameFlow.labelToJumpOnScriptEnd){this.jumpToLabel(gt().gameFlow.labelToJumpOnScriptEnd);return}Gt().endingScript(),Gt().options.debug&&(zn(),gt().debugging.showScriptFinishedMessage)},async runLineOnly(){const t=this.currentLine;if(!t){Kt("There is no line of script to run.");return}return Gt().startingScript(),await kL(t)},async runLabelFunction(t,...e){const n=this.script[t];if(!n){Kt(`Tried to run a label that doesn't exist: ${t}`);return}const r={currentIndex:0,branchData:n,label:t,args:e};return this.addAndRunFrame(r)},runCustomFrame(t){this.addAndRunFrame(t)},async jumpToLabel(t,...e){const n=this.script[t];if(!n){Kt(`Label ${t} doesn't exist. Is the file with this label added in the list of script files to load in the config?`);return}t!==this.lastLabel&&(this.hasJumped=!0),this.setLastLabel(t),this.setStack({currentIndex:0,branchData:n,args:e,label:t}),this.runGame()},async runThenGoBackToPreviousDialog(t,...e){const n=zn(),r=n.dialog[n.dialog.length-1],i=Gt().inScript,o=await this.runLabelFunction(t,...e);return i?n.dialog.push(r):Gt().endingScript(),o}},getters:{currentFrame(t){return t.stack[t.stack.length-1]},scope(){var t,e;return(e=(t=this.currentFrame)==null?void 0:t.scope)!=null?e:{}},currentBlock(){const t=this.currentFrame;return t?t.blocks[t.blocks.length-1]:void 0},currentLine(){const t=this.currentBlock;if(t&&t.branchData.branch.length>t.currentIndex)return t.branchData.branch[t.currentIndex]},commandWaitingForAnswer(){if(this.commandsWaitingForPlayerAnswer.length>0)return this.commandsWaitingForPlayerAnswer[0]}}});class Yne{constructor(){ei(this,"plugins",[]);ei(this,"pinia");ei(this,"commands",{})}addCommand(e){this.commands[e.keyword]=e}addPlugin(e){if(this.plugins.push(e),e.customCommands)for(const n of e.customCommands)this.addCommand(n)}callHook(e,...n){for(const r of this.plugins)typeof r[e]=="function"&&r[e](...n)}customStores(){const e=[];for(const n of this.plugins)if(n.customStores)for(const r in n.customStores)e.push([r,n.customStores[r](this.pinia)]);return e}}const Fn=new Yne;async function kL(t,e){var r;const n=wn();try{return await Ob(t,e)}catch(i){console.error(i),console.error(t),Kt(`Narrat script runtime error at <span class="error-filename">${t.fileName}:${t.line+1}</span>
212
212
  <b>${i}</b>
213
213
  Script: ${t.code}
214
- Label: ${((r=n.currentFrame)==null?void 0:r.label)||"none"}`)}}async function Xne(t,e){const n=t.command,r=Fn.commands[n.commandType];if(r){const i={args:[],options:{},operator:n.operator,staticOptions:n.staticOptions,code:t.code,commandType:n.commandType,fileName:t.fileName,line:t.line},o=r.argTypes;i.options={};for(const[a,s]of n.args.entries()){let u;if(a7(s))u=await Ob(s,e);else if(typeof s=="string")if(s.search(r7)===0)u=es(s.substring(3));else if(s7(s)){const l=ic(),f=lse(l,s);if(f){const[c,d]=f;u=c[d]}else u=s}else u=s;else u=s;if(i.args.push(u),Array.isArray(o)&&o.length>a){const l=o[a];u!==null&&(i.options[l.name]=u)}}return i}else throw new Error(`${n.commandType} is not a valid command`)}async function Ob(t,e){const n=await Xne(t,e),r=Fn.commands[n.commandType];if(r)return await r.run(n,e);throw new Error(`${n.commandType} is not a valid command`)}async function Zne(t){Eu("onPlayerAnswered");const e=wn(),n=e.popAnswerQueue(),r=e.currentLine;try{if(n){const i=Fn.commands[n.commandType];if(i)return await i.processPlayerAnswer(n,t)}}catch(i){console.error(i),Kt(`Error after player answer at ${r.fileName}:${r.line+1} (${r.code}<br /> - Error: ${i}`)}}var ere=function(e){return tre(e)&&!nre(e)};function tre(t){return!!t&&typeof t=="object"}function nre(t){var e=Object.prototype.toString.call(t);return e==="[object RegExp]"||e==="[object Date]"||ore(t)}var rre=typeof Symbol=="function"&&Symbol.for,ire=rre?Symbol.for("react.element"):60103;function ore(t){return t.$$typeof===ire}function are(t){return Array.isArray(t)?[]:{}}function Bf(t,e){return e.clone!==!1&&e.isMergeableObject(t)?Gl(are(t),t,e):t}function sre(t,e,n){return t.concat(e).map(function(r){return Bf(r,n)})}function ure(t,e){if(!e.customMerge)return Gl;var n=e.customMerge(t);return typeof n=="function"?n:Gl}function lre(t){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(t).filter(function(e){return t.propertyIsEnumerable(e)}):[]}function wL(t){return Object.keys(t).concat(lre(t))}function _L(t,e){try{return e in t}catch{return!1}}function cre(t,e){return _L(t,e)&&!(Object.hasOwnProperty.call(t,e)&&Object.propertyIsEnumerable.call(t,e))}function fre(t,e,n){var r={};return n.isMergeableObject(t)&&wL(t).forEach(function(i){r[i]=Bf(t[i],n)}),wL(e).forEach(function(i){cre(t,i)||(_L(t,i)&&n.isMergeableObject(e[i])?r[i]=ure(i,n)(t[i],e[i],n):r[i]=Bf(e[i],n))}),r}function Gl(t,e,n){n=n||{},n.arrayMerge=n.arrayMerge||sre,n.isMergeableObject=n.isMergeableObject||ere,n.cloneUnlessOtherwiseSpecified=Bf;var r=Array.isArray(e),i=Array.isArray(t),o=r===i;return o?r?n.arrayMerge(t,e,n):fre(t,e,n):Bf(e,n)}Gl.all=function(e,n){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce(function(r,i){return Gl(r,i,n)},{})};var dre=Gl,gm=dre;const $a=Jr("hud",{state:()=>({hudStats:{}}),actions:{setupHudStats(t){for(const e in t)this.hudStats[e]={value:t[e].startingValue}},setStat(t,e){this.hudStats[t].value=e},addStat(t,e){this.hudStats[t].value+=e},getStat(t){return this.hudStats[t]},getStatValue(t){return this.hudStats[t].value},generateSaveData(){return{hudStats:pi(this.hudStats)}},loadSaveData(t){this.hudStats=gm(this.hudStats,t.hudStats)}}}),oo=Jr("notifications",{state:()=>({notifications:{},enabled:!0}),actions:{async addNotification(t){if(!this.enabled)return;t=es(t);const e=`${Date.now()}-${Math.random()*1e4}`;this.notifications[e]={text:t},gt().notifications.alsoPrintInDialogue&&u7(`[NOTIFICATION] ${t}`),await _o(gt().notifications.timeOnScreen*1e3),this.deleteNotification(e)},deleteNotification(t){delete this.notifications[t]},disableNotifications(){this.enabled=!1;for(const t in this.notifications)this.deleteNotification(t)},enableNotifications(){this.enabled=!0}}}),Nr=Jr("inventory",{state:()=>({items:{},interactionTags:{}}),actions:{generateSaveData(){return{items:pi(this.items),interactionTags:pi(this.interactionTags)}},loadSaveData(t){this.items={...this.items,...t.items},this.interactionTags={...t.interactionTags}},setupItems(t){Object.keys(t).forEach(e=>{this.items[e]={amount:0,id:e}})},hasItem(t,e){var n;return e||(e=1),((n=this.items[t])==null?void 0:n.amount)>=e},getExistingItem(t){return this.items[t]},getItemAmount(t){var e;return((e=this.getExistingItem(t))==null?void 0:e.amount)||0},add(t){const e=this.getExistingItem(t.id);e?e.amount+=t.amount:this.items[t.id]={...t},oo().addNotification(`Received item: ${is(t.id).name} x ${t.amount}`)},enableInteraction(t){t||(t="default"),this.interactionTags[t]={blockedInteraction:!1}},disableInteraction(t){t||(t="default"),this.interactionTags[t]={blockedInteraction:!0}},onScriptStart(){const t=gt().interactionTags;Object.keys(t).forEach(e=>{t[e].onlyInteractOutsideOfScripts&&this.disableInteraction(e)})},onScriptEnd(){const t=gt().interactionTags;Object.keys(t).forEach(e=>{t[e].onlyInteractOutsideOfScripts&&this.enableInteraction(e)})},isInteractionTagBlocked(t){return t||(t="default"),this.interactionTags[t]?this.interactionTags[t].blockedInteraction:!1},remove(t){const e=this.getExistingItem(t.id);e&&(e.amount-=t.amount,oo().addNotification(`Lost item: ${is(t.id).name} x ${t.amount}`),e.amount<=0&&this.deleteItem(t.id))},deleteItem(t){this.getExistingItem(t)&&(this.items[t].amount=0)},canUseItem(t){var n;const e=is(t.id);return!!(e&&e.onUse&&!this.isInteractionTagBlocked(e.tag)&&!((n=zn().currentDialog)!=null&&n.choices))}}}),di=Jr("quests",{state:()=>({quests:{}}),actions:{getQuest(t){const e=this.quests[t];if(e)return e;{const n=`Quest ${t} doesn't exist!`;throw Kt(n),new Error(n)}},getObjective(t,e){const n=this.getQuest(t);if(!n){const o=`Quest ${t} doesn't exist!`;throw Kt(o),new Error(o)}const r=n.objectives[e];if(r)return r;const i=`Objective ${e} doesn't exist in quest ${t}!`;throw Kt(i),new Error(i)},setupQuests(t){const e=t.quests;for(const n of Object.keys(e)){const r=e[n];this.quests[n]={id:n,state:"hidden",objectives:{}};for(const i of Object.keys(r.objectives)){const o=r.objectives[i];this.quests[n].objectives[i]={id:i,state:o.hidden?"hidden":"unlocked"}}}},startQuest(t){const e=this.getQuest(t);e?(e.state="unlocked",oo().addNotification(`Started quest: ${Bu(t).title}`)):Kt(`Quest ${t} doesn't exist!`)},startObjective(t,e){const n=this.getObjective(t,e);n?(n.state="unlocked",oo().addNotification(`New quest objective: ${Fm(t,e).description}`)):Kt(`Objective ${e} doesn't exist in quest ${t}!`)},completeObjective(t,e){const n=this.getObjective(t,e);n?(n.state="completed",oo().addNotification(`Completed quest objective: ${Fm(t,e).description}`)):Kt(`Objective ${e} doesn't exist in quest ${t}!`)},completeQuest(t,e){const n=this.getQuest(t);n?(n.state="completed",n.ending=e,oo().addNotification(`Completed quest: ${Bu(t).title}`)):Kt(`Quest ${t} doesn't exist!`)},isQuestCompleted(t){const e=this.getQuest(t);return e?e.state==="completed":!1},isObjectiveCompleted(t,e){const n=this.getObjective(t,e);return n?n.state==="completed":!1},isQuestStarted(t){const e=this.getQuest(t);return e&&e.state==="unlocked"},isObjectiveStarted(t,e){return this.getObjective(t,e).state==="unlocked"},removeQuest(t){delete this.quests[t]},generateSaveData(){return{quests:pi(this.quests)}},loadSaveData(t){this.quests=t.quests}}});function xL(t,e,n,r){const i=t/n,o=e/r;return Math.min(i,o)}const ao=Jr("rendering",{state:()=>({screenHeight:window.innerHeight,screenWidth:window.innerWidth,layoutMode:"horizontal"}),actions:{updateScreenSize(t,e){this.screenHeight=e,this.screenWidth=t,t<gt().layout.verticalLayoutThreshold?(this.layoutMode="vertical",document.querySelector("html").style.fontSize="40px"):(this.layoutMode="horizontal",document.querySelector("html").style.fontSize="16px")}},getters:{gameScaleRatio(t){return xL(this.screenWidth,this.screenHeight,this.gameWidth,this.gameHeight)},overlayMode(t){return!!(gt().dialogPanel.overlayMode&&t.layoutMode==="horizontal")},gameWidth(){const t=gt();return this.layoutMode==="vertical"||this.overlayMode?t.layout.backgrounds.width:t.layout.backgrounds.width+Vm()},gameHeight(){const t=gt();return this.layoutMode==="vertical",t.layout.backgrounds.height},dialogWidth(){return this.layoutMode==="vertical"?this.viewportWidth:Vm()},dialogHeight(){var t;return this.layoutMode==="vertical"?this.actualGameHeight-this.gameHeight:(t=gt().dialogPanel.height)!=null?t:this.gameHeight},actualGameHeight(){let t=this.gameHeight;return this.layoutMode==="vertical"&&(t=this.screenHeight/this.gameScaleRatio),t},viewportRatio(t){if(this.layoutMode==="vertical"){const e=gt().layout.backgrounds;return t.screenWidth/e.width}return 1},viewportHeight(t){return gt().layout.backgrounds.height*this.viewportRatio},viewportWidth(t){return gt().layout.backgrounds.width*this.viewportRatio},showDialog(t){const e=Gt().inScript;return!this.overlayMode||this.layoutMode==="vertical"?!0:e}}}),ym={};function hre(t){var e;return(e=ym[t])!=null?e:{}}function jL(t,e,n){var s,u,l,f;const r=hre(t.transition),i=(u=(s=t.duration)!=null?s:r.duration)!=null?u:500,o=(f=(l=t.delay)!=null?l:r.delay)!=null?f:0;return{...t,resolve:n,duration:i,delay:o,oldScreen:e}}const Uo=Jr("screens",{state:()=>({layers:[{screen:"default"}],buttons:{}}),actions:{setScreen(t,e,n){return new Promise(r=>{var s;const i=this.layers[e||0];let o;const a=(s=i==null?void 0:i.screen)!=null?s:null;if(a===t){r();return}n&&(o=jL(n,a,r)),this.layers[e||0]={screen:t,transition:o},o||r()})},finishTransition(t){const e=this.layers[t];if(!e)Kt(`Tried to finish transition on layer ${t} but it doesn't exist`);else if(e.transition){const n=e.transition.resolve;delete e.transition,n()}},transitionScreen(t,e,n){return this.setScreen(t,n!=null?n:0,e)},emptyLayer(t,e){return new Promise(n=>{const r=this.layers[t];if(!r){Au(`Tried to empty layer ${t} but it doesn't exist`);return}if(e){const i=r.screen,o=jL(e,i,n);r.transition=o}r.screen=null,e||n()})},setButtons(t){const e=t.screens.screens,n=t.buttons.buttons;for(const r in n)this.buttons[r]={state:n[r].enabled};for(const r in e){const i=e[r];if(i.buttons)for(const[o,a]of i.buttons.entries())typeof a=="object"&&(n[a.id]=a,i.buttons[o]=a.id,this.buttons[a.id]={state:a.enabled})}},changeButton(t,e){if(!this.buttons[t]){Kt(`Tried to change button ${t} but it doesn't exist`);return}this.buttons[t].state=e},generateSaveData(){return{layers:pi(this.layers).filter(t=>t).map(t=>{var e;return(e=t.screen)!=null?e:null}),buttons:pi(this.buttons)}},loadSaveData(t){this.layers=t.layers.map(e=>(e!==null&&typeof e!="string"&&(e=null),{screen:e})),this.buttons=gm(this.buttons,t.buttons)}},getters:{nonEmptyLayers(t){return t.layers.filter(e=>e)}}});class Eb{constructor(){ei(this,"listeners",{})}on(e,n){return this.listeners[e]||this.addEventToMap(e),this.listeners[e].add(n),n}off(e,n){return this.listeners[e]&&this.listeners[e].delete(n),n}once(e,n){const r=(...i)=>{this.off(e,r),n(...i)};return this.on(e,r)}emit(e,...n){this.listeners[e]&&this.listeners[e].forEach(r=>r(...n))}clear(){Object.keys(this.listeners).forEach(e=>{delete this.listeners[e]})}addEventToMap(e){this.listeners[e]=new Set}}const jo=Jr("menu",{state:()=>({menus:{},activeMenu:!1}),getters:{showSkills(){return Object.entries(Co().skills).length>0},showInventory(){return Object.entries(Bm().items).length>0},showQuests(){return Object.entries(Zf().quests).length>0},menuTabsToShow(t){return t.menus.menu.tabs.map(e=>{const n=gt().menuButtons[e.id]||{};return{...e,...n}}).filter(e=>e.condition?e.condition():!0)},menu(t){return t.activeMenu?t.menus[t.activeMenu]:void 0},tab(){if(this.menu)return this.menu.tabs[this.menu.activeTab]}},actions:{setup(){},addMenu(t,e){this.menus[t]={...e,id:t}},addMenuOption(t,e){this.menus[t]||(this.menus[t]={id:t,label:t,tabs:[],activeTab:0}),this.menus[t].tabs.push(e)},setActiveTab(t){this.menu&&(this.menu.activeTab=t)},openMenu(t){this.activeMenu=t},closeMenu(){this.activeMenu=!1},toggleMenu(){this.activeMenu?this.activeMenu=!1:this.activeMenu="menu"}}});function pre(){return{baseAssetsPath:"",baseDataPath:"",configPath:"data/config.json",logging:!1,debug:!1}}class mre extends Eb{}const Gt=Jr("main",{state:()=>({ready:!1,playing:!1,errors:[],playTime:{start:0,previousPlaytime:0},saveSlot:"",flowState:"engine-splash",paused:!1,debugMode:!0,options:{baseAssetsPath:"",baseDataPath:"",configPath:"data/config.json",logging:!1,debug:!1},loading:{step:"Loading",percentage:.1,loaded:!1},alerts:[],saving:null,listener:new mre,inScript:!1}),actions:{async setup(){var n;const e=gt().scripts;Gr().setMasterVolume((n=Aa().options.volume)!=null?n:1),await wn().loadScripts(e),jo().setup();for(const[,r]of Fn.customStores())if(r.setup){const i=r.setup();hZ(i)&&await i}this.resetAllStores()},async engineLoading(){const t=WZ(gt()),e=VZ(Aa());if(Fn.plugins){const n=[];for(const r of Fn.plugins)r.loadingPromises&&n.push(Promise.all(r.loadingPromises));n.length>0&&(this.loading.step="Plugins",this.loading.percentage=.3,await Promise.all(n))}this.loading.step="Images",await t,this.loading.percentage=.7,this.loading.step="Audio",await e,Fn.callHook("onAssetsLoaded"),this.loading.percentage=.95,this.loading.step="Starting...",await this.setup(),Fn.callHook("onGameSetup"),this.loading.loaded=!0,this.listener.emit("gameLoaded")},async alert(t,e){return new Promise(n=>{this.alerts.push({title:t,text:e,resolver:n,id:ql()})})},closeAlert(t){const e=this.alerts.findIndex(n=>n.id===t);e!==-1&&(this.alerts[e].resolver(),this.alerts.splice(e,1))},startingScript(){Nr().onScriptStart(),this.inScript=!0},endingScript(){Nr().onScriptEnd(),this.inScript=!1},startMachine(){Gr().stopAll(),Eu("onPressStart"),wn().start(),this.ready=!0,this.startPlaying(),Fn.callHook("onGameStart"),this.setFlowState("playing")},setSaveSlot(t){this.saveSlot=t,eee(t)},async startGame(t){if(gt().saves.mode==="manual"){const e=ub();e&&(t=e.id)}this.setSaveSlot(t),this.startMachine(),wn().runGame()},async loadGame(t,e){if(gt().saves.mode==="manual"){const n=ub();n&&(e=n.id)}this.setSaveSlot(e),this.startMachine(),t.saveData&&(this.setLoadedData(t.saveData),Gr().reloadAudio(t.saveData.audio),wn().jumpToLabel(t.saveData.vm.lastLabel))},manualSave({saveName:t,withPrompt:e}){return new Promise(n=>{wn().hasJumped?this.saving={name:t,withPrompt:e,resolver:n}:n()})},finishManualSave(t,e){var n,r;if(!this.saving){Kt("Trying to save but there is no saving request!");return}if(!e||!t){this.saving.resolver(),this.saving=null;return}this.saveData?(t7({...this.saveData,main:{...this.saveData.main,playTime:Fu(this.playTime.start,this.playTime.previousPlaytime)},metadata:{...this.saveData.metadata,name:(r=(n=this.saving)==null?void 0:n.name)!=null?r:"Manual Save",saveDate:new Date().toISOString()}},t.slotId),this.alert("Success","Game saved!")):Kt("There was no data to save!"),this.saving.resolver(),this.saving=null},playerAnswered(t){Zne(t)},menuReturn(){this.reset(),this.setFlowState("menu"),Aa().options.defaultMusic&&Gr().playChannel("music",Aa().options.defaultMusic,0)},createError(t){this.errors.push({text:t,type:"error"})},createWarning(t){this.errors.push({text:t,type:"warning"})},clearErrors(){this.errors=[]},setFlowState(t){this.flowState=t},pause(){this.paused=!0},unpause(){this.paused=!1},setOptions(t){this.options=t},startPlaying(){this.playing=!0,this.playTime.start=Date.now()},reset(){this.ready=!1,this.errors=[],this.paused=!1,wn().reset(),Gr().reset(),this.resetAllStores(),this.playing=!1,this.ready=!0,Fn.plugins.forEach(t=>{t.reset&&t.reset()})},resetAllStores(){const t=Uo(),e=gt();io().reset(),t.setButtons(e),_r().setupSkills(Co()),$a().setupHudStats(e.hudStats),Nr().setupItems(Bm().items),di().setupQuests(Zf()),zn().reset(),Fn.customStores().forEach(([a,s])=>{s.reset&&s.reset()})},generateSaveData(){return{playTime:Fu(this.playTime.start,this.playTime.previousPlaytime)}},loadSaveData(t){this.playTime.previousPlaytime=t.playTime},autoSaveGame({slotId:t,name:e}){const n=t!=null?t:this.saveSlot,r=Pf(n),i=oee();r&&r.saveData?i.name=r.saveData.metadata.name:i.name=e!=null?e:"Auto Save",gt().saves.mode==="manual"&&(i.name="Auto Save");const o=Uo(),a=_r(),s=zn(),u=wn(),l=Gt(),f=$a(),c=Gr(),d=Nr(),h={version:X8,screen:o.generateSaveData(),skills:a.generateSaveData(),dialog:s.generateSaveData(),vm:u.generateSaveData(),main:l.generateSaveData(),hud:f.generateSaveData(),audio:c.generateSaveData(),inventory:d.generateSaveData(),quests:di().generateSaveData(),metadata:i,screenObjects:io().generateSaveData()};Fn.plugins.forEach(p=>{p.save&&(h[p.pluginId]=p.save())}),Fn.customStores().forEach(([p,m])=>{if(m.save){const g=m.save();g&&(h[p]=g)}}),this.saveData=h,t7(h,this.saveSlot)},setLoadedData(t){const e=Uo(),n=_r(),r=zn(),i=wn(),o=Gt(),a=$a(),s=Gr(),u=Nr();io().loadSaveData(t.screenObjects),e.loadSaveData(t.screen),n.loadSaveData(t.skills),r.loadSaveData(t.dialog),i.loadSaveData(t.vm),o.loadSaveData(t.main),a.loadSaveData(t.hud),s.loadSaveData(t.audio),u.loadSaveData(t.inventory),di().loadSaveData(t.quests),Fn.plugins.forEach(l=>{l.load&&t[l.pluginId]&&l.load(t[l.pluginId])}),Fn.customStores().forEach(([l,f])=>{f.load&&f.load(t[l])})},getAllStates(){return{main:this,screens:Uo(),skills:_r(),dialog:zn(),vm:wn(),hud:$a(),audio:Gr(),rendering:ao(),notifications:oo(),inventory:Nr(),quests:di(),sprites:io()}},overrideStates(t){const e=this.getAllStates();for(const n in t){const r=t[n];Object.assign(e[n],r)}}},getters:{isInGame(t){return t.flowState==="playing"},totalPlayTime(t){return Fu(t.playTime.start,t.playTime.previousPlaytime)},sessionPlayTime(t){return Fu(t.playTime.start,0)}}});function vre(t,e,n){console.error(`Parser error: ${t.fileName}:${t.currentLine}`,n);const r=`[Parser Error] in <span class="error-filename">${t.fileName}:${e+1}</span> - <b>${n}</b>`;Kt(r)}function Kt(t,...e){const n=Gt();console.error(t,...e),t=t.replace(/[\r\n]/g,`
214
+ Label: ${((r=n.currentFrame)==null?void 0:r.label)||"none"}`)}}async function Xne(t,e){const n=t.command,r=Fn.commands[n.commandType];if(r){const i={args:[],options:{},operator:n.operator,staticOptions:n.staticOptions,code:t.code,commandType:n.commandType,fileName:t.fileName,line:t.line},o=r.argTypes;i.options={};for(const[a,s]of n.args.entries()){let u;if(a7(s))u=await Ob(s,e);else if(typeof s=="string")if(s.search(r7)===0)u=es(s.substring(3));else if(s7(s)){const l=ic(),f=lse(l,s);if(f){const[c,d]=f;u=c[d]}else u=s}else u=s;else u=s;if(i.args.push(u),Array.isArray(o)&&o.length>a){const l=o[a];u!==null&&(i.options[l.name]=u)}}return i}else throw new Error(`${n.commandType} is not a valid command`)}async function Ob(t,e){const n=await Xne(t,e),r=Fn.commands[n.commandType];if(r)return await r.run(n,e);throw new Error(`${n.commandType} is not a valid command`)}async function Zne(t){Eu("onPlayerAnswered");const e=wn(),n=e.popAnswerQueue(),r=e.currentLine;try{if(n){const i=Fn.commands[n.commandType];if(i)return await i.processPlayerAnswer(n,t)}}catch(i){console.error(i),Kt(`Error after player answer at ${r.fileName}:${r.line+1} (${r.code}<br /> - Error: ${i}`)}}var ere=function(e){return tre(e)&&!nre(e)};function tre(t){return!!t&&typeof t=="object"}function nre(t){var e=Object.prototype.toString.call(t);return e==="[object RegExp]"||e==="[object Date]"||ore(t)}var rre=typeof Symbol=="function"&&Symbol.for,ire=rre?Symbol.for("react.element"):60103;function ore(t){return t.$$typeof===ire}function are(t){return Array.isArray(t)?[]:{}}function Bf(t,e){return e.clone!==!1&&e.isMergeableObject(t)?Gl(are(t),t,e):t}function sre(t,e,n){return t.concat(e).map(function(r){return Bf(r,n)})}function ure(t,e){if(!e.customMerge)return Gl;var n=e.customMerge(t);return typeof n=="function"?n:Gl}function lre(t){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(t).filter(function(e){return t.propertyIsEnumerable(e)}):[]}function wL(t){return Object.keys(t).concat(lre(t))}function _L(t,e){try{return e in t}catch{return!1}}function cre(t,e){return _L(t,e)&&!(Object.hasOwnProperty.call(t,e)&&Object.propertyIsEnumerable.call(t,e))}function fre(t,e,n){var r={};return n.isMergeableObject(t)&&wL(t).forEach(function(i){r[i]=Bf(t[i],n)}),wL(e).forEach(function(i){cre(t,i)||(_L(t,i)&&n.isMergeableObject(e[i])?r[i]=ure(i,n)(t[i],e[i],n):r[i]=Bf(e[i],n))}),r}function Gl(t,e,n){n=n||{},n.arrayMerge=n.arrayMerge||sre,n.isMergeableObject=n.isMergeableObject||ere,n.cloneUnlessOtherwiseSpecified=Bf;var r=Array.isArray(e),i=Array.isArray(t),o=r===i;return o?r?n.arrayMerge(t,e,n):fre(t,e,n):Bf(e,n)}Gl.all=function(e,n){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce(function(r,i){return Gl(r,i,n)},{})};var dre=Gl,gm=dre;const $a=Jr("hud",{state:()=>({hudStats:{}}),actions:{setupHudStats(t){for(const e in t)this.hudStats[e]={value:t[e].startingValue}},reset(t){this.$reset(),this.setupHudStats(t)},setStat(t,e){this.hudStats[t].value=e},addStat(t,e){this.hudStats[t].value+=e},getStat(t){return this.hudStats[t]},getStatValue(t){return this.hudStats[t].value},generateSaveData(){return{hudStats:pi(this.hudStats)}},loadSaveData(t){this.hudStats=gm(this.hudStats,t.hudStats)}}}),oo=Jr("notifications",{state:()=>({notifications:{},enabled:!0}),actions:{async addNotification(t){if(!this.enabled)return;t=es(t);const e=`${Date.now()}-${Math.random()*1e4}`;this.notifications[e]={text:t},gt().notifications.alsoPrintInDialogue&&u7(`[NOTIFICATION] ${t}`),await _o(gt().notifications.timeOnScreen*1e3),this.deleteNotification(e)},deleteNotification(t){delete this.notifications[t]},disableNotifications(){this.enabled=!1;for(const t in this.notifications)this.deleteNotification(t)},enableNotifications(){this.enabled=!0}}}),Nr=Jr("inventory",{state:()=>({items:{},interactionTags:{}}),actions:{generateSaveData(){return{items:pi(this.items),interactionTags:pi(this.interactionTags)}},loadSaveData(t){this.items={...this.items,...t.items},this.interactionTags={...t.interactionTags}},setupItems(t){Object.keys(t).forEach(e=>{this.items[e]={amount:0,id:e}})},reset(t){this.$reset(),this.setupItems(t)},hasItem(t,e){var n;return e||(e=1),((n=this.items[t])==null?void 0:n.amount)>=e},getExistingItem(t){return this.items[t]},getItemAmount(t){var e;return((e=this.getExistingItem(t))==null?void 0:e.amount)||0},add(t){const e=this.getExistingItem(t.id);e?e.amount+=t.amount:this.items[t.id]={...t},oo().addNotification(`Received item: ${is(t.id).name} x ${t.amount}`)},enableInteraction(t){t||(t="default"),this.interactionTags[t]={blockedInteraction:!1}},disableInteraction(t){t||(t="default"),this.interactionTags[t]={blockedInteraction:!0}},onScriptStart(){const t=gt().interactionTags;Object.keys(t).forEach(e=>{t[e].onlyInteractOutsideOfScripts&&this.disableInteraction(e)})},onScriptEnd(){const t=gt().interactionTags;Object.keys(t).forEach(e=>{t[e].onlyInteractOutsideOfScripts&&this.enableInteraction(e)})},isInteractionTagBlocked(t){return t||(t="default"),this.interactionTags[t]?this.interactionTags[t].blockedInteraction:!1},remove(t){const e=this.getExistingItem(t.id);e&&(e.amount-=t.amount,oo().addNotification(`Lost item: ${is(t.id).name} x ${t.amount}`),e.amount<=0&&this.deleteItem(t.id))},deleteItem(t){this.getExistingItem(t)&&(this.items[t].amount=0)},canUseItem(t){var n;const e=is(t.id);return!!(e&&e.onUse&&!this.isInteractionTagBlocked(e.tag)&&!((n=zn().currentDialog)!=null&&n.choices))}}}),di=Jr("quests",{state:()=>({quests:{}}),actions:{getQuest(t){const e=this.quests[t];if(e)return e;{const n=`Quest ${t} doesn't exist!`;throw Kt(n),new Error(n)}},getObjective(t,e){const n=this.getQuest(t);if(!n){const o=`Quest ${t} doesn't exist!`;throw Kt(o),new Error(o)}const r=n.objectives[e];if(r)return r;const i=`Objective ${e} doesn't exist in quest ${t}!`;throw Kt(i),new Error(i)},setupQuests(t){const e=t.quests;for(const n of Object.keys(e)){const r=e[n];this.quests[n]={id:n,state:"hidden",objectives:{}};for(const i of Object.keys(r.objectives)){const o=r.objectives[i];this.quests[n].objectives[i]={id:i,state:o.hidden?"hidden":"unlocked"}}}},reset(t){this.$reset(),this.setupQuests(t)},startQuest(t){const e=this.getQuest(t);e?(e.state="unlocked",oo().addNotification(`Started quest: ${Bu(t).title}`)):Kt(`Quest ${t} doesn't exist!`)},startObjective(t,e){const n=this.getObjective(t,e);n?(n.state="unlocked",oo().addNotification(`New quest objective: ${Fm(t,e).description}`)):Kt(`Objective ${e} doesn't exist in quest ${t}!`)},completeObjective(t,e){const n=this.getObjective(t,e);n?(n.state="completed",oo().addNotification(`Completed quest objective: ${Fm(t,e).description}`)):Kt(`Objective ${e} doesn't exist in quest ${t}!`)},completeQuest(t,e){const n=this.getQuest(t);n?(n.state="completed",n.ending=e,oo().addNotification(`Completed quest: ${Bu(t).title}`)):Kt(`Quest ${t} doesn't exist!`)},isQuestCompleted(t){const e=this.getQuest(t);return e?e.state==="completed":!1},isObjectiveCompleted(t,e){const n=this.getObjective(t,e);return n?n.state==="completed":!1},isQuestStarted(t){const e=this.getQuest(t);return e&&e.state==="unlocked"},isObjectiveStarted(t,e){return this.getObjective(t,e).state==="unlocked"},removeQuest(t){delete this.quests[t]},generateSaveData(){return{quests:pi(this.quests)}},loadSaveData(t){this.quests=t.quests}}});function xL(t,e,n,r){const i=t/n,o=e/r;return Math.min(i,o)}const ao=Jr("rendering",{state:()=>({screenHeight:window.innerHeight,screenWidth:window.innerWidth,layoutMode:"horizontal"}),actions:{updateScreenSize(t,e){this.screenHeight=e,this.screenWidth=t,t<gt().layout.verticalLayoutThreshold?(this.layoutMode="vertical",document.querySelector("html").style.fontSize="40px"):(this.layoutMode="horizontal",document.querySelector("html").style.fontSize="16px")}},getters:{gameScaleRatio(t){return xL(this.screenWidth,this.screenHeight,this.gameWidth,this.gameHeight)},overlayMode(t){return!!(gt().dialogPanel.overlayMode&&t.layoutMode==="horizontal")},gameWidth(){const t=gt();return this.layoutMode==="vertical"||this.overlayMode?t.layout.backgrounds.width:t.layout.backgrounds.width+Vm()},gameHeight(){const t=gt();return this.layoutMode==="vertical",t.layout.backgrounds.height},dialogWidth(){return this.layoutMode==="vertical"?this.viewportWidth:Vm()},dialogHeight(){var t;return this.layoutMode==="vertical"?this.actualGameHeight-this.gameHeight:(t=gt().dialogPanel.height)!=null?t:this.gameHeight},actualGameHeight(){let t=this.gameHeight;return this.layoutMode==="vertical"&&(t=this.screenHeight/this.gameScaleRatio),t},viewportRatio(t){if(this.layoutMode==="vertical"){const e=gt().layout.backgrounds;return t.screenWidth/e.width}return 1},viewportHeight(t){return gt().layout.backgrounds.height*this.viewportRatio},viewportWidth(t){return gt().layout.backgrounds.width*this.viewportRatio},showDialog(t){const e=Gt().inScript;return!this.overlayMode||this.layoutMode==="vertical"?!0:e}}}),ym={};function hre(t){var e;return(e=ym[t])!=null?e:{}}function jL(t,e,n){var s,u,l,f;const r=hre(t.transition),i=(u=(s=t.duration)!=null?s:r.duration)!=null?u:500,o=(f=(l=t.delay)!=null?l:r.delay)!=null?f:0;return{...t,resolve:n,duration:i,delay:o,oldScreen:e}}const Uo=Jr("screens",{state:()=>({layers:[{screen:"default"}],buttons:{}}),actions:{setScreen(t,e,n){return new Promise(r=>{var s;const i=this.layers[e||0];let o;const a=(s=i==null?void 0:i.screen)!=null?s:null;if(a===t){r();return}n&&(o=jL(n,a,r)),this.layers[e||0]={screen:t,transition:o},o||r()})},finishTransition(t){const e=this.layers[t];if(!e)Kt(`Tried to finish transition on layer ${t} but it doesn't exist`);else if(e.transition){const n=e.transition.resolve;delete e.transition,n()}},transitionScreen(t,e,n){return this.setScreen(t,n!=null?n:0,e)},emptyLayer(t,e){return new Promise(n=>{const r=this.layers[t];if(!r){Au(`Tried to empty layer ${t} but it doesn't exist`);return}if(e){const i=r.screen,o=jL(e,i,n);r.transition=o}r.screen=null,e||n()})},setButtons(t){const e=t.screens.screens,n=t.buttons.buttons;for(const r in n)this.buttons[r]={state:n[r].enabled};for(const r in e){const i=e[r];if(i.buttons)for(const[o,a]of i.buttons.entries())typeof a=="object"&&(n[a.id]=a,i.buttons[o]=a.id,this.buttons[a.id]={state:a.enabled})}},reset(t){this.$reset(),this.setButtons(t)},changeButton(t,e){if(!this.buttons[t]){Kt(`Tried to change button ${t} but it doesn't exist`);return}this.buttons[t].state=e},generateSaveData(){return{layers:pi(this.layers).filter(t=>t).map(t=>{var e;return(e=t.screen)!=null?e:null}),buttons:pi(this.buttons)}},loadSaveData(t){this.layers=t.layers.map(e=>(e!==null&&typeof e!="string"&&(e=null),{screen:e})),this.buttons=gm(this.buttons,t.buttons)}},getters:{nonEmptyLayers(t){return t.layers.filter(e=>e)}}});class Eb{constructor(){ei(this,"listeners",{})}on(e,n){return this.listeners[e]||this.addEventToMap(e),this.listeners[e].add(n),n}off(e,n){return this.listeners[e]&&this.listeners[e].delete(n),n}once(e,n){const r=(...i)=>{this.off(e,r),n(...i)};return this.on(e,r)}emit(e,...n){this.listeners[e]&&this.listeners[e].forEach(r=>r(...n))}clear(){Object.keys(this.listeners).forEach(e=>{delete this.listeners[e]})}addEventToMap(e){this.listeners[e]=new Set}}const jo=Jr("menu",{state:()=>({menus:{},activeMenu:!1}),getters:{showSkills(){return Object.entries(Co().skills).length>0},showInventory(){return Object.entries(Bm().items).length>0},showQuests(){return Object.entries(Zf().quests).length>0},menuTabsToShow(t){return t.menus.menu.tabs.map(e=>{const n=gt().menuButtons[e.id]||{};return{...e,...n}}).filter(e=>e.condition?e.condition():!0)},menu(t){return t.activeMenu?t.menus[t.activeMenu]:void 0},tab(){if(this.menu)return this.menu.tabs[this.menu.activeTab]}},actions:{setup(){},addMenu(t,e){this.menus[t]={...e,id:t}},addMenuOption(t,e){this.menus[t]||(this.menus[t]={id:t,label:t,tabs:[],activeTab:0}),this.menus[t].tabs.push(e)},setActiveTab(t){this.menu&&(this.menu.activeTab=t)},openMenu(t){this.activeMenu=t},closeMenu(){this.activeMenu=!1},toggleMenu(){this.activeMenu?this.activeMenu=!1:this.activeMenu="menu"}}});function pre(){return{baseAssetsPath:"",baseDataPath:"",configPath:"data/config.json",logging:!1,debug:!1}}class mre extends Eb{}const Gt=Jr("main",{state:()=>({ready:!1,playing:!1,errors:[],playTime:{start:0,previousPlaytime:0},saveSlot:"",flowState:"engine-splash",paused:!1,debugMode:!0,options:{baseAssetsPath:"",baseDataPath:"",configPath:"data/config.json",logging:!1,debug:!1},loading:{step:"Loading",percentage:.1,loaded:!1},alerts:[],saving:null,listener:new mre,inScript:!1}),actions:{async setup(){var n;const e=gt().scripts;Gr().setMasterVolume((n=Aa().options.volume)!=null?n:1),await wn().loadScripts(e),jo().setup();for(const[,r]of Fn.customStores())if(r.setup){const i=r.setup();hZ(i)&&await i}this.resetAllStores()},async engineLoading(){const t=WZ(gt()),e=VZ(Aa());if(Fn.plugins){const n=[];for(const r of Fn.plugins)r.loadingPromises&&n.push(Promise.all(r.loadingPromises));n.length>0&&(this.loading.step="Plugins",this.loading.percentage=.3,await Promise.all(n))}this.loading.step="Images",await t,this.loading.percentage=.7,this.loading.step="Audio",await e,Fn.callHook("onAssetsLoaded"),this.loading.percentage=.95,this.loading.step="Starting...",await this.setup(),Fn.callHook("onGameSetup"),this.loading.loaded=!0,this.listener.emit("gameLoaded")},async alert(t,e){return new Promise(n=>{this.alerts.push({title:t,text:e,resolver:n,id:ql()})})},closeAlert(t){const e=this.alerts.findIndex(n=>n.id===t);e!==-1&&(this.alerts[e].resolver(),this.alerts.splice(e,1))},startingScript(){Nr().onScriptStart(),this.inScript=!0},endingScript(){Nr().onScriptEnd(),this.inScript=!1},startMachine(){Gr().stopAll(),Eu("onPressStart"),wn().start(),this.ready=!0,this.startPlaying(),Fn.callHook("onGameStart"),this.setFlowState("playing")},setSaveSlot(t){this.saveSlot=t,eee(t)},async startGame(t){if(gt().saves.mode==="manual"){const e=ub();e&&(t=e.id)}this.setSaveSlot(t),this.startMachine(),wn().runGame()},async loadGame(t,e){if(gt().saves.mode==="manual"){const n=ub();n&&(e=n.id)}this.setSaveSlot(e),this.startMachine(),t.saveData&&(this.setLoadedData(t.saveData),Gr().reloadAudio(t.saveData.audio),wn().jumpToLabel(t.saveData.vm.lastLabel))},manualSave({saveName:t,withPrompt:e}){return new Promise(n=>{wn().hasJumped?this.saving={name:t,withPrompt:e,resolver:n}:n()})},finishManualSave(t,e){var n,r;if(!this.saving){Kt("Trying to save but there is no saving request!");return}if(!e||!t){this.saving.resolver(),this.saving=null;return}this.saveData?(t7({...this.saveData,main:{...this.saveData.main,playTime:Fu(this.playTime.start,this.playTime.previousPlaytime)},metadata:{...this.saveData.metadata,name:(r=(n=this.saving)==null?void 0:n.name)!=null?r:"Manual Save",saveDate:new Date().toISOString()}},t.slotId),this.alert("Success","Game saved!")):Kt("There was no data to save!"),this.saving.resolver(),this.saving=null},playerAnswered(t){Zne(t)},menuReturn(){this.reset(),this.setFlowState("menu"),Aa().options.defaultMusic&&Gr().playChannel("music",Aa().options.defaultMusic,0)},createError(t){this.errors.push({text:t,type:"error"})},createWarning(t){this.errors.push({text:t,type:"warning"})},clearErrors(){this.errors=[]},setFlowState(t){this.flowState=t},pause(){this.paused=!0},unpause(){this.paused=!1},setOptions(t){this.options=t},startPlaying(){this.playing=!0,this.playTime.start=Date.now()},reset(){this.ready=!1,this.errors=[],this.paused=!1,wn().reset(),Gr().reset(),this.resetAllStores(),this.playing=!1,this.ready=!0,Fn.plugins.forEach(t=>{t.reset&&t.reset()})},resetAllStores(){const t=Uo(),e=gt();io().reset(),t.reset(e),_r().reset(Co()),$a().setupHudStats(e.hudStats),Nr().reset(Bm().items),di().reset(Zf()),zn().reset(),Fn.customStores().forEach(([a,s])=>{s.reset&&s.reset()})},generateSaveData(){return{playTime:Fu(this.playTime.start,this.playTime.previousPlaytime)}},loadSaveData(t){this.playTime.previousPlaytime=t.playTime},autoSaveGame({slotId:t,name:e}){const n=t!=null?t:this.saveSlot,r=Pf(n),i=oee();r&&r.saveData?i.name=r.saveData.metadata.name:i.name=e!=null?e:"Auto Save",gt().saves.mode==="manual"&&(i.name="Auto Save");const o=Uo(),a=_r(),s=zn(),u=wn(),l=Gt(),f=$a(),c=Gr(),d=Nr(),h={version:X8,screen:o.generateSaveData(),skills:a.generateSaveData(),dialog:s.generateSaveData(),vm:u.generateSaveData(),main:l.generateSaveData(),hud:f.generateSaveData(),audio:c.generateSaveData(),inventory:d.generateSaveData(),quests:di().generateSaveData(),metadata:i,screenObjects:io().generateSaveData()};Fn.plugins.forEach(p=>{p.save&&(h[p.pluginId]=p.save())}),Fn.customStores().forEach(([p,m])=>{if(m.save){const g=m.save();g&&(h[p]=g)}}),this.saveData=h,t7(h,this.saveSlot)},setLoadedData(t){const e=Uo(),n=_r(),r=zn(),i=wn(),o=Gt(),a=$a(),s=Gr(),u=Nr();io().loadSaveData(t.screenObjects),e.loadSaveData(t.screen),n.loadSaveData(t.skills),r.loadSaveData(t.dialog),i.loadSaveData(t.vm),o.loadSaveData(t.main),a.loadSaveData(t.hud),s.loadSaveData(t.audio),u.loadSaveData(t.inventory),di().loadSaveData(t.quests),Fn.plugins.forEach(l=>{l.load&&t[l.pluginId]&&l.load(t[l.pluginId])}),Fn.customStores().forEach(([l,f])=>{f.load&&f.load(t[l])})},getAllStates(){return{main:this,screens:Uo(),skills:_r(),dialog:zn(),vm:wn(),hud:$a(),audio:Gr(),rendering:ao(),notifications:oo(),inventory:Nr(),quests:di(),sprites:io()}},overrideStates(t){const e=this.getAllStates();for(const n in t){const r=t[n];Object.assign(e[n],r)}}},getters:{isInGame(t){return t.flowState==="playing"},totalPlayTime(t){return Fu(t.playTime.start,t.playTime.previousPlaytime)},sessionPlayTime(t){return Fu(t.playTime.start,0)}}});function vre(t,e,n){console.error(`Parser error: ${t.fileName}:${t.currentLine}`,n);const r=`[Parser Error] in <span class="error-filename">${t.fileName}:${e+1}</span> - <b>${n}</b>`;Kt(r)}function Kt(t,...e){const n=Gt();console.error(t,...e),t=t.replace(/[\r\n]/g,`
215
215
  <br />`),n.createError(`\u274C ${t}`)}function Au(t,...e){const n=Gt();console.warn(t,...e),t=t.replace(/[\r\n]/g,`
216
216
  <br />`),n.createWarning(`\u26A0\uFE0F ${t}`)}var Z={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.Type=t.TypeBuilder=t.Modifier=t.Hint=t.Kind=void 0,t.Kind=Symbol.for("TypeBox.Kind"),t.Hint=Symbol.for("TypeBox.Hint"),t.Modifier=Symbol.for("TypeBox.Modifier");let e=0;class n{ReadonlyOptional(i){return{[t.Modifier]:"ReadonlyOptional",...i}}Readonly(i){return{[t.Modifier]:"Readonly",...i}}Optional(i){return{[t.Modifier]:"Optional",...i}}Any(i={}){return this.Create({...i,[t.Kind]:"Any"})}Array(i,o={}){return this.Create({...o,[t.Kind]:"Array",type:"array",items:i})}Boolean(i={}){return this.Create({...i,[t.Kind]:"Boolean",type:"boolean"})}ConstructorParameters(i,o={}){return this.Tuple([...i.parameters],{...o})}Constructor(i,o,a={}){if(i[t.Kind]==="Tuple"){const s=i.items===void 0?[]:i.items;return this.Create({...a,[t.Kind]:"Constructor",type:"constructor",parameters:s,returns:o})}else{if(globalThis.Array.isArray(i))return this.Create({...a,[t.Kind]:"Constructor",type:"constructor",parameters:i,returns:o});throw new Error("TypeBuilder.Constructor: Invalid parameters")}}Enum(i,o={}){const s=Object.keys(i).filter(u=>isNaN(u)).map(u=>i[u]).map(u=>typeof u=="string"?{[t.Kind]:"Literal",type:"string",const:u}:{[t.Kind]:"Literal",type:"number",const:u});return this.Create({...o,[t.Kind]:"Union",[t.Hint]:"Enum",anyOf:s})}Function(i,o,a={}){if(i[t.Kind]==="Tuple"){const s=i.items===void 0?[]:i.items;return this.Create({...a,[t.Kind]:"Function",type:"function",parameters:s,returns:o})}else{if(globalThis.Array.isArray(i))return this.Create({...a,[t.Kind]:"Function",type:"function",parameters:i,returns:o});throw new Error("TypeBuilder.Function: Invalid parameters")}}InstanceType(i,o={}){return{...o,...this.Clone(i.returns)}}Integer(i={}){return this.Create({...i,[t.Kind]:"Integer",type:"integer"})}Intersect(i,o={}){const a=f=>f[t.Modifier]&&f[t.Modifier]==="Optional"||f[t.Modifier]==="ReadonlyOptional",[s,u]=[new Set,new Set];for(const f of i)for(const[c,d]of Object.entries(f.properties))a(d)&&u.add(c);for(const f of i)for(const c of Object.keys(f.properties))u.has(c)||s.add(c);const l={};for(const f of i)for(const[c,d]of Object.entries(f.properties))l[c]=l[c]===void 0?d:{[t.Kind]:"Union",anyOf:[l[c],{...d}]};return s.size>0?this.Create({...o,[t.Kind]:"Object",type:"object",properties:l,required:[...s]}):this.Create({...o,[t.Kind]:"Object",type:"object",properties:l})}KeyOf(i,o={}){const a=Object.keys(i.properties).map(s=>this.Create({...o,[t.Kind]:"Literal",type:"string",const:s}));return this.Create({...o,[t.Kind]:"Union",[t.Hint]:"KeyOf",anyOf:a})}Literal(i,o={}){return this.Create({...o,[t.Kind]:"Literal",const:i,type:typeof i})}Null(i={}){return this.Create({...i,[t.Kind]:"Null",type:"null"})}Number(i={}){return this.Create({...i,[t.Kind]:"Number",type:"number"})}Object(i,o={}){const a=Object.keys(i),s=a.filter(l=>{const c=i[l][t.Modifier];return c&&(c==="Optional"||c==="ReadonlyOptional")}),u=a.filter(l=>!s.includes(l));return u.length>0?this.Create({...o,[t.Kind]:"Object",type:"object",properties:i,required:u}):this.Create({...o,[t.Kind]:"Object",type:"object",properties:i})}Omit(i,o,a={}){const s=o[t.Kind]==="Union"?o.anyOf.map(l=>l.const):o,u={...this.Clone(i),...a,[t.Hint]:"Omit"};u.required=u.required?u.required.filter(l=>!s.includes(l)):void 0;for(const l of Object.keys(u.properties))s.includes(l)&&delete u.properties[l];return this.Create(u)}Parameters(i,o={}){return t.Type.Tuple(i.parameters,{...o})}Partial(i,o={}){const a={...this.Clone(i),...o,[t.Hint]:"Partial"};delete a.required;for(const s of Object.keys(a.properties)){const u=a.properties[s];switch(u[t.Modifier]){case"ReadonlyOptional":u[t.Modifier]="ReadonlyOptional";break;case"Readonly":u[t.Modifier]="ReadonlyOptional";break;case"Optional":u[t.Modifier]="Optional";break;default:u[t.Modifier]="Optional";break}}return this.Create(a)}Pick(i,o,a={}){const s=o[t.Kind]==="Union"?o.anyOf.map(l=>l.const):o,u={...this.Clone(i),...a,[t.Hint]:"Pick"};u.required=u.required?u.required.filter(l=>s.includes(l)):void 0;for(const l of Object.keys(u.properties))s.includes(l)||delete u.properties[l];return this.Create(u)}Promise(i,o={}){return this.Create({...o,[t.Kind]:"Promise",type:"promise",item:i})}Record(i,o,a={}){if(i[t.Kind]==="Union")return this.Object(i.anyOf.reduce((u,l)=>({...u,[l.const]:o}),{}),{...a,[t.Hint]:"Record"});const s=i[t.Kind]==="Number"?"^(0|[1-9][0-9]*)$":i[t.Kind]==="String"&&i.pattern?i.pattern:"^.*$";return this.Create({...a,[t.Kind]:"Record",type:"object",patternProperties:{[s]:o},additionalProperties:!1})}Recursive(i,o={}){o.$id===void 0&&(o.$id=`type-${e++}`);const a=i({[t.Kind]:"Self",$ref:`${o.$id}`});return a.$id=o.$id,this.Create({...o,...a})}Ref(i,o={}){if(i.$id===void 0)throw Error("TypeBuilder.Ref: Referenced schema must specify an $id");return this.Create({...o,[t.Kind]:"Ref",$ref:i.$id})}RegEx(i,o={}){return this.Create({...o,[t.Kind]:"String",type:"string",pattern:i.source})}Required(i,o={}){const a={...this.Clone(i),...o,[t.Hint]:"Required"};a.required=Object.keys(a.properties);for(const s of Object.keys(a.properties)){const u=a.properties[s];switch(u[t.Modifier]){case"ReadonlyOptional":u[t.Modifier]="Readonly";break;case"Readonly":u[t.Modifier]="Readonly";break;case"Optional":delete u[t.Modifier];break;default:delete u[t.Modifier];break}}return this.Create(a)}ReturnType(i,o={}){return{...o,...this.Clone(i.returns)}}Strict(i){return JSON.parse(JSON.stringify(i))}String(i={}){return this.Create({...i,[t.Kind]:"String",type:"string"})}Tuple(i,o={}){const s=i.length,u=i.length,l=i.length>0?{...o,[t.Kind]:"Tuple",type:"array",items:i,additionalItems:!1,minItems:s,maxItems:u}:{...o,[t.Kind]:"Tuple",type:"array",minItems:s,maxItems:u};return this.Create(l)}Undefined(i={}){return this.Create({...i,[t.Kind]:"Undefined",type:"object",specialized:"Undefined"})}Union(i,o={}){return this.Create({...o,[t.Kind]:"Union",anyOf:i})}Uint8Array(i={}){return this.Create({...i,[t.Kind]:"Uint8Array",type:"object",specialized:"Uint8Array"})}Unknown(i={}){return this.Create({...i,[t.Kind]:"Unknown"})}Unsafe(i={}){return this.Create({...i,[t.Kind]:i[t.Kind]||"Unsafe"})}Void(i={}){return this.Create({...i,[t.Kind]:"Void",type:"null"})}Create(i){return i}Clone(i){const o=s=>typeof s=="object"&&s!==null&&!Array.isArray(s),a=s=>typeof s=="object"&&s!==null&&Array.isArray(s);return o(i)?Object.keys(i).reduce((s,u)=>({...s,[u]:this.Clone(i[u])}),Object.getOwnPropertySymbols(i).reduce((s,u)=>({...s,[u]:this.Clone(i[u])}),{})):a(i)?i.map(s=>this.Clone(s)):i}}t.TypeBuilder=n,t.Type=new n})(Z);const gre=Z.Type.Object({src:Z.Type.String(),path:Z.Type.Optional(Z.Type.String()),volume:Z.Type.Optional(Z.Type.Number()),rate:Z.Type.Optional(Z.Type.Number()),html5:Z.Type.Optional(Z.Type.Boolean())}),yre=Z.Type.Record(Z.Type.String(),gre),bre=Z.Type.Object({volume:Z.Type.Optional(Z.Type.Number()),defaultMusic:Z.Type.Optional(Z.Type.String()),musicFadeInTime:Z.Type.Optional(Z.Type.Number()),musicFadeOutTime:Z.Type.Optional(Z.Type.Number()),musicFadeInDelay:Z.Type.Optional(Z.Type.Number())}),kre=Z.Type.Record(Z.Type.String(),Z.Type.String()),SL=Z.Type.Object({files:yre,audioTriggers:kre,options:bre}),CL={files:{},audioTriggers:{},options:{volume:1,musicFadeInTime:.5,musicFadeInDelay:.5,musicFadeOutTime:.5}},wre=Z.Type.Object({name:Z.Type.String(),description:Z.Type.String(),icon:Z.Type.String(),onUse:Z.Type.Optional(Z.Type.Object({action:Z.Type.String(),label:Z.Type.String()})),tag:Z.Type.Optional(Z.Type.String()),category:Z.Type.Optional(Z.Type.String()),showIfEmpty:Z.Type.Optional(Z.Type.Boolean())}),$L=Z.Type.Object({id:Z.Type.String(),title:Z.Type.String()}),OL=Z.Type.Record(Z.Type.String(),wre);Z.Type.Object({categories:Z.Type.Array($L),items:OL});const EL=Z.Type.Object({categories:Z.Type.Optional(Z.Type.Array($L)),items:Z.Type.Optional(OL)}),TL={categories:[{id:"default",title:"Items"}],items:{}},_re=Z.Type.Object({description:Z.Type.String(),hidden:Z.Type.Optional(Z.Type.Boolean())}),xre=Z.Type.Object({title:Z.Type.String(),description:Z.Type.String(),objectives:Z.Type.Record(Z.Type.String(),_re),category:Z.Type.Optional(Z.Type.String())}),jre=Z.Type.Object({id:Z.Type.String(),title:Z.Type.String()}),Sre=Z.Type.Record(Z.Type.String(),xre),AL=Z.Type.Object({quests:Sre,categories:Z.Type.Array(jre)}),ML={quests:{},categories:[{id:"default",title:"Quests"}]},PL=Z.Type.Object({enabled:Z.Type.Boolean(),background:Z.Type.Optional(Z.Type.String()),text:Z.Type.Optional(Z.Type.String()),cssClass:Z.Type.Optional(Z.Type.String()),position:Z.Type.Object({left:Z.Type.Number(),top:Z.Type.Number(),width:Z.Type.Optional(Z.Type.Number()),height:Z.Type.Optional(Z.Type.Number())}),anchor:Z.Type.Optional(Z.Type.Object({x:Z.Type.Number(),y:Z.Type.Number()})),action:Z.Type.Optional(Z.Type.String()),actionType:Z.Type.Optional(Z.Type.String()),scriptClickable:Z.Type.Optional(Z.Type.Boolean()),tag:Z.Type.Optional(Z.Type.String())}),Cre=Z.Type.Record(Z.Type.String(),PL),NL=Z.Type.Object({buttons:Cre,clickableDuringScriptsByDefault:Z.Type.Optional(Z.Type.Boolean())}),IL={buttons:{},clickableDuringScriptsByDefault:!1},$re=Z.Type.Intersect([PL,Z.Type.Object({id:Z.Type.String()})]),Ore=Z.Type.Object({background:Z.Type.String(),buttons:Z.Type.Optional(Z.Type.Array(Z.Type.Union([Z.Type.String(),$re])))}),LL=Z.Type.Record(Z.Type.String(),Ore);Z.Type.Object({screens:LL});const DL=Z.Type.Object({screens:Z.Type.Optional(LL)}),RL={screens:{}},Ere=Z.Type.Object({name:Z.Type.String(),description:Z.Type.String(),startingLevel:Z.Type.Number(),hidden:Z.Type.Optional(Z.Type.Boolean()),icon:Z.Type.String()}),BL=Z.Type.Record(Z.Type.String(),Ere),zL=Z.Type.Object({xpPerLevel:Z.Type.Number(),notifyLevelUp:Z.Type.Boolean()}),FL=Z.Type.Object({rollRange:Z.Type.Number(),skillMultiplier:Z.Type.Number(),failureChance:Z.Type.Number(),difficultyText:Z.Type.Array(Z.Type.Tuple([Z.Type.Number(),Z.Type.String()]))});Z.Type.Object({skills:BL,skillChecks:FL,skillOptions:zL});const VL=Z.Type.Object({skills:Z.Type.Optional(BL),skillChecks:Z.Type.Optional(FL),skillOptions:Z.Type.Optional(zL)}),qL={skills:{},skillChecks:{rollRange:100,skillMultiplier:10,failureChance:1,difficultyText:[[0,"Very Easy"],[10,"Easy"],[30,"Medium"],[50,"Hard"],[70,"Very Hard"],[80,"Extremely Hard"],[90,"Near Impossible"]]},skillOptions:{xpPerLevel:10,notifyLevelUp:!0}},Tre=Z.Type.Object({color:Z.Type.Optional(Z.Type.String()),boxCss:Z.Type.Optional(Z.Type.Record(Z.Type.String(),Z.Type.Any())),nameCss:Z.Type.Optional(Z.Type.Record(Z.Type.String(),Z.Type.Any())),textCss:Z.Type.Optional(Z.Type.Record(Z.Type.String(),Z.Type.Any()))}),Are=Z.Type.Object({sprites:Z.Type.Optional(Z.Type.Record(Z.Type.String(),Z.Type.String())),name:Z.Type.String(),style:Z.Type.Optional(Tre)}),HL=Z.Type.Object({config:Z.Type.Object({imagesPath:Z.Type.String()}),characters:Z.Type.Record(Z.Type.String(),Are)}),UL={config:{imagesPath:""},characters:{}},Mre=Z.Type.Object({backgrounds:Z.Type.Object({width:Z.Type.Number(),height:Z.Type.Number()}),dialogBottomPadding:Z.Type.Union([Z.Type.Number(),Z.Type.String()]),minTextWidth:Z.Type.Optional(Z.Type.Number()),verticalLayoutThreshold:Z.Type.Number(),portraits:Z.Type.Object({width:Z.Type.Number(),height:Z.Type.Number(),offset:Z.Type.Optional(Z.Type.Object({landscape:Z.Type.Optional(Z.Type.Object({right:Z.Type.Number(),bottom:Z.Type.Number()})),portrait:Z.Type.Optional(Z.Type.Object({right:Z.Type.Number(),bottom:Z.Type.Number()}))}))})}),Pre={backgrounds:{width:880,height:720},dialogBottomPadding:70,verticalLayoutThreshold:600,portraits:{width:100,height:100}},WL=Z.Type.Object({options:Z.Type.Object({delay:Z.Type.Optional(Z.Type.Number()),width:Z.Type.Number(),keywordsPrefix:Z.Type.String()}),tooltips:Z.Type.Array(Z.Type.Object({keywords:Z.Type.Array(Z.Type.String()),title:Z.Type.String(),description:Z.Type.String()}))}),KL={options:{delay:0,width:350,keywordsPrefix:"@@"},tooltips:[]},Mu={baseAssetsPath:"",baseDataPath:"",gameTitle:"Narrat Game",images:{},layout:Pre,gameFlow:{},dialogPanel:{overlayMode:!0,rightOffset:100,bottomOffset:50,width:475,height:680,textSpeed:sb,animateText:!0,timeBetweenLines:100},splashScreens:{},screens:RL,buttons:IL,skills:qL,scripts:[],audio:CL,notifications:{timeOnScreen:2.5,alsoPrintInDialogue:!1},tooltips:KL,hudStats:{},items:TL,interactionTags:{default:{onlyInteractOutsideOfScripts:!0}},quests:ML,transitions:{},menuButtons:{},debugging:{showScriptFinishedMessage:!1},saves:{mode:"manual",slots:10},characters:UL},Tb=Jr("config",{state:()=>({config:Mu}),actions:{async setConfig(t){this.config=t}}}),Nre=Z.Type.Optional(Z.Type.Object({animateText:Z.Type.Optional(Z.Type.Boolean()),textSpeed:Z.Type.Optional(Z.Type.Number()),timeBetweenLines:Z.Type.Optional(Z.Type.Number()),overlayMode:Z.Type.Optional(Z.Type.Boolean()),rightOffset:Z.Type.Optional(Z.Type.Number()),bottomOffset:Z.Type.Optional(Z.Type.Number()),width:Z.Type.Optional(Z.Type.Number()),height:Z.Type.Optional(Z.Type.Number())})),Ire=Z.Type.Object({engineSplashScreen:Z.Type.Optional(Z.Type.Object({skip:Z.Type.Optional(Z.Type.Boolean()),fadeDuration:Z.Type.Optional(Z.Type.Number()),timeBeforeFadeout:Z.Type.Optional(Z.Type.Number()),overrideText:Z.Type.Optional(Z.Type.String()),overrideLogo:Z.Type.Optional(Z.Type.String())})),gameSplashScreen:Z.Type.Optional(Z.Type.Object({startButtonText:Z.Type.Optional(Z.Type.String())}))}),Lre=Z.Type.Object({timeOnScreen:Z.Type.Number(),alsoPrintInDialogue:Z.Type.Optional(Z.Type.Boolean())}),Dre=Z.Type.Object({name:Z.Type.String(),icon:Z.Type.String(),startingValue:Z.Type.Number(),maxValue:Z.Type.Optional(Z.Type.Number()),minValue:Z.Type.Optional(Z.Type.Number())}),Rre=Z.Type.Record(Z.Type.String(),Dre),Bre=Z.Type.Record(Z.Type.String(),Z.Type.Object({onlyInteractOutsideOfScripts:Z.Type.Optional(Z.Type.Boolean())})),zre=Z.Type.Object({delay:Z.Type.Optional(Z.Type.Number()),duration:Z.Type.Optional(Z.Type.Number())}),Fre=Z.Type.Record(Z.Type.String(),zre),Vre=Z.Type.Object({text:Z.Type.String()}),qre=Z.Type.Record(Z.Type.String(),Vre),Hre=Z.Type.Object({showScriptFinishedMessage:Z.Type.Optional(Z.Type.Boolean())}),Ure=Z.Type.Object({mode:Z.Type.String(),slots:Z.Type.Number()}),JL=Z.Type.Array(Z.Type.String()),Wre=[],Kre=Z.Type.Object({baseAssetsPath:Z.Type.Optional(Z.Type.String()),baseDataPath:Z.Type.Optional(Z.Type.String()),gameTitle:Z.Type.String(),images:Z.Type.Optional(Z.Type.Record(Z.Type.String(),Z.Type.String())),layout:Mre,gameFlow:Z.Type.Optional(Z.Type.Object({labelToJumpOnScriptEnd:Z.Type.Optional(Z.Type.String())})),dialogPanel:Z.Type.Optional(Nre),splashScreens:Z.Type.Optional(Ire),screens:Z.Type.Union([Z.Type.String(),DL]),buttons:Z.Type.Optional(Z.Type.Union([Z.Type.String(),NL])),skills:Z.Type.Optional(Z.Type.Union([Z.Type.String(),VL])),scripts:Z.Type.Union([Z.Type.String(),JL]),audio:Z.Type.Union([Z.Type.String(),SL]),notifications:Z.Type.Optional(Lre),tooltips:Z.Type.Optional(Z.Type.Union([Z.Type.String(),WL])),hudStats:Rre,items:Z.Type.Optional(Z.Type.Union([Z.Type.String(),EL])),interactionTags:Z.Type.Optional(Bre),quests:Z.Type.Optional(Z.Type.Union([Z.Type.String(),AL])),transitions:Z.Type.Optional(Fre),menuButtons:Z.Type.Optional(qre),debugging:Z.Type.Optional(Hre),saves:Z.Type.Optional(Ure),characters:Z.Type.Union([Z.Type.String(),HL])});var Ab={exports:{}},GL={},Wo={},Ql={},zf={},jn={},Ff={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.regexpCode=t.getEsmExportName=t.getProperty=t.safeStringify=t.stringify=t.strConcat=t.addCodeArg=t.str=t._=t.nil=t._Code=t.Name=t.IDENTIFIER=t._CodeOrName=void 0;class e{}t._CodeOrName=e,t.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class n extends e{constructor(y){if(super(),!t.IDENTIFIER.test(y))throw new Error("CodeGen: name must be a valid identifier");this.str=y}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}t.Name=n;class r extends e{constructor(y){super(),this._items=typeof y=="string"?[y]:y}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;const y=this._items[0];return y===""||y==='""'}get str(){var y;return(y=this._str)!==null&&y!==void 0?y:this._str=this._items.reduce((k,w)=>`${k}${w}`,"")}get names(){var y;return(y=this._names)!==null&&y!==void 0?y:this._names=this._items.reduce((k,w)=>(w instanceof n&&(k[w.str]=(k[w.str]||0)+1),k),{})}}t._Code=r,t.nil=new r("");function i(v,...y){const k=[v[0]];let w=0;for(;w<y.length;)s(k,y[w]),k.push(v[++w]);return new r(k)}t._=i;const o=new r("+");function a(v,...y){const k=[h(v[0])];let w=0;for(;w<y.length;)k.push(o),s(k,y[w]),k.push(o,h(v[++w]));return u(k),new r(k)}t.str=a;function s(v,y){y instanceof r?v.push(...y._items):y instanceof n?v.push(y):v.push(c(y))}t.addCodeArg=s;function u(v){let y=1;for(;y<v.length-1;){if(v[y]===o){const k=l(v[y-1],v[y+1]);if(k!==void 0){v.splice(y-1,3,k);continue}v[y++]="+"}y++}}function l(v,y){if(y==='""')return v;if(v==='""')return y;if(typeof v=="string")return y instanceof n||v[v.length-1]!=='"'?void 0:typeof y!="string"?`${v.slice(0,-1)}${y}"`:y[0]==='"'?v.slice(0,-1)+y.slice(1):void 0;if(typeof y=="string"&&y[0]==='"'&&!(v instanceof n))return`"${v}${y.slice(1)}`}function f(v,y){return y.emptyStr()?v:v.emptyStr()?y:a`${v}${y}`}t.strConcat=f;function c(v){return typeof v=="number"||typeof v=="boolean"||v===null?v:h(Array.isArray(v)?v.join(","):v)}function d(v){return new r(h(v))}t.stringify=d;function h(v){return JSON.stringify(v).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}t.safeStringify=h;function p(v){return typeof v=="string"&&t.IDENTIFIER.test(v)?new r(`.${v}`):i`[${v}]`}t.getProperty=p;function m(v){if(typeof v=="string"&&t.IDENTIFIER.test(v))return new r(`${v}`);throw new Error(`CodeGen: invalid export name: ${v}, use explicit $id name mapping`)}t.getEsmExportName=m;function g(v){return new r(v.toString())}t.regexpCode=g})(Ff);var Mb={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.ValueScope=t.ValueScopeName=t.Scope=t.varKinds=t.UsedValueState=void 0;const e=Ff;class n extends Error{constructor(l){super(`CodeGen: "code" for ${l} not defined`),this.value=l.value}}var r;(function(u){u[u.Started=0]="Started",u[u.Completed=1]="Completed"})(r=t.UsedValueState||(t.UsedValueState={})),t.varKinds={const:new e.Name("const"),let:new e.Name("let"),var:new e.Name("var")};class i{constructor({prefixes:l,parent:f}={}){this._names={},this._prefixes=l,this._parent=f}toName(l){return l instanceof e.Name?l:this.name(l)}name(l){return new e.Name(this._newName(l))}_newName(l){const f=this._names[l]||this._nameGroup(l);return`${l}${f.index++}`}_nameGroup(l){var f,c;if(((c=(f=this._parent)===null||f===void 0?void 0:f._prefixes)===null||c===void 0?void 0:c.has(l))||this._prefixes&&!this._prefixes.has(l))throw new Error(`CodeGen: prefix "${l}" is not allowed in this scope`);return this._names[l]={prefix:l,index:0}}}t.Scope=i;class o extends e.Name{constructor(l,f){super(f),this.prefix=l}setValue(l,{property:f,itemIndex:c}){this.value=l,this.scopePath=(0,e._)`.${new e.Name(f)}[${c}]`}}t.ValueScopeName=o;const a=(0,e._)`\n`;class s extends i{constructor(l){super(l),this._values={},this._scope=l.scope,this.opts={...l,_n:l.lines?a:e.nil}}get(){return this._scope}name(l){return new o(l,this._newName(l))}value(l,f){var c;if(f.ref===void 0)throw new Error("CodeGen: ref must be passed in value");const d=this.toName(l),{prefix:h}=d,p=(c=f.key)!==null&&c!==void 0?c:f.ref;let m=this._values[h];if(m){const y=m.get(p);if(y)return y}else m=this._values[h]=new Map;m.set(p,d);const g=this._scope[h]||(this._scope[h]=[]),v=g.length;return g[v]=f.ref,d.setValue(f,{property:h,itemIndex:v}),d}getValue(l,f){const c=this._values[l];if(!!c)return c.get(f)}scopeRefs(l,f=this._values){return this._reduceValues(f,c=>{if(c.scopePath===void 0)throw new Error(`CodeGen: name "${c}" has no value`);return(0,e._)`${l}${c.scopePath}`})}scopeCode(l=this._values,f,c){return this._reduceValues(l,d=>{if(d.value===void 0)throw new Error(`CodeGen: name "${d}" has no value`);return d.value.code},f,c)}_reduceValues(l,f,c={},d){let h=e.nil;for(const p in l){const m=l[p];if(!m)continue;const g=c[p]=c[p]||new Map;m.forEach(v=>{if(g.has(v))return;g.set(v,r.Started);let y=f(v);if(y){const k=this.opts.es5?t.varKinds.var:t.varKinds.const;h=(0,e._)`${h}${k} ${v} = ${y};${this.opts._n}`}else if(y=d==null?void 0:d(v))h=(0,e._)`${h}${y}${this.opts._n}`;else throw new n(v);g.set(v,r.Completed)})}return h}}t.ValueScope=s})(Mb),function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.or=t.and=t.not=t.CodeGen=t.operators=t.varKinds=t.ValueScopeName=t.ValueScope=t.Scope=t.Name=t.regexpCode=t.stringify=t.getProperty=t.nil=t.strConcat=t.str=t._=void 0;const e=Ff,n=Mb;var r=Ff;Object.defineProperty(t,"_",{enumerable:!0,get:function(){return r._}}),Object.defineProperty(t,"str",{enumerable:!0,get:function(){return r.str}}),Object.defineProperty(t,"strConcat",{enumerable:!0,get:function(){return r.strConcat}}),Object.defineProperty(t,"nil",{enumerable:!0,get:function(){return r.nil}}),Object.defineProperty(t,"getProperty",{enumerable:!0,get:function(){return r.getProperty}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return r.stringify}}),Object.defineProperty(t,"regexpCode",{enumerable:!0,get:function(){return r.regexpCode}}),Object.defineProperty(t,"Name",{enumerable:!0,get:function(){return r.Name}});var i=Mb;Object.defineProperty(t,"Scope",{enumerable:!0,get:function(){return i.Scope}}),Object.defineProperty(t,"ValueScope",{enumerable:!0,get:function(){return i.ValueScope}}),Object.defineProperty(t,"ValueScopeName",{enumerable:!0,get:function(){return i.ValueScopeName}}),Object.defineProperty(t,"varKinds",{enumerable:!0,get:function(){return i.varKinds}}),t.operators={GT:new e._Code(">"),GTE:new e._Code(">="),LT:new e._Code("<"),LTE:new e._Code("<="),EQ:new e._Code("==="),NEQ:new e._Code("!=="),NOT:new e._Code("!"),OR:new e._Code("||"),AND:new e._Code("&&"),ADD:new e._Code("+")};class o{optimizeNodes(){return this}optimizeNames(x,j){return this}}class a extends o{constructor(x,j,T){super(),this.varKind=x,this.name=j,this.rhs=T}render({es5:x,_n:j}){const T=x?n.varKinds.var:this.varKind,q=this.rhs===void 0?"":` = ${this.rhs}`;return`${T} ${this.name}${q};`+j}optimizeNames(x,j){if(!!x[this.name.str])return this.rhs&&(this.rhs=M(this.rhs,x,j)),this}get names(){return this.rhs instanceof e._CodeOrName?this.rhs.names:{}}}class s extends o{constructor(x,j,T){super(),this.lhs=x,this.rhs=j,this.sideEffects=T}render({_n:x}){return`${this.lhs} = ${this.rhs};`+x}optimizeNames(x,j){if(!(this.lhs instanceof e.Name&&!x[this.lhs.str]&&!this.sideEffects))return this.rhs=M(this.rhs,x,j),this}get names(){const x=this.lhs instanceof e.Name?{}:{...this.lhs.names};return P(x,this.rhs)}}class u extends s{constructor(x,j,T,q){super(x,T,q),this.op=j}render({_n:x}){return`${this.lhs} ${this.op}= ${this.rhs};`+x}}class l extends o{constructor(x){super(),this.label=x,this.names={}}render({_n:x}){return`${this.label}:`+x}}class f extends o{constructor(x){super(),this.label=x,this.names={}}render({_n:x}){return`break${this.label?` ${this.label}`:""};`+x}}class c extends o{constructor(x){super(),this.error=x}render({_n:x}){return`throw ${this.error};`+x}get names(){return this.error.names}}class d extends o{constructor(x){super(),this.code=x}render({_n:x}){return`${this.code};`+x}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(x,j){return this.code=M(this.code,x,j),this}get names(){return this.code instanceof e._CodeOrName?this.code.names:{}}}class h extends o{constructor(x=[]){super(),this.nodes=x}render(x){return this.nodes.reduce((j,T)=>j+T.render(x),"")}optimizeNodes(){const{nodes:x}=this;let j=x.length;for(;j--;){const T=x[j].optimizeNodes();Array.isArray(T)?x.splice(j,1,...T):T?x[j]=T:x.splice(j,1)}return x.length>0?this:void 0}optimizeNames(x,j){const{nodes:T}=this;let q=T.length;for(;q--;){const Q=T[q];Q.optimizeNames(x,j)||(H(x,Q.names),T.splice(q,1))}return T.length>0?this:void 0}get names(){return this.nodes.reduce((x,j)=>z(x,j.names),{})}}class p extends h{render(x){return"{"+x._n+super.render(x)+"}"+x._n}}class m extends h{}class g extends p{}g.kind="else";class v extends p{constructor(x,j){super(j),this.condition=x}render(x){let j=`if(${this.condition})`+super.render(x);return this.else&&(j+="else "+this.else.render(x)),j}optimizeNodes(){super.optimizeNodes();const x=this.condition;if(x===!0)return this.nodes;let j=this.else;if(j){const T=j.optimizeNodes();j=this.else=Array.isArray(T)?new g(T):T}if(j)return x===!1?j instanceof v?j:j.nodes:this.nodes.length?this:new v(G(x),j instanceof v?[j]:j.nodes);if(!(x===!1||!this.nodes.length))return this}optimizeNames(x,j){var T;if(this.else=(T=this.else)===null||T===void 0?void 0:T.optimizeNames(x,j),!!(super.optimizeNames(x,j)||this.else))return this.condition=M(this.condition,x,j),this}get names(){const x=super.names;return P(x,this.condition),this.else&&z(x,this.else.names),x}}v.kind="if";class y extends p{}y.kind="for";class k extends y{constructor(x){super(),this.iteration=x}render(x){return`for(${this.iteration})`+super.render(x)}optimizeNames(x,j){if(!!super.optimizeNames(x,j))return this.iteration=M(this.iteration,x,j),this}get names(){return z(super.names,this.iteration.names)}}class w extends y{constructor(x,j,T,q){super(),this.varKind=x,this.name=j,this.from=T,this.to=q}render(x){const j=x.es5?n.varKinds.var:this.varKind,{name:T,from:q,to:Q}=this;return`for(${j} ${T}=${q}; ${T}<${Q}; ${T}++)`+super.render(x)}get names(){const x=P(super.names,this.from);return P(x,this.to)}}class _ extends y{constructor(x,j,T,q){super(),this.loop=x,this.varKind=j,this.name=T,this.iterable=q}render(x){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(x)}optimizeNames(x,j){if(!!super.optimizeNames(x,j))return this.iterable=M(this.iterable,x,j),this}get names(){return z(super.names,this.iterable.names)}}class S extends p{constructor(x,j,T){super(),this.name=x,this.args=j,this.async=T}render(x){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(x)}}S.kind="func";class C extends h{render(x){return"return "+super.render(x)}}C.kind="return";class A extends p{render(x){let j="try"+super.render(x);return this.catch&&(j+=this.catch.render(x)),this.finally&&(j+=this.finally.render(x)),j}optimizeNodes(){var x,j;return super.optimizeNodes(),(x=this.catch)===null||x===void 0||x.optimizeNodes(),(j=this.finally)===null||j===void 0||j.optimizeNodes(),this}optimizeNames(x,j){var T,q;return super.optimizeNames(x,j),(T=this.catch)===null||T===void 0||T.optimizeNames(x,j),(q=this.finally)===null||q===void 0||q.optimizeNames(x,j),this}get names(){const x=super.names;return this.catch&&z(x,this.catch.names),this.finally&&z(x,this.finally.names),x}}class $ extends p{constructor(x){super(),this.error=x}render(x){return`catch(${this.error})`+super.render(x)}}$.kind="catch";class E extends p{render(x){return"finally"+super.render(x)}}E.kind="finally";class O{constructor(x,j={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...j,_n:j.lines?`
217
217
  `:""},this._extScope=x,this._scope=new n.Scope({parent:x}),this._nodes=[new m]}toString(){return this._root.render(this.opts)}name(x){return this._scope.name(x)}scopeName(x){return this._extScope.name(x)}scopeValue(x,j){const T=this._extScope.value(x,j);return(this._values[T.prefix]||(this._values[T.prefix]=new Set)).add(T),T}getScopeValue(x,j){return this._extScope.getValue(x,j)}scopeRefs(x){return this._extScope.scopeRefs(x,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(x,j,T,q){const Q=this._scope.toName(j);return T!==void 0&&q&&(this._constants[Q.str]=T),this._leafNode(new a(x,Q,T)),Q}const(x,j,T){return this._def(n.varKinds.const,x,j,T)}let(x,j,T){return this._def(n.varKinds.let,x,j,T)}var(x,j,T){return this._def(n.varKinds.var,x,j,T)}assign(x,j,T){return this._leafNode(new s(x,j,T))}add(x,j){return this._leafNode(new u(x,t.operators.ADD,j))}code(x){return typeof x=="function"?x():x!==e.nil&&this._leafNode(new d(x)),this}object(...x){const j=["{"];for(const[T,q]of x)j.length>1&&j.push(","),j.push(T),(T!==q||this.opts.es5)&&(j.push(":"),(0,e.addCodeArg)(j,q));return j.push("}"),new e._Code(j)}if(x,j,T){if(this._blockNode(new v(x)),j&&T)this.code(j).else().code(T).endIf();else if(j)this.code(j).endIf();else if(T)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(x){return this._elseNode(new v(x))}else(){return this._elseNode(new g)}endIf(){return this._endBlockNode(v,g)}_for(x,j){return this._blockNode(x),j&&this.code(j).endFor(),this}for(x,j){return this._for(new k(x),j)}forRange(x,j,T,q,Q=this.opts.es5?n.varKinds.var:n.varKinds.let){const me=this._scope.toName(x);return this._for(new w(Q,me,j,T),()=>q(me))}forOf(x,j,T,q=n.varKinds.const){const Q=this._scope.toName(x);if(this.opts.es5){const me=j instanceof e.Name?j:this.var("_arr",j);return this.forRange("_i",0,(0,e._)`${me}.length`,ve=>{this.var(Q,(0,e._)`${me}[${ve}]`),T(Q)})}return this._for(new _("of",q,Q,j),()=>T(Q))}forIn(x,j,T,q=this.opts.es5?n.varKinds.var:n.varKinds.const){if(this.opts.ownProperties)return this.forOf(x,(0,e._)`Object.keys(${j})`,T);const Q=this._scope.toName(x);return this._for(new _("in",q,Q,j),()=>T(Q))}endFor(){return this._endBlockNode(y)}label(x){return this._leafNode(new l(x))}break(x){return this._leafNode(new f(x))}return(x){const j=new C;if(this._blockNode(j),this.code(x),j.nodes.length!==1)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(C)}try(x,j,T){if(!j&&!T)throw new Error('CodeGen: "try" without "catch" and "finally"');const q=new A;if(this._blockNode(q),this.code(x),j){const Q=this.name("e");this._currNode=q.catch=new $(Q),j(Q)}return T&&(this._currNode=q.finally=new E,this.code(T)),this._endBlockNode($,E)}throw(x){return this._leafNode(new c(x))}block(x,j){return this._blockStarts.push(this._nodes.length),x&&this.code(x).endBlock(j),this}endBlock(x){const j=this._blockStarts.pop();if(j===void 0)throw new Error("CodeGen: not in self-balancing block");const T=this._nodes.length-j;if(T<0||x!==void 0&&T!==x)throw new Error(`CodeGen: wrong number of nodes: ${T} vs ${x} expected`);return this._nodes.length=j,this}func(x,j=e.nil,T,q){return this._blockNode(new S(x,j,T)),q&&this.code(q).endFunc(),this}endFunc(){return this._endBlockNode(S)}optimize(x=1){for(;x-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(x){return this._currNode.nodes.push(x),this}_blockNode(x){this._currNode.nodes.push(x),this._nodes.push(x)}_endBlockNode(x,j){const T=this._currNode;if(T instanceof x||j&&T instanceof j)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${j?`${x.kind}/${j.kind}`:x.kind}"`)}_elseNode(x){const j=this._currNode;if(!(j instanceof v))throw new Error('CodeGen: "else" without "if"');return this._currNode=j.else=x,this}get _root(){return this._nodes[0]}get _currNode(){const x=this._nodes;return x[x.length-1]}set _currNode(x){const j=this._nodes;j[j.length-1]=x}}t.CodeGen=O;function z(N,x){for(const j in x)N[j]=(N[j]||0)+(x[j]||0);return N}function P(N,x){return x instanceof e._CodeOrName?z(N,x.names):N}function M(N,x,j){if(N instanceof e.Name)return T(N);if(!q(N))return N;return new e._Code(N._items.reduce((Q,me)=>(me instanceof e.Name&&(me=T(me)),me instanceof e._Code?Q.push(...me._items):Q.push(me),Q),[]));function T(Q){const me=j[Q.str];return me===void 0||x[Q.str]!==1?Q:(delete x[Q.str],me)}function q(Q){return Q instanceof e._Code&&Q._items.some(me=>me instanceof e.Name&&x[me.str]===1&&j[me.str]!==void 0)}}function H(N,x){for(const j in x)N[j]=(N[j]||0)-(x[j]||0)}function G(N){return typeof N=="boolean"||typeof N=="number"||N===null?!N:(0,e._)`!${B(N)}`}t.not=G;const V=L(t.operators.AND);function J(...N){return N.reduce(V)}t.and=J;const F=L(t.operators.OR);function I(...N){return N.reduce(F)}t.or=I;function L(N){return(x,j)=>x===e.nil?j:j===e.nil?x:(0,e._)`${B(x)} ${N} ${B(j)}`}function B(N){return N instanceof e.Name?N:(0,e._)`(${N})`}}(jn);var In={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.checkStrictMode=t.getErrorPath=t.Type=t.useFunc=t.setEvaluated=t.evaluatedPropsToName=t.mergeEvaluated=t.eachItem=t.unescapeJsonPointer=t.escapeJsonPointer=t.escapeFragment=t.unescapeFragment=t.schemaRefOrVal=t.schemaHasRulesButRef=t.schemaHasRules=t.checkUnknownRules=t.alwaysValidSchema=t.toHash=void 0;const e=jn,n=Ff;function r(S){const C={};for(const A of S)C[A]=!0;return C}t.toHash=r;function i(S,C){return typeof C=="boolean"?C:Object.keys(C).length===0?!0:(o(S,C),!a(C,S.self.RULES.all))}t.alwaysValidSchema=i;function o(S,C=S.schema){const{opts:A,self:$}=S;if(!A.strictSchema||typeof C=="boolean")return;const E=$.RULES.keywords;for(const O in C)E[O]||_(S,`unknown keyword: "${O}"`)}t.checkUnknownRules=o;function a(S,C){if(typeof S=="boolean")return!S;for(const A in S)if(C[A])return!0;return!1}t.schemaHasRules=a;function s(S,C){if(typeof S=="boolean")return!S;for(const A in S)if(A!=="$ref"&&C.all[A])return!0;return!1}t.schemaHasRulesButRef=s;function u({topSchemaRef:S,schemaPath:C},A,$,E){if(!E){if(typeof A=="number"||typeof A=="boolean")return A;if(typeof A=="string")return(0,e._)`${A}`}return(0,e._)`${S}${C}${(0,e.getProperty)($)}`}t.schemaRefOrVal=u;function l(S){return d(decodeURIComponent(S))}t.unescapeFragment=l;function f(S){return encodeURIComponent(c(S))}t.escapeFragment=f;function c(S){return typeof S=="number"?`${S}`:S.replace(/~/g,"~0").replace(/\//g,"~1")}t.escapeJsonPointer=c;function d(S){return S.replace(/~1/g,"/").replace(/~0/g,"~")}t.unescapeJsonPointer=d;function h(S,C){if(Array.isArray(S))for(const A of S)C(A);else C(S)}t.eachItem=h;function p({mergeNames:S,mergeToName:C,mergeValues:A,resultToName:$}){return(E,O,z,P)=>{const M=z===void 0?O:z instanceof e.Name?(O instanceof e.Name?S(E,O,z):C(E,O,z),z):O instanceof e.Name?(C(E,z,O),O):A(O,z);return P===e.Name&&!(M instanceof e.Name)?$(E,M):M}}t.mergeEvaluated={props:p({mergeNames:(S,C,A)=>S.if((0,e._)`${A} !== true && ${C} !== undefined`,()=>{S.if((0,e._)`${C} === true`,()=>S.assign(A,!0),()=>S.assign(A,(0,e._)`${A} || {}`).code((0,e._)`Object.assign(${A}, ${C})`))}),mergeToName:(S,C,A)=>S.if((0,e._)`${A} !== true`,()=>{C===!0?S.assign(A,!0):(S.assign(A,(0,e._)`${A} || {}`),g(S,A,C))}),mergeValues:(S,C)=>S===!0?!0:{...S,...C},resultToName:m}),items:p({mergeNames:(S,C,A)=>S.if((0,e._)`${A} !== true && ${C} !== undefined`,()=>S.assign(A,(0,e._)`${C} === true ? true : ${A} > ${C} ? ${A} : ${C}`)),mergeToName:(S,C,A)=>S.if((0,e._)`${A} !== true`,()=>S.assign(A,C===!0?!0:(0,e._)`${A} > ${C} ? ${A} : ${C}`)),mergeValues:(S,C)=>S===!0?!0:Math.max(S,C),resultToName:(S,C)=>S.var("items",C)})};function m(S,C){if(C===!0)return S.var("props",!0);const A=S.var("props",(0,e._)`{}`);return C!==void 0&&g(S,A,C),A}t.evaluatedPropsToName=m;function g(S,C,A){Object.keys(A).forEach($=>S.assign((0,e._)`${C}${(0,e.getProperty)($)}`,!0))}t.setEvaluated=g;const v={};function y(S,C){return S.scopeValue("func",{ref:C,code:v[C.code]||(v[C.code]=new n._Code(C.code))})}t.useFunc=y;var k;(function(S){S[S.Num=0]="Num",S[S.Str=1]="Str"})(k=t.Type||(t.Type={}));function w(S,C,A){if(S instanceof e.Name){const $=C===k.Num;return A?$?(0,e._)`"[" + ${S} + "]"`:(0,e._)`"['" + ${S} + "']"`:$?(0,e._)`"/" + ${S}`:(0,e._)`"/" + ${S}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return A?(0,e.getProperty)(S).toString():"/"+c(S)}t.getErrorPath=w;function _(S,C,A=S.opts.strictSchema){if(!!A){if(C=`strict mode: ${C}`,A===!0)throw new Error(C);S.self.logger.warn(C)}}t.checkStrictMode=_})(In);var Oa={};Object.defineProperty(Oa,"__esModule",{value:!0});const hi=jn,Jre={data:new hi.Name("data"),valCxt:new hi.Name("valCxt"),instancePath:new hi.Name("instancePath"),parentData:new hi.Name("parentData"),parentDataProperty:new hi.Name("parentDataProperty"),rootData:new hi.Name("rootData"),dynamicAnchors:new hi.Name("dynamicAnchors"),vErrors:new hi.Name("vErrors"),errors:new hi.Name("errors"),this:new hi.Name("this"),self:new hi.Name("self"),scope:new hi.Name("scope"),json:new hi.Name("json"),jsonPos:new hi.Name("jsonPos"),jsonLen:new hi.Name("jsonLen"),jsonPart:new hi.Name("jsonPart")};Oa.default=Jre,function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.extendErrors=t.resetErrorsCount=t.reportExtraError=t.reportError=t.keyword$DataError=t.keywordError=void 0;const e=jn,n=In,r=Oa;t.keywordError={message:({keyword:g})=>(0,e.str)`must pass "${g}" keyword validation`},t.keyword$DataError={message:({keyword:g,schemaType:v})=>v?(0,e.str)`"${g}" keyword must be ${v} ($data)`:(0,e.str)`"${g}" keyword is invalid ($data)`};function i(g,v=t.keywordError,y,k){const{it:w}=g,{gen:_,compositeRule:S,allErrors:C}=w,A=c(g,v,y);(k!=null?k:S||C)?u(_,A):l(w,(0,e._)`[${A}]`)}t.reportError=i;function o(g,v=t.keywordError,y){const{it:k}=g,{gen:w,compositeRule:_,allErrors:S}=k,C=c(g,v,y);u(w,C),_||S||l(k,r.default.vErrors)}t.reportExtraError=o;function a(g,v){g.assign(r.default.errors,v),g.if((0,e._)`${r.default.vErrors} !== null`,()=>g.if(v,()=>g.assign((0,e._)`${r.default.vErrors}.length`,v),()=>g.assign(r.default.vErrors,null)))}t.resetErrorsCount=a;function s({gen:g,keyword:v,schemaValue:y,data:k,errsCount:w,it:_}){if(w===void 0)throw new Error("ajv implementation error");const S=g.name("err");g.forRange("i",w,r.default.errors,C=>{g.const(S,(0,e._)`${r.default.vErrors}[${C}]`),g.if((0,e._)`${S}.instancePath === undefined`,()=>g.assign((0,e._)`${S}.instancePath`,(0,e.strConcat)(r.default.instancePath,_.errorPath))),g.assign((0,e._)`${S}.schemaPath`,(0,e.str)`${_.errSchemaPath}/${v}`),_.opts.verbose&&(g.assign((0,e._)`${S}.schema`,y),g.assign((0,e._)`${S}.data`,k))})}t.extendErrors=s;function u(g,v){const y=g.const("err",v);g.if((0,e._)`${r.default.vErrors} === null`,()=>g.assign(r.default.vErrors,(0,e._)`[${y}]`),(0,e._)`${r.default.vErrors}.push(${y})`),g.code((0,e._)`${r.default.errors}++`)}function l(g,v){const{gen:y,validateName:k,schemaEnv:w}=g;w.$async?y.throw((0,e._)`new ${g.ValidationError}(${v})`):(y.assign((0,e._)`${k}.errors`,v),y.return(!1))}const f={keyword:new e.Name("keyword"),schemaPath:new e.Name("schemaPath"),params:new e.Name("params"),propertyName:new e.Name("propertyName"),message:new e.Name("message"),schema:new e.Name("schema"),parentSchema:new e.Name("parentSchema")};function c(g,v,y){const{createErrors:k}=g.it;return k===!1?(0,e._)`{}`:d(g,v,y)}function d(g,v,y={}){const{gen:k,it:w}=g,_=[h(w,y),p(g,y)];return m(g,v,_),k.object(..._)}function h({errorPath:g},{instancePath:v}){const y=v?(0,e.str)`${g}${(0,n.getErrorPath)(v,n.Type.Str)}`:g;return[r.default.instancePath,(0,e.strConcat)(r.default.instancePath,y)]}function p({keyword:g,it:{errSchemaPath:v}},{schemaPath:y,parentSchema:k}){let w=k?v:(0,e.str)`${v}/${g}`;return y&&(w=(0,e.str)`${w}${(0,n.getErrorPath)(y,n.Type.Str)}`),[f.schemaPath,w]}function m(g,{params:v,message:y},k){const{keyword:w,data:_,schemaValue:S,it:C}=g,{opts:A,propertyName:$,topSchemaRef:E,schemaPath:O}=C;k.push([f.keyword,w],[f.params,typeof v=="function"?v(g):v||(0,e._)`{}`]),A.messages&&k.push([f.message,typeof y=="function"?y(g):y]),A.verbose&&k.push([f.schema,S],[f.parentSchema,(0,e._)`${E}${O}`],[r.default.data,_]),$&&k.push([f.propertyName,$])}}(zf),Object.defineProperty(Ql,"__esModule",{value:!0}),Ql.boolOrEmptySchema=Ql.topBoolOrEmptySchema=void 0;const Gre=zf,Qre=jn,Yre=Oa,Xre={message:"boolean schema is false"};function Zre(t){const{gen:e,schema:n,validateName:r}=t;n===!1?QL(t,!1):typeof n=="object"&&n.$async===!0?e.return(Yre.default.data):(e.assign((0,Qre._)`${r}.errors`,null),e.return(!0))}Ql.topBoolOrEmptySchema=Zre;function eie(t,e){const{gen:n,schema:r}=t;r===!1?(n.var(e,!1),QL(t)):n.var(e,!0)}Ql.boolOrEmptySchema=eie;function QL(t,e){const{gen:n,data:r}=t,i={gen:n,keyword:"false schema",data:r,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:t};(0,Gre.reportError)(i,Xre,void 0,e)}var Vf={},Pu={};Object.defineProperty(Pu,"__esModule",{value:!0}),Pu.getRules=Pu.isJSONType=void 0;const tie=["string","number","integer","boolean","null","object","array"],nie=new Set(tie);function rie(t){return typeof t=="string"&&nie.has(t)}Pu.isJSONType=rie;function iie(){const t={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...t,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},t.number,t.string,t.array,t.object],post:{rules:[]},all:{},keywords:{}}}Pu.getRules=iie;var ns={};Object.defineProperty(ns,"__esModule",{value:!0}),ns.shouldUseRule=ns.shouldUseGroup=ns.schemaHasRulesForType=void 0;function oie({schema:t,self:e},n){const r=e.RULES.types[n];return r&&r!==!0&&YL(t,r)}ns.schemaHasRulesForType=oie;function YL(t,e){return e.rules.some(n=>XL(t,n))}ns.shouldUseGroup=YL;function XL(t,e){var n;return t[e.keyword]!==void 0||((n=e.definition.implements)===null||n===void 0?void 0:n.some(r=>t[r]!==void 0))}ns.shouldUseRule=XL,function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.reportTypeError=t.checkDataTypes=t.checkDataType=t.coerceAndCheckDataType=t.getJSONTypes=t.getSchemaTypes=t.DataType=void 0;const e=Pu,n=ns,r=zf,i=jn,o=In;var a;(function(k){k[k.Correct=0]="Correct",k[k.Wrong=1]="Wrong"})(a=t.DataType||(t.DataType={}));function s(k){const w=u(k.type);if(w.includes("null")){if(k.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!w.length&&k.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');k.nullable===!0&&w.push("null")}return w}t.getSchemaTypes=s;function u(k){const w=Array.isArray(k)?k:k?[k]:[];if(w.every(e.isJSONType))return w;throw new Error("type must be JSONType or JSONType[]: "+w.join(","))}t.getJSONTypes=u;function l(k,w){const{gen:_,data:S,opts:C}=k,A=c(w,C.coerceTypes),$=w.length>0&&!(A.length===0&&w.length===1&&(0,n.schemaHasRulesForType)(k,w[0]));if($){const E=m(w,S,C.strictNumbers,a.Wrong);_.if(E,()=>{A.length?d(k,w,A):v(k)})}return $}t.coerceAndCheckDataType=l;const f=new Set(["string","number","integer","boolean","null"]);function c(k,w){return w?k.filter(_=>f.has(_)||w==="array"&&_==="array"):[]}function d(k,w,_){const{gen:S,data:C,opts:A}=k,$=S.let("dataType",(0,i._)`typeof ${C}`),E=S.let("coerced",(0,i._)`undefined`);A.coerceTypes==="array"&&S.if((0,i._)`${$} == 'object' && Array.isArray(${C}) && ${C}.length == 1`,()=>S.assign(C,(0,i._)`${C}[0]`).assign($,(0,i._)`typeof ${C}`).if(m(w,C,A.strictNumbers),()=>S.assign(E,C))),S.if((0,i._)`${E} !== undefined`);for(const z of _)(f.has(z)||z==="array"&&A.coerceTypes==="array")&&O(z);S.else(),v(k),S.endIf(),S.if((0,i._)`${E} !== undefined`,()=>{S.assign(C,E),h(k,E)});function O(z){switch(z){case"string":S.elseIf((0,i._)`${$} == "number" || ${$} == "boolean"`).assign(E,(0,i._)`"" + ${C}`).elseIf((0,i._)`${C} === null`).assign(E,(0,i._)`""`);return;case"number":S.elseIf((0,i._)`${$} == "boolean" || ${C} === null
@@ -220,7 +220,7 @@ This will fail in production.`);s=Z1,s._s.has(r)||(o?ib(r,e,i,s):W8(r,i,s),a._pi
220
220
  || ${$} === "boolean" || ${C} === null`).assign(E,(0,i._)`[${C}]`)}}}function h({gen:k,parentData:w,parentDataProperty:_},S){k.if((0,i._)`${w} !== undefined`,()=>k.assign((0,i._)`${w}[${_}]`,S))}function p(k,w,_,S=a.Correct){const C=S===a.Correct?i.operators.EQ:i.operators.NEQ;let A;switch(k){case"null":return(0,i._)`${w} ${C} null`;case"array":A=(0,i._)`Array.isArray(${w})`;break;case"object":A=(0,i._)`${w} && typeof ${w} == "object" && !Array.isArray(${w})`;break;case"integer":A=$((0,i._)`!(${w} % 1) && !isNaN(${w})`);break;case"number":A=$();break;default:return(0,i._)`typeof ${w} ${C} ${k}`}return S===a.Correct?A:(0,i.not)(A);function $(E=i.nil){return(0,i.and)((0,i._)`typeof ${w} == "number"`,E,_?(0,i._)`isFinite(${w})`:i.nil)}}t.checkDataType=p;function m(k,w,_,S){if(k.length===1)return p(k[0],w,_,S);let C;const A=(0,o.toHash)(k);if(A.array&&A.object){const $=(0,i._)`typeof ${w} != "object"`;C=A.null?$:(0,i._)`!${w} || ${$}`,delete A.null,delete A.array,delete A.object}else C=i.nil;A.number&&delete A.integer;for(const $ in A)C=(0,i.and)(C,p($,w,_,S));return C}t.checkDataTypes=m;const g={message:({schema:k})=>`must be ${k}`,params:({schema:k,schemaValue:w})=>typeof k=="string"?(0,i._)`{type: ${k}}`:(0,i._)`{type: ${w}}`};function v(k){const w=y(k);(0,r.reportError)(w,g)}t.reportTypeError=v;function y(k){const{gen:w,data:_,schema:S}=k,C=(0,o.schemaRefOrVal)(k,S,"type");return{gen:w,keyword:"type",data:_,schema:S.type,schemaCode:C,schemaValue:C,parentSchema:S,params:{},it:k}}}(Vf);var bm={};Object.defineProperty(bm,"__esModule",{value:!0}),bm.assignDefaults=void 0;const Yl=jn,aie=In;function sie(t,e){const{properties:n,items:r}=t.schema;if(e==="object"&&n)for(const i in n)ZL(t,i,n[i].default);else e==="array"&&Array.isArray(r)&&r.forEach((i,o)=>ZL(t,o,i.default))}bm.assignDefaults=sie;function ZL(t,e,n){const{gen:r,compositeRule:i,data:o,opts:a}=t;if(n===void 0)return;const s=(0,Yl._)`${o}${(0,Yl.getProperty)(e)}`;if(i){(0,aie.checkStrictMode)(t,`default is ignored for: ${s}`);return}let u=(0,Yl._)`${s} === undefined`;a.useDefaults==="empty"&&(u=(0,Yl._)`${u} || ${s} === null || ${s} === ""`),r.if(u,(0,Yl._)`${s} = ${(0,Yl.stringify)(n)}`)}var Ea={},Sn={};Object.defineProperty(Sn,"__esModule",{value:!0}),Sn.validateUnion=Sn.validateArray=Sn.usePattern=Sn.callValidateCode=Sn.schemaProperties=Sn.allSchemaProperties=Sn.noPropertyInData=Sn.propertyInData=Sn.isOwnProperty=Sn.hasPropFunc=Sn.reportMissingProp=Sn.checkMissingProp=Sn.checkReportMissingProp=void 0;const lr=jn,Pb=In,zs=Oa,uie=In;function lie(t,e){const{gen:n,data:r,it:i}=t;n.if(Ib(n,r,e,i.opts.ownProperties),()=>{t.setParams({missingProperty:(0,lr._)`${e}`},!0),t.error()})}Sn.checkReportMissingProp=lie;function cie({gen:t,data:e,it:{opts:n}},r,i){return(0,lr.or)(...r.map(o=>(0,lr.and)(Ib(t,e,o,n.ownProperties),(0,lr._)`${i} = ${o}`)))}Sn.checkMissingProp=cie;function fie(t,e){t.setParams({missingProperty:e},!0),t.error()}Sn.reportMissingProp=fie;function eD(t){return t.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:(0,lr._)`Object.prototype.hasOwnProperty`})}Sn.hasPropFunc=eD;function Nb(t,e,n){return(0,lr._)`${eD(t)}.call(${e}, ${n})`}Sn.isOwnProperty=Nb;function die(t,e,n,r){const i=(0,lr._)`${e}${(0,lr.getProperty)(n)} !== undefined`;return r?(0,lr._)`${i} && ${Nb(t,e,n)}`:i}Sn.propertyInData=die;function Ib(t,e,n,r){const i=(0,lr._)`${e}${(0,lr.getProperty)(n)} === undefined`;return r?(0,lr.or)(i,(0,lr.not)(Nb(t,e,n))):i}Sn.noPropertyInData=Ib;function tD(t){return t?Object.keys(t).filter(e=>e!=="__proto__"):[]}Sn.allSchemaProperties=tD;function hie(t,e){return tD(e).filter(n=>!(0,Pb.alwaysValidSchema)(t,e[n]))}Sn.schemaProperties=hie;function pie({schemaCode:t,data:e,it:{gen:n,topSchemaRef:r,schemaPath:i,errorPath:o},it:a},s,u,l){const f=l?(0,lr._)`${t}, ${e}, ${r}${i}`:e,c=[[zs.default.instancePath,(0,lr.strConcat)(zs.default.instancePath,o)],[zs.default.parentData,a.parentData],[zs.default.parentDataProperty,a.parentDataProperty],[zs.default.rootData,zs.default.rootData]];a.opts.dynamicRef&&c.push([zs.default.dynamicAnchors,zs.default.dynamicAnchors]);const d=(0,lr._)`${f}, ${n.object(...c)}`;return u!==lr.nil?(0,lr._)`${s}.call(${u}, ${d})`:(0,lr._)`${s}(${d})`}Sn.callValidateCode=pie;const mie=(0,lr._)`new RegExp`;function vie({gen:t,it:{opts:e}},n){const r=e.unicodeRegExp?"u":"",{regExp:i}=e.code,o=i(n,r);return t.scopeValue("pattern",{key:o.toString(),ref:o,code:(0,lr._)`${i.code==="new RegExp"?mie:(0,uie.useFunc)(t,i)}(${n}, ${r})`})}Sn.usePattern=vie;function gie(t){const{gen:e,data:n,keyword:r,it:i}=t,o=e.name("valid");if(i.allErrors){const s=e.let("valid",!0);return a(()=>e.assign(s,!1)),s}return e.var(o,!0),a(()=>e.break()),o;function a(s){const u=e.const("len",(0,lr._)`${n}.length`);e.forRange("i",0,u,l=>{t.subschema({keyword:r,dataProp:l,dataPropType:Pb.Type.Num},o),e.if((0,lr.not)(o),s)})}}Sn.validateArray=gie;function yie(t){const{gen:e,schema:n,keyword:r,it:i}=t;if(!Array.isArray(n))throw new Error("ajv implementation error");if(n.some(u=>(0,Pb.alwaysValidSchema)(i,u))&&!i.opts.unevaluated)return;const a=e.let("valid",!1),s=e.name("_valid");e.block(()=>n.forEach((u,l)=>{const f=t.subschema({keyword:r,schemaProp:l,compositeRule:!0},s);e.assign(a,(0,lr._)`${a} || ${s}`),t.mergeValidEvaluated(f,s)||e.if((0,lr.not)(a))})),t.result(a,()=>t.reset(),()=>t.error(!0))}Sn.validateUnion=yie,Object.defineProperty(Ea,"__esModule",{value:!0}),Ea.validateKeywordUsage=Ea.validSchemaType=Ea.funcKeywordCode=Ea.macroKeywordCode=void 0;const Pi=jn,Nu=Oa,bie=Sn,kie=zf;function wie(t,e){const{gen:n,keyword:r,schema:i,parentSchema:o,it:a}=t,s=e.macro.call(a.self,i,o,a),u=rD(n,r,s);a.opts.validateSchema!==!1&&a.self.validateSchema(s,!0);const l=n.name("valid");t.subschema({schema:s,schemaPath:Pi.nil,errSchemaPath:`${a.errSchemaPath}/${r}`,topSchemaRef:u,compositeRule:!0},l),t.pass(l,()=>t.error(!0))}Ea.macroKeywordCode=wie;function _ie(t,e){var n;const{gen:r,keyword:i,schema:o,parentSchema:a,$data:s,it:u}=t;jie(u,e);const l=!s&&e.compile?e.compile.call(u.self,o,a,u):e.validate,f=rD(r,i,l),c=r.let("valid");t.block$data(c,d),t.ok((n=e.valid)!==null&&n!==void 0?n:c);function d(){if(e.errors===!1)m(),e.modifying&&nD(t),g(()=>t.error());else{const v=e.async?h():p();e.modifying&&nD(t),g(()=>xie(t,v))}}function h(){const v=r.let("ruleErrs",null);return r.try(()=>m((0,Pi._)`await `),y=>r.assign(c,!1).if((0,Pi._)`${y} instanceof ${u.ValidationError}`,()=>r.assign(v,(0,Pi._)`${y}.errors`),()=>r.throw(y))),v}function p(){const v=(0,Pi._)`${f}.errors`;return r.assign(v,null),m(Pi.nil),v}function m(v=e.async?(0,Pi._)`await `:Pi.nil){const y=u.opts.passContext?Nu.default.this:Nu.default.self,k=!("compile"in e&&!s||e.schema===!1);r.assign(c,(0,Pi._)`${v}${(0,bie.callValidateCode)(t,f,y,k)}`,e.modifying)}function g(v){var y;r.if((0,Pi.not)((y=e.valid)!==null&&y!==void 0?y:c),v)}}Ea.funcKeywordCode=_ie;function nD(t){const{gen:e,data:n,it:r}=t;e.if(r.parentData,()=>e.assign(n,(0,Pi._)`${r.parentData}[${r.parentDataProperty}]`))}function xie(t,e){const{gen:n}=t;n.if((0,Pi._)`Array.isArray(${e})`,()=>{n.assign(Nu.default.vErrors,(0,Pi._)`${Nu.default.vErrors} === null ? ${e} : ${Nu.default.vErrors}.concat(${e})`).assign(Nu.default.errors,(0,Pi._)`${Nu.default.vErrors}.length`),(0,kie.extendErrors)(t)},()=>t.error())}function jie({schemaEnv:t},e){if(e.async&&!t.$async)throw new Error("async keyword in sync schema")}function rD(t,e,n){if(n===void 0)throw new Error(`keyword "${e}" failed to compile`);return t.scopeValue("keyword",typeof n=="function"?{ref:n}:{ref:n,code:(0,Pi.stringify)(n)})}function Sie(t,e,n=!1){return!e.length||e.some(r=>r==="array"?Array.isArray(t):r==="object"?t&&typeof t=="object"&&!Array.isArray(t):typeof t==r||n&&typeof t>"u")}Ea.validSchemaType=Sie;function Cie({schema:t,opts:e,self:n,errSchemaPath:r},i,o){if(Array.isArray(i.keyword)?!i.keyword.includes(o):i.keyword!==o)throw new Error("ajv implementation error");const a=i.dependencies;if(a!=null&&a.some(s=>!Object.prototype.hasOwnProperty.call(t,s)))throw new Error(`parent schema must have dependencies of ${o}: ${a.join(",")}`);if(i.validateSchema&&!i.validateSchema(t[o])){const u=`keyword "${o}" value is invalid at path "${r}": `+n.errorsText(i.validateSchema.errors);if(e.validateSchema==="log")n.logger.error(u);else throw new Error(u)}}Ea.validateKeywordUsage=Cie;var Fs={};Object.defineProperty(Fs,"__esModule",{value:!0}),Fs.extendSubschemaMode=Fs.extendSubschemaData=Fs.getSubschema=void 0;const Ta=jn,iD=In;function $ie(t,{keyword:e,schemaProp:n,schema:r,schemaPath:i,errSchemaPath:o,topSchemaRef:a}){if(e!==void 0&&r!==void 0)throw new Error('both "keyword" and "schema" passed, only one allowed');if(e!==void 0){const s=t.schema[e];return n===void 0?{schema:s,schemaPath:(0,Ta._)`${t.schemaPath}${(0,Ta.getProperty)(e)}`,errSchemaPath:`${t.errSchemaPath}/${e}`}:{schema:s[n],schemaPath:(0,Ta._)`${t.schemaPath}${(0,Ta.getProperty)(e)}${(0,Ta.getProperty)(n)}`,errSchemaPath:`${t.errSchemaPath}/${e}/${(0,iD.escapeFragment)(n)}`}}if(r!==void 0){if(i===void 0||o===void 0||a===void 0)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:r,schemaPath:i,topSchemaRef:a,errSchemaPath:o}}throw new Error('either "keyword" or "schema" must be passed')}Fs.getSubschema=$ie;function Oie(t,e,{dataProp:n,dataPropType:r,data:i,dataTypes:o,propertyName:a}){if(i!==void 0&&n!==void 0)throw new Error('both "data" and "dataProp" passed, only one allowed');const{gen:s}=e;if(n!==void 0){const{errorPath:l,dataPathArr:f,opts:c}=e,d=s.let("data",(0,Ta._)`${e.data}${(0,Ta.getProperty)(n)}`,!0);u(d),t.errorPath=(0,Ta.str)`${l}${(0,iD.getErrorPath)(n,r,c.jsPropertySyntax)}`,t.parentDataProperty=(0,Ta._)`${n}`,t.dataPathArr=[...f,t.parentDataProperty]}if(i!==void 0){const l=i instanceof Ta.Name?i:s.let("data",i,!0);u(l),a!==void 0&&(t.propertyName=a)}o&&(t.dataTypes=o);function u(l){t.data=l,t.dataLevel=e.dataLevel+1,t.dataTypes=[],e.definedProperties=new Set,t.parentData=e.data,t.dataNames=[...e.dataNames,l]}}Fs.extendSubschemaData=Oie;function Eie(t,{jtdDiscriminator:e,jtdMetadata:n,compositeRule:r,createErrors:i,allErrors:o}){r!==void 0&&(t.compositeRule=r),i!==void 0&&(t.createErrors=i),o!==void 0&&(t.allErrors=o),t.jtdDiscriminator=e,t.jtdMetadata=n}Fs.extendSubschemaMode=Eie;var Yr={},oD=function t(e,n){if(e===n)return!0;if(e&&n&&typeof e=="object"&&typeof n=="object"){if(e.constructor!==n.constructor)return!1;var r,i,o;if(Array.isArray(e)){if(r=e.length,r!=n.length)return!1;for(i=r;i--!==0;)if(!t(e[i],n[i]))return!1;return!0}if(e.constructor===RegExp)return e.source===n.source&&e.flags===n.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===n.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===n.toString();if(o=Object.keys(e),r=o.length,r!==Object.keys(n).length)return!1;for(i=r;i--!==0;)if(!Object.prototype.hasOwnProperty.call(n,o[i]))return!1;for(i=r;i--!==0;){var a=o[i];if(!t(e[a],n[a]))return!1}return!0}return e!==e&&n!==n},aD={exports:{}},Vs=aD.exports=function(t,e,n){typeof e=="function"&&(n=e,e={}),n=e.cb||n;var r=typeof n=="function"?n:n.pre||function(){},i=n.post||function(){};km(e,r,i,t,"",t)};Vs.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0},Vs.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0},Vs.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0},Vs.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function km(t,e,n,r,i,o,a,s,u,l){if(r&&typeof r=="object"&&!Array.isArray(r)){e(r,i,o,a,s,u,l);for(var f in r){var c=r[f];if(Array.isArray(c)){if(f in Vs.arrayKeywords)for(var d=0;d<c.length;d++)km(t,e,n,c[d],i+"/"+f+"/"+d,o,i,f,r,d)}else if(f in Vs.propsKeywords){if(c&&typeof c=="object")for(var h in c)km(t,e,n,c[h],i+"/"+f+"/"+Tie(h),o,i,f,r,h)}else(f in Vs.keywords||t.allKeys&&!(f in Vs.skipKeywords))&&km(t,e,n,c,i+"/"+f,o,i,f,r)}n(r,i,o,a,s,u,l)}}function Tie(t){return t.replace(/~/g,"~0").replace(/\//g,"~1")}Object.defineProperty(Yr,"__esModule",{value:!0}),Yr.getSchemaRefs=Yr.resolveUrl=Yr.normalizeId=Yr._getFullPath=Yr.getFullPath=Yr.inlineRef=void 0;const Aie=In,Mie=oD,Pie=aD.exports,Nie=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function Iie(t,e=!0){return typeof t=="boolean"?!0:e===!0?!Lb(t):e?sD(t)<=e:!1}Yr.inlineRef=Iie;const Lie=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function Lb(t){for(const e in t){if(Lie.has(e))return!0;const n=t[e];if(Array.isArray(n)&&n.some(Lb)||typeof n=="object"&&Lb(n))return!0}return!1}function sD(t){let e=0;for(const n in t){if(n==="$ref")return 1/0;if(e++,!Nie.has(n)&&(typeof t[n]=="object"&&(0,Aie.eachItem)(t[n],r=>e+=sD(r)),e===1/0))return 1/0}return e}function uD(t,e="",n){n!==!1&&(e=Xl(e));const r=t.parse(e);return lD(t,r)}Yr.getFullPath=uD;function lD(t,e){return t.serialize(e).split("#")[0]+"#"}Yr._getFullPath=lD;const Die=/#\/?$/;function Xl(t){return t?t.replace(Die,""):""}Yr.normalizeId=Xl;function Rie(t,e,n){return n=Xl(n),t.resolve(e,n)}Yr.resolveUrl=Rie;const Bie=/^[a-z_][-a-z0-9._]*$/i;function zie(t,e){if(typeof t=="boolean")return{};const{schemaId:n,uriResolver:r}=this.opts,i=Xl(t[n]||e),o={"":i},a=uD(r,i,!1),s={},u=new Set;return Pie(t,{allKeys:!0},(c,d,h,p)=>{if(p===void 0)return;const m=a+d;let g=o[p];typeof c[n]=="string"&&(g=v.call(this,c[n])),y.call(this,c.$anchor),y.call(this,c.$dynamicAnchor),o[d]=g;function v(k){const w=this.opts.uriResolver.resolve;if(k=Xl(g?w(g,k):k),u.has(k))throw f(k);u.add(k);let _=this.refs[k];return typeof _=="string"&&(_=this.refs[_]),typeof _=="object"?l(c,_.schema,k):k!==Xl(m)&&(k[0]==="#"?(l(c,s[k],k),s[k]=c):this.refs[k]=m),k}function y(k){if(typeof k=="string"){if(!Bie.test(k))throw new Error(`invalid anchor "${k}"`);v.call(this,`#${k}`)}}}),s;function l(c,d,h){if(d!==void 0&&!Mie(c,d))throw f(h)}function f(c){return new Error(`reference "${c}" resolves to more than one schema`)}}Yr.getSchemaRefs=zie,Object.defineProperty(Wo,"__esModule",{value:!0}),Wo.getData=Wo.KeywordCxt=Wo.validateFunctionCode=void 0;const cD=Ql,fD=Vf,Db=ns,wm=Vf,Fie=bm,qf=Ea,Rb=Fs,Pt=jn,on=Oa,Vie=Yr,rs=In,Hf=zf;function qie(t){if(mD(t)&&(vD(t),pD(t))){Wie(t);return}dD(t,()=>(0,cD.topBoolOrEmptySchema)(t))}Wo.validateFunctionCode=qie;function dD({gen:t,validateName:e,schema:n,schemaEnv:r,opts:i},o){i.code.es5?t.func(e,(0,Pt._)`${on.default.data}, ${on.default.valCxt}`,r.$async,()=>{t.code((0,Pt._)`"use strict"; ${hD(n,i)}`),Uie(t,i),t.code(o)}):t.func(e,(0,Pt._)`${on.default.data}, ${Hie(i)}`,r.$async,()=>t.code(hD(n,i)).code(o))}function Hie(t){return(0,Pt._)`{${on.default.instancePath}="", ${on.default.parentData}, ${on.default.parentDataProperty}, ${on.default.rootData}=${on.default.data}${t.dynamicRef?(0,Pt._)`, ${on.default.dynamicAnchors}={}`:Pt.nil}}={}`}function Uie(t,e){t.if(on.default.valCxt,()=>{t.var(on.default.instancePath,(0,Pt._)`${on.default.valCxt}.${on.default.instancePath}`),t.var(on.default.parentData,(0,Pt._)`${on.default.valCxt}.${on.default.parentData}`),t.var(on.default.parentDataProperty,(0,Pt._)`${on.default.valCxt}.${on.default.parentDataProperty}`),t.var(on.default.rootData,(0,Pt._)`${on.default.valCxt}.${on.default.rootData}`),e.dynamicRef&&t.var(on.default.dynamicAnchors,(0,Pt._)`${on.default.valCxt}.${on.default.dynamicAnchors}`)},()=>{t.var(on.default.instancePath,(0,Pt._)`""`),t.var(on.default.parentData,(0,Pt._)`undefined`),t.var(on.default.parentDataProperty,(0,Pt._)`undefined`),t.var(on.default.rootData,on.default.data),e.dynamicRef&&t.var(on.default.dynamicAnchors,(0,Pt._)`{}`)})}function Wie(t){const{schema:e,opts:n,gen:r}=t;dD(t,()=>{n.$comment&&e.$comment&&yD(t),Yie(t),r.let(on.default.vErrors,null),r.let(on.default.errors,0),n.unevaluated&&Kie(t),gD(t),eoe(t)})}function Kie(t){const{gen:e,validateName:n}=t;t.evaluated=e.const("evaluated",(0,Pt._)`${n}.evaluated`),e.if((0,Pt._)`${t.evaluated}.dynamicProps`,()=>e.assign((0,Pt._)`${t.evaluated}.props`,(0,Pt._)`undefined`)),e.if((0,Pt._)`${t.evaluated}.dynamicItems`,()=>e.assign((0,Pt._)`${t.evaluated}.items`,(0,Pt._)`undefined`))}function hD(t,e){const n=typeof t=="object"&&t[e.schemaId];return n&&(e.code.source||e.code.process)?(0,Pt._)`/*# sourceURL=${n} */`:Pt.nil}function Jie(t,e){if(mD(t)&&(vD(t),pD(t))){Gie(t,e);return}(0,cD.boolOrEmptySchema)(t,e)}function pD({schema:t,self:e}){if(typeof t=="boolean")return!t;for(const n in t)if(e.RULES.all[n])return!0;return!1}function mD(t){return typeof t.schema!="boolean"}function Gie(t,e){const{schema:n,gen:r,opts:i}=t;i.$comment&&n.$comment&&yD(t),Xie(t),Zie(t);const o=r.const("_errs",on.default.errors);gD(t,o),r.var(e,(0,Pt._)`${o} === ${on.default.errors}`)}function vD(t){(0,rs.checkUnknownRules)(t),Qie(t)}function gD(t,e){if(t.opts.jtd)return bD(t,[],!1,e);const n=(0,fD.getSchemaTypes)(t.schema),r=(0,fD.coerceAndCheckDataType)(t,n);bD(t,n,!r,e)}function Qie(t){const{schema:e,errSchemaPath:n,opts:r,self:i}=t;e.$ref&&r.ignoreKeywordsWithRef&&(0,rs.schemaHasRulesButRef)(e,i.RULES)&&i.logger.warn(`$ref: keywords ignored in schema at path "${n}"`)}function Yie(t){const{schema:e,opts:n}=t;e.default!==void 0&&n.useDefaults&&n.strictSchema&&(0,rs.checkStrictMode)(t,"default is ignored in the schema root")}function Xie(t){const e=t.schema[t.opts.schemaId];e&&(t.baseId=(0,Vie.resolveUrl)(t.opts.uriResolver,t.baseId,e))}function Zie(t){if(t.schema.$async&&!t.schemaEnv.$async)throw new Error("async schema in sync schema")}function yD({gen:t,schemaEnv:e,schema:n,errSchemaPath:r,opts:i}){const o=n.$comment;if(i.$comment===!0)t.code((0,Pt._)`${on.default.self}.logger.log(${o})`);else if(typeof i.$comment=="function"){const a=(0,Pt.str)`${r}/$comment`,s=t.scopeValue("root",{ref:e.root});t.code((0,Pt._)`${on.default.self}.opts.$comment(${o}, ${a}, ${s}.schema)`)}}function eoe(t){const{gen:e,schemaEnv:n,validateName:r,ValidationError:i,opts:o}=t;n.$async?e.if((0,Pt._)`${on.default.errors} === 0`,()=>e.return(on.default.data),()=>e.throw((0,Pt._)`new ${i}(${on.default.vErrors})`)):(e.assign((0,Pt._)`${r}.errors`,on.default.vErrors),o.unevaluated&&toe(t),e.return((0,Pt._)`${on.default.errors} === 0`))}function toe({gen:t,evaluated:e,props:n,items:r}){n instanceof Pt.Name&&t.assign((0,Pt._)`${e}.props`,n),r instanceof Pt.Name&&t.assign((0,Pt._)`${e}.items`,r)}function bD(t,e,n,r){const{gen:i,schema:o,data:a,allErrors:s,opts:u,self:l}=t,{RULES:f}=l;if(o.$ref&&(u.ignoreKeywordsWithRef||!(0,rs.schemaHasRulesButRef)(o,f))){i.block(()=>xD(t,"$ref",f.all.$ref.definition));return}u.jtd||noe(t,e),i.block(()=>{for(const d of f.rules)c(d);c(f.post)});function c(d){!(0,Db.shouldUseGroup)(o,d)||(d.type?(i.if((0,wm.checkDataType)(d.type,a,u.strictNumbers)),kD(t,d),e.length===1&&e[0]===d.type&&n&&(i.else(),(0,wm.reportTypeError)(t)),i.endIf()):kD(t,d),s||i.if((0,Pt._)`${on.default.errors} === ${r||0}`))}}function kD(t,e){const{gen:n,schema:r,opts:{useDefaults:i}}=t;i&&(0,Fie.assignDefaults)(t,e.type),n.block(()=>{for(const o of e.rules)(0,Db.shouldUseRule)(r,o)&&xD(t,o.keyword,o.definition,e.type)})}function noe(t,e){t.schemaEnv.meta||!t.opts.strictTypes||(roe(t,e),t.opts.allowUnionTypes||ioe(t,e),ooe(t,t.dataTypes))}function roe(t,e){if(!!e.length){if(!t.dataTypes.length){t.dataTypes=e;return}e.forEach(n=>{wD(t.dataTypes,n)||Bb(t,`type "${n}" not allowed by context "${t.dataTypes.join(",")}"`)}),t.dataTypes=t.dataTypes.filter(n=>wD(e,n))}}function ioe(t,e){e.length>1&&!(e.length===2&&e.includes("null"))&&Bb(t,"use allowUnionTypes to allow union type keyword")}function ooe(t,e){const n=t.self.RULES.all;for(const r in n){const i=n[r];if(typeof i=="object"&&(0,Db.shouldUseRule)(t.schema,i)){const{type:o}=i.definition;o.length&&!o.some(a=>aoe(e,a))&&Bb(t,`missing type "${o.join(",")}" for keyword "${r}"`)}}}function aoe(t,e){return t.includes(e)||e==="number"&&t.includes("integer")}function wD(t,e){return t.includes(e)||e==="integer"&&t.includes("number")}function Bb(t,e){e+=` at "${t.schemaEnv.baseId+t.errSchemaPath}" (strictTypes)`,(0,rs.checkStrictMode)(t,e,t.opts.strictTypes)}class _D{constructor(e,n,r){if((0,qf.validateKeywordUsage)(e,n,r),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=r,this.data=e.data,this.schema=e.schema[r],this.$data=n.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,rs.schemaRefOrVal)(e,this.schema,r,this.$data),this.schemaType=n.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=n,this.$data)this.schemaCode=e.gen.const("vSchema",jD(this.$data,e));else if(this.schemaCode=this.schemaValue,!(0,qf.validSchemaType)(this.schema,n.schemaType,n.allowUndefined))throw new Error(`${r} value must be ${JSON.stringify(n.schemaType)}`);("code"in n?n.trackErrors:n.errors!==!1)&&(this.errsCount=e.gen.const("_errs",on.default.errors))}result(e,n,r){this.failResult((0,Pt.not)(e),n,r)}failResult(e,n,r){this.gen.if(e),r?r():this.error(),n?(this.gen.else(),n(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(e,n){this.failResult((0,Pt.not)(e),void 0,n)}fail(e){if(e===void 0){this.error(),this.allErrors||this.gen.if(!1);return}this.gen.if(e),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);const{schemaCode:n}=this;this.fail((0,Pt._)`${n} !== undefined && (${(0,Pt.or)(this.invalid$data(),e)})`)}error(e,n,r){if(n){this.setParams(n),this._error(e,r),this.setParams({});return}this._error(e,r)}_error(e,n){(e?Hf.reportExtraError:Hf.reportError)(this,this.def.error,n)}$dataError(){(0,Hf.reportError)(this,this.def.$dataError||Hf.keyword$DataError)}reset(){if(this.errsCount===void 0)throw new Error('add "trackErrors" to keyword definition');(0,Hf.resetErrorsCount)(this.gen,this.errsCount)}ok(e){this.allErrors||this.gen.if(e)}setParams(e,n){n?Object.assign(this.params,e):this.params=e}block$data(e,n,r=Pt.nil){this.gen.block(()=>{this.check$data(e,r),n()})}check$data(e=Pt.nil,n=Pt.nil){if(!this.$data)return;const{gen:r,schemaCode:i,schemaType:o,def:a}=this;r.if((0,Pt.or)((0,Pt._)`${i} === undefined`,n)),e!==Pt.nil&&r.assign(e,!0),(o.length||a.validateSchema)&&(r.elseIf(this.invalid$data()),this.$dataError(),e!==Pt.nil&&r.assign(e,!1)),r.else()}invalid$data(){const{gen:e,schemaCode:n,schemaType:r,def:i,it:o}=this;return(0,Pt.or)(a(),s());function a(){if(r.length){if(!(n instanceof Pt.Name))throw new Error("ajv implementation error");const u=Array.isArray(r)?r:[r];return(0,Pt._)`${(0,wm.checkDataTypes)(u,n,o.opts.strictNumbers,wm.DataType.Wrong)}`}return Pt.nil}function s(){if(i.validateSchema){const u=e.scopeValue("validate$data",{ref:i.validateSchema});return(0,Pt._)`!${u}(${n})`}return Pt.nil}}subschema(e,n){const r=(0,Rb.getSubschema)(this.it,e);(0,Rb.extendSubschemaData)(r,this.it,e),(0,Rb.extendSubschemaMode)(r,e);const i={...this.it,...r,items:void 0,props:void 0};return Jie(i,n),i}mergeEvaluated(e,n){const{it:r,gen:i}=this;!r.opts.unevaluated||(r.props!==!0&&e.props!==void 0&&(r.props=rs.mergeEvaluated.props(i,e.props,r.props,n)),r.items!==!0&&e.items!==void 0&&(r.items=rs.mergeEvaluated.items(i,e.items,r.items,n)))}mergeValidEvaluated(e,n){const{it:r,gen:i}=this;if(r.opts.unevaluated&&(r.props!==!0||r.items!==!0))return i.if(n,()=>this.mergeEvaluated(e,Pt.Name)),!0}}Wo.KeywordCxt=_D;function xD(t,e,n,r){const i=new _D(t,n,e);"code"in n?n.code(i,r):i.$data&&n.validate?(0,qf.funcKeywordCode)(i,n):"macro"in n?(0,qf.macroKeywordCode)(i,n):(n.compile||n.validate)&&(0,qf.funcKeywordCode)(i,n)}const soe=/^\/(?:[^~]|~0|~1)*$/,uoe=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function jD(t,{dataLevel:e,dataNames:n,dataPathArr:r}){let i,o;if(t==="")return on.default.rootData;if(t[0]==="/"){if(!soe.test(t))throw new Error(`Invalid JSON-pointer: ${t}`);i=t,o=on.default.rootData}else{const l=uoe.exec(t);if(!l)throw new Error(`Invalid JSON-pointer: ${t}`);const f=+l[1];if(i=l[2],i==="#"){if(f>=e)throw new Error(u("property/index",f));return r[e-f]}if(f>e)throw new Error(u("data",f));if(o=n[e-f],!i)return o}let a=o;const s=i.split("/");for(const l of s)l&&(o=(0,Pt._)`${o}${(0,Pt.getProperty)((0,rs.unescapeJsonPointer)(l))}`,a=(0,Pt._)`${a} && ${o}`);return a;function u(l,f){return`Cannot access ${l} ${f} levels up, current level is ${e}`}}Wo.getData=jD;var _m={};Object.defineProperty(_m,"__esModule",{value:!0});class loe extends Error{constructor(e){super("validation failed"),this.errors=e,this.ajv=this.validation=!0}}_m.default=loe;var xm={};Object.defineProperty(xm,"__esModule",{value:!0});const zb=Yr;class coe extends Error{constructor(e,n,r,i){super(i||`can't resolve reference ${r} from id ${n}`),this.missingRef=(0,zb.resolveUrl)(e,n,r),this.missingSchema=(0,zb.normalizeId)((0,zb.getFullPath)(e,this.missingRef))}}xm.default=coe;var Fi={};Object.defineProperty(Fi,"__esModule",{value:!0}),Fi.resolveSchema=Fi.getCompilingSchema=Fi.resolveRef=Fi.compileSchema=Fi.SchemaEnv=void 0;const Ko=jn,foe=_m,Iu=Oa,Jo=Yr,SD=In,doe=Wo;class jm{constructor(e){var n;this.refs={},this.dynamicAnchors={};let r;typeof e.schema=="object"&&(r=e.schema),this.schema=e.schema,this.schemaId=e.schemaId,this.root=e.root||this,this.baseId=(n=e.baseId)!==null&&n!==void 0?n:(0,Jo.normalizeId)(r==null?void 0:r[e.schemaId||"$id"]),this.schemaPath=e.schemaPath,this.localRefs=e.localRefs,this.meta=e.meta,this.$async=r==null?void 0:r.$async,this.refs={}}}Fi.SchemaEnv=jm;function Fb(t){const e=CD.call(this,t);if(e)return e;const n=(0,Jo.getFullPath)(this.opts.uriResolver,t.root.baseId),{es5:r,lines:i}=this.opts.code,{ownProperties:o}=this.opts,a=new Ko.CodeGen(this.scope,{es5:r,lines:i,ownProperties:o});let s;t.$async&&(s=a.scopeValue("Error",{ref:foe.default,code:(0,Ko._)`require("ajv/dist/runtime/validation_error").default`}));const u=a.scopeName("validate");t.validateName=u;const l={gen:a,allErrors:this.opts.allErrors,data:Iu.default.data,parentData:Iu.default.parentData,parentDataProperty:Iu.default.parentDataProperty,dataNames:[Iu.default.data],dataPathArr:[Ko.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:a.scopeValue("schema",this.opts.code.source===!0?{ref:t.schema,code:(0,Ko.stringify)(t.schema)}:{ref:t.schema}),validateName:u,ValidationError:s,schema:t.schema,schemaEnv:t,rootId:n,baseId:t.baseId||n,schemaPath:Ko.nil,errSchemaPath:t.schemaPath||(this.opts.jtd?"":"#"),errorPath:(0,Ko._)`""`,opts:this.opts,self:this};let f;try{this._compilations.add(t),(0,doe.validateFunctionCode)(l),a.optimize(this.opts.code.optimize);const c=a.toString();f=`${a.scopeRefs(Iu.default.scope)}return ${c}`,this.opts.code.process&&(f=this.opts.code.process(f,t));const h=new Function(`${Iu.default.self}`,`${Iu.default.scope}`,f)(this,this.scope.get());if(this.scope.value(u,{ref:h}),h.errors=null,h.schema=t.schema,h.schemaEnv=t,t.$async&&(h.$async=!0),this.opts.code.source===!0&&(h.source={validateName:u,validateCode:c,scopeValues:a._values}),this.opts.unevaluated){const{props:p,items:m}=l;h.evaluated={props:p instanceof Ko.Name?void 0:p,items:m instanceof Ko.Name?void 0:m,dynamicProps:p instanceof Ko.Name,dynamicItems:m instanceof Ko.Name},h.source&&(h.source.evaluated=(0,Ko.stringify)(h.evaluated))}return t.validate=h,t}catch(c){throw delete t.validate,delete t.validateName,f&&this.logger.error("Error compiling schema, function code:",f),c}finally{this._compilations.delete(t)}}Fi.compileSchema=Fb;function hoe(t,e,n){var r;n=(0,Jo.resolveUrl)(this.opts.uriResolver,e,n);const i=t.refs[n];if(i)return i;let o=voe.call(this,t,n);if(o===void 0){const a=(r=t.localRefs)===null||r===void 0?void 0:r[n],{schemaId:s}=this.opts;a&&(o=new jm({schema:a,schemaId:s,root:t,baseId:e}))}if(o!==void 0)return t.refs[n]=poe.call(this,o)}Fi.resolveRef=hoe;function poe(t){return(0,Jo.inlineRef)(t.schema,this.opts.inlineRefs)?t.schema:t.validate?t:Fb.call(this,t)}function CD(t){for(const e of this._compilations)if(moe(e,t))return e}Fi.getCompilingSchema=CD;function moe(t,e){return t.schema===e.schema&&t.root===e.root&&t.baseId===e.baseId}function voe(t,e){let n;for(;typeof(n=this.refs[e])=="string";)e=n;return n||this.schemas[e]||Sm.call(this,t,e)}function Sm(t,e){const n=this.opts.uriResolver.parse(e),r=(0,Jo._getFullPath)(this.opts.uriResolver,n);let i=(0,Jo.getFullPath)(this.opts.uriResolver,t.baseId,void 0);if(Object.keys(t.schema).length>0&&r===i)return Vb.call(this,n,t);const o=(0,Jo.normalizeId)(r),a=this.refs[o]||this.schemas[o];if(typeof a=="string"){const s=Sm.call(this,t,a);return typeof(s==null?void 0:s.schema)!="object"?void 0:Vb.call(this,n,s)}if(typeof(a==null?void 0:a.schema)=="object"){if(a.validate||Fb.call(this,a),o===(0,Jo.normalizeId)(e)){const{schema:s}=a,{schemaId:u}=this.opts,l=s[u];return l&&(i=(0,Jo.resolveUrl)(this.opts.uriResolver,i,l)),new jm({schema:s,schemaId:u,root:t,baseId:i})}return Vb.call(this,n,a)}}Fi.resolveSchema=Sm;const goe=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function Vb(t,{baseId:e,schema:n,root:r}){var i;if(((i=t.fragment)===null||i===void 0?void 0:i[0])!=="/")return;for(const s of t.fragment.slice(1).split("/")){if(typeof n=="boolean")return;const u=n[(0,SD.unescapeFragment)(s)];if(u===void 0)return;n=u;const l=typeof n=="object"&&n[this.opts.schemaId];!goe.has(s)&&l&&(e=(0,Jo.resolveUrl)(this.opts.uriResolver,e,l))}let o;if(typeof n!="boolean"&&n.$ref&&!(0,SD.schemaHasRulesButRef)(n,this.RULES)){const s=(0,Jo.resolveUrl)(this.opts.uriResolver,e,n.$ref);o=Sm.call(this,r,s)}const{schemaId:a}=this.opts;if(o=o||new jm({schema:n,schemaId:a,root:r,baseId:e}),o.schema!==o.root.schema)return o}const yoe={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1};var qb={},Hb={exports:{}};/** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */(function(t,e){(function(n,r){r(e)})(bi,function(n){function r(){for(var de=arguments.length,ie=Array(de),ge=0;ge<de;ge++)ie[ge]=arguments[ge];if(ie.length>1){ie[0]=ie[0].slice(0,-1);for(var Ae=ie.length-1,Ee=1;Ee<Ae;++Ee)ie[Ee]=ie[Ee].slice(1,-1);return ie[Ae]=ie[Ae].slice(1),ie.join("")}else return ie[0]}function i(de){return"(?:"+de+")"}function o(de){return de===void 0?"undefined":de===null?"null":Object.prototype.toString.call(de).split(" ").pop().split("]").shift().toLowerCase()}function a(de){return de.toUpperCase()}function s(de){return de!=null?de instanceof Array?de:typeof de.length!="number"||de.split||de.setInterval||de.call?[de]:Array.prototype.slice.call(de):[]}function u(de,ie){var ge=de;if(ie)for(var Ae in ie)ge[Ae]=ie[Ae];return ge}function l(de){var ie="[A-Za-z]",ge="[0-9]",Ae=r(ge,"[A-Fa-f]"),Ee=i(i("%[EFef]"+Ae+"%"+Ae+Ae+"%"+Ae+Ae)+"|"+i("%[89A-Fa-f]"+Ae+"%"+Ae+Ae)+"|"+i("%"+Ae+Ae)),bt="[\\:\\/\\?\\#\\[\\]\\@]",kt="[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]",$t=r(bt,kt),Xe=de?"[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]":"[]",xt=de?"[\\uE000-\\uF8FF]":"[]",Xt=r(ie,ge,"[\\-\\.\\_\\~]",Xe);i(ie+r(ie,ge,"[\\+\\-\\.]")+"*"),i(i(Ee+"|"+r(Xt,kt,"[\\:]"))+"*");var yn=i(i("25[0-5]")+"|"+i("2[0-4]"+ge)+"|"+i("1"+ge+ge)+"|"+i("0?[1-9]"+ge)+"|0?0?"+ge),On=i(yn+"\\."+yn+"\\."+yn+"\\."+yn),Qt=i(Ae+"{1,4}"),Wn=i(i(Qt+"\\:"+Qt)+"|"+On),Qn=i(i(Qt+"\\:")+"{6}"+Wn),Kn=i("\\:\\:"+i(Qt+"\\:")+"{5}"+Wn),Vr=i(i(Qt)+"?\\:\\:"+i(Qt+"\\:")+"{4}"+Wn),mi=i(i(i(Qt+"\\:")+"{0,1}"+Qt)+"?\\:\\:"+i(Qt+"\\:")+"{3}"+Wn),Ir=i(i(i(Qt+"\\:")+"{0,2}"+Qt)+"?\\:\\:"+i(Qt+"\\:")+"{2}"+Wn),qi=i(i(i(Qt+"\\:")+"{0,3}"+Qt)+"?\\:\\:"+Qt+"\\:"+Wn),vi=i(i(i(Qt+"\\:")+"{0,4}"+Qt)+"?\\:\\:"+Wn),Hn=i(i(i(Qt+"\\:")+"{0,5}"+Qt)+"?\\:\\:"+Qt),gi=i(i(i(Qt+"\\:")+"{0,6}"+Qt)+"?\\:\\:"),Lr=i([Qn,Kn,Vr,mi,Ir,qi,vi,Hn,gi].join("|")),Zr=i(i(Xt+"|"+Ee)+"+");i("[vV]"+Ae+"+\\."+r(Xt,kt,"[\\:]")+"+"),i(i(Ee+"|"+r(Xt,kt))+"*");var Pa=i(Ee+"|"+r(Xt,kt,"[\\:\\@]"));return i(i(Ee+"|"+r(Xt,kt,"[\\@]"))+"+"),i(i(Pa+"|"+r("[\\/\\?]",xt))+"*"),{NOT_SCHEME:new RegExp(r("[^]",ie,ge,"[\\+\\-\\.]"),"g"),NOT_USERINFO:new RegExp(r("[^\\%\\:]",Xt,kt),"g"),NOT_HOST:new RegExp(r("[^\\%\\[\\]\\:]",Xt,kt),"g"),NOT_PATH:new RegExp(r("[^\\%\\/\\:\\@]",Xt,kt),"g"),NOT_PATH_NOSCHEME:new RegExp(r("[^\\%\\/\\@]",Xt,kt),"g"),NOT_QUERY:new RegExp(r("[^\\%]",Xt,kt,"[\\:\\@\\/\\?]",xt),"g"),NOT_FRAGMENT:new RegExp(r("[^\\%]",Xt,kt,"[\\:\\@\\/\\?]"),"g"),ESCAPE:new RegExp(r("[^]",Xt,kt),"g"),UNRESERVED:new RegExp(Xt,"g"),OTHER_CHARS:new RegExp(r("[^\\%]",Xt,$t),"g"),PCT_ENCODED:new RegExp(Ee,"g"),IPV4ADDRESS:new RegExp("^("+On+")$"),IPV6ADDRESS:new RegExp("^\\[?("+Lr+")"+i(i("\\%25|\\%(?!"+Ae+"{2})")+"("+Zr+")")+"?\\]?$")}}var f=l(!1),c=l(!0),d=function(){function de(ie,ge){var Ae=[],Ee=!0,bt=!1,kt=void 0;try{for(var $t=ie[Symbol.iterator](),Xe;!(Ee=(Xe=$t.next()).done)&&(Ae.push(Xe.value),!(ge&&Ae.length===ge));Ee=!0);}catch(xt){bt=!0,kt=xt}finally{try{!Ee&&$t.return&&$t.return()}finally{if(bt)throw kt}}return Ae}return function(ie,ge){if(Array.isArray(ie))return ie;if(Symbol.iterator in Object(ie))return de(ie,ge);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),h=function(de){if(Array.isArray(de)){for(var ie=0,ge=Array(de.length);ie<de.length;ie++)ge[ie]=de[ie];return ge}else return Array.from(de)},p=2147483647,m=36,g=1,v=26,y=38,k=700,w=72,_=128,S="-",C=/^xn--/,A=/[^\0-\x7E]/,$=/[\x2E\u3002\uFF0E\uFF61]/g,E={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},O=m-g,z=Math.floor,P=String.fromCharCode;function M(de){throw new RangeError(E[de])}function H(de,ie){for(var ge=[],Ae=de.length;Ae--;)ge[Ae]=ie(de[Ae]);return ge}function G(de,ie){var ge=de.split("@"),Ae="";ge.length>1&&(Ae=ge[0]+"@",de=ge[1]),de=de.replace($,".");var Ee=de.split("."),bt=H(Ee,ie).join(".");return Ae+bt}function V(de){for(var ie=[],ge=0,Ae=de.length;ge<Ae;){var Ee=de.charCodeAt(ge++);if(Ee>=55296&&Ee<=56319&&ge<Ae){var bt=de.charCodeAt(ge++);(bt&64512)==56320?ie.push(((Ee&1023)<<10)+(bt&1023)+65536):(ie.push(Ee),ge--)}else ie.push(Ee)}return ie}var J=function(ie){return String.fromCodePoint.apply(String,h(ie))},F=function(ie){return ie-48<10?ie-22:ie-65<26?ie-65:ie-97<26?ie-97:m},I=function(ie,ge){return ie+22+75*(ie<26)-((ge!=0)<<5)},L=function(ie,ge,Ae){var Ee=0;for(ie=Ae?z(ie/k):ie>>1,ie+=z(ie/ge);ie>O*v>>1;Ee+=m)ie=z(ie/O);return z(Ee+(O+1)*ie/(ie+y))},B=function(ie){var ge=[],Ae=ie.length,Ee=0,bt=_,kt=w,$t=ie.lastIndexOf(S);$t<0&&($t=0);for(var Xe=0;Xe<$t;++Xe)ie.charCodeAt(Xe)>=128&&M("not-basic"),ge.push(ie.charCodeAt(Xe));for(var xt=$t>0?$t+1:0;xt<Ae;){for(var Xt=Ee,yn=1,On=m;;On+=m){xt>=Ae&&M("invalid-input");var Qt=F(ie.charCodeAt(xt++));(Qt>=m||Qt>z((p-Ee)/yn))&&M("overflow"),Ee+=Qt*yn;var Wn=On<=kt?g:On>=kt+v?v:On-kt;if(Qt<Wn)break;var Qn=m-Wn;yn>z(p/Qn)&&M("overflow"),yn*=Qn}var Kn=ge.length+1;kt=L(Ee-Xt,Kn,Xt==0),z(Ee/Kn)>p-bt&&M("overflow"),bt+=z(Ee/Kn),Ee%=Kn,ge.splice(Ee++,0,bt)}return String.fromCodePoint.apply(String,ge)},N=function(ie){var ge=[];ie=V(ie);var Ae=ie.length,Ee=_,bt=0,kt=w,$t=!0,Xe=!1,xt=void 0;try{for(var Xt=ie[Symbol.iterator](),yn;!($t=(yn=Xt.next()).done);$t=!0){var On=yn.value;On<128&&ge.push(P(On))}}catch(Qo){Xe=!0,xt=Qo}finally{try{!$t&&Xt.return&&Xt.return()}finally{if(Xe)throw xt}}var Qt=ge.length,Wn=Qt;for(Qt&&ge.push(S);Wn<Ae;){var Qn=p,Kn=!0,Vr=!1,mi=void 0;try{for(var Ir=ie[Symbol.iterator](),qi;!(Kn=(qi=Ir.next()).done);Kn=!0){var vi=qi.value;vi>=Ee&&vi<Qn&&(Qn=vi)}}catch(Qo){Vr=!0,mi=Qo}finally{try{!Kn&&Ir.return&&Ir.return()}finally{if(Vr)throw mi}}var Hn=Wn+1;Qn-Ee>z((p-bt)/Hn)&&M("overflow"),bt+=(Qn-Ee)*Hn,Ee=Qn;var gi=!0,Lr=!1,Zr=void 0;try{for(var Pa=ie[Symbol.iterator](),Na;!(gi=(Na=Pa.next()).done);gi=!0){var oc=Na.value;if(oc<Ee&&++bt>p&&M("overflow"),oc==Ee){for(var as=bt,Pn=m;;Pn+=m){var yi=Pn<=kt?g:Pn>=kt+v?v:Pn-kt;if(as<yi)break;var ss=as-yi,nr=m-yi;ge.push(P(I(yi+ss%nr,0))),as=z(ss/nr)}ge.push(P(I(as,0))),kt=L(bt,Hn,Wn==Qt),bt=0,++Wn}}}catch(Qo){Lr=!0,Zr=Qo}finally{try{!gi&&Pa.return&&Pa.return()}finally{if(Lr)throw Zr}}++bt,++Ee}return ge.join("")},x=function(ie){return G(ie,function(ge){return C.test(ge)?B(ge.slice(4).toLowerCase()):ge})},j=function(ie){return G(ie,function(ge){return A.test(ge)?"xn--"+N(ge):ge})},T={version:"2.1.0",ucs2:{decode:V,encode:J},decode:B,encode:N,toASCII:j,toUnicode:x},q={};function Q(de){var ie=de.charCodeAt(0),ge=void 0;return ie<16?ge="%0"+ie.toString(16).toUpperCase():ie<128?ge="%"+ie.toString(16).toUpperCase():ie<2048?ge="%"+(ie>>6|192).toString(16).toUpperCase()+"%"+(ie&63|128).toString(16).toUpperCase():ge="%"+(ie>>12|224).toString(16).toUpperCase()+"%"+(ie>>6&63|128).toString(16).toUpperCase()+"%"+(ie&63|128).toString(16).toUpperCase(),ge}function me(de){for(var ie="",ge=0,Ae=de.length;ge<Ae;){var Ee=parseInt(de.substr(ge+1,2),16);if(Ee<128)ie+=String.fromCharCode(Ee),ge+=3;else if(Ee>=194&&Ee<224){if(Ae-ge>=6){var bt=parseInt(de.substr(ge+4,2),16);ie+=String.fromCharCode((Ee&31)<<6|bt&63)}else ie+=de.substr(ge,6);ge+=6}else if(Ee>=224){if(Ae-ge>=9){var kt=parseInt(de.substr(ge+4,2),16),$t=parseInt(de.substr(ge+7,2),16);ie+=String.fromCharCode((Ee&15)<<12|(kt&63)<<6|$t&63)}else ie+=de.substr(ge,9);ge+=9}else ie+=de.substr(ge,3),ge+=3}return ie}function ve(de,ie){function ge(Ae){var Ee=me(Ae);return Ee.match(ie.UNRESERVED)?Ee:Ae}return de.scheme&&(de.scheme=String(de.scheme).replace(ie.PCT_ENCODED,ge).toLowerCase().replace(ie.NOT_SCHEME,"")),de.userinfo!==void 0&&(de.userinfo=String(de.userinfo).replace(ie.PCT_ENCODED,ge).replace(ie.NOT_USERINFO,Q).replace(ie.PCT_ENCODED,a)),de.host!==void 0&&(de.host=String(de.host).replace(ie.PCT_ENCODED,ge).toLowerCase().replace(ie.NOT_HOST,Q).replace(ie.PCT_ENCODED,a)),de.path!==void 0&&(de.path=String(de.path).replace(ie.PCT_ENCODED,ge).replace(de.scheme?ie.NOT_PATH:ie.NOT_PATH_NOSCHEME,Q).replace(ie.PCT_ENCODED,a)),de.query!==void 0&&(de.query=String(de.query).replace(ie.PCT_ENCODED,ge).replace(ie.NOT_QUERY,Q).replace(ie.PCT_ENCODED,a)),de.fragment!==void 0&&(de.fragment=String(de.fragment).replace(ie.PCT_ENCODED,ge).replace(ie.NOT_FRAGMENT,Q).replace(ie.PCT_ENCODED,a)),de}function R(de){return de.replace(/^0*(.*)/,"$1")||"0"}function U(de,ie){var ge=de.match(ie.IPV4ADDRESS)||[],Ae=d(ge,2),Ee=Ae[1];return Ee?Ee.split(".").map(R).join("."):de}function le(de,ie){var ge=de.match(ie.IPV6ADDRESS)||[],Ae=d(ge,3),Ee=Ae[1],bt=Ae[2];if(Ee){for(var kt=Ee.toLowerCase().split("::").reverse(),$t=d(kt,2),Xe=$t[0],xt=$t[1],Xt=xt?xt.split(":").map(R):[],yn=Xe.split(":").map(R),On=ie.IPV4ADDRESS.test(yn[yn.length-1]),Qt=On?7:8,Wn=yn.length-Qt,Qn=Array(Qt),Kn=0;Kn<Qt;++Kn)Qn[Kn]=Xt[Kn]||yn[Wn+Kn]||"";On&&(Qn[Qt-1]=U(Qn[Qt-1],ie));var Vr=Qn.reduce(function(Hn,gi,Lr){if(!gi||gi==="0"){var Zr=Hn[Hn.length-1];Zr&&Zr.index+Zr.length===Lr?Zr.length++:Hn.push({index:Lr,length:1})}return Hn},[]),mi=Vr.sort(function(Hn,gi){return gi.length-Hn.length})[0],Ir=void 0;if(mi&&mi.length>1){var qi=Qn.slice(0,mi.index),vi=Qn.slice(mi.index+mi.length);Ir=qi.join(":")+"::"+vi.join(":")}else Ir=Qn.join(":");return bt&&(Ir+="%"+bt),Ir}else return de}var oe=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,pe="".match(/(){0}/)[1]===void 0;function Ce(de){var ie=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},ge={},Ae=ie.iri!==!1?c:f;ie.reference==="suffix"&&(de=(ie.scheme?ie.scheme+":":"")+"//"+de);var Ee=de.match(oe);if(Ee){pe?(ge.scheme=Ee[1],ge.userinfo=Ee[3],ge.host=Ee[4],ge.port=parseInt(Ee[5],10),ge.path=Ee[6]||"",ge.query=Ee[7],ge.fragment=Ee[8],isNaN(ge.port)&&(ge.port=Ee[5])):(ge.scheme=Ee[1]||void 0,ge.userinfo=de.indexOf("@")!==-1?Ee[3]:void 0,ge.host=de.indexOf("//")!==-1?Ee[4]:void 0,ge.port=parseInt(Ee[5],10),ge.path=Ee[6]||"",ge.query=de.indexOf("?")!==-1?Ee[7]:void 0,ge.fragment=de.indexOf("#")!==-1?Ee[8]:void 0,isNaN(ge.port)&&(ge.port=de.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?Ee[4]:void 0)),ge.host&&(ge.host=le(U(ge.host,Ae),Ae)),ge.scheme===void 0&&ge.userinfo===void 0&&ge.host===void 0&&ge.port===void 0&&!ge.path&&ge.query===void 0?ge.reference="same-document":ge.scheme===void 0?ge.reference="relative":ge.fragment===void 0?ge.reference="absolute":ge.reference="uri",ie.reference&&ie.reference!=="suffix"&&ie.reference!==ge.reference&&(ge.error=ge.error||"URI is not a "+ie.reference+" reference.");var bt=q[(ie.scheme||ge.scheme||"").toLowerCase()];if(!ie.unicodeSupport&&(!bt||!bt.unicodeSupport)){if(ge.host&&(ie.domainHost||bt&&bt.domainHost))try{ge.host=T.toASCII(ge.host.replace(Ae.PCT_ENCODED,me).toLowerCase())}catch(kt){ge.error=ge.error||"Host's domain name can not be converted to ASCII via punycode: "+kt}ve(ge,f)}else ve(ge,Ae);bt&&bt.parse&&bt.parse(ge,ie)}else ge.error=ge.error||"URI can not be parsed.";return ge}function ce(de,ie){var ge=ie.iri!==!1?c:f,Ae=[];return de.userinfo!==void 0&&(Ae.push(de.userinfo),Ae.push("@")),de.host!==void 0&&Ae.push(le(U(String(de.host),ge),ge).replace(ge.IPV6ADDRESS,function(Ee,bt,kt){return"["+bt+(kt?"%25"+kt:"")+"]"})),(typeof de.port=="number"||typeof de.port=="string")&&(Ae.push(":"),Ae.push(String(de.port))),Ae.length?Ae.join(""):void 0}var X=/^\.\.?\//,ze=/^\/\.(\/|$)/,Ge=/^\/\.\.(\/|$)/,Ue=/^\/?(?:.|\n)*?(?=\/|$)/;function Me(de){for(var ie=[];de.length;)if(de.match(X))de=de.replace(X,"");else if(de.match(ze))de=de.replace(ze,"/");else if(de.match(Ge))de=de.replace(Ge,"/"),ie.pop();else if(de==="."||de==="..")de="";else{var ge=de.match(Ue);if(ge){var Ae=ge[0];de=de.slice(Ae.length),ie.push(Ae)}else throw new Error("Unexpected dot segment condition")}return ie.join("")}function we(de){var ie=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},ge=ie.iri?c:f,Ae=[],Ee=q[(ie.scheme||de.scheme||"").toLowerCase()];if(Ee&&Ee.serialize&&Ee.serialize(de,ie),de.host&&!ge.IPV6ADDRESS.test(de.host)){if(ie.domainHost||Ee&&Ee.domainHost)try{de.host=ie.iri?T.toUnicode(de.host):T.toASCII(de.host.replace(ge.PCT_ENCODED,me).toLowerCase())}catch($t){de.error=de.error||"Host's domain name can not be converted to "+(ie.iri?"Unicode":"ASCII")+" via punycode: "+$t}}ve(de,ge),ie.reference!=="suffix"&&de.scheme&&(Ae.push(de.scheme),Ae.push(":"));var bt=ce(de,ie);if(bt!==void 0&&(ie.reference!=="suffix"&&Ae.push("//"),Ae.push(bt),de.path&&de.path.charAt(0)!=="/"&&Ae.push("/")),de.path!==void 0){var kt=de.path;!ie.absolutePath&&(!Ee||!Ee.absolutePath)&&(kt=Me(kt)),bt===void 0&&(kt=kt.replace(/^\/\//,"/%2F")),Ae.push(kt)}return de.query!==void 0&&(Ae.push("?"),Ae.push(de.query)),de.fragment!==void 0&&(Ae.push("#"),Ae.push(de.fragment)),Ae.join("")}function Pe(de,ie){var ge=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},Ae=arguments[3],Ee={};return Ae||(de=Ce(we(de,ge),ge),ie=Ce(we(ie,ge),ge)),ge=ge||{},!ge.tolerant&&ie.scheme?(Ee.scheme=ie.scheme,Ee.userinfo=ie.userinfo,Ee.host=ie.host,Ee.port=ie.port,Ee.path=Me(ie.path||""),Ee.query=ie.query):(ie.userinfo!==void 0||ie.host!==void 0||ie.port!==void 0?(Ee.userinfo=ie.userinfo,Ee.host=ie.host,Ee.port=ie.port,Ee.path=Me(ie.path||""),Ee.query=ie.query):(ie.path?(ie.path.charAt(0)==="/"?Ee.path=Me(ie.path):((de.userinfo!==void 0||de.host!==void 0||de.port!==void 0)&&!de.path?Ee.path="/"+ie.path:de.path?Ee.path=de.path.slice(0,de.path.lastIndexOf("/")+1)+ie.path:Ee.path=ie.path,Ee.path=Me(Ee.path)),Ee.query=ie.query):(Ee.path=de.path,ie.query!==void 0?Ee.query=ie.query:Ee.query=de.query),Ee.userinfo=de.userinfo,Ee.host=de.host,Ee.port=de.port),Ee.scheme=de.scheme),Ee.fragment=ie.fragment,Ee}function Be(de,ie,ge){var Ae=u({scheme:"null"},ge);return we(Pe(Ce(de,Ae),Ce(ie,Ae),Ae,!0),Ae)}function et(de,ie){return typeof de=="string"?de=we(Ce(de,ie),ie):o(de)==="object"&&(de=Ce(we(de,ie),ie)),de}function it(de,ie,ge){return typeof de=="string"?de=we(Ce(de,ge),ge):o(de)==="object"&&(de=we(de,ge)),typeof ie=="string"?ie=we(Ce(ie,ge),ge):o(ie)==="object"&&(ie=we(ie,ge)),de===ie}function xe(de,ie){return de&&de.toString().replace(!ie||!ie.iri?f.ESCAPE:c.ESCAPE,Q)}function Qe(de,ie){return de&&de.toString().replace(!ie||!ie.iri?f.PCT_ENCODED:c.PCT_ENCODED,me)}var Nt={scheme:"http",domainHost:!0,parse:function(ie,ge){return ie.host||(ie.error=ie.error||"HTTP URIs must have a host."),ie},serialize:function(ie,ge){var Ae=String(ie.scheme).toLowerCase()==="https";return(ie.port===(Ae?443:80)||ie.port==="")&&(ie.port=void 0),ie.path||(ie.path="/"),ie}},Cn={scheme:"https",domainHost:Nt.domainHost,parse:Nt.parse,serialize:Nt.serialize};function Ln(de){return typeof de.secure=="boolean"?de.secure:String(de.scheme).toLowerCase()==="wss"}var re={scheme:"ws",domainHost:!0,parse:function(ie,ge){var Ae=ie;return Ae.secure=Ln(Ae),Ae.resourceName=(Ae.path||"/")+(Ae.query?"?"+Ae.query:""),Ae.path=void 0,Ae.query=void 0,Ae},serialize:function(ie,ge){if((ie.port===(Ln(ie)?443:80)||ie.port==="")&&(ie.port=void 0),typeof ie.secure=="boolean"&&(ie.scheme=ie.secure?"wss":"ws",ie.secure=void 0),ie.resourceName){var Ae=ie.resourceName.split("?"),Ee=d(Ae,2),bt=Ee[0],kt=Ee[1];ie.path=bt&&bt!=="/"?bt:void 0,ie.query=kt,ie.resourceName=void 0}return ie.fragment=void 0,ie}},he={scheme:"wss",domainHost:re.domainHost,parse:re.parse,serialize:re.serialize},_e={},je="[A-Za-z0-9\\-\\.\\_\\~\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]",Ne="[0-9A-Fa-f]",Ye=i(i("%[EFef]"+Ne+"%"+Ne+Ne+"%"+Ne+Ne)+"|"+i("%[89A-Fa-f]"+Ne+"%"+Ne+Ne)+"|"+i("%"+Ne+Ne)),pt="[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]",Ct="[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",$e=r(Ct,'[\\"\\\\]'),lt="[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]",wt=new RegExp(je,"g"),ct=new RegExp(Ye,"g"),_t=new RegExp(r("[^]",pt,"[\\.]",'[\\"]',$e),"g"),Ht=new RegExp(r("[^]",je,lt),"g"),Et=Ht;function zt(de){var ie=me(de);return ie.match(wt)?ie:de}var Yt={scheme:"mailto",parse:function(ie,ge){var Ae=ie,Ee=Ae.to=Ae.path?Ae.path.split(","):[];if(Ae.path=void 0,Ae.query){for(var bt=!1,kt={},$t=Ae.query.split("&"),Xe=0,xt=$t.length;Xe<xt;++Xe){var Xt=$t[Xe].split("=");switch(Xt[0]){case"to":for(var yn=Xt[1].split(","),On=0,Qt=yn.length;On<Qt;++On)Ee.push(yn[On]);break;case"subject":Ae.subject=Qe(Xt[1],ge);break;case"body":Ae.body=Qe(Xt[1],ge);break;default:bt=!0,kt[Qe(Xt[0],ge)]=Qe(Xt[1],ge);break}}bt&&(Ae.headers=kt)}Ae.query=void 0;for(var Wn=0,Qn=Ee.length;Wn<Qn;++Wn){var Kn=Ee[Wn].split("@");if(Kn[0]=Qe(Kn[0]),ge.unicodeSupport)Kn[1]=Qe(Kn[1],ge).toLowerCase();else try{Kn[1]=T.toASCII(Qe(Kn[1],ge).toLowerCase())}catch(Vr){Ae.error=Ae.error||"Email address's domain name can not be converted to ASCII via punycode: "+Vr}Ee[Wn]=Kn.join("@")}return Ae},serialize:function(ie,ge){var Ae=ie,Ee=s(ie.to);if(Ee){for(var bt=0,kt=Ee.length;bt<kt;++bt){var $t=String(Ee[bt]),Xe=$t.lastIndexOf("@"),xt=$t.slice(0,Xe).replace(ct,zt).replace(ct,a).replace(_t,Q),Xt=$t.slice(Xe+1);try{Xt=ge.iri?T.toUnicode(Xt):T.toASCII(Qe(Xt,ge).toLowerCase())}catch(Wn){Ae.error=Ae.error||"Email address's domain name can not be converted to "+(ge.iri?"Unicode":"ASCII")+" via punycode: "+Wn}Ee[bt]=xt+"@"+Xt}Ae.path=Ee.join(",")}var yn=ie.headers=ie.headers||{};ie.subject&&(yn.subject=ie.subject),ie.body&&(yn.body=ie.body);var On=[];for(var Qt in yn)yn[Qt]!==_e[Qt]&&On.push(Qt.replace(ct,zt).replace(ct,a).replace(Ht,Q)+"="+yn[Qt].replace(ct,zt).replace(ct,a).replace(Et,Q));return On.length&&(Ae.query=On.join("&")),Ae}},en=/^([^\:]+)\:(.*)/,Ke={scheme:"urn",parse:function(ie,ge){var Ae=ie.path&&ie.path.match(en),Ee=ie;if(Ae){var bt=ge.scheme||Ee.scheme||"urn",kt=Ae[1].toLowerCase(),$t=Ae[2],Xe=bt+":"+(ge.nid||kt),xt=q[Xe];Ee.nid=kt,Ee.nss=$t,Ee.path=void 0,xt&&(Ee=xt.parse(Ee,ge))}else Ee.error=Ee.error||"URN can not be parsed.";return Ee},serialize:function(ie,ge){var Ae=ge.scheme||ie.scheme||"urn",Ee=ie.nid,bt=Ae+":"+(ge.nid||Ee),kt=q[bt];kt&&(ie=kt.serialize(ie,ge));var $t=ie,Xe=ie.nss;return $t.path=(Ee||ge.nid)+":"+Xe,$t}},pr=/^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/,$n={scheme:"urn:uuid",parse:function(ie,ge){var Ae=ie;return Ae.uuid=Ae.nss,Ae.nss=void 0,!ge.tolerant&&(!Ae.uuid||!Ae.uuid.match(pr))&&(Ae.error=Ae.error||"UUID is not valid."),Ae},serialize:function(ie,ge){var Ae=ie;return Ae.nss=(ie.uuid||"").toLowerCase(),Ae}};q[Nt.scheme]=Nt,q[Cn.scheme]=Cn,q[re.scheme]=re,q[he.scheme]=he,q[Yt.scheme]=Yt,q[Ke.scheme]=Ke,q[$n.scheme]=$n,n.SCHEMES=q,n.pctEncChar=Q,n.pctDecChars=me,n.parse=Ce,n.removeDotSegments=Me,n.serialize=we,n.resolveComponents=Pe,n.resolve=Be,n.normalize=et,n.equal=it,n.escapeComponent=xe,n.unescapeComponent=Qe,Object.defineProperty(n,"__esModule",{value:!0})})})(Hb,Hb.exports),Object.defineProperty(qb,"__esModule",{value:!0});const $D=Hb.exports;$D.code='require("ajv/dist/runtime/uri").default',qb.default=$D,function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.CodeGen=t.Name=t.nil=t.stringify=t.str=t._=t.KeywordCxt=void 0;var e=Wo;Object.defineProperty(t,"KeywordCxt",{enumerable:!0,get:function(){return e.KeywordCxt}});var n=jn;Object.defineProperty(t,"_",{enumerable:!0,get:function(){return n._}}),Object.defineProperty(t,"str",{enumerable:!0,get:function(){return n.str}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return n.stringify}}),Object.defineProperty(t,"nil",{enumerable:!0,get:function(){return n.nil}}),Object.defineProperty(t,"Name",{enumerable:!0,get:function(){return n.Name}}),Object.defineProperty(t,"CodeGen",{enumerable:!0,get:function(){return n.CodeGen}});const r=_m,i=xm,o=Pu,a=Fi,s=jn,u=Yr,l=Vf,f=In,c=yoe,d=qb,h=(I,L)=>new RegExp(I,L);h.code="new RegExp";const p=["removeAdditional","useDefaults","coerceTypes"],m=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),g={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},v={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},y=200;function k(I){var L,B,N,x,j,T,q,Q,me,ve,R,U,le,oe,pe,Ce,ce,X,ze,Ge,Ue,Me,we,Pe,Be;const et=I.strict,it=(L=I.code)===null||L===void 0?void 0:L.optimize,xe=it===!0||it===void 0?1:it||0,Qe=(N=(B=I.code)===null||B===void 0?void 0:B.regExp)!==null&&N!==void 0?N:h,Nt=(x=I.uriResolver)!==null&&x!==void 0?x:d.default;return{strictSchema:(T=(j=I.strictSchema)!==null&&j!==void 0?j:et)!==null&&T!==void 0?T:!0,strictNumbers:(Q=(q=I.strictNumbers)!==null&&q!==void 0?q:et)!==null&&Q!==void 0?Q:!0,strictTypes:(ve=(me=I.strictTypes)!==null&&me!==void 0?me:et)!==null&&ve!==void 0?ve:"log",strictTuples:(U=(R=I.strictTuples)!==null&&R!==void 0?R:et)!==null&&U!==void 0?U:"log",strictRequired:(oe=(le=I.strictRequired)!==null&&le!==void 0?le:et)!==null&&oe!==void 0?oe:!1,code:I.code?{...I.code,optimize:xe,regExp:Qe}:{optimize:xe,regExp:Qe},loopRequired:(pe=I.loopRequired)!==null&&pe!==void 0?pe:y,loopEnum:(Ce=I.loopEnum)!==null&&Ce!==void 0?Ce:y,meta:(ce=I.meta)!==null&&ce!==void 0?ce:!0,messages:(X=I.messages)!==null&&X!==void 0?X:!0,inlineRefs:(ze=I.inlineRefs)!==null&&ze!==void 0?ze:!0,schemaId:(Ge=I.schemaId)!==null&&Ge!==void 0?Ge:"$id",addUsedSchema:(Ue=I.addUsedSchema)!==null&&Ue!==void 0?Ue:!0,validateSchema:(Me=I.validateSchema)!==null&&Me!==void 0?Me:!0,validateFormats:(we=I.validateFormats)!==null&&we!==void 0?we:!0,unicodeRegExp:(Pe=I.unicodeRegExp)!==null&&Pe!==void 0?Pe:!0,int32range:(Be=I.int32range)!==null&&Be!==void 0?Be:!0,uriResolver:Nt}}class w{constructor(L={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,L=this.opts={...L,...k(L)};const{es5:B,lines:N}=this.opts.code;this.scope=new s.ValueScope({scope:{},prefixes:m,es5:B,lines:N}),this.logger=z(L.logger);const x=L.validateFormats;L.validateFormats=!1,this.RULES=(0,o.getRules)(),_.call(this,g,L,"NOT SUPPORTED"),_.call(this,v,L,"DEPRECATED","warn"),this._metaOpts=E.call(this),L.formats&&A.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),L.keywords&&$.call(this,L.keywords),typeof L.meta=="object"&&this.addMetaSchema(L.meta),C.call(this),L.validateFormats=x}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){const{$data:L,meta:B,schemaId:N}=this.opts;let x=c;N==="id"&&(x={...c},x.id=x.$id,delete x.$id),B&&L&&this.addMetaSchema(x,x[N],!1)}defaultMeta(){const{meta:L,schemaId:B}=this.opts;return this.opts.defaultMeta=typeof L=="object"?L[B]||L:void 0}validate(L,B){let N;if(typeof L=="string"){if(N=this.getSchema(L),!N)throw new Error(`no schema with key or ref "${L}"`)}else N=this.compile(L);const x=N(B);return"$async"in N||(this.errors=N.errors),x}compile(L,B){const N=this._addSchema(L,B);return N.validate||this._compileSchemaEnv(N)}compileAsync(L,B){if(typeof this.opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");const{loadSchema:N}=this.opts;return x.call(this,L,B);async function x(ve,R){await j.call(this,ve.$schema);const U=this._addSchema(ve,R);return U.validate||T.call(this,U)}async function j(ve){ve&&!this.getSchema(ve)&&await x.call(this,{$ref:ve},!0)}async function T(ve){try{return this._compileSchemaEnv(ve)}catch(R){if(!(R instanceof i.default))throw R;return q.call(this,R),await Q.call(this,R.missingSchema),T.call(this,ve)}}function q({missingSchema:ve,missingRef:R}){if(this.refs[ve])throw new Error(`AnySchema ${ve} is loaded but ${R} cannot be resolved`)}async function Q(ve){const R=await me.call(this,ve);this.refs[ve]||await j.call(this,R.$schema),this.refs[ve]||this.addSchema(R,ve,B)}async function me(ve){const R=this._loading[ve];if(R)return R;try{return await(this._loading[ve]=N(ve))}finally{delete this._loading[ve]}}}addSchema(L,B,N,x=this.opts.validateSchema){if(Array.isArray(L)){for(const T of L)this.addSchema(T,void 0,N,x);return this}let j;if(typeof L=="object"){const{schemaId:T}=this.opts;if(j=L[T],j!==void 0&&typeof j!="string")throw new Error(`schema ${T} must be string`)}return B=(0,u.normalizeId)(B||j),this._checkUnique(B),this.schemas[B]=this._addSchema(L,N,B,x,!0),this}addMetaSchema(L,B,N=this.opts.validateSchema){return this.addSchema(L,B,!0,N),this}validateSchema(L,B){if(typeof L=="boolean")return!0;let N;if(N=L.$schema,N!==void 0&&typeof N!="string")throw new Error("$schema must be a string");if(N=N||this.opts.defaultMeta||this.defaultMeta(),!N)return this.logger.warn("meta-schema not available"),this.errors=null,!0;const x=this.validate(N,L);if(!x&&B){const j="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(j);else throw new Error(j)}return x}getSchema(L){let B;for(;typeof(B=S.call(this,L))=="string";)L=B;if(B===void 0){const{schemaId:N}=this.opts,x=new a.SchemaEnv({schema:{},schemaId:N});if(B=a.resolveSchema.call(this,x,L),!B)return;this.refs[L]=B}return B.validate||this._compileSchemaEnv(B)}removeSchema(L){if(L instanceof RegExp)return this._removeAllSchemas(this.schemas,L),this._removeAllSchemas(this.refs,L),this;switch(typeof L){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{const B=S.call(this,L);return typeof B=="object"&&this._cache.delete(B.schema),delete this.schemas[L],delete this.refs[L],this}case"object":{const B=L;this._cache.delete(B);let N=L[this.opts.schemaId];return N&&(N=(0,u.normalizeId)(N),delete this.schemas[N],delete this.refs[N]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(L){for(const B of L)this.addKeyword(B);return this}addKeyword(L,B){let N;if(typeof L=="string")N=L,typeof B=="object"&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),B.keyword=N);else if(typeof L=="object"&&B===void 0){if(B=L,N=B.keyword,Array.isArray(N)&&!N.length)throw new Error("addKeywords: keyword must be string or non-empty array")}else throw new Error("invalid addKeywords parameters");if(M.call(this,N,B),!B)return(0,f.eachItem)(N,j=>H.call(this,j)),this;V.call(this,B);const x={...B,type:(0,l.getJSONTypes)(B.type),schemaType:(0,l.getJSONTypes)(B.schemaType)};return(0,f.eachItem)(N,x.type.length===0?j=>H.call(this,j,x):j=>x.type.forEach(T=>H.call(this,j,x,T))),this}getKeyword(L){const B=this.RULES.all[L];return typeof B=="object"?B.definition:!!B}removeKeyword(L){const{RULES:B}=this;delete B.keywords[L],delete B.all[L];for(const N of B.rules){const x=N.rules.findIndex(j=>j.keyword===L);x>=0&&N.rules.splice(x,1)}return this}addFormat(L,B){return typeof B=="string"&&(B=new RegExp(B)),this.formats[L]=B,this}errorsText(L=this.errors,{separator:B=", ",dataVar:N="data"}={}){return!L||L.length===0?"No errors":L.map(x=>`${N}${x.instancePath} ${x.message}`).reduce((x,j)=>x+B+j)}$dataMetaSchema(L,B){const N=this.RULES.all;L=JSON.parse(JSON.stringify(L));for(const x of B){const j=x.split("/").slice(1);let T=L;for(const q of j)T=T[q];for(const q in N){const Q=N[q];if(typeof Q!="object")continue;const{$data:me}=Q.definition,ve=T[q];me&&ve&&(T[q]=F(ve))}}return L}_removeAllSchemas(L,B){for(const N in L){const x=L[N];(!B||B.test(N))&&(typeof x=="string"?delete L[N]:x&&!x.meta&&(this._cache.delete(x.schema),delete L[N]))}}_addSchema(L,B,N,x=this.opts.validateSchema,j=this.opts.addUsedSchema){let T;const{schemaId:q}=this.opts;if(typeof L=="object")T=L[q];else{if(this.opts.jtd)throw new Error("schema must be object");if(typeof L!="boolean")throw new Error("schema must be object or boolean")}let Q=this._cache.get(L);if(Q!==void 0)return Q;N=(0,u.normalizeId)(T||N);const me=u.getSchemaRefs.call(this,L,N);return Q=new a.SchemaEnv({schema:L,schemaId:q,meta:B,baseId:N,localRefs:me}),this._cache.set(Q.schema,Q),j&&!N.startsWith("#")&&(N&&this._checkUnique(N),this.refs[N]=Q),x&&this.validateSchema(L,!0),Q}_checkUnique(L){if(this.schemas[L]||this.refs[L])throw new Error(`schema with key or id "${L}" already exists`)}_compileSchemaEnv(L){if(L.meta?this._compileMetaSchema(L):a.compileSchema.call(this,L),!L.validate)throw new Error("ajv implementation error");return L.validate}_compileMetaSchema(L){const B=this.opts;this.opts=this._metaOpts;try{a.compileSchema.call(this,L)}finally{this.opts=B}}}t.default=w,w.ValidationError=r.default,w.MissingRefError=i.default;function _(I,L,B,N="error"){for(const x in I){const j=x;j in L&&this.logger[N](`${B}: option ${x}. ${I[j]}`)}}function S(I){return I=(0,u.normalizeId)(I),this.schemas[I]||this.refs[I]}function C(){const I=this.opts.schemas;if(!!I)if(Array.isArray(I))this.addSchema(I);else for(const L in I)this.addSchema(I[L],L)}function A(){for(const I in this.opts.formats){const L=this.opts.formats[I];L&&this.addFormat(I,L)}}function $(I){if(Array.isArray(I)){this.addVocabulary(I);return}this.logger.warn("keywords option as map is deprecated, pass array");for(const L in I){const B=I[L];B.keyword||(B.keyword=L),this.addKeyword(B)}}function E(){const I={...this.opts};for(const L of p)delete I[L];return I}const O={log(){},warn(){},error(){}};function z(I){if(I===!1)return O;if(I===void 0)return console;if(I.log&&I.warn&&I.error)return I;throw new Error("logger must implement log, warn and error methods")}const P=/^[a-z_$][a-z0-9_$:-]*$/i;function M(I,L){const{RULES:B}=this;if((0,f.eachItem)(I,N=>{if(B.keywords[N])throw new Error(`Keyword ${N} is already defined`);if(!P.test(N))throw new Error(`Keyword ${N} has invalid name`)}),!!L&&L.$data&&!("code"in L||"validate"in L))throw new Error('$data keyword must have "code" or "validate" function')}function H(I,L,B){var N;const x=L==null?void 0:L.post;if(B&&x)throw new Error('keyword with "post" flag cannot have "type"');const{RULES:j}=this;let T=x?j.post:j.rules.find(({type:Q})=>Q===B);if(T||(T={type:B,rules:[]},j.rules.push(T)),j.keywords[I]=!0,!L)return;const q={keyword:I,definition:{...L,type:(0,l.getJSONTypes)(L.type),schemaType:(0,l.getJSONTypes)(L.schemaType)}};L.before?G.call(this,T,q,L.before):T.rules.push(q),j.all[I]=q,(N=L.implements)===null||N===void 0||N.forEach(Q=>this.addKeyword(Q))}function G(I,L,B){const N=I.rules.findIndex(x=>x.keyword===B);N>=0?I.rules.splice(N,0,L):(I.rules.push(L),this.logger.warn(`rule ${B} is not defined`))}function V(I){let{metaSchema:L}=I;L!==void 0&&(I.$data&&this.opts.$data&&(L=F(L)),I.validateSchema=this.compile(L,!0))}const J={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function F(I){return{anyOf:[I,J]}}}(GL);var Ub={},Wb={},Kb={};Object.defineProperty(Kb,"__esModule",{value:!0});const boe={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};Kb.default=boe;var Lu={};Object.defineProperty(Lu,"__esModule",{value:!0}),Lu.callRef=Lu.getValidate=void 0;const koe=xm,OD=Sn,Vi=jn,Zl=Oa,ED=Fi,Cm=In,woe={keyword:"$ref",schemaType:"string",code(t){const{gen:e,schema:n,it:r}=t,{baseId:i,schemaEnv:o,validateName:a,opts:s,self:u}=r,{root:l}=o;if((n==="#"||n==="#/")&&i===l.baseId)return c();const f=ED.resolveRef.call(u,l,i,n);if(f===void 0)throw new koe.default(r.opts.uriResolver,i,n);if(f instanceof ED.SchemaEnv)return d(f);return h(f);function c(){if(o===l)return $m(t,a,o,o.$async);const p=e.scopeValue("root",{ref:l});return $m(t,(0,Vi._)`${p}.validate`,l,l.$async)}function d(p){const m=TD(t,p);$m(t,m,p,p.$async)}function h(p){const m=e.scopeValue("schema",s.code.source===!0?{ref:p,code:(0,Vi.stringify)(p)}:{ref:p}),g=e.name("valid"),v=t.subschema({schema:p,dataTypes:[],schemaPath:Vi.nil,topSchemaRef:m,errSchemaPath:n},g);t.mergeEvaluated(v),t.ok(g)}}};function TD(t,e){const{gen:n}=t;return e.validate?n.scopeValue("validate",{ref:e.validate}):(0,Vi._)`${n.scopeValue("wrapper",{ref:e})}.validate`}Lu.getValidate=TD;function $m(t,e,n,r){const{gen:i,it:o}=t,{allErrors:a,schemaEnv:s,opts:u}=o,l=u.passContext?Zl.default.this:Vi.nil;r?f():c();function f(){if(!s.$async)throw new Error("async schema referenced by sync schema");const p=i.let("valid");i.try(()=>{i.code((0,Vi._)`await ${(0,OD.callValidateCode)(t,e,l)}`),h(e),a||i.assign(p,!0)},m=>{i.if((0,Vi._)`!(${m} instanceof ${o.ValidationError})`,()=>i.throw(m)),d(m),a||i.assign(p,!1)}),t.ok(p)}function c(){t.result((0,OD.callValidateCode)(t,e,l),()=>h(e),()=>d(e))}function d(p){const m=(0,Vi._)`${p}.errors`;i.assign(Zl.default.vErrors,(0,Vi._)`${Zl.default.vErrors} === null ? ${m} : ${Zl.default.vErrors}.concat(${m})`),i.assign(Zl.default.errors,(0,Vi._)`${Zl.default.vErrors}.length`)}function h(p){var m;if(!o.opts.unevaluated)return;const g=(m=n==null?void 0:n.validate)===null||m===void 0?void 0:m.evaluated;if(o.props!==!0)if(g&&!g.dynamicProps)g.props!==void 0&&(o.props=Cm.mergeEvaluated.props(i,g.props,o.props));else{const v=i.var("props",(0,Vi._)`${p}.evaluated.props`);o.props=Cm.mergeEvaluated.props(i,v,o.props,Vi.Name)}if(o.items!==!0)if(g&&!g.dynamicItems)g.items!==void 0&&(o.items=Cm.mergeEvaluated.items(i,g.items,o.items));else{const v=i.var("items",(0,Vi._)`${p}.evaluated.items`);o.items=Cm.mergeEvaluated.items(i,v,o.items,Vi.Name)}}}Lu.callRef=$m,Lu.default=woe,Object.defineProperty(Wb,"__esModule",{value:!0});const _oe=Kb,xoe=Lu,joe=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",_oe.default,xoe.default];Wb.default=joe;var Jb={},Gb={};Object.defineProperty(Gb,"__esModule",{value:!0});const Om=jn,qs=Om.operators,Em={maximum:{okStr:"<=",ok:qs.LTE,fail:qs.GT},minimum:{okStr:">=",ok:qs.GTE,fail:qs.LT},exclusiveMaximum:{okStr:"<",ok:qs.LT,fail:qs.GTE},exclusiveMinimum:{okStr:">",ok:qs.GT,fail:qs.LTE}},Soe={message:({keyword:t,schemaCode:e})=>(0,Om.str)`must be ${Em[t].okStr} ${e}`,params:({keyword:t,schemaCode:e})=>(0,Om._)`{comparison: ${Em[t].okStr}, limit: ${e}}`},Coe={keyword:Object.keys(Em),type:"number",schemaType:"number",$data:!0,error:Soe,code(t){const{keyword:e,data:n,schemaCode:r}=t;t.fail$data((0,Om._)`${n} ${Em[e].fail} ${r} || isNaN(${n})`)}};Gb.default=Coe;var Qb={};Object.defineProperty(Qb,"__esModule",{value:!0});const Uf=jn,$oe={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:{message:({schemaCode:t})=>(0,Uf.str)`must be multiple of ${t}`,params:({schemaCode:t})=>(0,Uf._)`{multipleOf: ${t}}`},code(t){const{gen:e,data:n,schemaCode:r,it:i}=t,o=i.opts.multipleOfPrecision,a=e.let("res"),s=o?(0,Uf._)`Math.abs(Math.round(${a}) - ${a}) > 1e-${o}`:(0,Uf._)`${a} !== parseInt(${a})`;t.fail$data((0,Uf._)`(${r} === 0 || (${a} = ${n}/${r}, ${s}))`)}};Qb.default=$oe;var Yb={},Xb={};Object.defineProperty(Xb,"__esModule",{value:!0});function AD(t){const e=t.length;let n=0,r=0,i;for(;r<e;)n++,i=t.charCodeAt(r++),i>=55296&&i<=56319&&r<e&&(i=t.charCodeAt(r),(i&64512)===56320&&r++);return n}Xb.default=AD,AD.code='require("ajv/dist/runtime/ucs2length").default',Object.defineProperty(Yb,"__esModule",{value:!0});const Du=jn,Ooe=In,Eoe=Xb,Toe={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:{message({keyword:t,schemaCode:e}){const n=t==="maxLength"?"more":"fewer";return(0,Du.str)`must NOT have ${n} than ${e} characters`},params:({schemaCode:t})=>(0,Du._)`{limit: ${t}}`},code(t){const{keyword:e,data:n,schemaCode:r,it:i}=t,o=e==="maxLength"?Du.operators.GT:Du.operators.LT,a=i.opts.unicode===!1?(0,Du._)`${n}.length`:(0,Du._)`${(0,Ooe.useFunc)(t.gen,Eoe.default)}(${n})`;t.fail$data((0,Du._)`${a} ${o} ${r}`)}};Yb.default=Toe;var Zb={};Object.defineProperty(Zb,"__esModule",{value:!0});const Aoe=Sn,Tm=jn,Moe={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:{message:({schemaCode:t})=>(0,Tm.str)`must match pattern "${t}"`,params:({schemaCode:t})=>(0,Tm._)`{pattern: ${t}}`},code(t){const{data:e,$data:n,schema:r,schemaCode:i,it:o}=t,a=o.opts.unicodeRegExp?"u":"",s=n?(0,Tm._)`(new RegExp(${i}, ${a}))`:(0,Aoe.usePattern)(t,r);t.fail$data((0,Tm._)`!${s}.test(${e})`)}};Zb.default=Moe;var ek={};Object.defineProperty(ek,"__esModule",{value:!0});const Wf=jn,Poe={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:{message({keyword:t,schemaCode:e}){const n=t==="maxProperties"?"more":"fewer";return(0,Wf.str)`must NOT have ${n} than ${e} properties`},params:({schemaCode:t})=>(0,Wf._)`{limit: ${t}}`},code(t){const{keyword:e,data:n,schemaCode:r}=t,i=e==="maxProperties"?Wf.operators.GT:Wf.operators.LT;t.fail$data((0,Wf._)`Object.keys(${n}).length ${i} ${r}`)}};ek.default=Poe;var tk={};Object.defineProperty(tk,"__esModule",{value:!0});const Kf=Sn,Jf=jn,Noe=In,Ioe={keyword:"required",type:"object",schemaType:"array",$data:!0,error:{message:({params:{missingProperty:t}})=>(0,Jf.str)`must have required property '${t}'`,params:({params:{missingProperty:t}})=>(0,Jf._)`{missingProperty: ${t}}`},code(t){const{gen:e,schema:n,schemaCode:r,data:i,$data:o,it:a}=t,{opts:s}=a;if(!o&&n.length===0)return;const u=n.length>=s.loopRequired;if(a.allErrors?l():f(),s.strictRequired){const h=t.parentSchema.properties,{definedProperties:p}=t.it;for(const m of n)if((h==null?void 0:h[m])===void 0&&!p.has(m)){const g=a.schemaEnv.baseId+a.errSchemaPath,v=`required property "${m}" is not defined at "${g}" (strictRequired)`;(0,Noe.checkStrictMode)(a,v,a.opts.strictRequired)}}function l(){if(u||o)t.block$data(Jf.nil,c);else for(const h of n)(0,Kf.checkReportMissingProp)(t,h)}function f(){const h=e.let("missing");if(u||o){const p=e.let("valid",!0);t.block$data(p,()=>d(h,p)),t.ok(p)}else e.if((0,Kf.checkMissingProp)(t,n,h)),(0,Kf.reportMissingProp)(t,h),e.else()}function c(){e.forOf("prop",r,h=>{t.setParams({missingProperty:h}),e.if((0,Kf.noPropertyInData)(e,i,h,s.ownProperties),()=>t.error())})}function d(h,p){t.setParams({missingProperty:h}),e.forOf(h,r,()=>{e.assign(p,(0,Kf.propertyInData)(e,i,h,s.ownProperties)),e.if((0,Jf.not)(p),()=>{t.error(),e.break()})},Jf.nil)}}};tk.default=Ioe;var nk={};Object.defineProperty(nk,"__esModule",{value:!0});const Gf=jn,Loe={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:{message({keyword:t,schemaCode:e}){const n=t==="maxItems"?"more":"fewer";return(0,Gf.str)`must NOT have ${n} than ${e} items`},params:({schemaCode:t})=>(0,Gf._)`{limit: ${t}}`},code(t){const{keyword:e,data:n,schemaCode:r}=t,i=e==="maxItems"?Gf.operators.GT:Gf.operators.LT;t.fail$data((0,Gf._)`${n}.length ${i} ${r}`)}};nk.default=Loe;var rk={},Qf={};Object.defineProperty(Qf,"__esModule",{value:!0});const MD=oD;MD.code='require("ajv/dist/runtime/equal").default',Qf.default=MD,Object.defineProperty(rk,"__esModule",{value:!0});const ik=Vf,Xr=jn,Doe=In,Roe=Qf,Boe={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:{message:({params:{i:t,j:e}})=>(0,Xr.str)`must NOT have duplicate items (items ## ${e} and ${t} are identical)`,params:({params:{i:t,j:e}})=>(0,Xr._)`{i: ${t}, j: ${e}}`},code(t){const{gen:e,data:n,$data:r,schema:i,parentSchema:o,schemaCode:a,it:s}=t;if(!r&&!i)return;const u=e.let("valid"),l=o.items?(0,ik.getSchemaTypes)(o.items):[];t.block$data(u,f,(0,Xr._)`${a} === false`),t.ok(u);function f(){const p=e.let("i",(0,Xr._)`${n}.length`),m=e.let("j");t.setParams({i:p,j:m}),e.assign(u,!0),e.if((0,Xr._)`${p} > 1`,()=>(c()?d:h)(p,m))}function c(){return l.length>0&&!l.some(p=>p==="object"||p==="array")}function d(p,m){const g=e.name("item"),v=(0,ik.checkDataTypes)(l,g,s.opts.strictNumbers,ik.DataType.Wrong),y=e.const("indices",(0,Xr._)`{}`);e.for((0,Xr._)`;${p}--;`,()=>{e.let(g,(0,Xr._)`${n}[${p}]`),e.if(v,(0,Xr._)`continue`),l.length>1&&e.if((0,Xr._)`typeof ${g} == "string"`,(0,Xr._)`${g} += "_"`),e.if((0,Xr._)`typeof ${y}[${g}] == "number"`,()=>{e.assign(m,(0,Xr._)`${y}[${g}]`),t.error(),e.assign(u,!1).break()}).code((0,Xr._)`${y}[${g}] = ${p}`)})}function h(p,m){const g=(0,Doe.useFunc)(e,Roe.default),v=e.name("outer");e.label(v).for((0,Xr._)`;${p}--;`,()=>e.for((0,Xr._)`${m} = ${p}; ${m}--;`,()=>e.if((0,Xr._)`${g}(${n}[${p}], ${n}[${m}])`,()=>{t.error(),e.assign(u,!1).break(v)})))}}};rk.default=Boe;var ok={};Object.defineProperty(ok,"__esModule",{value:!0});const ak=jn,zoe=In,Foe=Qf,Voe={keyword:"const",$data:!0,error:{message:"must be equal to constant",params:({schemaCode:t})=>(0,ak._)`{allowedValue: ${t}}`},code(t){const{gen:e,data:n,$data:r,schemaCode:i,schema:o}=t;r||o&&typeof o=="object"?t.fail$data((0,ak._)`!${(0,zoe.useFunc)(e,Foe.default)}(${n}, ${i})`):t.fail((0,ak._)`${o} !== ${n}`)}};ok.default=Voe;var sk={};Object.defineProperty(sk,"__esModule",{value:!0});const Yf=jn,qoe=In,Hoe=Qf,Uoe={keyword:"enum",schemaType:"array",$data:!0,error:{message:"must be equal to one of the allowed values",params:({schemaCode:t})=>(0,Yf._)`{allowedValues: ${t}}`},code(t){const{gen:e,data:n,$data:r,schema:i,schemaCode:o,it:a}=t;if(!r&&i.length===0)throw new Error("enum must have non-empty array");const s=i.length>=a.opts.loopEnum;let u;const l=()=>u!=null?u:u=(0,qoe.useFunc)(e,Hoe.default);let f;if(s||r)f=e.let("valid"),t.block$data(f,c);else{if(!Array.isArray(i))throw new Error("ajv implementation error");const h=e.const("vSchema",o);f=(0,Yf.or)(...i.map((p,m)=>d(h,m)))}t.pass(f);function c(){e.assign(f,!1),e.forOf("v",o,h=>e.if((0,Yf._)`${l()}(${n}, ${h})`,()=>e.assign(f,!0).break()))}function d(h,p){const m=i[p];return typeof m=="object"&&m!==null?(0,Yf._)`${l()}(${n}, ${h}[${p}])`:(0,Yf._)`${n} === ${m}`}}};sk.default=Uoe,Object.defineProperty(Jb,"__esModule",{value:!0});const Woe=Gb,Koe=Qb,Joe=Yb,Goe=Zb,Qoe=ek,Yoe=tk,Xoe=nk,Zoe=rk,eae=ok,tae=sk,nae=[Woe.default,Koe.default,Joe.default,Goe.default,Qoe.default,Yoe.default,Xoe.default,Zoe.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},eae.default,tae.default];Jb.default=nae;var uk={},ec={};Object.defineProperty(ec,"__esModule",{value:!0}),ec.validateAdditionalItems=void 0;const Ru=jn,lk=In,rae={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:{message:({params:{len:t}})=>(0,Ru.str)`must NOT have more than ${t} items`,params:({params:{len:t}})=>(0,Ru._)`{limit: ${t}}`},code(t){const{parentSchema:e,it:n}=t,{items:r}=e;if(!Array.isArray(r)){(0,lk.checkStrictMode)(n,'"additionalItems" is ignored when "items" is not an array of schemas');return}PD(t,r)}};function PD(t,e){const{gen:n,schema:r,data:i,keyword:o,it:a}=t;a.items=!0;const s=n.const("len",(0,Ru._)`${i}.length`);if(r===!1)t.setParams({len:e.length}),t.pass((0,Ru._)`${s} <= ${e.length}`);else if(typeof r=="object"&&!(0,lk.alwaysValidSchema)(a,r)){const l=n.var("valid",(0,Ru._)`${s} <= ${e.length}`);n.if((0,Ru.not)(l),()=>u(l)),t.ok(l)}function u(l){n.forRange("i",e.length,s,f=>{t.subschema({keyword:o,dataProp:f,dataPropType:lk.Type.Num},l),a.allErrors||n.if((0,Ru.not)(l),()=>n.break())})}}ec.validateAdditionalItems=PD,ec.default=rae;var ck={},tc={};Object.defineProperty(tc,"__esModule",{value:!0}),tc.validateTuple=void 0;const ND=jn,Am=In,iae=Sn,oae={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(t){const{schema:e,it:n}=t;if(Array.isArray(e))return ID(t,"additionalItems",e);n.items=!0,!(0,Am.alwaysValidSchema)(n,e)&&t.ok((0,iae.validateArray)(t))}};function ID(t,e,n=t.schema){const{gen:r,parentSchema:i,data:o,keyword:a,it:s}=t;f(i),s.opts.unevaluated&&n.length&&s.items!==!0&&(s.items=Am.mergeEvaluated.items(r,n.length,s.items));const u=r.name("valid"),l=r.const("len",(0,ND._)`${o}.length`);n.forEach((c,d)=>{(0,Am.alwaysValidSchema)(s,c)||(r.if((0,ND._)`${l} > ${d}`,()=>t.subschema({keyword:a,schemaProp:d,dataProp:d},u)),t.ok(u))});function f(c){const{opts:d,errSchemaPath:h}=s,p=n.length,m=p===c.minItems&&(p===c.maxItems||c[e]===!1);if(d.strictTuples&&!m){const g=`"${a}" is ${p}-tuple, but minItems or maxItems/${e} are not specified or different at path "${h}"`;(0,Am.checkStrictMode)(s,g,d.strictTuples)}}}tc.validateTuple=ID,tc.default=oae,Object.defineProperty(ck,"__esModule",{value:!0});const aae=tc,sae={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:t=>(0,aae.validateTuple)(t,"items")};ck.default=sae;var fk={};Object.defineProperty(fk,"__esModule",{value:!0});const LD=jn,uae=In,lae=Sn,cae=ec,fae={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:{message:({params:{len:t}})=>(0,LD.str)`must NOT have more than ${t} items`,params:({params:{len:t}})=>(0,LD._)`{limit: ${t}}`},code(t){const{schema:e,parentSchema:n,it:r}=t,{prefixItems:i}=n;r.items=!0,!(0,uae.alwaysValidSchema)(r,e)&&(i?(0,cae.validateAdditionalItems)(t,i):t.ok((0,lae.validateArray)(t)))}};fk.default=fae;var dk={};Object.defineProperty(dk,"__esModule",{value:!0});const So=jn,Mm=In,dae={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:{message:({params:{min:t,max:e}})=>e===void 0?(0,So.str)`must contain at least ${t} valid item(s)`:(0,So.str)`must contain at least ${t} and no more than ${e} valid item(s)`,params:({params:{min:t,max:e}})=>e===void 0?(0,So._)`{minContains: ${t}}`:(0,So._)`{minContains: ${t}, maxContains: ${e}}`},code(t){const{gen:e,schema:n,parentSchema:r,data:i,it:o}=t;let a,s;const{minContains:u,maxContains:l}=r;o.opts.next?(a=u===void 0?1:u,s=l):a=1;const f=e.const("len",(0,So._)`${i}.length`);if(t.setParams({min:a,max:s}),s===void 0&&a===0){(0,Mm.checkStrictMode)(o,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(s!==void 0&&a>s){(0,Mm.checkStrictMode)(o,'"minContains" > "maxContains" is always invalid'),t.fail();return}if((0,Mm.alwaysValidSchema)(o,n)){let m=(0,So._)`${f} >= ${a}`;s!==void 0&&(m=(0,So._)`${m} && ${f} <= ${s}`),t.pass(m);return}o.items=!0;const c=e.name("valid");s===void 0&&a===1?h(c,()=>e.if(c,()=>e.break())):a===0?(e.let(c,!0),s!==void 0&&e.if((0,So._)`${i}.length > 0`,d)):(e.let(c,!1),d()),t.result(c,()=>t.reset());function d(){const m=e.name("_valid"),g=e.let("count",0);h(m,()=>e.if(m,()=>p(g)))}function h(m,g){e.forRange("i",0,f,v=>{t.subschema({keyword:"contains",dataProp:v,dataPropType:Mm.Type.Num,compositeRule:!0},m),g()})}function p(m){e.code((0,So._)`${m}++`),s===void 0?e.if((0,So._)`${m} >= ${a}`,()=>e.assign(c,!0).break()):(e.if((0,So._)`${m} > ${s}`,()=>e.assign(c,!1).break()),a===1?e.assign(c,!0):e.if((0,So._)`${m} >= ${a}`,()=>e.assign(c,!0)))}}};dk.default=dae;var DD={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.validateSchemaDeps=t.validatePropertyDeps=t.error=void 0;const e=jn,n=In,r=Sn;t.error={message:({params:{property:u,depsCount:l,deps:f}})=>{const c=l===1?"property":"properties";return(0,e.str)`must have ${c} ${f} when property ${u} is present`},params:({params:{property:u,depsCount:l,deps:f,missingProperty:c}})=>(0,e._)`{property: ${u},
221
221
  missingProperty: ${c},
222
222
  depsCount: ${l},
223
- deps: ${f}}`};const i={keyword:"dependencies",type:"object",schemaType:"object",error:t.error,code(u){const[l,f]=o(u);a(u,l),s(u,f)}};function o({schema:u}){const l={},f={};for(const c in u){if(c==="__proto__")continue;const d=Array.isArray(u[c])?l:f;d[c]=u[c]}return[l,f]}function a(u,l=u.schema){const{gen:f,data:c,it:d}=u;if(Object.keys(l).length===0)return;const h=f.let("missing");for(const p in l){const m=l[p];if(m.length===0)continue;const g=(0,r.propertyInData)(f,c,p,d.opts.ownProperties);u.setParams({property:p,depsCount:m.length,deps:m.join(", ")}),d.allErrors?f.if(g,()=>{for(const v of m)(0,r.checkReportMissingProp)(u,v)}):(f.if((0,e._)`${g} && (${(0,r.checkMissingProp)(u,m,h)})`),(0,r.reportMissingProp)(u,h),f.else())}}t.validatePropertyDeps=a;function s(u,l=u.schema){const{gen:f,data:c,keyword:d,it:h}=u,p=f.name("valid");for(const m in l)(0,n.alwaysValidSchema)(h,l[m])||(f.if((0,r.propertyInData)(f,c,m,h.opts.ownProperties),()=>{const g=u.subschema({keyword:d,schemaProp:m},p);u.mergeValidEvaluated(g,p)},()=>f.var(p,!0)),u.ok(p))}t.validateSchemaDeps=s,t.default=i})(DD);var hk={};Object.defineProperty(hk,"__esModule",{value:!0});const RD=jn,hae=In,pae={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:{message:"property name must be valid",params:({params:t})=>(0,RD._)`{propertyName: ${t.propertyName}}`},code(t){const{gen:e,schema:n,data:r,it:i}=t;if((0,hae.alwaysValidSchema)(i,n))return;const o=e.name("valid");e.forIn("key",r,a=>{t.setParams({propertyName:a}),t.subschema({keyword:"propertyNames",data:a,dataTypes:["string"],propertyName:a,compositeRule:!0},o),e.if((0,RD.not)(o),()=>{t.error(!0),i.allErrors||e.break()})}),t.ok(o)}};hk.default=pae;var Pm={};Object.defineProperty(Pm,"__esModule",{value:!0});const Nm=Sn,Go=jn,mae=Oa,Im=In,vae={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:{message:"must NOT have additional properties",params:({params:t})=>(0,Go._)`{additionalProperty: ${t.additionalProperty}}`},code(t){const{gen:e,schema:n,parentSchema:r,data:i,errsCount:o,it:a}=t;if(!o)throw new Error("ajv implementation error");const{allErrors:s,opts:u}=a;if(a.props=!0,u.removeAdditional!=="all"&&(0,Im.alwaysValidSchema)(a,n))return;const l=(0,Nm.allSchemaProperties)(r.properties),f=(0,Nm.allSchemaProperties)(r.patternProperties);c(),t.ok((0,Go._)`${o} === ${mae.default.errors}`);function c(){e.forIn("key",i,g=>{!l.length&&!f.length?p(g):e.if(d(g),()=>p(g))})}function d(g){let v;if(l.length>8){const y=(0,Im.schemaRefOrVal)(a,r.properties,"properties");v=(0,Nm.isOwnProperty)(e,y,g)}else l.length?v=(0,Go.or)(...l.map(y=>(0,Go._)`${g} === ${y}`)):v=Go.nil;return f.length&&(v=(0,Go.or)(v,...f.map(y=>(0,Go._)`${(0,Nm.usePattern)(t,y)}.test(${g})`))),(0,Go.not)(v)}function h(g){e.code((0,Go._)`delete ${i}[${g}]`)}function p(g){if(u.removeAdditional==="all"||u.removeAdditional&&n===!1){h(g);return}if(n===!1){t.setParams({additionalProperty:g}),t.error(),s||e.break();return}if(typeof n=="object"&&!(0,Im.alwaysValidSchema)(a,n)){const v=e.name("valid");u.removeAdditional==="failing"?(m(g,v,!1),e.if((0,Go.not)(v),()=>{t.reset(),h(g)})):(m(g,v),s||e.if((0,Go.not)(v),()=>e.break()))}}function m(g,v,y){const k={keyword:"additionalProperties",dataProp:g,dataPropType:Im.Type.Str};y===!1&&Object.assign(k,{compositeRule:!0,createErrors:!1,allErrors:!1}),t.subschema(k,v)}}};Pm.default=vae;var pk={};Object.defineProperty(pk,"__esModule",{value:!0});const gae=Wo,BD=Sn,mk=In,zD=Pm,yae={keyword:"properties",type:"object",schemaType:"object",code(t){const{gen:e,schema:n,parentSchema:r,data:i,it:o}=t;o.opts.removeAdditional==="all"&&r.additionalProperties===void 0&&zD.default.code(new gae.KeywordCxt(o,zD.default,"additionalProperties"));const a=(0,BD.allSchemaProperties)(n);for(const c of a)o.definedProperties.add(c);o.opts.unevaluated&&a.length&&o.props!==!0&&(o.props=mk.mergeEvaluated.props(e,(0,mk.toHash)(a),o.props));const s=a.filter(c=>!(0,mk.alwaysValidSchema)(o,n[c]));if(s.length===0)return;const u=e.name("valid");for(const c of s)l(c)?f(c):(e.if((0,BD.propertyInData)(e,i,c,o.opts.ownProperties)),f(c),o.allErrors||e.else().var(u,!0),e.endIf()),t.it.definedProperties.add(c),t.ok(u);function l(c){return o.opts.useDefaults&&!o.compositeRule&&n[c].default!==void 0}function f(c){t.subschema({keyword:"properties",schemaProp:c,dataProp:c},u)}}};pk.default=yae;var vk={};Object.defineProperty(vk,"__esModule",{value:!0});const FD=Sn,Lm=jn,VD=In,qD=In,bae={keyword:"patternProperties",type:"object",schemaType:"object",code(t){const{gen:e,schema:n,data:r,parentSchema:i,it:o}=t,{opts:a}=o,s=(0,FD.allSchemaProperties)(n),u=s.filter(m=>(0,VD.alwaysValidSchema)(o,n[m]));if(s.length===0||u.length===s.length&&(!o.opts.unevaluated||o.props===!0))return;const l=a.strictSchema&&!a.allowMatchingProperties&&i.properties,f=e.name("valid");o.props!==!0&&!(o.props instanceof Lm.Name)&&(o.props=(0,qD.evaluatedPropsToName)(e,o.props));const{props:c}=o;d();function d(){for(const m of s)l&&h(m),o.allErrors?p(m):(e.var(f,!0),p(m),e.if(f))}function h(m){for(const g in l)new RegExp(m).test(g)&&(0,VD.checkStrictMode)(o,`property ${g} matches pattern ${m} (use allowMatchingProperties)`)}function p(m){e.forIn("key",r,g=>{e.if((0,Lm._)`${(0,FD.usePattern)(t,m)}.test(${g})`,()=>{const v=u.includes(m);v||t.subschema({keyword:"patternProperties",schemaProp:m,dataProp:g,dataPropType:qD.Type.Str},f),o.opts.unevaluated&&c!==!0?e.assign((0,Lm._)`${c}[${g}]`,!0):!v&&!o.allErrors&&e.if((0,Lm.not)(f),()=>e.break())})})}}};vk.default=bae;var gk={};Object.defineProperty(gk,"__esModule",{value:!0});const kae=In,wae={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(t){const{gen:e,schema:n,it:r}=t;if((0,kae.alwaysValidSchema)(r,n)){t.fail();return}const i=e.name("valid");t.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},i),t.failResult(i,()=>t.reset(),()=>t.error())},error:{message:"must NOT be valid"}};gk.default=wae;var yk={};Object.defineProperty(yk,"__esModule",{value:!0});const _ae={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:Sn.validateUnion,error:{message:"must match a schema in anyOf"}};yk.default=_ae;var bk={};Object.defineProperty(bk,"__esModule",{value:!0});const Dm=jn,xae=In,jae={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:{message:"must match exactly one schema in oneOf",params:({params:t})=>(0,Dm._)`{passingSchemas: ${t.passing}}`},code(t){const{gen:e,schema:n,parentSchema:r,it:i}=t;if(!Array.isArray(n))throw new Error("ajv implementation error");if(i.opts.discriminator&&r.discriminator)return;const o=n,a=e.let("valid",!1),s=e.let("passing",null),u=e.name("_valid");t.setParams({passing:s}),e.block(l),t.result(a,()=>t.reset(),()=>t.error(!0));function l(){o.forEach((f,c)=>{let d;(0,xae.alwaysValidSchema)(i,f)?e.var(u,!0):d=t.subschema({keyword:"oneOf",schemaProp:c,compositeRule:!0},u),c>0&&e.if((0,Dm._)`${u} && ${a}`).assign(a,!1).assign(s,(0,Dm._)`[${s}, ${c}]`).else(),e.if(u,()=>{e.assign(a,!0),e.assign(s,c),d&&t.mergeEvaluated(d,Dm.Name)})})}}};bk.default=jae;var kk={};Object.defineProperty(kk,"__esModule",{value:!0});const Sae=In,Cae={keyword:"allOf",schemaType:"array",code(t){const{gen:e,schema:n,it:r}=t;if(!Array.isArray(n))throw new Error("ajv implementation error");const i=e.name("valid");n.forEach((o,a)=>{if((0,Sae.alwaysValidSchema)(r,o))return;const s=t.subschema({keyword:"allOf",schemaProp:a},i);t.ok(i),t.mergeEvaluated(s)})}};kk.default=Cae;var wk={};Object.defineProperty(wk,"__esModule",{value:!0});const Rm=jn,HD=In,$ae={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:{message:({params:t})=>(0,Rm.str)`must match "${t.ifClause}" schema`,params:({params:t})=>(0,Rm._)`{failingKeyword: ${t.ifClause}}`},code(t){const{gen:e,parentSchema:n,it:r}=t;n.then===void 0&&n.else===void 0&&(0,HD.checkStrictMode)(r,'"if" without "then" and "else" is ignored');const i=UD(r,"then"),o=UD(r,"else");if(!i&&!o)return;const a=e.let("valid",!0),s=e.name("_valid");if(u(),t.reset(),i&&o){const f=e.let("ifClause");t.setParams({ifClause:f}),e.if(s,l("then",f),l("else",f))}else i?e.if(s,l("then")):e.if((0,Rm.not)(s),l("else"));t.pass(a,()=>t.error(!0));function u(){const f=t.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},s);t.mergeEvaluated(f)}function l(f,c){return()=>{const d=t.subschema({keyword:f},s);e.assign(a,s),t.mergeValidEvaluated(d,a),c?e.assign(c,(0,Rm._)`${f}`):t.setParams({ifClause:f})}}}};function UD(t,e){const n=t.schema[e];return n!==void 0&&!(0,HD.alwaysValidSchema)(t,n)}wk.default=$ae;var _k={};Object.defineProperty(_k,"__esModule",{value:!0});const Oae=In,Eae={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:t,parentSchema:e,it:n}){e.if===void 0&&(0,Oae.checkStrictMode)(n,`"${t}" without "if" is ignored`)}};_k.default=Eae,Object.defineProperty(uk,"__esModule",{value:!0});const Tae=ec,Aae=ck,Mae=tc,Pae=fk,Nae=dk,Iae=DD,Lae=hk,Dae=Pm,Rae=pk,Bae=vk,zae=gk,Fae=yk,Vae=bk,qae=kk,Hae=wk,Uae=_k;function Wae(t=!1){const e=[zae.default,Fae.default,Vae.default,qae.default,Hae.default,Uae.default,Lae.default,Dae.default,Iae.default,Rae.default,Bae.default];return t?e.push(Aae.default,Pae.default):e.push(Tae.default,Mae.default),e.push(Nae.default),e}uk.default=Wae;var xk={},jk={};Object.defineProperty(jk,"__esModule",{value:!0});const Sr=jn,Kae={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:{message:({schemaCode:t})=>(0,Sr.str)`must match format "${t}"`,params:({schemaCode:t})=>(0,Sr._)`{format: ${t}}`},code(t,e){const{gen:n,data:r,$data:i,schema:o,schemaCode:a,it:s}=t,{opts:u,errSchemaPath:l,schemaEnv:f,self:c}=s;if(!u.validateFormats)return;i?d():h();function d(){const p=n.scopeValue("formats",{ref:c.formats,code:u.code.formats}),m=n.const("fDef",(0,Sr._)`${p}[${a}]`),g=n.let("fType"),v=n.let("format");n.if((0,Sr._)`typeof ${m} == "object" && !(${m} instanceof RegExp)`,()=>n.assign(g,(0,Sr._)`${m}.type || "string"`).assign(v,(0,Sr._)`${m}.validate`),()=>n.assign(g,(0,Sr._)`"string"`).assign(v,m)),t.fail$data((0,Sr.or)(y(),k()));function y(){return u.strictSchema===!1?Sr.nil:(0,Sr._)`${a} && !${v}`}function k(){const w=f.$async?(0,Sr._)`(${m}.async ? await ${v}(${r}) : ${v}(${r}))`:(0,Sr._)`${v}(${r})`,_=(0,Sr._)`(typeof ${v} == "function" ? ${w} : ${v}.test(${r}))`;return(0,Sr._)`${v} && ${v} !== true && ${g} === ${e} && !${_}`}}function h(){const p=c.formats[o];if(!p){y();return}if(p===!0)return;const[m,g,v]=k(p);m===e&&t.pass(w());function y(){if(u.strictSchema===!1){c.logger.warn(_());return}throw new Error(_());function _(){return`unknown format "${o}" ignored in schema at path "${l}"`}}function k(_){const S=_ instanceof RegExp?(0,Sr.regexpCode)(_):u.code.formats?(0,Sr._)`${u.code.formats}${(0,Sr.getProperty)(o)}`:void 0,C=n.scopeValue("formats",{key:o,ref:_,code:S});return typeof _=="object"&&!(_ instanceof RegExp)?[_.type||"string",_.validate,(0,Sr._)`${C}.validate`]:["string",_,C]}function w(){if(typeof p=="object"&&!(p instanceof RegExp)&&p.async){if(!f.$async)throw new Error("async format in sync schema");return(0,Sr._)`await ${v}(${r})`}return typeof g=="function"?(0,Sr._)`${v}(${r})`:(0,Sr._)`${v}.test(${r})`}}}};jk.default=Kae,Object.defineProperty(xk,"__esModule",{value:!0});const Jae=[jk.default];xk.default=Jae;var nc={};Object.defineProperty(nc,"__esModule",{value:!0}),nc.contentVocabulary=nc.metadataVocabulary=void 0,nc.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"],nc.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"],Object.defineProperty(Ub,"__esModule",{value:!0});const Gae=Wb,Qae=Jb,Yae=uk,Xae=xk,WD=nc,Zae=[Gae.default,Qae.default,(0,Yae.default)(),Xae.default,WD.metadataVocabulary,WD.contentVocabulary];Ub.default=Zae;var Sk={},KD={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.DiscrError=void 0,function(e){e.Tag="tag",e.Mapping="mapping"}(t.DiscrError||(t.DiscrError={}))})(KD),Object.defineProperty(Sk,"__esModule",{value:!0});const rc=jn,Ck=KD,JD=Fi,ese=In,tse={keyword:"discriminator",type:"object",schemaType:"object",error:{message:({params:{discrError:t,tagName:e}})=>t===Ck.DiscrError.Tag?`tag "${e}" must be string`:`value of tag "${e}" must be in oneOf`,params:({params:{discrError:t,tag:e,tagName:n}})=>(0,rc._)`{error: ${t}, tag: ${n}, tagValue: ${e}}`},code(t){const{gen:e,data:n,schema:r,parentSchema:i,it:o}=t,{oneOf:a}=i;if(!o.opts.discriminator)throw new Error("discriminator: requires discriminator option");const s=r.propertyName;if(typeof s!="string")throw new Error("discriminator: requires propertyName");if(r.mapping)throw new Error("discriminator: mapping is not supported");if(!a)throw new Error("discriminator: requires oneOf keyword");const u=e.let("valid",!1),l=e.const("tag",(0,rc._)`${n}${(0,rc.getProperty)(s)}`);e.if((0,rc._)`typeof ${l} == "string"`,()=>f(),()=>t.error(!1,{discrError:Ck.DiscrError.Tag,tag:l,tagName:s})),t.ok(u);function f(){const h=d();e.if(!1);for(const p in h)e.elseIf((0,rc._)`${l} === ${p}`),e.assign(u,c(h[p]));e.else(),t.error(!1,{discrError:Ck.DiscrError.Mapping,tag:l,tagName:s}),e.endIf()}function c(h){const p=e.name("valid"),m=t.subschema({keyword:"oneOf",schemaProp:h},p);return t.mergeEvaluated(m,rc.Name),p}function d(){var h;const p={},m=v(i);let g=!0;for(let w=0;w<a.length;w++){let _=a[w];(_==null?void 0:_.$ref)&&!(0,ese.schemaHasRulesButRef)(_,o.self.RULES)&&(_=JD.resolveRef.call(o.self,o.schemaEnv.root,o.baseId,_==null?void 0:_.$ref),_ instanceof JD.SchemaEnv&&(_=_.schema));const S=(h=_==null?void 0:_.properties)===null||h===void 0?void 0:h[s];if(typeof S!="object")throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${s}"`);g=g&&(m||v(_)),y(S,w)}if(!g)throw new Error(`discriminator: "${s}" must be required`);return p;function v({required:w}){return Array.isArray(w)&&w.includes(s)}function y(w,_){if(w.const)k(w.const,_);else if(w.enum)for(const S of w.enum)k(S,_);else throw new Error(`discriminator: "properties/${s}" must have "const" or "enum"`)}function k(w,_){if(typeof w!="string"||w in p)throw new Error(`discriminator: "${s}" values must be unique strings`);p[w]=_}}}};Sk.default=tse;const nse={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0};(function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=void 0;const n=GL,r=Ub,i=Sk,o=nse,a=["/properties"],s="http://json-schema.org/draft-07/schema";class u extends n.default{_addVocabularies(){super._addVocabularies(),r.default.forEach(d=>this.addVocabulary(d)),this.opts.discriminator&&this.addKeyword(i.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;const d=this.opts.$data?this.$dataMetaSchema(o,a):o;this.addMetaSchema(d,s,!1),this.refs["http://json-schema.org/schema"]=s}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(s)?s:void 0)}}t.exports=e=u,Object.defineProperty(e,"__esModule",{value:!0}),e.default=u;var l=Wo;Object.defineProperty(e,"KeywordCxt",{enumerable:!0,get:function(){return l.KeywordCxt}});var f=jn;Object.defineProperty(e,"_",{enumerable:!0,get:function(){return f._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return f.str}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return f.stringify}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return f.nil}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return f.Name}}),Object.defineProperty(e,"CodeGen",{enumerable:!0,get:function(){return f.CodeGen}})})(Ab,Ab.exports);const GD=cR(Ab.exports);let Xf;const rse=[["items",EL,TL],["screens",DL,RL],["skills",VL,qL],["buttons",NL,IL],["scripts",JL,Wre],["audio",SL,CL],["quests",AL,ML],["tooltips",WL,KL],["characters",HL,UL]],ise=["baseAssetsPath","baseDataPath","gameTitle","images","layout","gameFlow","dialogPanel","splashScreens","notifications","hudStats","interactionTags","transitions","menuButtons","debugging","saves"];async function ose(t){const e={...Mu};for(const n of ise){const r=t[n];r&&(typeof r=="object"&&!Array.isArray(r)?e[n]={...e[n],...r}:e[n]=r)}for(const n of rse){const r=n[0],i=n[1],o=n[2];let a=t[r];if(a&&typeof a=="string")try{a=await vm(YD(t.baseDataPath,a));const s=new GD({allErrors:!0});if(!s.validate(i,a))throw console.error(s.errors),new Error(`${s.errorsText()}`)}catch(s){console.error(s),Kt(`${r} config error: ${s}`),a={...o}}a&&(Array.isArray(a)?e[r]=a:typeof a=="object"?e[r]={...o,...a}:e[r]=a)}if(Xf=e,Xf.transitions)for(const n in Xf.transitions)ym[n]?Object.assign(ym[n],Xf.transitions[n]):ym[n]=Xf.transitions[n];return e}async function ase(t){const e=await vm(t.configPath);t.baseAssetsPath?e.baseAssetsPath=t.baseAssetsPath:e.baseAssetsPath=e.baseAssetsPath||"",t.baseDataPath?e.baseDataPath=t.baseDataPath:e.baseDataPath=e.baseDataPath||"";const n=new GD({allErrors:!0});return n.validate(Kre,e)||(Kt("Config file validation failed."),console.log(n.errors),Kt(n.errorsText())),ose(e)}function gt(){return Tb().config}function Aa(){return gt().audio}function Co(){return gt().skills}function Bm(){return gt().items}function Zf(){return gt().quests}function zm(){return gt().screens}function $k(){return gt().buttons}function ed(){return gt().tooltips}function Ok(){return gt().characters}function QD(t){const n=ed().tooltips.find(r=>r.keywords.includes(t));return n||(Kt(`Tooltip config for keyword ${t} not found`),null)}function Ek(t){const e=gt().skills.skills[t];return e||Kt(`Skill config for skill ${t} doesn't exist`),e}function td(t){return t.startsWith("http")?t:gt().images[t]?Ma(gt().images[t]):Ma(t)}function Ma(t){return t.startsWith("http")?t:gt().baseAssetsPath?`${gt().baseAssetsPath}${t}`:t}function YD(t,e){return`${t}${e}`}function Tk(t){return gt().baseDataPath?`${gt().baseDataPath}${t}`:t}function Hs(t){const e=$k().buttons[t];return e||Kt(`Button config for button ${t} doesn't exist`),e}function XD(t){const e=zm().screens[t];return e||Kt(`Screen config for screen ${t} doesn't exist`),e}function is(t){const e=Bm().items[t];return e||Kt(`Item config for skill ${t} doesn't exist`),e}function Bu(t){return Zf().quests[t]}function Fm(t,e){return Bu(t).objectives[e]}function Vm(){var e;return(e=gt().dialogPanel.width)!=null?e:YZ}function ZD(t,e,n){if(!n.startsWith("$"))return isNaN(Number(n))?[null,n]:[null,Number(n)];n=n.substring(1);const r=/\[/,i=/\]/;let o=n.search(r);n.search(i);let a=n,s=e,u=0;for(;u<n.length;){if(o>u||o===-1){const l=o>u?o:n.length;let f=n.substring(u,l);isNaN(Number(f))||(f=Number(f)),u>0&&(s=s[a]),[s,a]=use(s,f)}if(o!==-1){u=o;const l=n.substring(o+1),f=sse(l)+o,c=n.substring(o+1,f),[d,h]=ZD(t,t,c);let p=h;d&&(p=d[h]),typeof p=="number"||!isNaN(Number(p))?p=Number(p):typeof p!="string"&&console.error(`invalid array index (${p}) key type when compiling: ${n}`),s=s[a],a=p,u=f+1;const m=n.substring(u);o=m.search(r),o!==-1&&(o+=u),m.search(i)}else u=n.length}return[s,a]}function sse(t){let e=!1,n=0,r,i=1;for(;!e;){r=t.substring(n);const o=r.search(/\[/),a=r.search(/\]/);o!==-1&&o<a?(n+=o+1,i++):(n+=a+1,i--),i===0&&(e=!0),o===-1&&a===-1&&!e&&Kt(`Could not find closing bracket in ${t}`)}return n}function use(t,e){if(typeof e=="number")return[t,e];e.startsWith(".")&&(e=e.substring(1));const n=e.split(".");let r=t;const i=n.length-1;let o=n[0],a=0;for(a=0;a<i;a++)o=n[a],typeof r[o]>"u"&&(r[o]={}),r=r[o];return o=n[a],[r,o]}function qm(t,e){return ZD(t,t,e)}function lse(t,e){return qm(t,e)}function eR(t,e,n){const[r,i]=qm(t,e);r[i]=n}function tR(t,e,n){const[r,i]=qm(t,e),o=r[i]||0;r[i]=n+o}function ic(){const t=wn(),e=_r(),n=Uo(),r=Nr(),i=wn().scope,o={data:t.data,skills:e.skills,skillChecks:e.skillChecks,buttons:n.buttons,items:r.items,quests:di().quests,stats:$a().hudStats,scope:i,config:gt(),gameOptions:Gt().options};return new Proxy(o,{get:(s,u,l)=>{const f=wn().scope,c=wn().data;return typeof f[u]<"u"?f[u]:typeof c[u]<"u"?c[u]:Reflect.get(s,u,l)},set:(s,u,l,f)=>{const c=wn().scope,d=wn().data;if(typeof c[u]<"u")c[u]=l;else{if(typeof s[u]<"u")return Reflect.set(s,u,l,f);typeof l=="object"?d[u]={}:d[u]=l}return!0}})}function pi(t){if(t===null)return null;if(typeof t=="object")if(Array.isArray(t)){const e=[];for(const n in t)e[n]=pi(t[n]);return e}else{const e={};for(const n in t)e[n]=pi(t[n]);return e}else return t}function Ak(t,e){if(t===null)return null;if(typeof t=="object"){const n=e(t);if(e(t))return n;if(Array.isArray(t)){const r=[];for(const i in t)r[i]=Ak(t[i],e);return r}else{const r={};for(const i in t)r[i]=Ak(t[i],e);return r}}else return e(t)}const _r=Jr("skills",{state:()=>({skillChecks:{},skills:{}}),actions:{setupSkillCheck(t,e){this.skillChecks[e]=t},passSkillCheck(t,e){this.skillChecks[t].happened=!0,this.skillChecks[t].succeeded=!0,e&&(this.skillChecks[t].hidden=!0)},failSkillCheck(t,e){this.skillChecks[t].happened=!0,this.skillChecks[t].succeeded=!1,e&&(this.skillChecks[t].hidden=!0)},resetSkillCheck(t){this.skillChecks[t].happened=!1,this.skillChecks[t].succeeded=!1,this.skillChecks[t].hidden=!1},generateSaveData(){return{skillChecks:pi(this.skillChecks),skills:pi(this.skills)}},getSkillCheck(t){return this.skillChecks[t]||this.setupSkillCheck(this.createSkillCheckState(),t),this.skillChecks[t]},createSkillCheckState(){return{happened:!1,succeeded:!1,hidden:!1}},loadSaveData(t){this.skillChecks=gm(this.skillChecks,t.skillChecks),this.skills=gm(this.skills,t.skills)},setupSkills(t){const e=t.skills;for(const n in e)this.skills[n]={id:n,level:e[n].startingLevel||0,xp:0}},getSkill(t){return this.skills[t]},getSkillLevel(t){return this.getSkill(t).level},getSkillXp(t){return this.getSkill(t).xp},addXp(t,e){const n=this.getSkill(t);n||Kt(`Skill ${t} doesn't exist`),n.xp+=e,n.xp>=Co().skillOptions.xpPerLevel&&(n.xp=0,n.level++,this.levelledUp(t))},setSkillLevel(t,e){const n=this.getSkill(t);n||Kt(`Skill ${t} doesn't exist`),n.level=e,this.levelledUp(t)},incrementSkill(t,e){this.getSkill(t).level+=e,this.levelledUp(t)},levelledUp(t){const e=Co().skills[t].name,n=this.skills[t].level;Co().skillOptions.notifyLevelUp&&oo().addNotification(`Your skill in ${e} is now level ${n}`)}}});let nR;const cse=b.defineComponent({components:{Modal:Ws},setup(){const t=_r(),e=b.computed(()=>t.skills),n=b.computed(()=>t.skillChecks);return{skills:e,skillChecks:n}},data(){return{showDebug:!1,jumping:!1,searchString:"",matches:[],matchCursor:0}},mounted(){window.addEventListener("keydown",t=>{if(this.jumping||(t.key==="d"&&this.toggle(),t.key==="j"&&this.jump()),t.key==="ArrowDown"&&(t.preventDefault(),this.matches.length>this.matchCursor+1?this.matchCursor+=1:this.matchCursor=0),t.key==="ArrowUp"&&(t.preventDefault(),this.matchCursor>0?this.matchCursor-=1:this.matchCursor=this.matches.length-1),t.key==="Escape"&&this.finishJumping(),this.jumping&&t.key==="Enter"&&this.matchCursor<this.matches.length){const e=this.matches[this.matchCursor];wn().jumpToLabel(e),this.finishJumping()}})},methods:{finishJumping(){this.jumping=!1,this.matches=[],this.searchString="",this.close()},labelSelected(t){const e=t.target.value;wn().jumpToLabel(e),this.close()},close(){this.showDebug=!1,this.endDebug()},closeErrors(){Gt().clearErrors()},open(){this.showDebug=!0,this.startDebug();const t=wn(),e=Gt(),n=di(),r=Nr(),i=_r();this.$nextTick(()=>{new S8({target:this.$refs.variablesViewer,props:{content:{text:void 0,json:{data:this.variables,quests:n.quests,items:r.items,skills:i.skills,skillChecks:i.skillChecks}},onChange:o=>{t.overrideData(o.json.data),n.quests=o.json.quests,r.items=o.json.items,i.skills=o.json.skills,i.skillChecks=o.json.skillChecks}}}),new S8({target:this.$refs.stateViewer,props:{content:{text:void 0,json:e.getAllStates()},onChange:o=>{e.overrideStates(o.json)}}})})},toggle(){this.jumping?this.finishJumping():this.showDebug?this.close():this.open()},startDebug(){Gt().debugMode=!0},endDebug(){Gt().debugMode=!1},jump(){nR=new Vu(this.labels,{includeScore:!0}),this.jumping=!0,this.startDebug(),setTimeout(()=>{this.$nextTick(()=>{this.$refs.search.focus()})},10),this.matchCursor=0,this.matches=this.labels},getMatchResultStyle(t){if(t===this.matchCursor)return{background:"var(--light-background)"}},onSearchInput(){const t=this.searchString,e=nR.search(t);this.matches=e.map(n=>n.item),this.matches.length>0&&this.matchCursor>this.matches.length-1&&(this.matchCursor=this.matches.length-1)},save(){Gt().autoSaveGame({})},wordCount(){const e=Object.values(this.script).reduce((n,r)=>(Zo.log(n),n+this.countWordsInScriptBranch(r.branch)),0);alert(`You have ${e} words`)},countWordsInScriptLine(t){if(t.command.commandType==="talk"&&typeof t.command.args[2]=="string")return this.countWordsInString(t.command.args[2]);if(t.command.commandType==="text")return this.countWordsInString(t.code);if(t.command.commandType==="choice"){const e=t.command.staticOptions;let n=this.countWordsInScriptLine(e.prompt);return n+=e.choices.reduce((i,o)=>i+this.countWordsInString(o.prompt.code),0),e.choices.reduce((i,o)=>o.branch?i+this.countWordsInScriptBranch(o.branch):i,n)}if(t.command.commandType==="if"){const e=t.command.staticOptions;return[e.success,e.failure].reduce((r,i)=>i?r+this.countWordsInScriptBranch(i):r,0)}return 0},countWordsInString(t){return t.split(" ").length},countWordsInScriptBranch(t){return t.reduce((e,n)=>n?e+this.countWordsInScriptLine(n):e,0)},getPlayTimeString(){const t=Fu(this.playTime.start,this.playTime.previousPlaytime);return Ym(t/1e3)}},computed:{...Za(wn,["script","data"]),...Za(Gt,["playTime","errors","playing","flowState"]),labels(){const t=this.script;return Object.keys(t).sort()},variables(){return this.data}}}),ipe="",fse={class:"debug-menu"},dse={key:0,class:"debug-info"},hse=[b.createStaticVNode("<h3>Debug mode is ON</h3><ul><li><b>j</b>: Quick Label Jump</li><li><b>d</b>: Debug Menu</li><li><b>a</b>: Auto Play</li><li><b>s</b>: Skip</li><li><b>Space</b>: New Game</li><li><b>c</b>: Continue</li><li><b>Escape</b>: Toggle Menu</li></ul>",2)],pse=b.createElementVNode("h3",{class:"title"},"Jump to label",-1),mse={key:0,class:"search-results"},vse={key:1},gse=[b.createElementVNode("h3",null,"No matches found",-1)],yse=b.createElementVNode("h3",{class:"title"},"Error(s)",-1),bse=b.createTextVNode(" There are errors in your dialogue scripts. Open the developer console for more details. "),kse=["innerHTML"],wse=b.createElementVNode("h3",{class:"title"},"Debug Menu!",-1),_se={class:"container"},xse=b.createTextVNode(" Hello this is the debug menu. "),jse=b.createElementVNode("option",{class:"option",selected:"",disabled:""},"Jump to a label",-1),Sse=["value"],Cse={class:"grid grid-cols-3 gap-4"},$se=b.createElementVNode("h2",null,"Variables Editor",-1),Ose={ref:"variablesViewer"},Ese=b.createElementVNode("h2",null,"Skill Checks",-1),Tse={class:"table-auto"},Ase=b.createElementVNode("thead",null,[b.createElementVNode("tr",null,[b.createElementVNode("th",null,"Skill Check"),b.createElementVNode("th",null,"Happened"),b.createElementVNode("th",null,"Succeeded")])],-1),Mse=b.createElementVNode("h2",null,"App State editor (entire app and engine",-1),Pse=b.createElementVNode("h3",{style:{color:"pink"}}," Use for debugging, editing some of those things can cause issues ",-1),Nse={ref:"stateViewer"};function Ise(t,e,n,r,i,o){const a=b.resolveComponent("modal");return b.openBlock(),b.createElementBlock("div",fse,[b.createElementVNode("button",{onClick:e[0]||(e[0]=(...s)=>t.open&&t.open(...s)),class:"button debug-button"},"Debug Menu"),!t.playing&&t.flowState==="menu"?(b.openBlock(),b.createElementBlock("div",dse,hse)):b.createCommentVNode("",!0),t.jumping?(b.openBlock(),b.createBlock(a,{key:1,onClose:t.finishJumping,containerCssClass:"jump-menu-container"},{header:b.withCtx(()=>[pse]),body:b.withCtx(()=>[b.withDirectives(b.createElementVNode("input",{type:"text",class:"label-input input",ref:"search","onUpdate:modelValue":e[1]||(e[1]=s=>t.searchString=s),onInput:e[2]||(e[2]=(...s)=>t.onSearchInput&&t.onSearchInput(...s))},null,544),[[b.vModelText,t.searchString]]),t.matches.length>0?(b.openBlock(),b.createElementBlock("div",mse,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.matches,(s,u)=>(b.openBlock(),b.createElementBlock("div",{class:"search-result",style:b.normalizeStyle(t.getMatchResultStyle(u)),key:u},b.toDisplayString(s),5))),128))])):(b.openBlock(),b.createElementBlock("div",vse,gse))]),_:1},8,["onClose"])):b.createCommentVNode("",!0),t.errors.length>0?(b.openBlock(),b.createBlock(a,{key:2,onClose:t.closeErrors,containerCssClass:"debug-menu-container"},{header:b.withCtx(()=>[yse]),body:b.withCtx(()=>[bse,b.createElementVNode("ul",null,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.errors,(s,u)=>(b.openBlock(),b.createElementBlock("li",{key:u,class:b.normalizeClass(["error-message list-disc",s.type==="error"?"error":"warning"]),innerHTML:s.text},null,10,kse))),128))])]),_:1},8,["onClose"])):b.createCommentVNode("",!0),t.showDebug?(b.openBlock(),b.createBlock(a,{key:3,onClose:t.close,containerCssClass:"debug-menu-container"},{header:b.withCtx(()=>[wse]),body:b.withCtx(()=>[b.createElementVNode("div",_se,[xse,b.createElementVNode("select",{class:"select",name:"label-selector",onChange:e[3]||(e[3]=s=>t.labelSelected(s))},[jse,(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.labels,s=>(b.openBlock(),b.createElementBlock("option",{class:"option",value:s,key:s},b.toDisplayString(s),9,Sse))),128))],32),b.createElementVNode("div",Cse,[b.createElementVNode("button",{onClick:e[4]||(e[4]=(...s)=>t.wordCount&&t.wordCount(...s)),class:"button"},"Word Count"),b.createElementVNode("button",{onClick:e[5]||(e[5]=(...s)=>t.save&&t.save(...s)),class:"button"},"Save Game")]),b.createElementVNode("h3",null,"Play time: "+b.toDisplayString(t.getPlayTimeString()),1),$se,b.createElementVNode("div",Ose,null,512),Ese,b.createElementVNode("table",Tse,[Ase,b.createElementVNode("tbody",null,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.skillChecks,(s,u)=>(b.openBlock(),b.createElementBlock("tr",{key:u},[b.createElementVNode("td",null,b.toDisplayString(u),1),b.createElementVNode("td",null,b.toDisplayString(s.happened?"\u2705":"\u274C"),1),b.createElementVNode("td",null,b.toDisplayString(s.happened?s.succeeded?"\u2705":"\u274C":"NA"),1)]))),128))])]),Mse,Pse,b.createElementVNode("div",Nse,null,512)])]),_:1},8,["onClose"])):b.createCommentVNode("",!0)])}const Lse=Hi(cse,[["render",Ise]]),Dse=b.defineComponent({computed:{...Za(oo,["notifications"])}}),spe="",Rse=["innerHTML"];function Bse(t,e,n,r,i,o){return b.openBlock(),b.createBlock(b.TransitionGroup,{name:"notification",tag:"div",class:"notifications-holder"},{default:b.withCtx(()=>[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.notifications,(a,s)=>(b.openBlock(),b.createElementBlock("div",{class:"notification",key:s},[b.createElementVNode("h3",{innerHTML:a.text},null,8,Rse)]))),128))]),_:1})}const zse=Hi(Dse,[["render",Bse]]);function rR(t,e=50,n={}){var c,d;let r;const i=(c=n.isImmediate)!=null?c:!1,o=(d=n.callback)!=null?d:!1,a=n.maxWait;let s=Date.now(),u=[];function l(){if(a!==void 0){const h=Date.now()-s;if(h+e>=a)return a-h}return e}const f=function(...h){const p=this;return new Promise((m,g)=>{const v=function(){if(r=void 0,s=Date.now(),!i){const w=t.apply(p,h);o&&o(w),u.forEach(({resolve:_})=>_(w)),u=[]}},y=i&&r===void 0;r!==void 0&&clearTimeout(r);const k=l();if(r=setTimeout(v,k),y){const w=t.apply(p,h);return o&&o(w),m(w)}u.push({resolve:m,reject:g})})};return f.cancel=function(h){r!==void 0&&clearTimeout(r),u.forEach(({reject:p})=>p(h)),u=[]},f}const Fse={class:"save-slot flex flex-row"},Vse={class:"used-save-slot flex flex-row justify-between items-center grow"},qse={class:"flex flex-col save-slot-number-container"},Hse={class:"save-slot-number"},Use={class:"flex flex-col justify-center save-info"},Wse={key:1,class:"save-name"},Kse={class:"flex flex-col"},Jse={key:0},Gse={key:1},Qse={key:2},Yse={class:"flex flex-row"},Xse=["onClick"],Mk=b.defineComponent({__name:"save-slot-ui",props:{saveSlot:{type:Object,required:!0},id:{type:String,required:!0},actions:{type:Array,required:!0}},emits:["choice"],setup(t,{emit:e}){var d,h;const n=t,r=b.ref((h=(d=n.saveSlot.saveData)==null?void 0:d.metadata.name)!=null?h:"Empty Save"),i=b.computed(()=>n.saveSlot.saveData!==null),o=b.computed(()=>n.saveSlot.saveData),a=b.computed(()=>gt().saves.mode),s=b.computed(()=>{const p=n.saveSlot.saveData;if(p&&p.screen.layers[0]){const m=zm().screens[p.screen.layers[0]];if(m)return{backgroundImage:`url(${td(m.background)})`}}return!1});function u(p){e("choice",p)}function l(p){return o.value?Ym(o.value.main.playTime/1e3):"00:00:00"}function f(){o.value&&iee(n.saveSlot.id,r.value)}function c(){const p=gt().saves.slots;let m="";const g=n.saveSlot.slotNumber;return g===0&&gt().saves.mode==="manual"?"AUTO":(p>=10&&g<10&&(m+="0"),p>=100&&g<100&&(m+="0"),m+g)}return(p,m)=>(b.openBlock(),b.createElementBlock("div",Fse,[b.createElementVNode("div",Vse,[b.createElementVNode("div",qse,[b.createElementVNode("h1",Hse,b.toDisplayString(c()),1)]),b.unref(s)?(b.openBlock(),b.createElementBlock("div",{key:0,class:"save-slot-screenshot",style:b.normalizeStyle(b.unref(s))},null,4)):b.createCommentVNode("",!0),b.createElementVNode("div",Use,[b.unref(i)?b.withDirectives((b.openBlock(),b.createElementBlock("input",{key:0,type:"text",class:"save-name","onUpdate:modelValue":m[0]||(m[0]=g=>r.value=g),onInput:f},null,544)),[[b.vModelText,r.value]]):(b.openBlock(),b.createElementBlock("h3",Wse,b.toDisplayString(r.value),1)),b.createElementVNode("div",Kse,[b.unref(o)?(b.openBlock(),b.createElementBlock("p",Jse,b.toDisplayString(new Date(b.unref(o).metadata.saveDate).toLocaleString()),1)):b.createCommentVNode("",!0),b.unref(o)?(b.openBlock(),b.createElementBlock("p",Gse,"Play time: "+b.toDisplayString(l(t.saveSlot)),1)):b.createCommentVNode("",!0),b.unref(a)==="game-slots"?(b.openBlock(),b.createElementBlock("p",Qse,b.toDisplayString(t.saveSlot.slotType==="auto"?"Auto Save":"Manual Save"),1)):b.createCommentVNode("",!0)])]),b.createElementVNode("div",Yse,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.actions,(g,v)=>(b.openBlock(),b.createElementBlock("button",{class:"button",onClick:()=>u(v),key:v},[b.createElementVNode("h3",null,b.toDisplayString(g),1)],8,Xse))),128))])])]))}}),upe="",Zse=b.createElementVNode("h3",{class:"title"},"Confirmation",-1),eue={class:"flex justify-center"},Hm=b.defineComponent({__name:"yes-no",props:{prompt:{type:String,required:!0},onConfirm:{type:Function,required:!1},onRefuse:{type:Function,required:!1}},emits:["choice"],setup(t,{emit:e}){const n=t;function r(i){i===!0&&n.onConfirm?n.onConfirm():i===!1&&n.onRefuse&&n.onRefuse(),e("choice",i)}return(i,o)=>(b.openBlock(),b.createBlock(Ws,{onClose:o[2]||(o[2]=()=>r(!1)),containerCssClass:"yes-no-modal"},{header:b.withCtx(()=>[Zse]),body:b.withCtx(()=>[b.createElementVNode("h3",null,b.toDisplayString(t.prompt),1),b.createElementVNode("div",eue,[b.createElementVNode("button",{class:"button",onClick:o[0]||(o[0]=()=>r(!0))},"Yes"),b.createElementVNode("button",{class:"button",onClick:o[1]||(o[1]=()=>r(!1))},"No")])]),_:1}))}}),lpe="",tue={class:"title"},nue={key:0},rue={class:"saves-section"},iue=b.createElementVNode("h3",{class:"saves-section-title"},"Auto save",-1),oue={class:"saves-section"},aue=b.createElementVNode("h3",{class:"saves-section-title"},"Manual Saves",-1),sue={key:1,class:"saves-section"},uue=b.createElementVNode("h3",{class:"saves-section-title"},"Save Slots",-1),lue={class:"saves-container flex flex-col"},iR=b.defineComponent({__name:"save-slots",props:{mode:{type:String,required:!0}},emits:["chosen","close"],setup(t,{emit:e}){const n=t,r=b.reactive([]),i=b.computed(()=>r.slice(0,1)),o=b.computed(()=>r.slice(1)),a=b.reactive(n.mode==="load"?["Load","Delete"]:["Choose"]),s=b.computed(()=>gt().saves.mode),u=b.reactive({prompt:"Are you sure you want to delete this save file?",saveToDelete:null,onConfirm:()=>{d(u.saveToDelete),u.saveToDelete=null},onRefuse:()=>{u.saveToDelete=null}}),l=b.reactive({prompt:"Are you sure you want to overwrite this save file?",saveToOverwrite:null,onConfirm:()=>{f(l.saveToOverwrite),l.saveToOverwrite=null},onRefuse:()=>{l.saveToOverwrite=null}});b.onMounted(()=>{const v=Z8().slots;console.log(v),v.forEach((y,k)=>{r[k]=y})});function f(g){e("chosen",{slotId:g})}function c(g){const v=m(g);if(v){if(gt().saves.mode==="manual"&&v.slotType==="auto"){Gt().alert("Sorry","Can't delete the auto save slot!");return}u.saveToDelete=g}}function d(g){ree(g);const v=r.find(y=>y.id===g);v&&(v.saveData=null)}function h(){e("close")}function p(g,v){const y=a[v];y==="Load"?f(g):y==="Delete"?c(g):y==="Choose"&&(l.saveToOverwrite=g)}function m(g){return r.find(v=>v.id===g)}return(g,v)=>(b.openBlock(),b.createBlock(Ws,{onClose:h,containerCssClass:"save-modal",cantClose:!1},{header:b.withCtx(()=>[b.createElementVNode("h3",tue,b.toDisplayString(t.mode==="load"?"Choose a save to load":"Pick a slot to save the game"),1)]),body:b.withCtx(()=>[b.unref(s)==="manual"?(b.openBlock(),b.createElementBlock("div",nue,[b.createElementVNode("div",rue,[iue,b.createVNode(b.TransitionGroup,{name:"list",tag:"div"},{default:b.withCtx(()=>[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(b.unref(i),y=>(b.openBlock(),b.createBlock(Mk,{key:y.id,saveSlot:y,id:y.id,actions:a,onChoice:k=>p(y.id,k)},null,8,["saveSlot","id","actions","onChoice"]))),128))]),_:1})]),b.createElementVNode("div",oue,[aue,b.createVNode(b.TransitionGroup,{name:"list",tag:"div"},{default:b.withCtx(()=>[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(b.unref(o),y=>(b.openBlock(),b.createBlock(Mk,{key:y.id,saveSlot:y,id:y.id,actions:a,onChoice:k=>p(y.id,k)},null,8,["saveSlot","id","actions","onChoice"]))),128))]),_:1})])])):(b.openBlock(),b.createElementBlock("div",sue,[uue,b.createElementVNode("div",lue,[b.createVNode(b.TransitionGroup,{name:"list",tag:"div"},{default:b.withCtx(()=>[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(r,y=>(b.openBlock(),b.createBlock(Mk,{key:y.id,saveSlot:y,id:y.id,actions:a,onChoice:k=>p(y.id,k)},null,8,["saveSlot","id","actions","onChoice"]))),128))]),_:1})])])),u.saveToDelete?(b.openBlock(),b.createBlock(Hm,{key:2,prompt:u.prompt,onRefuse:u.onRefuse,onConfirm:u.onConfirm},null,8,["prompt","onRefuse","onConfirm"])):b.createCommentVNode("",!0),l.saveToOverwrite?(b.openBlock(),b.createBlock(Hm,{key:3,prompt:l.prompt,onRefuse:l.onRefuse,onConfirm:l.onConfirm},null,8,["prompt","onRefuse","onConfirm"])):b.createCommentVNode("",!0)]),_:1}))}}),cpe="";class oR extends Eb{setup(e=!1){const r=e?"keydown":"keyup",i=rR(o=>{$o.emit("debouncedKeydown",o)},10,{isImmediate:!0,maxWait:10});window.addEventListener("keydown",o=>{$o.emit("keydown",o)}),window.addEventListener(r,o=>{i(o)})}}const $o=new oR,aR=Jr("startMenu",{state:()=>({buttons:[]}),actions:{addButtonsFromPlugins(){Fn.plugins.forEach(e=>{e.startMenuButtons&&e.startMenuButtons.forEach(n=>{const r=window.narrat.app;n.popupComponent&&r.component(n.popupComponent.name,n.popupComponent.component),this.buttons.push(n)})})}}}),cue={id:"game-menu"},fue={id:"game-header",class:"flex flex-col justify-between items-center"},due={id:"game-title-container"},hue={id:"game-title-text"},pue={class:"flex flex-col start-menu-buttons-container"},mue=["onClick"],vue={class:"title"},gue=b.defineComponent({__name:"StartMenu",setup(t){const e=b.ref(!1),n=b.ref(!1),r=b.ref(null),i=b.ref(null),o=b.ref(!1),a=b.ref(!1),s=b.ref(null),u=aR(),l=b.ref(!1),f=b.computed(()=>u.buttons);async function c(){e.value&&gt().saves.mode==="manual"?a.value=!0:d()}async function d(){const _=Gt();if(i.value===null)if(gt().saves.mode==="manual"){const S=ub();if(!S){Kt("No autosave found");return}i.value=S.id}else{const S=tee();if(!S){Kt("No free slot found");return}i.value=S}a.value=!1,await _.startGame(i.value)}function h(_){_.action&&_.action(),_.popupComponent&&(l.value=_)}function p(){l.value=!1}function m(){a.value=!1}async function g(){if(!i.value)return;const _=Pf(i.value);if(!_){Kt("No save file found");return}Gt().loadGame(_,i.value)}function v(){typeof r.value=="string"&&(i.value=r.value,g())}function y(){o.value=!0}function k({slotId:_}){const S=Pf(_);S&&S.saveData?(i.value=_,g()):c()}b.onMounted(()=>{const _=gt();_.audio.options.defaultMusic&&Gr().playChannel("music",_.audio.options.defaultMusic,0);const S=Z8();S.slots.some(C=>C.saveData)&&(e.value=!0),(gt().saves.mode==="manual"||S.slots.some(C=>!C.saveData))&&(n.value=!0),S.lastSaveSlot&&Pf(S.lastSaveSlot)&&(r.value=S.lastSaveSlot),s.value=$o.on("debouncedKeydown",C=>{C.key===" "&&d(),C.key==="c"&&v()})}),b.onUnmounted(()=>{s.value&&$o.off("debouncedKeydown",s.value)});const w=b.computed(()=>gt().gameTitle);return(_,S)=>(b.openBlock(),b.createElementBlock("div",cue,[o.value?(b.openBlock(),b.createBlock(iR,{key:0,mode:"load",onChosen:k,onClose:S[0]||(S[0]=C=>o.value=!1)})):b.createCommentVNode("",!0),a.value?(b.openBlock(),b.createBlock(Hm,{key:1,prompt:"This will override your previous autosave, are you sure?",onConfirm:d,onRefuse:m})):b.createCommentVNode("",!0),b.createElementVNode("div",fue,[b.createElementVNode("div",due,[b.createElementVNode("h1",hue,b.toDisplayString(b.unref(w)),1)]),b.createElementVNode("div",pue,[r.value?(b.openBlock(),b.createElementBlock("button",{key:0,class:"button menu-button main-menu-button large continue-button override",onClick:v}," Continue ")):b.createCommentVNode("",!0),n.value?(b.openBlock(),b.createElementBlock("button",{key:1,class:"button menu-button main-menu-button large start-button override",onClick:c}," New Game ")):b.createCommentVNode("",!0),e.value?(b.openBlock(),b.createElementBlock("button",{key:2,class:"button menu-button main-menu-button large continue-button override",onClick:y}," Load Game ")):b.createCommentVNode("",!0),(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(b.unref(f),C=>(b.openBlock(),b.createElementBlock("button",{key:C.id,class:b.normalizeClass(["button menu-button main-menu-button large override",`${C.id}-start-menu-button`]),onClick:A=>h(C)},b.toDisplayString(C.text),11,mue))),128))])]),l.value?(b.openBlock(),b.createBlock(b.Teleport,{key:2,to:"#app-container"},[b.createVNode(Ws,{onClose:p,class:b.normalizeClass(`start-menu-popup-${l.value.id}`)},{header:b.withCtx(()=>[b.createElementVNode("h3",vue,b.toDisplayString(l.value.text),1)]),body:b.withCtx(()=>[l.value.popupComponent?(b.openBlock(),b.createBlock(b.resolveDynamicComponent(l.value.popupComponent.component),{key:0,onClose:p},null,32)):b.createCommentVNode("",!0)]),_:1},8,["class"])])):b.createCommentVNode("",!0)]))}}),fpe="",yue={class:"title"},bue=b.defineComponent({__name:"alert-modal",props:{title:{type:String,required:!1},text:{type:String,required:!1}},setup(t){return(e,n)=>(b.openBlock(),b.createBlock(Ws,{onClose:n[0]||(n[0]=r=>e.$emit("close")),containerCssClass:"yes-no-modal"},{header:b.withCtx(()=>{var r;return[b.createElementVNode("h3",yue,b.toDisplayString((r=t.title)!=null?r:"Alert"),1)]}),body:b.withCtx(()=>[b.createElementVNode("h3",null,b.toDisplayString(t.text),1)]),_:1}))}}),dpe="";function Pk(t){const e=Ok().characters[t];return e||Kt(`Character ${t} not found`),e}function kue(t,e){const n=Pk(t);if(!!n&&(e||(e="default"),n.sprites)){const r=`${Ok().config.imagesPath}${n.sprites[e]}`;return r||Kt(`Character ${t} pose ${e} not found`),r}}function Um(t){var e;return t?((e=Pk(t))==null?void 0:e.style)||{}:{}}const wue=b.defineComponent({props:{pictureUrl:String},methods:{getAssetUrl(t){return Ma(t)}},computed:{...Za(ao,["layoutMode"]),boxStyle(){var o,a,s,u,l;const t=ao(),e=gt().layout;let n=0,r=0;const i=e.portraits;if(this.layoutMode==="vertical"){const f=(a=(o=i.offset)==null?void 0:o.portrait)!=null?a:{right:0,bottom:0};n=20+f.right,r=t.dialogHeight+f.bottom}else{const f=(u=(s=i.offset)==null?void 0:s.landscape)!=null?u:{right:0,bottom:0},c=(l=gt().dialogPanel.rightOffset)!=null?l:Mu.dialogPanel.rightOffset;n=Vm()-10+f.right+c,r=200+f.bottom}return{right:`${n}px`,bottom:`${r}px`,width:`${e.portraits.width}px`,height:`${e.portraits.height}px`}}}}),hpe="",_ue=["src"];function xue(t,e,n,r,i,o){return b.openBlock(),b.createElementBlock("div",{class:"dialog-picture override",style:b.normalizeStyle(t.boxStyle)},[b.createElementVNode("img",{src:t.getAssetUrl(t.pictureUrl),class:"picture override"},null,8,_ue)],4)}const jue=Hi(wue,[["render",xue]]),Sue=b.defineComponent({data(){return{playerText:"",passed:!1,timeout:null,textAnimation:null,mounted:!1,autoTimer:null,skipTimer:null,nextLineTimer:null}},props:{options:{type:Object,required:!0},active:Boolean},mounted(){this.startTextAnimation(),this.registerKeyboardShortcuts(),this.mounted=!0},unmounted(){this.clearListeners(),this.endTextAnimation({unmounted:!0})},computed:{...Za(Gt,["paused"]),preText(){return this.options.title?" &nbsp;\u2013&nbsp; ":""},style(){return Um(this.options.styleId)},dialogBoxStyle(){const t=Um(this.options.styleId),e={opacity:this.options.old?"0.7":"1"};return{...t.boxCss,...e}},isBasicChoice(){return!this.choices&&!this.options.textField},dialogBoxClass(){return this.options.title?!1:"dialog-box-followup"},titleStyle(){const t=Um(this.options.styleId);return{color:t.color,...t.nameCss}},textStyle(){return Um(this.options.styleId).textCss},text(){return this.textAnimation?this.textAnimation.text:this.options.text},choices(){if(this.options.choices)return this.options.choices},skipping(){return zn().playMode==="skip"},canInteract(){return this.active&&this.mounted&&!this.passed&&!this.nextLineTimer&&!this.textAnimation&&this.options.interactive&&!this.paused}},watch:{options(t,e){!e.old&&t.old&&this.textAnimation&&this.endTextAnimation({unmounted:!0})},skipping(t,e){t&&!e&&this.startSkip()}},methods:{clearListeners(){this.timeout&&(clearTimeout(this.timeout),this.timeout=null)},keyboardEvent(t){if(!this.canInteract){this.mounted&&this.textAnimation&&t.key===" "&&this.endTextAnimation({pressedSpace:!0});return}if(this.canInteract&&this.options.textField&&t.key==="Enter"&&this.submitText(),this.canInteract&&!this.options.textField){let e=-1;switch(t.key){case" ":e=0;break;case"1":e=0;break;case"2":e=1;break;case"3":e=2;break;case"4":e=3;break;case"5":e=4;break;case"6":e=5;break;case"7":e=6;break;case"8":e=7;break}e!==-1&&(this.choices&&e<this.choices.length?this.chooseOption(this.choices[e]):this.chooseOption(e))}},next(){this.passed||this.chooseOption(0)},chooseOption(t){this.finishLine();let e;typeof t=="object"?e=t.originalIndex:e=t,Gt().playerAnswered(e)},finishLine(){this.clearListeners(),this.endTextAnimation({unmounted:!0}),this.passed=!0},dialogStyle(t){const e={};return t.allowed||(e.pointerEvents="none",e.textDecoration="line-through"),e},dialogClass(t){if(!t.allowed)return"strike-anim"},submitText(){const t=this.playerText;Gt().playerAnswered(t)},addTextSection(t,e){const n=this.options.text.substring(t,e);return this.textAnimation.text+=n,e},addHtmlTag(t){const e=t[0];return this.textAnimation.text+=e,this.textAnimation.skippedChars+=e.length,e.length},startTextAnimation(){var t;if(!this.options.old)if(zn().playMode==="skip")this.startSkip();else if(gt().dialogPanel.animateText){this.textAnimation={text:"",index:0,startTime:Date.now(),timer:null,skippedChars:0,tags:lee(this.options.text),finished:!1};const e=this.textAnimation;e.timer=setInterval(()=>{this.updateTextAnimation()},30)}else zn().playMode!=="auto"&&this.isBasicChoice&&(this.autoTimer=setTimeout(()=>{this.endTextAnimation()},((t=gt().dialogPanel.textSpeed)!=null?t:sb)*this.options.text.length))},startSkip(){zn().playMode==="skip"&&!this.options.old&&(this.isBasicChoice?this.skipTimer=setTimeout(()=>{this.endTextAnimation()},100):(zn().toggleSkip(),this.endTextAnimation({unmounted:!0})))},updateTextAnimation(){var o;const t=this.textAnimation;if(!t)return;const e=t.index,n=Date.now()-t.startTime;let r=!1,i=Math.round(n/((o=gt().dialogPanel.textSpeed)!=null?o:sb))+t.skippedChars;if(i>this.options.text.length&&(r=!0,t.finished=!0,i=this.options.text.length),i!==t.index){let a=e;for(;t.tags.length>0&&i>=t.tags[0].index;){a=this.addTextSection(a,t.tags[0].index);const s=this.addHtmlTag(t.tags.shift());a+=s,i+=s}a=this.addTextSection(a,i),t.index=a}r&&this.endTextAnimation()},endTextAnimation({unmounted:t,pressedSpace:e}={}){var n;this.textAnimation&&(this.textAnimation.timer&&clearInterval(this.textAnimation.timer),this.textAnimation=null),this.autoTimer&&!e&&clearTimeout(this.autoTimer),this.skipTimer&&clearTimeout(this.skipTimer),this.nextLineTimer&&clearTimeout(this.nextLineTimer),!t&&!e&&zn().playMode!=="normal"&&this.isBasicChoice&&(this.nextLineTimer=setTimeout(()=>{this.next()},zn().playMode==="auto"?(n=gt().dialogPanel.timeBetweenLines)!=null?n:Mu.dialogPanel.timeBetweenLines:0))},registerKeyboardShortcuts(){this.timeout=setTimeout(()=>{this.options.textField&&this.canInteract&&this.$refs.playerInput.focus()},10)}}}),ppe="",Cue={class:"dialog-content"},$ue=["innerHTML"],Oue=["innerHTML"],Eue=["innerHTML"],Tue={key:1},Aue={key:0,class:"dialog-choices"},Mue=["onClick","innerHTML"],Pue={key:1},Nue={key:2,class:"buttons-container"};function Iue(t,e,n,r,i,o){const a=b.resolveDirective("visible");return b.openBlock(),b.createElementBlock("div",{class:b.normalizeClass(["dialog-box w-full override",t.dialogBoxClass]),style:b.normalizeStyle(t.dialogBoxStyle)},[b.createElementVNode("div",Cue,[t.options.title?(b.openBlock(),b.createElementBlock("span",{key:0,class:"dialog-title override",style:b.normalizeStyle(t.titleStyle),innerHTML:t.options.title},null,12,$ue)):b.createCommentVNode("",!0),b.createElementVNode("span",{class:"dialog-text dialog-separator override",style:b.normalizeStyle(t.textStyle),innerHTML:t.preText},null,12,Oue),b.createElementVNode("span",{class:b.normalizeClass(["dialog-text override",t.options.cssClass]),style:b.normalizeStyle(t.textStyle),innerHTML:t.text},null,14,Eue),t.options.old?b.createCommentVNode("",!0):b.withDirectives((b.openBlock(),b.createElementBlock("div",Tue,[t.choices?(b.openBlock(),b.createElementBlock("div",Aue,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.choices,(s,u)=>(b.openBlock(),b.createElementBlock("p",{key:u,style:b.normalizeStyle(t.dialogStyle(s)),class:b.normalizeClass([t.dialogClass(s),"dialog-choice override"]),onClick:l=>t.chooseOption(s),ref_for:!0,ref:"choices",innerHTML:`${u+1}. \u2013\xA0 ${s.choice}`},null,14,Mue))),128))])):t.options.textField?(b.openBlock(),b.createElementBlock("div",Pue,[b.withDirectives(b.createElementVNode("input",{type:"text",class:"label-input input",ref:"playerInput",id:"player-input-field","onUpdate:modelValue":e[0]||(e[0]=s=>t.playerText=s)},null,512),[[b.vModelText,t.playerText]]),b.createElementVNode("button",{onClick:e[1]||(e[1]=(...s)=>t.submitText&&t.submitText(...s)),class:"button",id:"player-input-submit"}," Submit ")])):(b.openBlock(),b.createElementBlock("div",Nue,[b.createElementVNode("div",{onClick:e[2]||(e[2]=s=>t.chooseOption(0)),ref:"continue",class:"interact-button button override"}," Continue ",512)]))])),[[a,t.canInteract]])])],6)}const Lue=Hi(Sue,[["render",Iue]]),Due=b.createElementVNode("div",{class:"anchor"},null,-1),Rue=b.defineComponent({__name:"game-dialog",props:{layoutMode:String,inGame:Boolean},setup(t){const e=t,n=b.ref(Gt().inScript),r=b.ref(null),i=ao(),o=wn(),a=b.computed(()=>o.stack),s=zn(),u=b.computed(()=>s.dialog),l=b.ref(null),f=b.ref(null),c=b.ref(null),d=b.computed(()=>{let S="0px";const C=gt().layout.dialogBottomPadding;return typeof C=="number"?S=`${C}px`:typeof C=="string"&&(S=C),{paddingBottom:S}}),h=b.computed(()=>{if(u.value.length>0)return u.value[u.value.length-1]}),p=b.computed(()=>{if(h.value){const S=h.value.speaker;let C=h.value.pose;return S?(C||(C="idle"),kue(S,C)):void 0}}),m=b.computed(()=>i.dialogWidth),g=b.computed(()=>Gt().inScript);b.watch(g,S=>{S?n.value=!0:zn().playMode!=="normal"?(zn().playMode==="skip"&&(zn().playMode="normal"),r.value=setTimeout(()=>{n.value=!1},500)):n.value=!1}),b.onMounted(()=>{const S=C=>{f.value&&f.value.keyboardEvent&&f.value.keyboardEvent(C)};c.value=$o.on("debouncedKeydown",S)}),b.onUnmounted(()=>{c.value&&$o.off("debouncedKeydown",c.value),r.value&&clearTimeout(r.value)});const v=b.computed(()=>{var $,E;let S;const C=`${ao().dialogHeight}px`,A={};if(ao().overlayMode){A.position="absolute";const O=($=gt().dialogPanel.rightOffset)!=null?$:Mu.dialogPanel.rightOffset;A.right=`${O}px`;const z=(E=gt().dialogPanel.bottomOffset)!=null?E:Mu.dialogPanel.bottomOffset;A.bottom=`${z}px`}return{...A,width:e.layoutMode==="horizontal"?`${m.value}px`:"100%",height:C,transform:S,transformOrigin:"right"}});function y(){zn().toggleAutoPlay()}function k(){zn().toggleSkip()}function w(S,C){var E;const A=Pk(S.speaker);let $=(E=A==null?void 0:A.name)!=null?E:"Missing Character";return C>=1&&u.value[C-1].speaker===S.speaker&&($=void 0),S.choices&&S.choices.forEach(O=>{O.choice=es(O.choice)}),{title:$!=null?$:"",text:S.text,cssClass:S.cssClass,styleId:S.speaker,choices:S.choices,old:C<u.value.length-1,interactive:S.interactive,textField:S.textField}}function _(S){return S===s.dialog.length-1&&a.value.length>0}return b.watch(u.value,S=>{if(l.value){const C=l.value;C.scrollTop=C.scrollHeight+1e8}}),(S,C)=>(b.openBlock(),b.createElementBlock(b.Fragment,null,[b.createVNode(b.Transition,{name:"fade"},{default:b.withCtx(()=>[b.unref(p)&&b.unref(i).showDialog?(b.openBlock(),b.createBlock(jue,{key:0,pictureUrl:b.unref(p)},null,8,["pictureUrl"])):b.createCommentVNode("",!0)]),_:1}),b.createVNode(b.Transition,{name:"dialog-transition"},{default:b.withCtx(()=>[t.inGame&&b.unref(i).showDialog?(b.openBlock(),b.createElementBlock("div",{key:0,class:"dialog override",ref_key:"dialogRef",ref:l,style:b.normalizeStyle(b.unref(v))},[b.createVNode(b.TransitionGroup,{name:"list",tag:"div",class:"dialog-container w-full override",style:b.normalizeStyle(b.unref(d))},{default:b.withCtx(()=>[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(b.unref(u),(A,$)=>(b.openBlock(),b.createBlock(Lue,{ref_for:!0,ref:E=>f.value=E,key:A.id,options:w(A,$),active:_($)},null,8,["options","active"]))),128))]),_:1},8,["style"]),(b.openBlock(),b.createBlock(b.Teleport,{to:"#app"},[b.createElementVNode("div",{class:"auto-skip-buttons flex"},[b.createElementVNode("div",{class:"button menu-toggle-button auto-button auto",onClick:y}," Auto "),b.createElementVNode("div",{class:"button menu-toggle-button auto-button skip",onClick:k}," Skip ")])])),Due],4)):b.createCommentVNode("",!0)]),_:1})],64))}}),mpe="",Bue=["id"],zue=["src"],Fue={class:"tab-title"},Vue=b.defineComponent({__name:"tab-selector",props:{tab:null,active:{type:Boolean}},emits:["click"],setup(t,{emit:e}){const n=t,r=b.computed(()=>n.active?"tab-active":"tab-inactive");function i(){e("click")}return(o,a)=>(b.openBlock(),b.createElementBlock("div",{class:b.normalizeClass(["tab",b.unref(r)]),id:`tab-${t.tab.id}`,onClick:i},[b.createElementVNode("div",{class:b.normalizeClass(["tab-title-container",t.active?"active":""])},[t.tab.icon?(b.openBlock(),b.createElementBlock("img",{key:0,src:t.tab.icon,alt:"tab icon",class:"tab-icon"},null,8,zue)):b.createCommentVNode("",!0),b.createElementVNode("span",Fue,b.toDisplayString(t.tab.label),1)],2)],10,Bue))}}),vpe="",que={class:"tabs-controller"},Hue={key:0,class:"tabs-controller__tabs"},Uue={key:1,class:"tab-content"},Wue={key:2},Kue=[b.createElementVNode("div",{class:"tab-content__empty"},[b.createElementVNode("p",null,"No tab selected")],-1)],Jue=b.defineComponent({__name:"TabsController",props:{tabs:null,defaultTab:null},emits:["tab-change","close"],setup(t,{emit:e}){var a,s;const n=t,r=b.ref((s=(a=n.tabs[n.defaultTab])==null?void 0:a.id)!=null?s:null);function i(u){r.value=n.tabs[u].id,e("tab-change",u)}const o=b.computed(()=>n.tabs.find(u=>u.id===r.value));return(u,l)=>(b.openBlock(),b.createElementBlock("div",que,[t.tabs.length>1?(b.openBlock(),b.createElementBlock("div",Hue,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.tabs,(f,c)=>(b.openBlock(),b.createBlock(Vue,{key:f.id,tab:f,active:f.id===r.value,onClick:()=>i(c)},null,8,["tab","active","onClick"]))),128))])):b.createCommentVNode("",!0),b.unref(o)?(b.openBlock(),b.createElementBlock("div",Uue,[b.unref(o)?(b.openBlock(),b.createBlock(b.resolveDynamicComponent(b.unref(o).component),{key:0,onClose:l[0]||(l[0]=f=>u.$emit("close"))},null,32)):b.createCommentVNode("",!0)])):(b.openBlock(),b.createElementBlock("div",Wue,Kue))]))}}),ype="",Gue={class:"menu-container"},Que=["onClick","id"],Yue={class:"title"},Xue=b.defineComponent({__name:"menu-buttons",setup(t){const e=jo(),n=b.ref(null);b.onMounted(()=>{n.value=$o.on("keydown",f=>{f.key==="Escape"&&jo().toggleMenu()}),Fn.callHook("onGameMounted")}),b.onUnmounted(()=>{$o.off("keydown",n.value),Fn.callHook("onGameUnmounted")});function r(f){jo().activeMenu=f}const i=b.computed(()=>e.menus),o=b.computed(()=>e.menu),a=b.computed(()=>{var f,c;return((c=(f=o.value)==null?void 0:f.tabs)!=null?c:[]).filter(d=>d.condition?d.condition():!0).map(d=>({id:d.id,label:d.text,component:d.component}))});function s(){e.closeMenu()}function u(f){e.setActiveTab(f)}function l(){return s()}return(f,c)=>(b.openBlock(),b.createElementBlock("div",Gue,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(b.unref(i),(d,h)=>{var p;return b.openBlock(),b.createElementBlock("button",{key:d.id,onClick:m=>r(d.id),id:(p=d.cssId)!=null?p:`${h}-menu-button`,class:"button menu-toggle-button"},b.toDisplayString(d.label),9,Que)}),128)),b.unref(o)?(b.openBlock(),b.createBlock(b.Teleport,{key:0,to:"#app-container"},[b.createVNode(Ws,{containerCssClass:{[b.unref(o).cssClass]:!0,"menu-modal":!0},onClose:s},{header:b.withCtx(()=>{var d,h;return[b.createElementVNode("h3",Yue,b.toDisplayString((h=(d=b.unref(e).tab)==null?void 0:d.text)!=null?h:b.unref(o).label),1)]}),body:b.withCtx(()=>[b.createVNode(Jue,{onTabChange:u,onClose:l,tabs:b.unref(a),defaultTab:b.unref(o).activeTab},null,8,["tabs","defaultTab"])]),_:1},8,["containerCssClass"])])):b.createCommentVNode("",!0)]))}}),bpe="",Zue=["id"],ele=["innerHTML"],tle=b.defineComponent({__name:"screen-object",props:{screenObject:null,transitioning:{type:Boolean}},setup(t){const e=t;function n(o){e.transitioning||e.screenObject.onClick&&io().clickObject(o)}const r=b.computed(()=>{const o={};return e.screenObject.onClick?o.interactable=!0:o.disabled=!0,e.screenObject.cssClass&&(o[e.screenObject.cssClass]=!0),o}),i=b.computed(()=>{const o={};e.screenObject.opacity!==1&&(o.opacity=e.screenObject.opacity);let a=e.screenObject.x,s=e.screenObject.y,u=e.screenObject.width,l=e.screenObject.height;if(e.screenObject.anchor){const c=e.screenObject.anchor;a=e.screenObject.x-u*c.x,s=e.screenObject.y-l*c.y,o.transformOrigin=`${c.x*100}% ${c.y*100}%`}e.screenObject.scale&&(u=u*e.screenObject.scale,l=l*e.screenObject.scale);const f={...o,left:`${a}px`,top:`${s}px`,width:`${u}px`,height:`${l}px`};return Gne(e.screenObject)&&(f.backgroundImage=`url(${td(e.screenObject.image)})`),f});return(o,a)=>{const s=b.resolveComponent("ScreenObject",!0);return b.openBlock(),b.createElementBlock("div",{tabindex:"-1",class:b.normalizeClass(["viewport-object",b.unref(r)]),id:`viewport-object-${e.screenObject.id}`,onClick:a[0]||(a[0]=u=>n(t.screenObject)),style:b.normalizeStyle(b.unref(i))},[b.createElementVNode("span",{innerHTML:e.screenObject.text?b.unref(es)(e.screenObject.text):void 0},null,8,ele),(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(e.screenObject.children,u=>(b.openBlock(),b.createBlock(s,{transitioning:t.transitioning,key:u.id,screenObject:u},null,8,["transitioning","screenObject"]))),128))],14,Zue)}}}),kpe="",nle=["id"],rle=["id","onClick","innerHTML"],Nk=b.defineComponent({__name:"screen-layer",props:{layer:String,transitioning:{type:Boolean,default:!1}},setup(t){const e=t,n=wn(),r=Gt(),i=Uo(),o=io(),a=b.computed(()=>gt().layout.backgrounds.width),s=b.computed(()=>gt().layout.backgrounds.height),u=b.computed(()=>e.layer),l=b.computed(()=>i.buttons),f=b.computed(()=>{const _=zm().screens[u.value];return _||(console.log(u),Kt(`Screen ${u.value} doesn't have a config`)),_}),c=b.computed(()=>r.isInGame),d=b.computed(()=>f.value.buttons||[]);function h(_){const C=Hs(_).background;if(!!C)return td(C)}function p(_){const S=Hs(_),C=l.value[_],A=S.tag||"default",$=C.state;return $===!0&&Nr().isInteractionTagBlocked(A)?"greyed":$}function m(_){const S=p(_);return S==="hidden"||S==="greyed"||S===!1}function g(_){const S=p(_),C={};S===!0?C.interactable=!0:(C.disabled=!0,S==="greyed"?C.greyed=!0:(S==="hidden"||S===!1)&&(C.hidden=!0));const A=Hs(_);return A.cssClass&&(C[A.cssClass]=!0),C}function v(_){const S=Hs(_),C={};p(_),S.position.width&&(C.width=`${S.position.width}px`),S.position.height&&(C.height=`${S.position.height}px`),S.background&&(C.backgroundImage=`url(${h(_)})`);let A=S.position.left,$=S.position.top;return S.anchor&&(A=S.position.left-S.position.width*S.anchor.x,$=S.position.top-S.position.height*S.anchor.y),{...C,left:`${A}px`,top:`${$}px`}}function y(_){if(m(_)||e.transitioning)return;const S=Hs(_);if(!yL(S))return!1;if(l.value[_].state===!0){Eu("onButtonClicked");const A=S.action;if(!A)return;S.actionType==="run"?n.runLabelFunction(A):n.jumpToLabel(A)}}function k(_){var A;const C=(A=Hs(_).text)!=null?A:"";return es(C)}const w=b.computed(()=>({backgroundImage:`url(${td(f.value.background)})`,width:`${a.value}px`,height:`${s.value}px`}));return(_,S)=>b.unref(c)?(b.openBlock(),b.createElementBlock("div",{key:0,class:"viewport-layer",id:`viewport-layer-${b.unref(u)}`,style:b.normalizeStyle(b.unref(w))},[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(b.unref(d),(C,A)=>(b.openBlock(),b.createElementBlock("div",{key:A,tabindex:"-1",class:b.normalizeClass(["viewport-button",g(C)]),id:`viewport-button-${C}`,onClick:$=>y(C),style:b.normalizeStyle(v(C)),innerHTML:k(C)},null,14,rle))),128)),(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(b.unref(o).tree,C=>(b.openBlock(),b.createBlock(tle,{key:C.id,screenObject:C,transitioning:t.transitioning},null,8,["screenObject","transitioning"]))),128))],12,nle)):b.createCommentVNode("",!0)}}),wpe="",ile=b.defineComponent({__name:"NarratTransition",props:{name:{type:String,required:!0},duration:{type:Number,required:!0},delay:Number},emits:["complete"],setup(t,{emit:e}){const n=t,r=b.useSlots(),i=b.ref("start"),o=b.reactive({oldSlotClasses:{},oldSlotStyle:{},newSlotClasses:{},newSlotStyle:{}});return b.computed(()=>r.oldElement&&r.oldElement.length>0),b.computed(()=>r.newElement&&r.newElement.length>0),b.onMounted(async()=>{var s;const a=`narrat-transition-${n.name}`;o.newSlotClasses={[`${a}-enter-from`]:!0,[`${a}-enter-active`]:!0},o.oldSlotStyle={transitionDuration:`${n.duration/1e3}s`},o.newSlotStyle={transitionDuration:`${n.duration/1e3}s`},o.oldSlotClasses={[`${a}-leave-active`]:!0},await _o(30),o.oldSlotClasses[`${a}-leave-to`]=!0,await _o((s=n.delay)!=null?s:0),delete o.newSlotClasses[`${a}-enter-from`],await _o(n.duration),delete o.newSlotClasses[`${a}-enter-active`],delete o.oldSlotClasses[`${a}-leave-active`],i.value="end",e("complete")}),(a,s)=>(b.openBlock(),b.createElementBlock(b.Fragment,null,[i.value!=="end"?(b.openBlock(),b.createElementBlock("div",{key:0,class:b.normalizeClass(["transition-holder",o.oldSlotClasses]),style:b.normalizeStyle(o.oldSlotStyle)},[b.renderSlot(a.$slots,"oldElement")],6)):b.createCommentVNode("",!0),b.createElementVNode("div",{class:b.normalizeClass(["transition-holder",o.newSlotClasses]),style:b.normalizeStyle(o.newSlotStyle)},[b.renderSlot(a.$slots,"newElement")],6)],64))}}),_pe="",ole=b.defineComponent({__name:"screens",setup(t){const e=ao(),n=Gt(),r=Uo(),i=b.computed(()=>r.nonEmptyLayers),o=b.computed(()=>e.layoutMode),a=b.computed(()=>gt().layout.backgrounds.width),s=b.computed(()=>gt().layout.backgrounds.height),u=b.computed(()=>n.isInGame);function l(c){r.finishTransition(c)}const f=b.computed(()=>{const c=a.value,d=s.value;return o.value,{height:`${d}px`,width:`${c}px`}});return(c,d)=>b.unref(u)?(b.openBlock(),b.createElementBlock("div",{key:0,class:"viewport",id:"narrat-viewport",style:b.normalizeStyle(b.unref(f))},[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(b.unref(i),(h,p)=>(b.openBlock(),b.createElementBlock("div",{key:p,class:"layer-container"},[h.transition?(b.openBlock(),b.createBlock(ile,{key:0,name:h.transition.transition,duration:h.transition.duration,delay:h.transition.delay,onComplete:()=>l(p)},{oldElement:b.withCtx(()=>[h.transition.oldScreen?(b.openBlock(),b.createBlock(Nk,{key:0,layer:h.transition.oldScreen,transitioning:!0},null,8,["layer"])):b.createCommentVNode("",!0)]),newElement:b.withCtx(()=>[h.screen?(b.openBlock(),b.createBlock(Nk,{key:0,layer:h.screen,transitioning:!0},null,8,["layer"])):b.createCommentVNode("",!0)]),_:2},1032,["name","duration","delay","onComplete"])):h.screen?(b.openBlock(),b.createBlock(Nk,{key:1,layer:h.screen},null,8,["layer"])):b.createCommentVNode("",!0)]))),128))],4)):b.createCommentVNode("",!0)}}),xpe="",ale=b.defineComponent({data(){return{}},methods:{getStatImage(t){return Ma(this.statsConfig[t].icon)}},computed:{...Za($a,["hudStats"]),...Za(ao,["layoutMode"]),statsConfig(){return gt().hudStats},stats(){return this.hudStats},hudStyle(){var e;let t="0";return this.layoutMode==="horizontal"&&(t=`${Vm()+((e=gt().dialogPanel.rightOffset)!=null?e:Mu.dialogPanel.rightOffset)}px`),{right:t}}}}),jpe="",sle=["src"],ule={class:"bold hud-text"},lle=b.createTextVNode(": ");function cle(t,e,n,r,i,o){return b.openBlock(),b.createElementBlock("div",{class:"hud",style:b.normalizeStyle(t.hudStyle)},[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.stats,(a,s)=>(b.openBlock(),b.createElementBlock("div",{key:s,class:"hud-stat"},[b.createElementVNode("img",{class:"hud-icon",src:t.getStatImage(s)},null,8,sle),b.createElementVNode("span",ule,b.toDisplayString(t.statsConfig[s].name),1),lle,b.createElementVNode("span",null,b.toDisplayString(Math.floor(a.value*100)/100),1)]))),128))],4)}const fle=Hi(ale,[["render",cle]]),dle={key:0,class:"auto-play-feedback-container"},hle=b.defineComponent({__name:"AutoPlayFeedback",setup(t){const e=zn(),n=b.computed(()=>e.playMode==="auto"),r=b.computed(()=>e.playMode==="skip"),i=b.computed(()=>n.value?"auto-play-feedback-auto":r.value?"auto-play-feedback-skip":{}),o=b.computed(()=>n.value?"Auto Play":r.value?"Skip":"");return(a,s)=>b.unref(o)?(b.openBlock(),b.createElementBlock("div",dle,[b.createElementVNode("div",{class:b.normalizeClass(["auto-play-feedback",b.unref(i)])},b.toDisplayString(b.unref(o)),3)])):b.createCommentVNode("",!0)}}),Spe="",ple=b.defineComponent({__name:"in-game",setup(t){const e=Gt(),n=ao(),r=b.computed(()=>n.layoutMode),i=b.computed(()=>e.saving),o=b.ref(null),a=zn(),s=b.ref(null),u=b.computed(()=>i.value&&!i.value.withPrompt||i.value&&o.value),l=b.computed(()=>{let h="row";return r.value==="vertical"&&(h="column"),{flexDirection:h}});function f(h){if(o.value=null,h===null){Gt().finishManualSave(h,!1);return}Gt().finishManualSave(h,!0)}function c(){o.value=!0}function d(){o.value=!1,e.finishManualSave(null,!1),o.value=null}return b.onMounted(()=>{s.value=$o.on("debouncedKeydown",h=>{Gt().debugMode||((h.key==="a"||h.key==="A")&&a.toggleAutoPlay(),(h.key==="s"||h.key==="S")&&a.toggleSkip())})}),b.onUnmounted(()=>{s.value&&$o.off("debouncedKeydown",s.value)}),(h,p)=>(b.openBlock(),b.createElementBlock("div",{class:"game",style:b.normalizeStyle(b.unref(l))},[b.createVNode(fle),b.createVNode(Xue,{class:"menu-toggle"}),b.createVNode(ole),b.createVNode(Rue,{inGame:!0,layoutMode:b.unref(r)},null,8,["layoutMode"]),b.unref(u)?(b.openBlock(),b.createBlock(iR,{key:0,mode:"pick",onChosen:f,onClose:p[0]||(p[0]=()=>f(null))})):b.createCommentVNode("",!0),b.createVNode(hle),b.unref(i)&&b.unref(i).withPrompt&&o.value===null?(b.openBlock(),b.createBlock(Hm,{key:1,prompt:"Would you like to save the game?",onConfirm:c,onRefuse:d})):b.createCommentVNode("",!0)],4))}}),Cpe="",mle=b.defineComponent({props:{percentage:Number,step:String},methods:{loadingStyle(){return{width:`${this.percentage*60}vw`}}},computed:{}}),$pe="",vle={id:"loading-bar"},gle={id:"loading-text"};function yle(t,e,n,r,i,o){return b.openBlock(),b.createElementBlock("div",vle,[b.createElementVNode("div",{id:"inner-loading-bar",style:b.normalizeStyle(t.loadingStyle())},null,4),b.createElementVNode("div",gle,[b.createElementVNode("h3",null,"Loading "+b.toDisplayString(Math.floor(t.percentage*100))+"% - "+b.toDisplayString(t.step),1)])])}const ble=Hi(mle,[["render",yle]]),kle="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlJhdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCgkgdmlld0JveD0iMCAwIDU5NS4zIDU5NS4zIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1OTUuMyA1OTUuMzsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLnN0MHtmaWxsOiNFMjNCMzM7fQo8L3N0eWxlPgo8cGF0aCBpZD0iUmF0X1NoYXBlIiBjbGFzcz0ic3QwIiBkPSJNNTU2LjksODIuNWMtMTAuOC0yNC4zLTQ3LTU3LjEtNzEuMy02NS42Yy0yNC4zLTguNC02NC4xLTAuMy04OC43LDIyLjMKCWMtMjAsMTguNC0yNiwyOC4yLTI5LjEsMzdjLTIuMSw1LjktNC44LDEzLjUtNiwyMC45djBjLTAuNSw0LjEtNC41LDctOC42LDYuMWMtMTAuNC0yLjMtMjkuNS02LTQ0LjQtNi4zCgljLTEzLjctMC4yLTMwLjEsMy4yLTQwLjQsNS43Yy00LjUsMS4xLTguOC0yLjItOC44LTYuOGMtMC4xLTUuMy0xLjEtMTIuMy00LjgtMTkuNmMtOC41LTE2LjktMTkuNi0zMi42LTU3LjgtNDcuNAoJYy0zMS45LTEyLjQtNzUuMS05LjctMTAwLjgsMS44Yy0yOC4xLDEyLjYtNDIuNCwzNy45LTU0LDYxLjhjLTE0LjQsMjkuOC0xNC45LDgzLjYtNi40LDEwNGMxMi44LDMwLjcsMzUuOCw0Ny4yLDUyLjYsNTMKCWMxMS4zLDMuOCwyOC4yLDMuNywzOC4yLDMuM2M0LjItMC4yLDcuNywzLjMsNy41LDcuNWMtMC43LDEzLjYtMC45LDQxLjUsNyw2MS40YzcuNywxOS40LDI5LjcsNjIuMyw1MC43LDEwMS4yCgljMCwwLjEtMTQuNiwyLjktMzEuNCw2LjhjLTIzLjksNS41LTUyLjYsMTIuNy01NC4zLDEzLjdjLTMuNSwyLjEtMywxMC0yLjcsMTJjMC41LDMuNCw1LjMsOC4xLDYuOSw4LjNjMy45LDAuMywzMS4zLTcuNiw1NS43LTE0LjYKCWMxOC41LTUuMywzNC45LTkuMywzNS41LTguMmM1LjEsOS4zLDEwLDE4LDE0LjQsMjUuOGM1LjIsOS4xLDEwLjcsMTYuNCwxNC4xLDIzLjZjMS4xLDIuMy0xNi42LDUuOC0zMi41LDE0LjcKCWMtMTYuNCw5LjEtMjkuNywyMS0zMi4zLDI0Yy0xLjgsMi4xLTMsNi0xLjIsMTAuN2MxLjEsMi45LDEwLDUuNywxMi40LDUuMWM2LjgtMS43LDE2LjUtMTIuNSwzMy4xLTIxLjEKCWMxNi4zLTguNSwzMi45LTE0LjksMzMuOC0xMy42YzkuNywxNC4zLDE2LjksMjEuNiwyMi42LDMxLjJjOS44LDE2LjUsMjcuMyw0NS45LDQ2LjYsMzkuNWM2LjQtMi4xLDMxLjEtMzMuNiw1My4zLTY4LjYKCWMxLjMtMi4xLDE2LjEsMTEuMywzMC40LDIzLjJjMTMuOCwxMS40LDIyLjcsMjAuNiwyNy4xLDIxLjRjNS40LDEsMTQuMi03LjcsMTQuMS0xNC43Yy0wLjEtMi43LTE0LjMtMTMuOC0yOS4xLTI2LjIKCWMtMTQuNS0xMi4xLTMwLjEtMjIuOC0yOS4yLTI0LjNjNy42LTEyLDE0LjUtMjMuNywyMC4xLTMzLjljNC4zLTcuOCw4LjktMTYsMTMtMjQuN2MwLjYtMS4yLDE1LjksMywzMS40LDcuMWMxNS4zLDQsMjYuNywxMCwzMSw4CgljNi45LTMsMTEuNi0xMy44LDkuNC0xOC4zYy0xLjEtMi4zLTE3LTcuMy0zMy4yLTEyYy0xNC4yLTQuMS0yOC02LjUtMjcuNy03LjNjMTUuNS0zNCwyOC44LTY0LjgsMjcuNi02OS42CgljLTEuNy03LjEsMi42LTExLjksNy0zNi41YzMuMi0xOC4xLDQuNy00MC45LDUuMi01MS43YzAuMi0zLjUsMi44LTYuMyw2LjMtNi43YzMuMS0wLjMsNi45LTAuOSwxMC41LTEuOWM3LjgtMiwxOC42LTcuOCwzNi40LTIwLjYKCWMxNy45LTEyLjgsMzguNy00OS42LDQ0LjQtNjcuOFM1NjcuNiwxMDYuOCw1NTYuOSw4Mi41eiBNMjY1LjEsMzM2LjJjLTguMSw0LTEzLDctMjYuNCw5LjZjLTYuOSwxLjQtMjkuNC0wLjItNDAuNy00LjYKCWMtMTAuNS00LjEtMTkuOS03LjYtMzAtMTUuNHMtMTUuNy0xMy4yLTE1LjctMTUuM2MwLTQuNCw2LTkuNCwxMS05LjRjNS4xLDAsMTQuNSw5LjIsMjkuNywxNi42YzE0LjMsNywxNy45LDYuMSwyNS40LDcuMwoJYzIuOSwwLjUsNy43LDAuNiwxMC43LDAuNGMxNC4xLTEuMywyMS40LTUuOSwyNS4zLTguOGM0LTMsMTMuNy0xMi45LDE3LjItMTIuNWM4LDEsMTguOSwzLjQsMTguOSw3LjEKCUMyOTAuNCwzMTksMjczLjIsMzMyLjEsMjY1LjEsMzM2LjJ6IE0zMjAuOSw1MjEuNGMtNC4zLDMuNy0xNy43LDEzLjUtMjMuMywxMy41Yy0yLjgsMC03LjQtOC4yLTExLjUtMTYuOAoJYy00LjEtOC41LTkuMS0yMS4xLTkuMS0zMS42YzAtNC42LDYtNy40LDEzLjQtOS4yYzcuMi0xLjcsMjcuMy0xLjgsMjkuOS0xLjFjNi44LDEuNywxMi45LDIuMiwxMi43LDYuNGMtMC40LDEyLjctNywxOC45LTguMywyNC4zCglDMzIzLjQsNTEyLjMsMzIzLjQsNTE5LjIsMzIwLjksNTIxLjR6IE00MzEuMSwzMjAuM2MtOS4yLDcuNC0xMC42LDguMS0yNC45LDEzLjdjLTExLjMsNC40LTI4LjYsNS44LTQxLjYsMy42CgljLTEyLjItMi4xLTIyLjMtNC42LTI5LjUtMTAuMWMtOS43LTcuMy0xNi40LTE1LjEtMTYuNC0xOS44YzAtMy43LDYuNC00LjMsMTQuNS00LjljMy41LTAuMyw5LjMsNS45LDEzLjIsOS4yCgljOC4xLDYuOCwxNC44LDgsMjguOCw5LjljMi45LDAuNCw3LjgsMC40LDEwLjcsMC4xYzcuNS0wLjksMTItMC40LDI1LjgtOC4yYzIwLTExLjIsMTcuOC0xNC40LDI1LjEtMTIuNmMyLjIsMC42LDUuOCwxLjIsNS42LDUuNgoJQzQ0Mi40LDMwOSw0NDAuNSwzMTIuNyw0MzEuMSwzMjAuM3oiLz4KPC9zdmc+Cg==",wle={id:"engine-splash-screen",class:"flex justify-center items-center"},_le={id:"engine-splash-title"},xle=["src"],jle=b.defineComponent({__name:"engine-splash",emits:["finished"],setup(t,{emit:e}){const n=b.ref("hidden"),r=b.computed(()=>({transitionDuration:`${l.value}s`})),i=b.computed(()=>({invisible:n.value!=="appear"})),o=Gt(),a=b.computed(()=>{var d,h;return(h=(d=gt().splashScreens)==null?void 0:d.engineSplashScreen)!=null?h:{}}),s=b.computed(()=>typeof a.value.overrideText=="string"?a.value.overrideText:"Made with narrat engine"),u=b.computed(()=>{var d;return(d=a.value.overrideLogo)!=null?d:kle}),l=b.computed(()=>typeof a.value.fadeDuration=="number"?a.value.fadeDuration:2),f=b.computed(()=>typeof a.value.timeBeforeFadeout=="number"?a.value.timeBeforeFadeout:3);b.onMounted(async()=>{if(await _o(10),n.value="appear",a.value.skip||o.options.debug){c();return}await _o(l.value*1e3),await _o(f.value*1e3),n.value="disappear",await _o(l.value*1e3),c()});function c(){o.loading.loaded?e("finished"):o.listener.once("gameLoaded",()=>{e("finished")})}return(d,h)=>(b.openBlock(),b.createElementBlock("div",wle,[b.createElementVNode("div",{id:"engine-splash-header",class:b.normalizeClass(["flex justify-center flex-col items-center",b.unref(i)]),style:b.normalizeStyle(b.unref(r))},[b.createElementVNode("h1",_le,b.toDisplayString(b.unref(s)),1),b.createElementVNode("img",{src:b.unref(u),alt:"Narrat Logo",id:"engine-splash-logo"},null,8,xle),b.createVNode(ble,{percentage:b.unref(o).loading.percentage,step:b.unref(o).loading.step},null,8,["percentage","step"])],6)]))}}),Ope="",Sle={id:"game-splash-screen",style:{height:"100%",padding:"20px"},class:"flex justify-center items-center"},Cle={id:"game-splash-screen-header flex justify-center flex-col items-center",class:"flex justify-center flex-col items-center"},$le={class:"title",id:"game-splash-title"},Ole=b.defineComponent({__name:"game-splash",setup(t){const e=Gt(),n=b.computed(()=>{var s,u;return(u=(s=gt().splashScreens)==null?void 0:s.gameSplashScreen)!=null?u:{}}),r=b.computed(()=>typeof n.value.startButtonText=="string"?n.value.startButtonText:"Press to start"),i=b.computed(()=>e.loading.loaded),o=b.computed(()=>gt().gameTitle||"Narrat Game");function a(){e.flowState="menu"}return b.onMounted(()=>{e.options.debug&&a()}),(s,u)=>(b.openBlock(),b.createElementBlock("div",Sle,[b.createElementVNode("div",Cle,[b.createElementVNode("h1",$le,b.toDisplayString(b.unref(o)),1),b.unref(i)?(b.openBlock(),b.createElementBlock("button",{key:0,class:"button menu-button main-menu-button large splash-start-button override",onClick:a},b.toDisplayString(b.unref(r)),1)):b.createCommentVNode("",!0)])]))}}),Epe="",Ele={key:0,class:"floating-tooltip-title"},Tle=b.createElementVNode("hr",null,null,-1),Ale={class:"floating-tooltip-text"},Mle=b.defineComponent({__name:"floating-tooltip",props:{title:null,text:null,width:null,x:null,y:null},setup(t){const e=t,n=b.ref(150),r=b.ref(null),i=b.computed(()=>{const o={};let a=e.x-e.width/2;a=Math.min(a,window.innerWidth-e.width-5),a=Math.max(5,a),o.left=`${a}px`;let s=window.innerHeight-e.y;return s=Math.max(s,5),s=Math.min(s,window.innerHeight-n.value-5),o.bottom=`${s}px`,o.width=`${e.width}px`,o});return b.onMounted(()=>{r.value&&(n.value=r.value.clientHeight)}),(o,a)=>(b.openBlock(),b.createBlock(b.Transition,{name:"fade"},{default:b.withCtx(()=>[b.createElementVNode("div",{class:"floating-tooltip",style:b.normalizeStyle(b.unref(i)),ref_key:"element",ref:r},[t.title?(b.openBlock(),b.createElementBlock("div",Ele,[b.createTextVNode(b.toDisplayString(e.title)+" ",1),Tle])):b.createCommentVNode("",!0),b.createElementVNode("div",Ale,b.toDisplayString(e.text),1)],4)]),_:1}))}}),Tpe="",Ple={class:"tooltips-ui"},Nle=b.defineComponent({__name:"tooltips-ui",setup(t){const e=b.computed(()=>lm().tooltip);return b.computed(()=>ed().options.width),(n,r)=>(b.openBlock(),b.createElementBlock("div",Ple,[b.unref(e)?(b.openBlock(),b.createBlock(Mle,b.normalizeProps(b.mergeProps({key:0},b.unref(e))),null,16)):b.createCommentVNode("",!0)]))}}),Ile=b.defineComponent({setup(){const t=zn(),e=wn(),n=Gt();return{dialog:b.computed(()=>t.dialog),stack:b.computed(()=>e.stack),flowState:b.computed(()=>n.flowState),alerts:b.computed(()=>n.alerts)}},$refs:{dialogContainer:HTMLInputElement},inject:["mq"],components:{DebugMenu:Lse,NotificationToast:zse,StartMenu:gue,AlertModal:bue,InGame:ple,EngineSplash:jle,GameSplash:Ole,TooltipsUi:Nle},data(){return{lineTitle:"title",lineText:"hello"}},props:{options:Object},async mounted(){Fn.callHook("onAppMounted"),await Gt().engineLoading(),window.addEventListener("resize",rR(()=>{this.updateScreenSize()},100,{maxWait:200})),$o.setup(this.options.debug),setTimeout(()=>{this.updateScreenSize()},50)},computed:{...Za(ao,["screenWidth","screenHeight","layoutMode","gameWidth","gameHeight","gameScaleRatio","actualGameHeight"]),...Za(wn,["currentLine"]),appStyle(){return{transform:`scale(${this.gameScaleRatio}, ${this.gameScaleRatio})`,width:`${this.gameWidth}px`,height:`${this.actualGameHeight}px`}},appClass(){return jo().activeMenu?"app-blurred-by-modal":{}}},methods:{closeAlert(t){Gt().closeAlert(t)},engineSplashDone(){Gt().flowState="game-splash"},updateScreenSize(){ao().updateScreenSize(window.innerWidth,window.innerHeight)}}}),Ape="";function Lle(t,e,n,r,i,o){const a=b.resolveComponent("EngineSplash"),s=b.resolveComponent("GameSplash"),u=b.resolveComponent("StartMenu"),l=b.resolveComponent("InGame"),f=b.resolveComponent("DebugMenu"),c=b.resolveComponent("NotificationToast"),d=b.resolveComponent("AlertModal"),h=b.resolveComponent("TooltipsUi");return b.openBlock(),b.createElementBlock(b.Fragment,null,[b.createElementVNode("div",{id:"app-container",style:b.normalizeStyle(t.appStyle)},[b.createElementVNode("div",{id:"app",class:b.normalizeClass(t.appClass)},[t.flowState==="engine-splash"?(b.openBlock(),b.createBlock(a,{key:0,onFinished:t.engineSplashDone},null,8,["onFinished"])):(b.openBlock(),b.createBlock(b.Transition,{key:1,name:"screens-fade"},{default:b.withCtx(()=>[t.flowState==="game-splash"?(b.openBlock(),b.createBlock(s,{key:"1"})):t.flowState==="menu"?(b.openBlock(),b.createBlock(u,{key:"2"})):t.flowState==="playing"?(b.openBlock(),b.createBlock(l,{key:"3"})):b.createCommentVNode("",!0)]),_:1})),t.options.debug?(b.openBlock(),b.createBlock(f,{key:2})):b.createCommentVNode("",!0),b.createVNode(c),(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.alerts,p=>(b.openBlock(),b.createBlock(d,{key:p.id,title:p.title,text:p.text,onClose:()=>t.closeAlert(p.id)},null,8,["title","text","onClose"]))),128))],2)],4),b.createVNode(h)],64)}const Dle=Hi(Ile,[["render",Lle]]);function qt(t,e){console.error("Runtime error ========================="),console.error(`Command: ${t.commandType}`),console.error("Args: ",t.args),console.error("Options: ",t.options),Kt(`Runtime error at ${t.fileName}:${t.line} (${t.commandType}) ${t.code}. -
223
+ deps: ${f}}`};const i={keyword:"dependencies",type:"object",schemaType:"object",error:t.error,code(u){const[l,f]=o(u);a(u,l),s(u,f)}};function o({schema:u}){const l={},f={};for(const c in u){if(c==="__proto__")continue;const d=Array.isArray(u[c])?l:f;d[c]=u[c]}return[l,f]}function a(u,l=u.schema){const{gen:f,data:c,it:d}=u;if(Object.keys(l).length===0)return;const h=f.let("missing");for(const p in l){const m=l[p];if(m.length===0)continue;const g=(0,r.propertyInData)(f,c,p,d.opts.ownProperties);u.setParams({property:p,depsCount:m.length,deps:m.join(", ")}),d.allErrors?f.if(g,()=>{for(const v of m)(0,r.checkReportMissingProp)(u,v)}):(f.if((0,e._)`${g} && (${(0,r.checkMissingProp)(u,m,h)})`),(0,r.reportMissingProp)(u,h),f.else())}}t.validatePropertyDeps=a;function s(u,l=u.schema){const{gen:f,data:c,keyword:d,it:h}=u,p=f.name("valid");for(const m in l)(0,n.alwaysValidSchema)(h,l[m])||(f.if((0,r.propertyInData)(f,c,m,h.opts.ownProperties),()=>{const g=u.subschema({keyword:d,schemaProp:m},p);u.mergeValidEvaluated(g,p)},()=>f.var(p,!0)),u.ok(p))}t.validateSchemaDeps=s,t.default=i})(DD);var hk={};Object.defineProperty(hk,"__esModule",{value:!0});const RD=jn,hae=In,pae={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:{message:"property name must be valid",params:({params:t})=>(0,RD._)`{propertyName: ${t.propertyName}}`},code(t){const{gen:e,schema:n,data:r,it:i}=t;if((0,hae.alwaysValidSchema)(i,n))return;const o=e.name("valid");e.forIn("key",r,a=>{t.setParams({propertyName:a}),t.subschema({keyword:"propertyNames",data:a,dataTypes:["string"],propertyName:a,compositeRule:!0},o),e.if((0,RD.not)(o),()=>{t.error(!0),i.allErrors||e.break()})}),t.ok(o)}};hk.default=pae;var Pm={};Object.defineProperty(Pm,"__esModule",{value:!0});const Nm=Sn,Go=jn,mae=Oa,Im=In,vae={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:{message:"must NOT have additional properties",params:({params:t})=>(0,Go._)`{additionalProperty: ${t.additionalProperty}}`},code(t){const{gen:e,schema:n,parentSchema:r,data:i,errsCount:o,it:a}=t;if(!o)throw new Error("ajv implementation error");const{allErrors:s,opts:u}=a;if(a.props=!0,u.removeAdditional!=="all"&&(0,Im.alwaysValidSchema)(a,n))return;const l=(0,Nm.allSchemaProperties)(r.properties),f=(0,Nm.allSchemaProperties)(r.patternProperties);c(),t.ok((0,Go._)`${o} === ${mae.default.errors}`);function c(){e.forIn("key",i,g=>{!l.length&&!f.length?p(g):e.if(d(g),()=>p(g))})}function d(g){let v;if(l.length>8){const y=(0,Im.schemaRefOrVal)(a,r.properties,"properties");v=(0,Nm.isOwnProperty)(e,y,g)}else l.length?v=(0,Go.or)(...l.map(y=>(0,Go._)`${g} === ${y}`)):v=Go.nil;return f.length&&(v=(0,Go.or)(v,...f.map(y=>(0,Go._)`${(0,Nm.usePattern)(t,y)}.test(${g})`))),(0,Go.not)(v)}function h(g){e.code((0,Go._)`delete ${i}[${g}]`)}function p(g){if(u.removeAdditional==="all"||u.removeAdditional&&n===!1){h(g);return}if(n===!1){t.setParams({additionalProperty:g}),t.error(),s||e.break();return}if(typeof n=="object"&&!(0,Im.alwaysValidSchema)(a,n)){const v=e.name("valid");u.removeAdditional==="failing"?(m(g,v,!1),e.if((0,Go.not)(v),()=>{t.reset(),h(g)})):(m(g,v),s||e.if((0,Go.not)(v),()=>e.break()))}}function m(g,v,y){const k={keyword:"additionalProperties",dataProp:g,dataPropType:Im.Type.Str};y===!1&&Object.assign(k,{compositeRule:!0,createErrors:!1,allErrors:!1}),t.subschema(k,v)}}};Pm.default=vae;var pk={};Object.defineProperty(pk,"__esModule",{value:!0});const gae=Wo,BD=Sn,mk=In,zD=Pm,yae={keyword:"properties",type:"object",schemaType:"object",code(t){const{gen:e,schema:n,parentSchema:r,data:i,it:o}=t;o.opts.removeAdditional==="all"&&r.additionalProperties===void 0&&zD.default.code(new gae.KeywordCxt(o,zD.default,"additionalProperties"));const a=(0,BD.allSchemaProperties)(n);for(const c of a)o.definedProperties.add(c);o.opts.unevaluated&&a.length&&o.props!==!0&&(o.props=mk.mergeEvaluated.props(e,(0,mk.toHash)(a),o.props));const s=a.filter(c=>!(0,mk.alwaysValidSchema)(o,n[c]));if(s.length===0)return;const u=e.name("valid");for(const c of s)l(c)?f(c):(e.if((0,BD.propertyInData)(e,i,c,o.opts.ownProperties)),f(c),o.allErrors||e.else().var(u,!0),e.endIf()),t.it.definedProperties.add(c),t.ok(u);function l(c){return o.opts.useDefaults&&!o.compositeRule&&n[c].default!==void 0}function f(c){t.subschema({keyword:"properties",schemaProp:c,dataProp:c},u)}}};pk.default=yae;var vk={};Object.defineProperty(vk,"__esModule",{value:!0});const FD=Sn,Lm=jn,VD=In,qD=In,bae={keyword:"patternProperties",type:"object",schemaType:"object",code(t){const{gen:e,schema:n,data:r,parentSchema:i,it:o}=t,{opts:a}=o,s=(0,FD.allSchemaProperties)(n),u=s.filter(m=>(0,VD.alwaysValidSchema)(o,n[m]));if(s.length===0||u.length===s.length&&(!o.opts.unevaluated||o.props===!0))return;const l=a.strictSchema&&!a.allowMatchingProperties&&i.properties,f=e.name("valid");o.props!==!0&&!(o.props instanceof Lm.Name)&&(o.props=(0,qD.evaluatedPropsToName)(e,o.props));const{props:c}=o;d();function d(){for(const m of s)l&&h(m),o.allErrors?p(m):(e.var(f,!0),p(m),e.if(f))}function h(m){for(const g in l)new RegExp(m).test(g)&&(0,VD.checkStrictMode)(o,`property ${g} matches pattern ${m} (use allowMatchingProperties)`)}function p(m){e.forIn("key",r,g=>{e.if((0,Lm._)`${(0,FD.usePattern)(t,m)}.test(${g})`,()=>{const v=u.includes(m);v||t.subschema({keyword:"patternProperties",schemaProp:m,dataProp:g,dataPropType:qD.Type.Str},f),o.opts.unevaluated&&c!==!0?e.assign((0,Lm._)`${c}[${g}]`,!0):!v&&!o.allErrors&&e.if((0,Lm.not)(f),()=>e.break())})})}}};vk.default=bae;var gk={};Object.defineProperty(gk,"__esModule",{value:!0});const kae=In,wae={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(t){const{gen:e,schema:n,it:r}=t;if((0,kae.alwaysValidSchema)(r,n)){t.fail();return}const i=e.name("valid");t.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},i),t.failResult(i,()=>t.reset(),()=>t.error())},error:{message:"must NOT be valid"}};gk.default=wae;var yk={};Object.defineProperty(yk,"__esModule",{value:!0});const _ae={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:Sn.validateUnion,error:{message:"must match a schema in anyOf"}};yk.default=_ae;var bk={};Object.defineProperty(bk,"__esModule",{value:!0});const Dm=jn,xae=In,jae={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:{message:"must match exactly one schema in oneOf",params:({params:t})=>(0,Dm._)`{passingSchemas: ${t.passing}}`},code(t){const{gen:e,schema:n,parentSchema:r,it:i}=t;if(!Array.isArray(n))throw new Error("ajv implementation error");if(i.opts.discriminator&&r.discriminator)return;const o=n,a=e.let("valid",!1),s=e.let("passing",null),u=e.name("_valid");t.setParams({passing:s}),e.block(l),t.result(a,()=>t.reset(),()=>t.error(!0));function l(){o.forEach((f,c)=>{let d;(0,xae.alwaysValidSchema)(i,f)?e.var(u,!0):d=t.subschema({keyword:"oneOf",schemaProp:c,compositeRule:!0},u),c>0&&e.if((0,Dm._)`${u} && ${a}`).assign(a,!1).assign(s,(0,Dm._)`[${s}, ${c}]`).else(),e.if(u,()=>{e.assign(a,!0),e.assign(s,c),d&&t.mergeEvaluated(d,Dm.Name)})})}}};bk.default=jae;var kk={};Object.defineProperty(kk,"__esModule",{value:!0});const Sae=In,Cae={keyword:"allOf",schemaType:"array",code(t){const{gen:e,schema:n,it:r}=t;if(!Array.isArray(n))throw new Error("ajv implementation error");const i=e.name("valid");n.forEach((o,a)=>{if((0,Sae.alwaysValidSchema)(r,o))return;const s=t.subschema({keyword:"allOf",schemaProp:a},i);t.ok(i),t.mergeEvaluated(s)})}};kk.default=Cae;var wk={};Object.defineProperty(wk,"__esModule",{value:!0});const Rm=jn,HD=In,$ae={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:{message:({params:t})=>(0,Rm.str)`must match "${t.ifClause}" schema`,params:({params:t})=>(0,Rm._)`{failingKeyword: ${t.ifClause}}`},code(t){const{gen:e,parentSchema:n,it:r}=t;n.then===void 0&&n.else===void 0&&(0,HD.checkStrictMode)(r,'"if" without "then" and "else" is ignored');const i=UD(r,"then"),o=UD(r,"else");if(!i&&!o)return;const a=e.let("valid",!0),s=e.name("_valid");if(u(),t.reset(),i&&o){const f=e.let("ifClause");t.setParams({ifClause:f}),e.if(s,l("then",f),l("else",f))}else i?e.if(s,l("then")):e.if((0,Rm.not)(s),l("else"));t.pass(a,()=>t.error(!0));function u(){const f=t.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},s);t.mergeEvaluated(f)}function l(f,c){return()=>{const d=t.subschema({keyword:f},s);e.assign(a,s),t.mergeValidEvaluated(d,a),c?e.assign(c,(0,Rm._)`${f}`):t.setParams({ifClause:f})}}}};function UD(t,e){const n=t.schema[e];return n!==void 0&&!(0,HD.alwaysValidSchema)(t,n)}wk.default=$ae;var _k={};Object.defineProperty(_k,"__esModule",{value:!0});const Oae=In,Eae={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:t,parentSchema:e,it:n}){e.if===void 0&&(0,Oae.checkStrictMode)(n,`"${t}" without "if" is ignored`)}};_k.default=Eae,Object.defineProperty(uk,"__esModule",{value:!0});const Tae=ec,Aae=ck,Mae=tc,Pae=fk,Nae=dk,Iae=DD,Lae=hk,Dae=Pm,Rae=pk,Bae=vk,zae=gk,Fae=yk,Vae=bk,qae=kk,Hae=wk,Uae=_k;function Wae(t=!1){const e=[zae.default,Fae.default,Vae.default,qae.default,Hae.default,Uae.default,Lae.default,Dae.default,Iae.default,Rae.default,Bae.default];return t?e.push(Aae.default,Pae.default):e.push(Tae.default,Mae.default),e.push(Nae.default),e}uk.default=Wae;var xk={},jk={};Object.defineProperty(jk,"__esModule",{value:!0});const Sr=jn,Kae={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:{message:({schemaCode:t})=>(0,Sr.str)`must match format "${t}"`,params:({schemaCode:t})=>(0,Sr._)`{format: ${t}}`},code(t,e){const{gen:n,data:r,$data:i,schema:o,schemaCode:a,it:s}=t,{opts:u,errSchemaPath:l,schemaEnv:f,self:c}=s;if(!u.validateFormats)return;i?d():h();function d(){const p=n.scopeValue("formats",{ref:c.formats,code:u.code.formats}),m=n.const("fDef",(0,Sr._)`${p}[${a}]`),g=n.let("fType"),v=n.let("format");n.if((0,Sr._)`typeof ${m} == "object" && !(${m} instanceof RegExp)`,()=>n.assign(g,(0,Sr._)`${m}.type || "string"`).assign(v,(0,Sr._)`${m}.validate`),()=>n.assign(g,(0,Sr._)`"string"`).assign(v,m)),t.fail$data((0,Sr.or)(y(),k()));function y(){return u.strictSchema===!1?Sr.nil:(0,Sr._)`${a} && !${v}`}function k(){const w=f.$async?(0,Sr._)`(${m}.async ? await ${v}(${r}) : ${v}(${r}))`:(0,Sr._)`${v}(${r})`,_=(0,Sr._)`(typeof ${v} == "function" ? ${w} : ${v}.test(${r}))`;return(0,Sr._)`${v} && ${v} !== true && ${g} === ${e} && !${_}`}}function h(){const p=c.formats[o];if(!p){y();return}if(p===!0)return;const[m,g,v]=k(p);m===e&&t.pass(w());function y(){if(u.strictSchema===!1){c.logger.warn(_());return}throw new Error(_());function _(){return`unknown format "${o}" ignored in schema at path "${l}"`}}function k(_){const S=_ instanceof RegExp?(0,Sr.regexpCode)(_):u.code.formats?(0,Sr._)`${u.code.formats}${(0,Sr.getProperty)(o)}`:void 0,C=n.scopeValue("formats",{key:o,ref:_,code:S});return typeof _=="object"&&!(_ instanceof RegExp)?[_.type||"string",_.validate,(0,Sr._)`${C}.validate`]:["string",_,C]}function w(){if(typeof p=="object"&&!(p instanceof RegExp)&&p.async){if(!f.$async)throw new Error("async format in sync schema");return(0,Sr._)`await ${v}(${r})`}return typeof g=="function"?(0,Sr._)`${v}(${r})`:(0,Sr._)`${v}.test(${r})`}}}};jk.default=Kae,Object.defineProperty(xk,"__esModule",{value:!0});const Jae=[jk.default];xk.default=Jae;var nc={};Object.defineProperty(nc,"__esModule",{value:!0}),nc.contentVocabulary=nc.metadataVocabulary=void 0,nc.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"],nc.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"],Object.defineProperty(Ub,"__esModule",{value:!0});const Gae=Wb,Qae=Jb,Yae=uk,Xae=xk,WD=nc,Zae=[Gae.default,Qae.default,(0,Yae.default)(),Xae.default,WD.metadataVocabulary,WD.contentVocabulary];Ub.default=Zae;var Sk={},KD={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.DiscrError=void 0,function(e){e.Tag="tag",e.Mapping="mapping"}(t.DiscrError||(t.DiscrError={}))})(KD),Object.defineProperty(Sk,"__esModule",{value:!0});const rc=jn,Ck=KD,JD=Fi,ese=In,tse={keyword:"discriminator",type:"object",schemaType:"object",error:{message:({params:{discrError:t,tagName:e}})=>t===Ck.DiscrError.Tag?`tag "${e}" must be string`:`value of tag "${e}" must be in oneOf`,params:({params:{discrError:t,tag:e,tagName:n}})=>(0,rc._)`{error: ${t}, tag: ${n}, tagValue: ${e}}`},code(t){const{gen:e,data:n,schema:r,parentSchema:i,it:o}=t,{oneOf:a}=i;if(!o.opts.discriminator)throw new Error("discriminator: requires discriminator option");const s=r.propertyName;if(typeof s!="string")throw new Error("discriminator: requires propertyName");if(r.mapping)throw new Error("discriminator: mapping is not supported");if(!a)throw new Error("discriminator: requires oneOf keyword");const u=e.let("valid",!1),l=e.const("tag",(0,rc._)`${n}${(0,rc.getProperty)(s)}`);e.if((0,rc._)`typeof ${l} == "string"`,()=>f(),()=>t.error(!1,{discrError:Ck.DiscrError.Tag,tag:l,tagName:s})),t.ok(u);function f(){const h=d();e.if(!1);for(const p in h)e.elseIf((0,rc._)`${l} === ${p}`),e.assign(u,c(h[p]));e.else(),t.error(!1,{discrError:Ck.DiscrError.Mapping,tag:l,tagName:s}),e.endIf()}function c(h){const p=e.name("valid"),m=t.subschema({keyword:"oneOf",schemaProp:h},p);return t.mergeEvaluated(m,rc.Name),p}function d(){var h;const p={},m=v(i);let g=!0;for(let w=0;w<a.length;w++){let _=a[w];(_==null?void 0:_.$ref)&&!(0,ese.schemaHasRulesButRef)(_,o.self.RULES)&&(_=JD.resolveRef.call(o.self,o.schemaEnv.root,o.baseId,_==null?void 0:_.$ref),_ instanceof JD.SchemaEnv&&(_=_.schema));const S=(h=_==null?void 0:_.properties)===null||h===void 0?void 0:h[s];if(typeof S!="object")throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${s}"`);g=g&&(m||v(_)),y(S,w)}if(!g)throw new Error(`discriminator: "${s}" must be required`);return p;function v({required:w}){return Array.isArray(w)&&w.includes(s)}function y(w,_){if(w.const)k(w.const,_);else if(w.enum)for(const S of w.enum)k(S,_);else throw new Error(`discriminator: "properties/${s}" must have "const" or "enum"`)}function k(w,_){if(typeof w!="string"||w in p)throw new Error(`discriminator: "${s}" values must be unique strings`);p[w]=_}}}};Sk.default=tse;const nse={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0};(function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=void 0;const n=GL,r=Ub,i=Sk,o=nse,a=["/properties"],s="http://json-schema.org/draft-07/schema";class u extends n.default{_addVocabularies(){super._addVocabularies(),r.default.forEach(d=>this.addVocabulary(d)),this.opts.discriminator&&this.addKeyword(i.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;const d=this.opts.$data?this.$dataMetaSchema(o,a):o;this.addMetaSchema(d,s,!1),this.refs["http://json-schema.org/schema"]=s}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(s)?s:void 0)}}t.exports=e=u,Object.defineProperty(e,"__esModule",{value:!0}),e.default=u;var l=Wo;Object.defineProperty(e,"KeywordCxt",{enumerable:!0,get:function(){return l.KeywordCxt}});var f=jn;Object.defineProperty(e,"_",{enumerable:!0,get:function(){return f._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return f.str}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return f.stringify}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return f.nil}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return f.Name}}),Object.defineProperty(e,"CodeGen",{enumerable:!0,get:function(){return f.CodeGen}})})(Ab,Ab.exports);const GD=cR(Ab.exports);let Xf;const rse=[["items",EL,TL],["screens",DL,RL],["skills",VL,qL],["buttons",NL,IL],["scripts",JL,Wre],["audio",SL,CL],["quests",AL,ML],["tooltips",WL,KL],["characters",HL,UL]],ise=["baseAssetsPath","baseDataPath","gameTitle","images","layout","gameFlow","dialogPanel","splashScreens","notifications","hudStats","interactionTags","transitions","menuButtons","debugging","saves"];async function ose(t){const e={...Mu};for(const n of ise){const r=t[n];r&&(typeof r=="object"&&!Array.isArray(r)?e[n]={...e[n],...r}:e[n]=r)}for(const n of rse){const r=n[0],i=n[1],o=n[2];let a=t[r];if(a&&typeof a=="string")try{a=await vm(YD(t.baseDataPath,a));const s=new GD({allErrors:!0});if(!s.validate(i,a))throw console.error(s.errors),new Error(`${s.errorsText()}`)}catch(s){console.error(s),Kt(`${r} config error: ${s}`),a={...o}}a&&(Array.isArray(a)?e[r]=a:typeof a=="object"?e[r]={...o,...a}:e[r]=a)}if(Xf=e,Xf.transitions)for(const n in Xf.transitions)ym[n]?Object.assign(ym[n],Xf.transitions[n]):ym[n]=Xf.transitions[n];return e}async function ase(t){const e=await vm(t.configPath);t.baseAssetsPath?e.baseAssetsPath=t.baseAssetsPath:e.baseAssetsPath=e.baseAssetsPath||"",t.baseDataPath?e.baseDataPath=t.baseDataPath:e.baseDataPath=e.baseDataPath||"";const n=new GD({allErrors:!0});return n.validate(Kre,e)||(Kt("Config file validation failed."),console.log(n.errors),Kt(n.errorsText())),ose(e)}function gt(){return Tb().config}function Aa(){return gt().audio}function Co(){return gt().skills}function Bm(){return gt().items}function Zf(){return gt().quests}function zm(){return gt().screens}function $k(){return gt().buttons}function ed(){return gt().tooltips}function Ok(){return gt().characters}function QD(t){const n=ed().tooltips.find(r=>r.keywords.includes(t));return n||(Kt(`Tooltip config for keyword ${t} not found`),null)}function Ek(t){const e=gt().skills.skills[t];return e||Kt(`Skill config for skill ${t} doesn't exist`),e}function td(t){return t.startsWith("http")?t:gt().images[t]?Ma(gt().images[t]):Ma(t)}function Ma(t){return t.startsWith("http")?t:gt().baseAssetsPath?`${gt().baseAssetsPath}${t}`:t}function YD(t,e){return`${t}${e}`}function Tk(t){return gt().baseDataPath?`${gt().baseDataPath}${t}`:t}function Hs(t){const e=$k().buttons[t];return e||Kt(`Button config for button ${t} doesn't exist`),e}function XD(t){const e=zm().screens[t];return e||Kt(`Screen config for screen ${t} doesn't exist`),e}function is(t){const e=Bm().items[t];return e||Kt(`Item config for skill ${t} doesn't exist`),e}function Bu(t){return Zf().quests[t]}function Fm(t,e){return Bu(t).objectives[e]}function Vm(){var e;return(e=gt().dialogPanel.width)!=null?e:YZ}function ZD(t,e,n){if(!n.startsWith("$"))return isNaN(Number(n))?[null,n]:[null,Number(n)];n=n.substring(1);const r=/\[/,i=/\]/;let o=n.search(r);n.search(i);let a=n,s=e,u=0;for(;u<n.length;){if(o>u||o===-1){const l=o>u?o:n.length;let f=n.substring(u,l);isNaN(Number(f))||(f=Number(f)),u>0&&(s=s[a]),[s,a]=use(s,f)}if(o!==-1){u=o;const l=n.substring(o+1),f=sse(l)+o,c=n.substring(o+1,f),[d,h]=ZD(t,t,c);let p=h;d&&(p=d[h]),typeof p=="number"||!isNaN(Number(p))?p=Number(p):typeof p!="string"&&console.error(`invalid array index (${p}) key type when compiling: ${n}`),s=s[a],a=p,u=f+1;const m=n.substring(u);o=m.search(r),o!==-1&&(o+=u),m.search(i)}else u=n.length}return[s,a]}function sse(t){let e=!1,n=0,r,i=1;for(;!e;){r=t.substring(n);const o=r.search(/\[/),a=r.search(/\]/);o!==-1&&o<a?(n+=o+1,i++):(n+=a+1,i--),i===0&&(e=!0),o===-1&&a===-1&&!e&&Kt(`Could not find closing bracket in ${t}`)}return n}function use(t,e){if(typeof e=="number")return[t,e];e.startsWith(".")&&(e=e.substring(1));const n=e.split(".");let r=t;const i=n.length-1;let o=n[0],a=0;for(a=0;a<i;a++)o=n[a],typeof r[o]>"u"&&(r[o]={}),r=r[o];return o=n[a],[r,o]}function qm(t,e){return ZD(t,t,e)}function lse(t,e){return qm(t,e)}function eR(t,e,n){const[r,i]=qm(t,e);r[i]=n}function tR(t,e,n){const[r,i]=qm(t,e),o=r[i]||0;r[i]=n+o}function ic(){const t=wn(),e=_r(),n=Uo(),r=Nr(),i=wn().scope,o={data:t.data,skills:e.skills,skillChecks:e.skillChecks,buttons:n.buttons,items:r.items,quests:di().quests,stats:$a().hudStats,scope:i,config:gt(),gameOptions:Gt().options};return new Proxy(o,{get:(s,u,l)=>{const f=wn().scope,c=wn().data;return typeof f[u]<"u"?f[u]:typeof c[u]<"u"?c[u]:Reflect.get(s,u,l)},set:(s,u,l,f)=>{const c=wn().scope,d=wn().data;if(typeof c[u]<"u")c[u]=l;else{if(typeof s[u]<"u")return Reflect.set(s,u,l,f);typeof l=="object"?d[u]={}:d[u]=l}return!0}})}function pi(t){if(t===null)return null;if(typeof t=="object")if(Array.isArray(t)){const e=[];for(const n in t)e[n]=pi(t[n]);return e}else{const e={};for(const n in t)e[n]=pi(t[n]);return e}else return t}function Ak(t,e){if(t===null)return null;if(typeof t=="object"){const n=e(t);if(e(t))return n;if(Array.isArray(t)){const r=[];for(const i in t)r[i]=Ak(t[i],e);return r}else{const r={};for(const i in t)r[i]=Ak(t[i],e);return r}}else return e(t)}const _r=Jr("skills",{state:()=>({skillChecks:{},skills:{}}),actions:{setupSkillCheck(t,e){this.skillChecks[e]=t},passSkillCheck(t,e){this.skillChecks[t].happened=!0,this.skillChecks[t].succeeded=!0,e&&(this.skillChecks[t].hidden=!0)},failSkillCheck(t,e){this.skillChecks[t].happened=!0,this.skillChecks[t].succeeded=!1,e&&(this.skillChecks[t].hidden=!0)},resetSkillCheck(t){this.skillChecks[t].happened=!1,this.skillChecks[t].succeeded=!1,this.skillChecks[t].hidden=!1},generateSaveData(){return{skillChecks:pi(this.skillChecks),skills:pi(this.skills)}},getSkillCheck(t){return this.skillChecks[t]||this.setupSkillCheck(this.createSkillCheckState(),t),this.skillChecks[t]},createSkillCheckState(){return{happened:!1,succeeded:!1,hidden:!1}},loadSaveData(t){this.skillChecks=gm(this.skillChecks,t.skillChecks),this.skills=gm(this.skills,t.skills)},setupSkills(t){const e=t.skills;for(const n in e)this.skills[n]={id:n,level:e[n].startingLevel||0,xp:0}},reset(t){this.$reset(),this.setupSkills(t)},getSkill(t){return this.skills[t]},getSkillLevel(t){return this.getSkill(t).level},getSkillXp(t){return this.getSkill(t).xp},addXp(t,e){const n=this.getSkill(t);n||Kt(`Skill ${t} doesn't exist`),n.xp+=e,n.xp>=Co().skillOptions.xpPerLevel&&(n.xp=0,n.level++,this.levelledUp(t))},setSkillLevel(t,e){const n=this.getSkill(t);n||Kt(`Skill ${t} doesn't exist`),n.level=e,this.levelledUp(t)},incrementSkill(t,e){this.getSkill(t).level+=e,this.levelledUp(t)},levelledUp(t){const e=Co().skills[t].name,n=this.skills[t].level;Co().skillOptions.notifyLevelUp&&oo().addNotification(`Your skill in ${e} is now level ${n}`)}}});let nR;const cse=b.defineComponent({components:{Modal:Ws},setup(){const t=_r(),e=b.computed(()=>t.skills),n=b.computed(()=>t.skillChecks);return{skills:e,skillChecks:n}},data(){return{showDebug:!1,jumping:!1,searchString:"",matches:[],matchCursor:0}},mounted(){window.addEventListener("keydown",t=>{if(this.jumping||(t.key==="d"&&this.toggle(),t.key==="j"&&this.jump()),t.key==="ArrowDown"&&(t.preventDefault(),this.matches.length>this.matchCursor+1?this.matchCursor+=1:this.matchCursor=0),t.key==="ArrowUp"&&(t.preventDefault(),this.matchCursor>0?this.matchCursor-=1:this.matchCursor=this.matches.length-1),t.key==="Escape"&&this.finishJumping(),this.jumping&&t.key==="Enter"&&this.matchCursor<this.matches.length){const e=this.matches[this.matchCursor];wn().jumpToLabel(e),this.finishJumping()}})},methods:{finishJumping(){this.jumping=!1,this.matches=[],this.searchString="",this.close()},labelSelected(t){const e=t.target.value;wn().jumpToLabel(e),this.close()},close(){this.showDebug=!1,this.endDebug()},closeErrors(){Gt().clearErrors()},open(){this.showDebug=!0,this.startDebug();const t=wn(),e=Gt(),n=di(),r=Nr(),i=_r();this.$nextTick(()=>{new S8({target:this.$refs.variablesViewer,props:{content:{text:void 0,json:{data:this.variables,quests:n.quests,items:r.items,skills:i.skills,skillChecks:i.skillChecks}},onChange:o=>{t.overrideData(o.json.data),n.quests=o.json.quests,r.items=o.json.items,i.skills=o.json.skills,i.skillChecks=o.json.skillChecks}}}),new S8({target:this.$refs.stateViewer,props:{content:{text:void 0,json:e.getAllStates()},onChange:o=>{e.overrideStates(o.json)}}})})},toggle(){this.jumping?this.finishJumping():this.showDebug?this.close():this.open()},startDebug(){Gt().debugMode=!0},endDebug(){Gt().debugMode=!1},jump(){nR=new Vu(this.labels,{includeScore:!0}),this.jumping=!0,this.startDebug(),setTimeout(()=>{this.$nextTick(()=>{this.$refs.search.focus()})},10),this.matchCursor=0,this.matches=this.labels},getMatchResultStyle(t){if(t===this.matchCursor)return{background:"var(--light-background)"}},onSearchInput(){const t=this.searchString,e=nR.search(t);this.matches=e.map(n=>n.item),this.matches.length>0&&this.matchCursor>this.matches.length-1&&(this.matchCursor=this.matches.length-1)},save(){Gt().autoSaveGame({})},wordCount(){const e=Object.values(this.script).reduce((n,r)=>(Zo.log(n),n+this.countWordsInScriptBranch(r.branch)),0);alert(`You have ${e} words`)},countWordsInScriptLine(t){if(t.command.commandType==="talk"&&typeof t.command.args[2]=="string")return this.countWordsInString(t.command.args[2]);if(t.command.commandType==="text")return this.countWordsInString(t.code);if(t.command.commandType==="choice"){const e=t.command.staticOptions;let n=this.countWordsInScriptLine(e.prompt);return n+=e.choices.reduce((i,o)=>i+this.countWordsInString(o.prompt.code),0),e.choices.reduce((i,o)=>o.branch?i+this.countWordsInScriptBranch(o.branch):i,n)}if(t.command.commandType==="if"){const e=t.command.staticOptions;return[e.success,e.failure].reduce((r,i)=>i?r+this.countWordsInScriptBranch(i):r,0)}return 0},countWordsInString(t){return t.split(" ").length},countWordsInScriptBranch(t){return t.reduce((e,n)=>n?e+this.countWordsInScriptLine(n):e,0)},getPlayTimeString(){const t=Fu(this.playTime.start,this.playTime.previousPlaytime);return Ym(t/1e3)}},computed:{...Za(wn,["script","data"]),...Za(Gt,["playTime","errors","playing","flowState"]),labels(){const t=this.script;return Object.keys(t).sort()},variables(){return this.data}}}),ope="",fse={class:"debug-menu"},dse={key:0,class:"debug-info"},hse=[b.createStaticVNode("<h3>Debug mode is ON</h3><ul><li><b>j</b>: Quick Label Jump</li><li><b>d</b>: Debug Menu</li><li><b>a</b>: Auto Play</li><li><b>s</b>: Skip</li><li><b>Space</b>: New Game</li><li><b>c</b>: Continue</li><li><b>Escape</b>: Toggle Menu</li></ul>",2)],pse=b.createElementVNode("h3",{class:"title"},"Jump to label",-1),mse={key:0,class:"search-results"},vse={key:1},gse=[b.createElementVNode("h3",null,"No matches found",-1)],yse=b.createElementVNode("h3",{class:"title"},"Error(s)",-1),bse=b.createTextVNode(" There are errors in your dialogue scripts. Open the developer console for more details. "),kse=["innerHTML"],wse=b.createElementVNode("h3",{class:"title"},"Debug Menu!",-1),_se={class:"container"},xse=b.createTextVNode(" Hello this is the debug menu. "),jse=b.createElementVNode("option",{class:"option",selected:"",disabled:""},"Jump to a label",-1),Sse=["value"],Cse={class:"grid grid-cols-3 gap-4"},$se=b.createElementVNode("h2",null,"Variables Editor",-1),Ose={ref:"variablesViewer"},Ese=b.createElementVNode("h2",null,"Skill Checks",-1),Tse={class:"table-auto"},Ase=b.createElementVNode("thead",null,[b.createElementVNode("tr",null,[b.createElementVNode("th",null,"Skill Check"),b.createElementVNode("th",null,"Happened"),b.createElementVNode("th",null,"Succeeded")])],-1),Mse=b.createElementVNode("h2",null,"App State editor (entire app and engine",-1),Pse=b.createElementVNode("h3",{style:{color:"pink"}}," Use for debugging, editing some of those things can cause issues ",-1),Nse={ref:"stateViewer"};function Ise(t,e,n,r,i,o){const a=b.resolveComponent("modal");return b.openBlock(),b.createElementBlock("div",fse,[b.createElementVNode("button",{onClick:e[0]||(e[0]=(...s)=>t.open&&t.open(...s)),class:"button debug-button"},"Debug Menu"),!t.playing&&t.flowState==="menu"?(b.openBlock(),b.createElementBlock("div",dse,hse)):b.createCommentVNode("",!0),t.jumping?(b.openBlock(),b.createBlock(a,{key:1,onClose:t.finishJumping,containerCssClass:"jump-menu-container"},{header:b.withCtx(()=>[pse]),body:b.withCtx(()=>[b.withDirectives(b.createElementVNode("input",{type:"text",class:"label-input input",ref:"search","onUpdate:modelValue":e[1]||(e[1]=s=>t.searchString=s),onInput:e[2]||(e[2]=(...s)=>t.onSearchInput&&t.onSearchInput(...s))},null,544),[[b.vModelText,t.searchString]]),t.matches.length>0?(b.openBlock(),b.createElementBlock("div",mse,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.matches,(s,u)=>(b.openBlock(),b.createElementBlock("div",{class:"search-result",style:b.normalizeStyle(t.getMatchResultStyle(u)),key:u},b.toDisplayString(s),5))),128))])):(b.openBlock(),b.createElementBlock("div",vse,gse))]),_:1},8,["onClose"])):b.createCommentVNode("",!0),t.errors.length>0?(b.openBlock(),b.createBlock(a,{key:2,onClose:t.closeErrors,containerCssClass:"debug-menu-container"},{header:b.withCtx(()=>[yse]),body:b.withCtx(()=>[bse,b.createElementVNode("ul",null,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.errors,(s,u)=>(b.openBlock(),b.createElementBlock("li",{key:u,class:b.normalizeClass(["error-message list-disc",s.type==="error"?"error":"warning"]),innerHTML:s.text},null,10,kse))),128))])]),_:1},8,["onClose"])):b.createCommentVNode("",!0),t.showDebug?(b.openBlock(),b.createBlock(a,{key:3,onClose:t.close,containerCssClass:"debug-menu-container"},{header:b.withCtx(()=>[wse]),body:b.withCtx(()=>[b.createElementVNode("div",_se,[xse,b.createElementVNode("select",{class:"select",name:"label-selector",onChange:e[3]||(e[3]=s=>t.labelSelected(s))},[jse,(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.labels,s=>(b.openBlock(),b.createElementBlock("option",{class:"option",value:s,key:s},b.toDisplayString(s),9,Sse))),128))],32),b.createElementVNode("div",Cse,[b.createElementVNode("button",{onClick:e[4]||(e[4]=(...s)=>t.wordCount&&t.wordCount(...s)),class:"button"},"Word Count"),b.createElementVNode("button",{onClick:e[5]||(e[5]=(...s)=>t.save&&t.save(...s)),class:"button"},"Save Game")]),b.createElementVNode("h3",null,"Play time: "+b.toDisplayString(t.getPlayTimeString()),1),$se,b.createElementVNode("div",Ose,null,512),Ese,b.createElementVNode("table",Tse,[Ase,b.createElementVNode("tbody",null,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.skillChecks,(s,u)=>(b.openBlock(),b.createElementBlock("tr",{key:u},[b.createElementVNode("td",null,b.toDisplayString(u),1),b.createElementVNode("td",null,b.toDisplayString(s.happened?"\u2705":"\u274C"),1),b.createElementVNode("td",null,b.toDisplayString(s.happened?s.succeeded?"\u2705":"\u274C":"NA"),1)]))),128))])]),Mse,Pse,b.createElementVNode("div",Nse,null,512)])]),_:1},8,["onClose"])):b.createCommentVNode("",!0)])}const Lse=Hi(cse,[["render",Ise]]),Dse=b.defineComponent({computed:{...Za(oo,["notifications"])}}),upe="",Rse=["innerHTML"];function Bse(t,e,n,r,i,o){return b.openBlock(),b.createBlock(b.TransitionGroup,{name:"notification",tag:"div",class:"notifications-holder"},{default:b.withCtx(()=>[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.notifications,(a,s)=>(b.openBlock(),b.createElementBlock("div",{class:"notification",key:s},[b.createElementVNode("h3",{innerHTML:a.text},null,8,Rse)]))),128))]),_:1})}const zse=Hi(Dse,[["render",Bse]]);function rR(t,e=50,n={}){var c,d;let r;const i=(c=n.isImmediate)!=null?c:!1,o=(d=n.callback)!=null?d:!1,a=n.maxWait;let s=Date.now(),u=[];function l(){if(a!==void 0){const h=Date.now()-s;if(h+e>=a)return a-h}return e}const f=function(...h){const p=this;return new Promise((m,g)=>{const v=function(){if(r=void 0,s=Date.now(),!i){const w=t.apply(p,h);o&&o(w),u.forEach(({resolve:_})=>_(w)),u=[]}},y=i&&r===void 0;r!==void 0&&clearTimeout(r);const k=l();if(r=setTimeout(v,k),y){const w=t.apply(p,h);return o&&o(w),m(w)}u.push({resolve:m,reject:g})})};return f.cancel=function(h){r!==void 0&&clearTimeout(r),u.forEach(({reject:p})=>p(h)),u=[]},f}const Fse={class:"save-slot flex flex-row"},Vse={class:"used-save-slot flex flex-row justify-between items-center grow"},qse={class:"flex flex-col save-slot-number-container"},Hse={class:"save-slot-number"},Use={class:"flex flex-col justify-center save-info"},Wse={key:1,class:"save-name"},Kse={class:"flex flex-col"},Jse={key:0},Gse={key:1},Qse={key:2},Yse={class:"flex flex-row"},Xse=["onClick"],Mk=b.defineComponent({__name:"save-slot-ui",props:{saveSlot:{type:Object,required:!0},id:{type:String,required:!0},actions:{type:Array,required:!0}},emits:["choice"],setup(t,{emit:e}){var d,h;const n=t,r=b.ref((h=(d=n.saveSlot.saveData)==null?void 0:d.metadata.name)!=null?h:"Empty Save"),i=b.computed(()=>n.saveSlot.saveData!==null),o=b.computed(()=>n.saveSlot.saveData),a=b.computed(()=>gt().saves.mode),s=b.computed(()=>{const p=n.saveSlot.saveData;if(p&&p.screen.layers[0]){const m=zm().screens[p.screen.layers[0]];if(m)return{backgroundImage:`url(${td(m.background)})`}}return!1});function u(p){e("choice",p)}function l(p){return o.value?Ym(o.value.main.playTime/1e3):"00:00:00"}function f(){o.value&&iee(n.saveSlot.id,r.value)}function c(){const p=gt().saves.slots;let m="";const g=n.saveSlot.slotNumber;return g===0&&gt().saves.mode==="manual"?"AUTO":(p>=10&&g<10&&(m+="0"),p>=100&&g<100&&(m+="0"),m+g)}return(p,m)=>(b.openBlock(),b.createElementBlock("div",Fse,[b.createElementVNode("div",Vse,[b.createElementVNode("div",qse,[b.createElementVNode("h1",Hse,b.toDisplayString(c()),1)]),b.unref(s)?(b.openBlock(),b.createElementBlock("div",{key:0,class:"save-slot-screenshot",style:b.normalizeStyle(b.unref(s))},null,4)):b.createCommentVNode("",!0),b.createElementVNode("div",Use,[b.unref(i)?b.withDirectives((b.openBlock(),b.createElementBlock("input",{key:0,type:"text",class:"save-name","onUpdate:modelValue":m[0]||(m[0]=g=>r.value=g),onInput:f},null,544)),[[b.vModelText,r.value]]):(b.openBlock(),b.createElementBlock("h3",Wse,b.toDisplayString(r.value),1)),b.createElementVNode("div",Kse,[b.unref(o)?(b.openBlock(),b.createElementBlock("p",Jse,b.toDisplayString(new Date(b.unref(o).metadata.saveDate).toLocaleString()),1)):b.createCommentVNode("",!0),b.unref(o)?(b.openBlock(),b.createElementBlock("p",Gse,"Play time: "+b.toDisplayString(l(t.saveSlot)),1)):b.createCommentVNode("",!0),b.unref(a)==="game-slots"?(b.openBlock(),b.createElementBlock("p",Qse,b.toDisplayString(t.saveSlot.slotType==="auto"?"Auto Save":"Manual Save"),1)):b.createCommentVNode("",!0)])]),b.createElementVNode("div",Yse,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.actions,(g,v)=>(b.openBlock(),b.createElementBlock("button",{class:"button",onClick:()=>u(v),key:v},[b.createElementVNode("h3",null,b.toDisplayString(g),1)],8,Xse))),128))])])]))}}),lpe="",Zse=b.createElementVNode("h3",{class:"title"},"Confirmation",-1),eue={class:"flex justify-center"},Hm=b.defineComponent({__name:"yes-no",props:{prompt:{type:String,required:!0},onConfirm:{type:Function,required:!1},onRefuse:{type:Function,required:!1}},emits:["choice"],setup(t,{emit:e}){const n=t;function r(i){i===!0&&n.onConfirm?n.onConfirm():i===!1&&n.onRefuse&&n.onRefuse(),e("choice",i)}return(i,o)=>(b.openBlock(),b.createBlock(Ws,{onClose:o[2]||(o[2]=()=>r(!1)),containerCssClass:"yes-no-modal"},{header:b.withCtx(()=>[Zse]),body:b.withCtx(()=>[b.createElementVNode("h3",null,b.toDisplayString(t.prompt),1),b.createElementVNode("div",eue,[b.createElementVNode("button",{class:"button",onClick:o[0]||(o[0]=()=>r(!0))},"Yes"),b.createElementVNode("button",{class:"button",onClick:o[1]||(o[1]=()=>r(!1))},"No")])]),_:1}))}}),cpe="",tue={class:"title"},nue={key:0},rue={class:"saves-section"},iue=b.createElementVNode("h3",{class:"saves-section-title"},"Auto save",-1),oue={class:"saves-section"},aue=b.createElementVNode("h3",{class:"saves-section-title"},"Manual Saves",-1),sue={key:1,class:"saves-section"},uue=b.createElementVNode("h3",{class:"saves-section-title"},"Save Slots",-1),lue={class:"saves-container flex flex-col"},iR=b.defineComponent({__name:"save-slots",props:{mode:{type:String,required:!0}},emits:["chosen","close"],setup(t,{emit:e}){const n=t,r=b.reactive([]),i=b.computed(()=>r.slice(0,1)),o=b.computed(()=>r.slice(1)),a=b.reactive(n.mode==="load"?["Load","Delete"]:["Choose"]),s=b.computed(()=>gt().saves.mode),u=b.reactive({prompt:"Are you sure you want to delete this save file?",saveToDelete:null,onConfirm:()=>{d(u.saveToDelete),u.saveToDelete=null},onRefuse:()=>{u.saveToDelete=null}}),l=b.reactive({prompt:"Are you sure you want to overwrite this save file?",saveToOverwrite:null,onConfirm:()=>{f(l.saveToOverwrite),l.saveToOverwrite=null},onRefuse:()=>{l.saveToOverwrite=null}});b.onMounted(()=>{const v=Z8().slots;console.log(v),v.forEach((y,k)=>{r[k]=y})});function f(g){e("chosen",{slotId:g})}function c(g){const v=m(g);if(v){if(gt().saves.mode==="manual"&&v.slotType==="auto"){Gt().alert("Sorry","Can't delete the auto save slot!");return}u.saveToDelete=g}}function d(g){ree(g);const v=r.find(y=>y.id===g);v&&(v.saveData=null)}function h(){e("close")}function p(g,v){const y=a[v];y==="Load"?f(g):y==="Delete"?c(g):y==="Choose"&&(l.saveToOverwrite=g)}function m(g){return r.find(v=>v.id===g)}return(g,v)=>(b.openBlock(),b.createBlock(Ws,{onClose:h,containerCssClass:"save-modal",cantClose:!1},{header:b.withCtx(()=>[b.createElementVNode("h3",tue,b.toDisplayString(t.mode==="load"?"Choose a save to load":"Pick a slot to save the game"),1)]),body:b.withCtx(()=>[b.unref(s)==="manual"?(b.openBlock(),b.createElementBlock("div",nue,[b.createElementVNode("div",rue,[iue,b.createVNode(b.TransitionGroup,{name:"list",tag:"div"},{default:b.withCtx(()=>[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(b.unref(i),y=>(b.openBlock(),b.createBlock(Mk,{key:y.id,saveSlot:y,id:y.id,actions:a,onChoice:k=>p(y.id,k)},null,8,["saveSlot","id","actions","onChoice"]))),128))]),_:1})]),b.createElementVNode("div",oue,[aue,b.createVNode(b.TransitionGroup,{name:"list",tag:"div"},{default:b.withCtx(()=>[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(b.unref(o),y=>(b.openBlock(),b.createBlock(Mk,{key:y.id,saveSlot:y,id:y.id,actions:a,onChoice:k=>p(y.id,k)},null,8,["saveSlot","id","actions","onChoice"]))),128))]),_:1})])])):(b.openBlock(),b.createElementBlock("div",sue,[uue,b.createElementVNode("div",lue,[b.createVNode(b.TransitionGroup,{name:"list",tag:"div"},{default:b.withCtx(()=>[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(r,y=>(b.openBlock(),b.createBlock(Mk,{key:y.id,saveSlot:y,id:y.id,actions:a,onChoice:k=>p(y.id,k)},null,8,["saveSlot","id","actions","onChoice"]))),128))]),_:1})])])),u.saveToDelete?(b.openBlock(),b.createBlock(Hm,{key:2,prompt:u.prompt,onRefuse:u.onRefuse,onConfirm:u.onConfirm},null,8,["prompt","onRefuse","onConfirm"])):b.createCommentVNode("",!0),l.saveToOverwrite?(b.openBlock(),b.createBlock(Hm,{key:3,prompt:l.prompt,onRefuse:l.onRefuse,onConfirm:l.onConfirm},null,8,["prompt","onRefuse","onConfirm"])):b.createCommentVNode("",!0)]),_:1}))}}),fpe="";class oR extends Eb{setup(e=!1){const r=e?"keydown":"keyup",i=rR(o=>{$o.emit("debouncedKeydown",o)},10,{isImmediate:!0,maxWait:10});window.addEventListener("keydown",o=>{$o.emit("keydown",o)}),window.addEventListener(r,o=>{i(o)})}}const $o=new oR,aR=Jr("startMenu",{state:()=>({buttons:[]}),actions:{addButtonsFromPlugins(){Fn.plugins.forEach(e=>{e.startMenuButtons&&e.startMenuButtons.forEach(n=>{const r=window.narrat.app;n.popupComponent&&r.component(n.popupComponent.name,n.popupComponent.component),this.buttons.push(n)})})}}}),cue={id:"game-menu"},fue={id:"game-header",class:"flex flex-col justify-between items-center"},due={id:"game-title-container"},hue={id:"game-title-text"},pue={class:"flex flex-col start-menu-buttons-container"},mue=["onClick"],vue={class:"title"},gue=b.defineComponent({__name:"StartMenu",setup(t){const e=b.ref(!1),n=b.ref(!1),r=b.ref(null),i=b.ref(null),o=b.ref(!1),a=b.ref(!1),s=b.ref(null),u=aR(),l=b.ref(!1),f=b.computed(()=>u.buttons);async function c(){e.value&&gt().saves.mode==="manual"?a.value=!0:d()}async function d(){const _=Gt();if(i.value===null)if(gt().saves.mode==="manual"){const S=ub();if(!S){Kt("No autosave found");return}i.value=S.id}else{const S=tee();if(!S){Kt("No free slot found");return}i.value=S}a.value=!1,await _.startGame(i.value)}function h(_){_.action&&_.action(),_.popupComponent&&(l.value=_)}function p(){l.value=!1}function m(){a.value=!1}async function g(){if(!i.value)return;const _=Pf(i.value);if(!_){Kt("No save file found");return}Gt().loadGame(_,i.value)}function v(){typeof r.value=="string"&&(i.value=r.value,g())}function y(){o.value=!0}function k({slotId:_}){const S=Pf(_);S&&S.saveData?(i.value=_,g()):c()}b.onMounted(()=>{const _=gt();_.audio.options.defaultMusic&&Gr().playChannel("music",_.audio.options.defaultMusic,0);const S=Z8();S.slots.some(C=>C.saveData)&&(e.value=!0),(gt().saves.mode==="manual"||S.slots.some(C=>!C.saveData))&&(n.value=!0),S.lastSaveSlot&&Pf(S.lastSaveSlot)&&(r.value=S.lastSaveSlot),s.value=$o.on("debouncedKeydown",C=>{C.key===" "&&d(),C.key==="c"&&v()})}),b.onUnmounted(()=>{s.value&&$o.off("debouncedKeydown",s.value)});const w=b.computed(()=>gt().gameTitle);return(_,S)=>(b.openBlock(),b.createElementBlock("div",cue,[o.value?(b.openBlock(),b.createBlock(iR,{key:0,mode:"load",onChosen:k,onClose:S[0]||(S[0]=C=>o.value=!1)})):b.createCommentVNode("",!0),a.value?(b.openBlock(),b.createBlock(Hm,{key:1,prompt:"This will override your previous autosave, are you sure?",onConfirm:d,onRefuse:m})):b.createCommentVNode("",!0),b.createElementVNode("div",fue,[b.createElementVNode("div",due,[b.createElementVNode("h1",hue,b.toDisplayString(b.unref(w)),1)]),b.createElementVNode("div",pue,[r.value?(b.openBlock(),b.createElementBlock("button",{key:0,class:"button menu-button main-menu-button large continue-button override",onClick:v}," Continue ")):b.createCommentVNode("",!0),n.value?(b.openBlock(),b.createElementBlock("button",{key:1,class:"button menu-button main-menu-button large start-button override",onClick:c}," New Game ")):b.createCommentVNode("",!0),e.value?(b.openBlock(),b.createElementBlock("button",{key:2,class:"button menu-button main-menu-button large continue-button override",onClick:y}," Load Game ")):b.createCommentVNode("",!0),(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(b.unref(f),C=>(b.openBlock(),b.createElementBlock("button",{key:C.id,class:b.normalizeClass(["button menu-button main-menu-button large override",`${C.id}-start-menu-button`]),onClick:A=>h(C)},b.toDisplayString(C.text),11,mue))),128))])]),l.value?(b.openBlock(),b.createBlock(b.Teleport,{key:2,to:"#app-container"},[b.createVNode(Ws,{onClose:p,class:b.normalizeClass(`start-menu-popup-${l.value.id}`)},{header:b.withCtx(()=>[b.createElementVNode("h3",vue,b.toDisplayString(l.value.text),1)]),body:b.withCtx(()=>[l.value.popupComponent?(b.openBlock(),b.createBlock(b.resolveDynamicComponent(l.value.popupComponent.component),{key:0,onClose:p},null,32)):b.createCommentVNode("",!0)]),_:1},8,["class"])])):b.createCommentVNode("",!0)]))}}),dpe="",yue={class:"title"},bue=b.defineComponent({__name:"alert-modal",props:{title:{type:String,required:!1},text:{type:String,required:!1}},setup(t){return(e,n)=>(b.openBlock(),b.createBlock(Ws,{onClose:n[0]||(n[0]=r=>e.$emit("close")),containerCssClass:"yes-no-modal"},{header:b.withCtx(()=>{var r;return[b.createElementVNode("h3",yue,b.toDisplayString((r=t.title)!=null?r:"Alert"),1)]}),body:b.withCtx(()=>[b.createElementVNode("h3",null,b.toDisplayString(t.text),1)]),_:1}))}}),hpe="";function Pk(t){const e=Ok().characters[t];return e||Kt(`Character ${t} not found`),e}function kue(t,e){const n=Pk(t);if(!!n&&(e||(e="default"),n.sprites)){const r=`${Ok().config.imagesPath}${n.sprites[e]}`;return r||Kt(`Character ${t} pose ${e} not found`),r}}function Um(t){var e;return t?((e=Pk(t))==null?void 0:e.style)||{}:{}}const wue=b.defineComponent({props:{pictureUrl:String},methods:{getAssetUrl(t){return Ma(t)}},computed:{...Za(ao,["layoutMode"]),boxStyle(){var o,a,s,u,l;const t=ao(),e=gt().layout;let n=0,r=0;const i=e.portraits;if(this.layoutMode==="vertical"){const f=(a=(o=i.offset)==null?void 0:o.portrait)!=null?a:{right:0,bottom:0};n=20+f.right,r=t.dialogHeight+f.bottom}else{const f=(u=(s=i.offset)==null?void 0:s.landscape)!=null?u:{right:0,bottom:0},c=(l=gt().dialogPanel.rightOffset)!=null?l:Mu.dialogPanel.rightOffset;n=Vm()-10+f.right+c,r=200+f.bottom}return{right:`${n}px`,bottom:`${r}px`,width:`${e.portraits.width}px`,height:`${e.portraits.height}px`}}}}),ppe="",_ue=["src"];function xue(t,e,n,r,i,o){return b.openBlock(),b.createElementBlock("div",{class:"dialog-picture override",style:b.normalizeStyle(t.boxStyle)},[b.createElementVNode("img",{src:t.getAssetUrl(t.pictureUrl),class:"picture override"},null,8,_ue)],4)}const jue=Hi(wue,[["render",xue]]),Sue=b.defineComponent({data(){return{playerText:"",passed:!1,timeout:null,textAnimation:null,mounted:!1,autoTimer:null,skipTimer:null,nextLineTimer:null}},props:{options:{type:Object,required:!0},active:Boolean},mounted(){this.startTextAnimation(),this.registerKeyboardShortcuts(),this.mounted=!0},unmounted(){this.clearListeners(),this.endTextAnimation({unmounted:!0})},computed:{...Za(Gt,["paused"]),preText(){return this.options.title?" &nbsp;\u2013&nbsp; ":""},style(){return Um(this.options.styleId)},dialogBoxStyle(){const t=Um(this.options.styleId),e={opacity:this.options.old?"0.7":"1"};return{...t.boxCss,...e}},isBasicChoice(){return!this.choices&&!this.options.textField},dialogBoxClass(){return this.options.title?!1:"dialog-box-followup"},titleStyle(){const t=Um(this.options.styleId);return{color:t.color,...t.nameCss}},textStyle(){return Um(this.options.styleId).textCss},text(){return this.textAnimation?this.textAnimation.text:this.options.text},choices(){if(this.options.choices)return this.options.choices},skipping(){return zn().playMode==="skip"},canInteract(){return this.active&&this.mounted&&!this.passed&&!this.nextLineTimer&&!this.textAnimation&&this.options.interactive&&!this.paused}},watch:{options(t,e){!e.old&&t.old&&this.textAnimation&&this.endTextAnimation({unmounted:!0})},skipping(t,e){t&&!e&&this.startSkip()}},methods:{clearListeners(){this.timeout&&(clearTimeout(this.timeout),this.timeout=null)},keyboardEvent(t){if(!this.canInteract){this.mounted&&this.textAnimation&&t.key===" "&&this.endTextAnimation({pressedSpace:!0});return}if(this.canInteract&&this.options.textField&&t.key==="Enter"&&this.submitText(),this.canInteract&&!this.options.textField){let e=-1;switch(t.key){case" ":e=0;break;case"1":e=0;break;case"2":e=1;break;case"3":e=2;break;case"4":e=3;break;case"5":e=4;break;case"6":e=5;break;case"7":e=6;break;case"8":e=7;break}e!==-1&&(this.choices&&e<this.choices.length?this.chooseOption(this.choices[e]):this.chooseOption(e))}},next(){this.passed||this.chooseOption(0)},chooseOption(t){this.finishLine();let e;typeof t=="object"?e=t.originalIndex:e=t,Gt().playerAnswered(e)},finishLine(){this.clearListeners(),this.endTextAnimation({unmounted:!0}),this.passed=!0},dialogStyle(t){const e={};return t.allowed||(e.pointerEvents="none",e.textDecoration="line-through"),e},dialogClass(t){if(!t.allowed)return"strike-anim"},submitText(){const t=this.playerText;Gt().playerAnswered(t)},addTextSection(t,e){const n=this.options.text.substring(t,e);return this.textAnimation.text+=n,e},addHtmlTag(t){const e=t[0];return this.textAnimation.text+=e,this.textAnimation.skippedChars+=e.length,e.length},startTextAnimation(){var t;if(!this.options.old)if(zn().playMode==="skip")this.startSkip();else if(gt().dialogPanel.animateText){this.textAnimation={text:"",index:0,startTime:Date.now(),timer:null,skippedChars:0,tags:lee(this.options.text),finished:!1};const e=this.textAnimation;e.timer=setInterval(()=>{this.updateTextAnimation()},30)}else zn().playMode!=="auto"&&this.isBasicChoice&&(this.autoTimer=setTimeout(()=>{this.endTextAnimation()},((t=gt().dialogPanel.textSpeed)!=null?t:sb)*this.options.text.length))},startSkip(){zn().playMode==="skip"&&!this.options.old&&(this.isBasicChoice?this.skipTimer=setTimeout(()=>{this.endTextAnimation()},100):(zn().toggleSkip(),this.endTextAnimation({unmounted:!0})))},updateTextAnimation(){var o;const t=this.textAnimation;if(!t)return;const e=t.index,n=Date.now()-t.startTime;let r=!1,i=Math.round(n/((o=gt().dialogPanel.textSpeed)!=null?o:sb))+t.skippedChars;if(i>this.options.text.length&&(r=!0,t.finished=!0,i=this.options.text.length),i!==t.index){let a=e;for(;t.tags.length>0&&i>=t.tags[0].index;){a=this.addTextSection(a,t.tags[0].index);const s=this.addHtmlTag(t.tags.shift());a+=s,i+=s}a=this.addTextSection(a,i),t.index=a}r&&this.endTextAnimation()},endTextAnimation({unmounted:t,pressedSpace:e}={}){var n;this.textAnimation&&(this.textAnimation.timer&&clearInterval(this.textAnimation.timer),this.textAnimation=null),this.autoTimer&&!e&&clearTimeout(this.autoTimer),this.skipTimer&&clearTimeout(this.skipTimer),this.nextLineTimer&&clearTimeout(this.nextLineTimer),!t&&!e&&zn().playMode!=="normal"&&this.isBasicChoice&&(this.nextLineTimer=setTimeout(()=>{this.next()},zn().playMode==="auto"?(n=gt().dialogPanel.timeBetweenLines)!=null?n:Mu.dialogPanel.timeBetweenLines:0))},registerKeyboardShortcuts(){this.timeout=setTimeout(()=>{this.options.textField&&this.canInteract&&this.$refs.playerInput.focus()},10)}}}),mpe="",Cue={class:"dialog-content"},$ue=["innerHTML"],Oue=["innerHTML"],Eue=["innerHTML"],Tue={key:1},Aue={key:0,class:"dialog-choices"},Mue=["onClick","innerHTML"],Pue={key:1},Nue={key:2,class:"buttons-container"};function Iue(t,e,n,r,i,o){const a=b.resolveDirective("visible");return b.openBlock(),b.createElementBlock("div",{class:b.normalizeClass(["dialog-box w-full override",t.dialogBoxClass]),style:b.normalizeStyle(t.dialogBoxStyle)},[b.createElementVNode("div",Cue,[t.options.title?(b.openBlock(),b.createElementBlock("span",{key:0,class:"dialog-title override",style:b.normalizeStyle(t.titleStyle),innerHTML:t.options.title},null,12,$ue)):b.createCommentVNode("",!0),b.createElementVNode("span",{class:"dialog-text dialog-separator override",style:b.normalizeStyle(t.textStyle),innerHTML:t.preText},null,12,Oue),b.createElementVNode("span",{class:b.normalizeClass(["dialog-text override",t.options.cssClass]),style:b.normalizeStyle(t.textStyle),innerHTML:t.text},null,14,Eue),t.options.old?b.createCommentVNode("",!0):b.withDirectives((b.openBlock(),b.createElementBlock("div",Tue,[t.choices?(b.openBlock(),b.createElementBlock("div",Aue,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.choices,(s,u)=>(b.openBlock(),b.createElementBlock("p",{key:u,style:b.normalizeStyle(t.dialogStyle(s)),class:b.normalizeClass([t.dialogClass(s),"dialog-choice override"]),onClick:l=>t.chooseOption(s),ref_for:!0,ref:"choices",innerHTML:`${u+1}. \u2013\xA0 ${s.choice}`},null,14,Mue))),128))])):t.options.textField?(b.openBlock(),b.createElementBlock("div",Pue,[b.withDirectives(b.createElementVNode("input",{type:"text",class:"label-input input",ref:"playerInput",id:"player-input-field","onUpdate:modelValue":e[0]||(e[0]=s=>t.playerText=s)},null,512),[[b.vModelText,t.playerText]]),b.createElementVNode("button",{onClick:e[1]||(e[1]=(...s)=>t.submitText&&t.submitText(...s)),class:"button",id:"player-input-submit"}," Submit ")])):(b.openBlock(),b.createElementBlock("div",Nue,[b.createElementVNode("div",{onClick:e[2]||(e[2]=s=>t.chooseOption(0)),ref:"continue",class:"interact-button button override"}," Continue ",512)]))])),[[a,t.canInteract]])])],6)}const Lue=Hi(Sue,[["render",Iue]]),Due=b.createElementVNode("div",{class:"anchor"},null,-1),Rue=b.defineComponent({__name:"game-dialog",props:{layoutMode:String,inGame:Boolean},setup(t){const e=t,n=b.ref(Gt().inScript),r=b.ref(null),i=ao(),o=wn(),a=b.computed(()=>o.stack),s=zn(),u=b.computed(()=>s.dialog),l=b.ref(null),f=b.ref(null),c=b.ref(null),d=b.computed(()=>{let S="0px";const C=gt().layout.dialogBottomPadding;return typeof C=="number"?S=`${C}px`:typeof C=="string"&&(S=C),{paddingBottom:S}}),h=b.computed(()=>{if(u.value.length>0)return u.value[u.value.length-1]}),p=b.computed(()=>{if(h.value){const S=h.value.speaker;let C=h.value.pose;return S?(C||(C="idle"),kue(S,C)):void 0}}),m=b.computed(()=>i.dialogWidth),g=b.computed(()=>Gt().inScript);b.watch(g,S=>{S?n.value=!0:zn().playMode!=="normal"?(zn().playMode==="skip"&&(zn().playMode="normal"),r.value=setTimeout(()=>{n.value=!1},500)):n.value=!1}),b.onMounted(()=>{const S=C=>{f.value&&f.value.keyboardEvent&&f.value.keyboardEvent(C)};c.value=$o.on("debouncedKeydown",S)}),b.onUnmounted(()=>{c.value&&$o.off("debouncedKeydown",c.value),r.value&&clearTimeout(r.value)});const v=b.computed(()=>{var $,E;let S;const C=`${ao().dialogHeight}px`,A={};if(ao().overlayMode){A.position="absolute";const O=($=gt().dialogPanel.rightOffset)!=null?$:Mu.dialogPanel.rightOffset;A.right=`${O}px`;const z=(E=gt().dialogPanel.bottomOffset)!=null?E:Mu.dialogPanel.bottomOffset;A.bottom=`${z}px`}return{...A,width:e.layoutMode==="horizontal"?`${m.value}px`:"100%",height:C,transform:S,transformOrigin:"right"}});function y(){zn().toggleAutoPlay()}function k(){zn().toggleSkip()}function w(S,C){var E;const A=Pk(S.speaker);let $=(E=A==null?void 0:A.name)!=null?E:"Missing Character";return C>=1&&u.value[C-1].speaker===S.speaker&&($=void 0),S.choices&&S.choices.forEach(O=>{O.choice=es(O.choice)}),{title:$!=null?$:"",text:S.text,cssClass:S.cssClass,styleId:S.speaker,choices:S.choices,old:C<u.value.length-1,interactive:S.interactive,textField:S.textField}}function _(S){return S===s.dialog.length-1&&a.value.length>0}return b.watch(u.value,S=>{if(l.value){const C=l.value;C.scrollTop=C.scrollHeight+1e8}}),(S,C)=>(b.openBlock(),b.createElementBlock(b.Fragment,null,[b.createVNode(b.Transition,{name:"fade"},{default:b.withCtx(()=>[b.unref(p)&&b.unref(i).showDialog?(b.openBlock(),b.createBlock(jue,{key:0,pictureUrl:b.unref(p)},null,8,["pictureUrl"])):b.createCommentVNode("",!0)]),_:1}),b.createVNode(b.Transition,{name:"dialog-transition"},{default:b.withCtx(()=>[t.inGame&&b.unref(i).showDialog?(b.openBlock(),b.createElementBlock("div",{key:0,class:"dialog override",ref_key:"dialogRef",ref:l,style:b.normalizeStyle(b.unref(v))},[b.createVNode(b.TransitionGroup,{name:"list",tag:"div",class:"dialog-container w-full override",style:b.normalizeStyle(b.unref(d))},{default:b.withCtx(()=>[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(b.unref(u),(A,$)=>(b.openBlock(),b.createBlock(Lue,{ref_for:!0,ref:E=>f.value=E,key:A.id,options:w(A,$),active:_($)},null,8,["options","active"]))),128))]),_:1},8,["style"]),(b.openBlock(),b.createBlock(b.Teleport,{to:"#app"},[b.createElementVNode("div",{class:"auto-skip-buttons flex"},[b.createElementVNode("div",{class:"button menu-toggle-button auto-button auto",onClick:y}," Auto "),b.createElementVNode("div",{class:"button menu-toggle-button auto-button skip",onClick:k}," Skip ")])])),Due],4)):b.createCommentVNode("",!0)]),_:1})],64))}}),vpe="",Bue=["id"],zue=["src"],Fue={class:"tab-title"},Vue=b.defineComponent({__name:"tab-selector",props:{tab:null,active:{type:Boolean}},emits:["click"],setup(t,{emit:e}){const n=t,r=b.computed(()=>n.active?"tab-active":"tab-inactive");function i(){e("click")}return(o,a)=>(b.openBlock(),b.createElementBlock("div",{class:b.normalizeClass(["tab",b.unref(r)]),id:`tab-${t.tab.id}`,onClick:i},[b.createElementVNode("div",{class:b.normalizeClass(["tab-title-container",t.active?"active":""])},[t.tab.icon?(b.openBlock(),b.createElementBlock("img",{key:0,src:t.tab.icon,alt:"tab icon",class:"tab-icon"},null,8,zue)):b.createCommentVNode("",!0),b.createElementVNode("span",Fue,b.toDisplayString(t.tab.label),1)],2)],10,Bue))}}),gpe="",que={class:"tabs-controller"},Hue={key:0,class:"tabs-controller__tabs"},Uue={key:1,class:"tab-content"},Wue={key:2},Kue=[b.createElementVNode("div",{class:"tab-content__empty"},[b.createElementVNode("p",null,"No tab selected")],-1)],Jue=b.defineComponent({__name:"TabsController",props:{tabs:null,defaultTab:null},emits:["tab-change","close"],setup(t,{emit:e}){var a,s;const n=t,r=b.ref((s=(a=n.tabs[n.defaultTab])==null?void 0:a.id)!=null?s:null);function i(u){r.value=n.tabs[u].id,e("tab-change",u)}const o=b.computed(()=>n.tabs.find(u=>u.id===r.value));return(u,l)=>(b.openBlock(),b.createElementBlock("div",que,[t.tabs.length>1?(b.openBlock(),b.createElementBlock("div",Hue,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.tabs,(f,c)=>(b.openBlock(),b.createBlock(Vue,{key:f.id,tab:f,active:f.id===r.value,onClick:()=>i(c)},null,8,["tab","active","onClick"]))),128))])):b.createCommentVNode("",!0),b.unref(o)?(b.openBlock(),b.createElementBlock("div",Uue,[b.unref(o)?(b.openBlock(),b.createBlock(b.resolveDynamicComponent(b.unref(o).component),{key:0,onClose:l[0]||(l[0]=f=>u.$emit("close"))},null,32)):b.createCommentVNode("",!0)])):(b.openBlock(),b.createElementBlock("div",Wue,Kue))]))}}),bpe="",Gue={class:"menu-container"},Que=["onClick","id"],Yue={class:"title"},Xue=b.defineComponent({__name:"menu-buttons",setup(t){const e=jo(),n=b.ref(null);b.onMounted(()=>{n.value=$o.on("keydown",f=>{f.key==="Escape"&&jo().toggleMenu()}),Fn.callHook("onGameMounted")}),b.onUnmounted(()=>{$o.off("keydown",n.value),Fn.callHook("onGameUnmounted")});function r(f){jo().activeMenu=f}const i=b.computed(()=>e.menus),o=b.computed(()=>e.menu),a=b.computed(()=>{var f,c;return((c=(f=o.value)==null?void 0:f.tabs)!=null?c:[]).filter(d=>d.condition?d.condition():!0).map(d=>({id:d.id,label:d.text,component:d.component}))});function s(){e.closeMenu()}function u(f){e.setActiveTab(f)}function l(){return s()}return(f,c)=>(b.openBlock(),b.createElementBlock("div",Gue,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(b.unref(i),(d,h)=>{var p;return b.openBlock(),b.createElementBlock("button",{key:d.id,onClick:m=>r(d.id),id:(p=d.cssId)!=null?p:`${h}-menu-button`,class:"button menu-toggle-button"},b.toDisplayString(d.label),9,Que)}),128)),b.unref(o)?(b.openBlock(),b.createBlock(b.Teleport,{key:0,to:"#app-container"},[b.createVNode(Ws,{containerCssClass:{[b.unref(o).cssClass]:!0,"menu-modal":!0},onClose:s},{header:b.withCtx(()=>{var d,h;return[b.createElementVNode("h3",Yue,b.toDisplayString((h=(d=b.unref(e).tab)==null?void 0:d.text)!=null?h:b.unref(o).label),1)]}),body:b.withCtx(()=>[b.createVNode(Jue,{onTabChange:u,onClose:l,tabs:b.unref(a),defaultTab:b.unref(o).activeTab},null,8,["tabs","defaultTab"])]),_:1},8,["containerCssClass"])])):b.createCommentVNode("",!0)]))}}),kpe="",Zue=["id"],ele=["innerHTML"],tle=b.defineComponent({__name:"screen-object",props:{screenObject:null,transitioning:{type:Boolean}},setup(t){const e=t;function n(o){e.transitioning||e.screenObject.onClick&&io().clickObject(o)}const r=b.computed(()=>{const o={};return e.screenObject.onClick?o.interactable=!0:o.disabled=!0,e.screenObject.cssClass&&(o[e.screenObject.cssClass]=!0),o}),i=b.computed(()=>{const o={};e.screenObject.opacity!==1&&(o.opacity=e.screenObject.opacity);let a=e.screenObject.x,s=e.screenObject.y,u=e.screenObject.width,l=e.screenObject.height;if(e.screenObject.anchor){const c=e.screenObject.anchor;a=e.screenObject.x-u*c.x,s=e.screenObject.y-l*c.y,o.transformOrigin=`${c.x*100}% ${c.y*100}%`}e.screenObject.scale&&(u=u*e.screenObject.scale,l=l*e.screenObject.scale);const f={...o,left:`${a}px`,top:`${s}px`,width:`${u}px`,height:`${l}px`};return Gne(e.screenObject)&&(f.backgroundImage=`url(${td(e.screenObject.image)})`),f});return(o,a)=>{const s=b.resolveComponent("ScreenObject",!0);return b.openBlock(),b.createElementBlock("div",{tabindex:"-1",class:b.normalizeClass(["viewport-object",b.unref(r)]),id:`viewport-object-${e.screenObject.id}`,onClick:a[0]||(a[0]=u=>n(t.screenObject)),style:b.normalizeStyle(b.unref(i))},[b.createElementVNode("span",{innerHTML:e.screenObject.text?b.unref(es)(e.screenObject.text):void 0},null,8,ele),(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(e.screenObject.children,u=>(b.openBlock(),b.createBlock(s,{transitioning:t.transitioning,key:u.id,screenObject:u},null,8,["transitioning","screenObject"]))),128))],14,Zue)}}}),wpe="",nle=["id"],rle=["id","onClick","innerHTML"],Nk=b.defineComponent({__name:"screen-layer",props:{layer:String,transitioning:{type:Boolean,default:!1}},setup(t){const e=t,n=wn(),r=Gt(),i=Uo(),o=io(),a=b.computed(()=>gt().layout.backgrounds.width),s=b.computed(()=>gt().layout.backgrounds.height),u=b.computed(()=>e.layer),l=b.computed(()=>i.buttons),f=b.computed(()=>{const _=zm().screens[u.value];return _||(console.log(u),Kt(`Screen ${u.value} doesn't have a config`)),_}),c=b.computed(()=>r.isInGame),d=b.computed(()=>f.value.buttons||[]);function h(_){const C=Hs(_).background;if(!!C)return td(C)}function p(_){const S=Hs(_),C=l.value[_],A=S.tag||"default",$=C.state;return $===!0&&Nr().isInteractionTagBlocked(A)?"greyed":$}function m(_){const S=p(_);return S==="hidden"||S==="greyed"||S===!1}function g(_){const S=p(_),C={};S===!0?C.interactable=!0:(C.disabled=!0,S==="greyed"?C.greyed=!0:(S==="hidden"||S===!1)&&(C.hidden=!0));const A=Hs(_);return A.cssClass&&(C[A.cssClass]=!0),C}function v(_){const S=Hs(_),C={};p(_),S.position.width&&(C.width=`${S.position.width}px`),S.position.height&&(C.height=`${S.position.height}px`),S.background&&(C.backgroundImage=`url(${h(_)})`);let A=S.position.left,$=S.position.top;return S.anchor&&(A=S.position.left-S.position.width*S.anchor.x,$=S.position.top-S.position.height*S.anchor.y),{...C,left:`${A}px`,top:`${$}px`}}function y(_){if(m(_)||e.transitioning)return;const S=Hs(_);if(!yL(S))return!1;if(l.value[_].state===!0){Eu("onButtonClicked");const A=S.action;if(!A)return;S.actionType==="run"?n.runLabelFunction(A):n.jumpToLabel(A)}}function k(_){var A;const C=(A=Hs(_).text)!=null?A:"";return es(C)}const w=b.computed(()=>({backgroundImage:`url(${td(f.value.background)})`,width:`${a.value}px`,height:`${s.value}px`}));return(_,S)=>b.unref(c)?(b.openBlock(),b.createElementBlock("div",{key:0,class:"viewport-layer",id:`viewport-layer-${b.unref(u)}`,style:b.normalizeStyle(b.unref(w))},[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(b.unref(d),(C,A)=>(b.openBlock(),b.createElementBlock("div",{key:A,tabindex:"-1",class:b.normalizeClass(["viewport-button",g(C)]),id:`viewport-button-${C}`,onClick:$=>y(C),style:b.normalizeStyle(v(C)),innerHTML:k(C)},null,14,rle))),128)),(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(b.unref(o).tree,C=>(b.openBlock(),b.createBlock(tle,{key:C.id,screenObject:C,transitioning:t.transitioning},null,8,["screenObject","transitioning"]))),128))],12,nle)):b.createCommentVNode("",!0)}}),_pe="",ile=b.defineComponent({__name:"NarratTransition",props:{name:{type:String,required:!0},duration:{type:Number,required:!0},delay:Number},emits:["complete"],setup(t,{emit:e}){const n=t,r=b.useSlots(),i=b.ref("start"),o=b.reactive({oldSlotClasses:{},oldSlotStyle:{},newSlotClasses:{},newSlotStyle:{}});return b.computed(()=>r.oldElement&&r.oldElement.length>0),b.computed(()=>r.newElement&&r.newElement.length>0),b.onMounted(async()=>{var s;const a=`narrat-transition-${n.name}`;o.newSlotClasses={[`${a}-enter-from`]:!0,[`${a}-enter-active`]:!0},o.oldSlotStyle={transitionDuration:`${n.duration/1e3}s`},o.newSlotStyle={transitionDuration:`${n.duration/1e3}s`},o.oldSlotClasses={[`${a}-leave-active`]:!0},await _o(30),o.oldSlotClasses[`${a}-leave-to`]=!0,await _o((s=n.delay)!=null?s:0),delete o.newSlotClasses[`${a}-enter-from`],await _o(n.duration),delete o.newSlotClasses[`${a}-enter-active`],delete o.oldSlotClasses[`${a}-leave-active`],i.value="end",e("complete")}),(a,s)=>(b.openBlock(),b.createElementBlock(b.Fragment,null,[i.value!=="end"?(b.openBlock(),b.createElementBlock("div",{key:0,class:b.normalizeClass(["transition-holder",o.oldSlotClasses]),style:b.normalizeStyle(o.oldSlotStyle)},[b.renderSlot(a.$slots,"oldElement")],6)):b.createCommentVNode("",!0),b.createElementVNode("div",{class:b.normalizeClass(["transition-holder",o.newSlotClasses]),style:b.normalizeStyle(o.newSlotStyle)},[b.renderSlot(a.$slots,"newElement")],6)],64))}}),xpe="",ole=b.defineComponent({__name:"screens",setup(t){const e=ao(),n=Gt(),r=Uo(),i=b.computed(()=>r.nonEmptyLayers),o=b.computed(()=>e.layoutMode),a=b.computed(()=>gt().layout.backgrounds.width),s=b.computed(()=>gt().layout.backgrounds.height),u=b.computed(()=>n.isInGame);function l(c){r.finishTransition(c)}const f=b.computed(()=>{const c=a.value,d=s.value;return o.value,{height:`${d}px`,width:`${c}px`}});return(c,d)=>b.unref(u)?(b.openBlock(),b.createElementBlock("div",{key:0,class:"viewport",id:"narrat-viewport",style:b.normalizeStyle(b.unref(f))},[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(b.unref(i),(h,p)=>(b.openBlock(),b.createElementBlock("div",{key:p,class:"layer-container"},[h.transition?(b.openBlock(),b.createBlock(ile,{key:0,name:h.transition.transition,duration:h.transition.duration,delay:h.transition.delay,onComplete:()=>l(p)},{oldElement:b.withCtx(()=>[h.transition.oldScreen?(b.openBlock(),b.createBlock(Nk,{key:0,layer:h.transition.oldScreen,transitioning:!0},null,8,["layer"])):b.createCommentVNode("",!0)]),newElement:b.withCtx(()=>[h.screen?(b.openBlock(),b.createBlock(Nk,{key:0,layer:h.screen,transitioning:!0},null,8,["layer"])):b.createCommentVNode("",!0)]),_:2},1032,["name","duration","delay","onComplete"])):h.screen?(b.openBlock(),b.createBlock(Nk,{key:1,layer:h.screen},null,8,["layer"])):b.createCommentVNode("",!0)]))),128))],4)):b.createCommentVNode("",!0)}}),jpe="",ale=b.defineComponent({data(){return{}},methods:{getStatImage(t){return Ma(this.statsConfig[t].icon)}},computed:{...Za($a,["hudStats"]),...Za(ao,["layoutMode"]),statsConfig(){return gt().hudStats},stats(){return this.hudStats},hudStyle(){var e;let t="0";return this.layoutMode==="horizontal"&&(t=`${Vm()+((e=gt().dialogPanel.rightOffset)!=null?e:Mu.dialogPanel.rightOffset)}px`),{right:t}}}}),Spe="",sle=["src"],ule={class:"bold hud-text"},lle=b.createTextVNode(": ");function cle(t,e,n,r,i,o){return b.openBlock(),b.createElementBlock("div",{class:"hud",style:b.normalizeStyle(t.hudStyle)},[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.stats,(a,s)=>(b.openBlock(),b.createElementBlock("div",{key:s,class:"hud-stat"},[b.createElementVNode("img",{class:"hud-icon",src:t.getStatImage(s)},null,8,sle),b.createElementVNode("span",ule,b.toDisplayString(t.statsConfig[s].name),1),lle,b.createElementVNode("span",null,b.toDisplayString(Math.floor(a.value*100)/100),1)]))),128))],4)}const fle=Hi(ale,[["render",cle]]),dle={key:0,class:"auto-play-feedback-container"},hle=b.defineComponent({__name:"AutoPlayFeedback",setup(t){const e=zn(),n=b.computed(()=>e.playMode==="auto"),r=b.computed(()=>e.playMode==="skip"),i=b.computed(()=>n.value?"auto-play-feedback-auto":r.value?"auto-play-feedback-skip":{}),o=b.computed(()=>n.value?"Auto Play":r.value?"Skip":"");return(a,s)=>b.unref(o)?(b.openBlock(),b.createElementBlock("div",dle,[b.createElementVNode("div",{class:b.normalizeClass(["auto-play-feedback",b.unref(i)])},b.toDisplayString(b.unref(o)),3)])):b.createCommentVNode("",!0)}}),Cpe="",ple=b.defineComponent({__name:"in-game",setup(t){const e=Gt(),n=ao(),r=b.computed(()=>n.layoutMode),i=b.computed(()=>e.saving),o=b.ref(null),a=zn(),s=b.ref(null),u=b.computed(()=>i.value&&!i.value.withPrompt||i.value&&o.value),l=b.computed(()=>{let h="row";return r.value==="vertical"&&(h="column"),{flexDirection:h}});function f(h){if(o.value=null,h===null){Gt().finishManualSave(h,!1);return}Gt().finishManualSave(h,!0)}function c(){o.value=!0}function d(){o.value=!1,e.finishManualSave(null,!1),o.value=null}return b.onMounted(()=>{s.value=$o.on("debouncedKeydown",h=>{Gt().debugMode||((h.key==="a"||h.key==="A")&&a.toggleAutoPlay(),(h.key==="s"||h.key==="S")&&a.toggleSkip())})}),b.onUnmounted(()=>{s.value&&$o.off("debouncedKeydown",s.value)}),(h,p)=>(b.openBlock(),b.createElementBlock("div",{class:"game",style:b.normalizeStyle(b.unref(l))},[b.createVNode(fle),b.createVNode(Xue,{class:"menu-toggle"}),b.createVNode(ole),b.createVNode(Rue,{inGame:!0,layoutMode:b.unref(r)},null,8,["layoutMode"]),b.unref(u)?(b.openBlock(),b.createBlock(iR,{key:0,mode:"pick",onChosen:f,onClose:p[0]||(p[0]=()=>f(null))})):b.createCommentVNode("",!0),b.createVNode(hle),b.unref(i)&&b.unref(i).withPrompt&&o.value===null?(b.openBlock(),b.createBlock(Hm,{key:1,prompt:"Would you like to save the game?",onConfirm:c,onRefuse:d})):b.createCommentVNode("",!0)],4))}}),$pe="",mle=b.defineComponent({props:{percentage:Number,step:String},methods:{loadingStyle(){return{width:`${this.percentage*60}vw`}}},computed:{}}),Ope="",vle={id:"loading-bar"},gle={id:"loading-text"};function yle(t,e,n,r,i,o){return b.openBlock(),b.createElementBlock("div",vle,[b.createElementVNode("div",{id:"inner-loading-bar",style:b.normalizeStyle(t.loadingStyle())},null,4),b.createElementVNode("div",gle,[b.createElementVNode("h3",null,"Loading "+b.toDisplayString(Math.floor(t.percentage*100))+"% - "+b.toDisplayString(t.step),1)])])}const ble=Hi(mle,[["render",yle]]),kle="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlJhdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCgkgdmlld0JveD0iMCAwIDU5NS4zIDU5NS4zIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1OTUuMyA1OTUuMzsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLnN0MHtmaWxsOiNFMjNCMzM7fQo8L3N0eWxlPgo8cGF0aCBpZD0iUmF0X1NoYXBlIiBjbGFzcz0ic3QwIiBkPSJNNTU2LjksODIuNWMtMTAuOC0yNC4zLTQ3LTU3LjEtNzEuMy02NS42Yy0yNC4zLTguNC02NC4xLTAuMy04OC43LDIyLjMKCWMtMjAsMTguNC0yNiwyOC4yLTI5LjEsMzdjLTIuMSw1LjktNC44LDEzLjUtNiwyMC45djBjLTAuNSw0LjEtNC41LDctOC42LDYuMWMtMTAuNC0yLjMtMjkuNS02LTQ0LjQtNi4zCgljLTEzLjctMC4yLTMwLjEsMy4yLTQwLjQsNS43Yy00LjUsMS4xLTguOC0yLjItOC44LTYuOGMtMC4xLTUuMy0xLjEtMTIuMy00LjgtMTkuNmMtOC41LTE2LjktMTkuNi0zMi42LTU3LjgtNDcuNAoJYy0zMS45LTEyLjQtNzUuMS05LjctMTAwLjgsMS44Yy0yOC4xLDEyLjYtNDIuNCwzNy45LTU0LDYxLjhjLTE0LjQsMjkuOC0xNC45LDgzLjYtNi40LDEwNGMxMi44LDMwLjcsMzUuOCw0Ny4yLDUyLjYsNTMKCWMxMS4zLDMuOCwyOC4yLDMuNywzOC4yLDMuM2M0LjItMC4yLDcuNywzLjMsNy41LDcuNWMtMC43LDEzLjYtMC45LDQxLjUsNyw2MS40YzcuNywxOS40LDI5LjcsNjIuMyw1MC43LDEwMS4yCgljMCwwLjEtMTQuNiwyLjktMzEuNCw2LjhjLTIzLjksNS41LTUyLjYsMTIuNy01NC4zLDEzLjdjLTMuNSwyLjEtMywxMC0yLjcsMTJjMC41LDMuNCw1LjMsOC4xLDYuOSw4LjNjMy45LDAuMywzMS4zLTcuNiw1NS43LTE0LjYKCWMxOC41LTUuMywzNC45LTkuMywzNS41LTguMmM1LjEsOS4zLDEwLDE4LDE0LjQsMjUuOGM1LjIsOS4xLDEwLjcsMTYuNCwxNC4xLDIzLjZjMS4xLDIuMy0xNi42LDUuOC0zMi41LDE0LjcKCWMtMTYuNCw5LjEtMjkuNywyMS0zMi4zLDI0Yy0xLjgsMi4xLTMsNi0xLjIsMTAuN2MxLjEsMi45LDEwLDUuNywxMi40LDUuMWM2LjgtMS43LDE2LjUtMTIuNSwzMy4xLTIxLjEKCWMxNi4zLTguNSwzMi45LTE0LjksMzMuOC0xMy42YzkuNywxNC4zLDE2LjksMjEuNiwyMi42LDMxLjJjOS44LDE2LjUsMjcuMyw0NS45LDQ2LjYsMzkuNWM2LjQtMi4xLDMxLjEtMzMuNiw1My4zLTY4LjYKCWMxLjMtMi4xLDE2LjEsMTEuMywzMC40LDIzLjJjMTMuOCwxMS40LDIyLjcsMjAuNiwyNy4xLDIxLjRjNS40LDEsMTQuMi03LjcsMTQuMS0xNC43Yy0wLjEtMi43LTE0LjMtMTMuOC0yOS4xLTI2LjIKCWMtMTQuNS0xMi4xLTMwLjEtMjIuOC0yOS4yLTI0LjNjNy42LTEyLDE0LjUtMjMuNywyMC4xLTMzLjljNC4zLTcuOCw4LjktMTYsMTMtMjQuN2MwLjYtMS4yLDE1LjksMywzMS40LDcuMWMxNS4zLDQsMjYuNywxMCwzMSw4CgljNi45LTMsMTEuNi0xMy44LDkuNC0xOC4zYy0xLjEtMi4zLTE3LTcuMy0zMy4yLTEyYy0xNC4yLTQuMS0yOC02LjUtMjcuNy03LjNjMTUuNS0zNCwyOC44LTY0LjgsMjcuNi02OS42CgljLTEuNy03LjEsMi42LTExLjksNy0zNi41YzMuMi0xOC4xLDQuNy00MC45LDUuMi01MS43YzAuMi0zLjUsMi44LTYuMyw2LjMtNi43YzMuMS0wLjMsNi45LTAuOSwxMC41LTEuOWM3LjgtMiwxOC42LTcuOCwzNi40LTIwLjYKCWMxNy45LTEyLjgsMzguNy00OS42LDQ0LjQtNjcuOFM1NjcuNiwxMDYuOCw1NTYuOSw4Mi41eiBNMjY1LjEsMzM2LjJjLTguMSw0LTEzLDctMjYuNCw5LjZjLTYuOSwxLjQtMjkuNC0wLjItNDAuNy00LjYKCWMtMTAuNS00LjEtMTkuOS03LjYtMzAtMTUuNHMtMTUuNy0xMy4yLTE1LjctMTUuM2MwLTQuNCw2LTkuNCwxMS05LjRjNS4xLDAsMTQuNSw5LjIsMjkuNywxNi42YzE0LjMsNywxNy45LDYuMSwyNS40LDcuMwoJYzIuOSwwLjUsNy43LDAuNiwxMC43LDAuNGMxNC4xLTEuMywyMS40LTUuOSwyNS4zLTguOGM0LTMsMTMuNy0xMi45LDE3LjItMTIuNWM4LDEsMTguOSwzLjQsMTguOSw3LjEKCUMyOTAuNCwzMTksMjczLjIsMzMyLjEsMjY1LjEsMzM2LjJ6IE0zMjAuOSw1MjEuNGMtNC4zLDMuNy0xNy43LDEzLjUtMjMuMywxMy41Yy0yLjgsMC03LjQtOC4yLTExLjUtMTYuOAoJYy00LjEtOC41LTkuMS0yMS4xLTkuMS0zMS42YzAtNC42LDYtNy40LDEzLjQtOS4yYzcuMi0xLjcsMjcuMy0xLjgsMjkuOS0xLjFjNi44LDEuNywxMi45LDIuMiwxMi43LDYuNGMtMC40LDEyLjctNywxOC45LTguMywyNC4zCglDMzIzLjQsNTEyLjMsMzIzLjQsNTE5LjIsMzIwLjksNTIxLjR6IE00MzEuMSwzMjAuM2MtOS4yLDcuNC0xMC42LDguMS0yNC45LDEzLjdjLTExLjMsNC40LTI4LjYsNS44LTQxLjYsMy42CgljLTEyLjItMi4xLTIyLjMtNC42LTI5LjUtMTAuMWMtOS43LTcuMy0xNi40LTE1LjEtMTYuNC0xOS44YzAtMy43LDYuNC00LjMsMTQuNS00LjljMy41LTAuMyw5LjMsNS45LDEzLjIsOS4yCgljOC4xLDYuOCwxNC44LDgsMjguOCw5LjljMi45LDAuNCw3LjgsMC40LDEwLjcsMC4xYzcuNS0wLjksMTItMC40LDI1LjgtOC4yYzIwLTExLjIsMTcuOC0xNC40LDI1LjEtMTIuNmMyLjIsMC42LDUuOCwxLjIsNS42LDUuNgoJQzQ0Mi40LDMwOSw0NDAuNSwzMTIuNyw0MzEuMSwzMjAuM3oiLz4KPC9zdmc+Cg==",wle={id:"engine-splash-screen",class:"flex justify-center items-center"},_le={id:"engine-splash-title"},xle=["src"],jle=b.defineComponent({__name:"engine-splash",emits:["finished"],setup(t,{emit:e}){const n=b.ref("hidden"),r=b.computed(()=>({transitionDuration:`${l.value}s`})),i=b.computed(()=>({invisible:n.value!=="appear"})),o=Gt(),a=b.computed(()=>{var d,h;return(h=(d=gt().splashScreens)==null?void 0:d.engineSplashScreen)!=null?h:{}}),s=b.computed(()=>typeof a.value.overrideText=="string"?a.value.overrideText:"Made with narrat engine"),u=b.computed(()=>{var d;return(d=a.value.overrideLogo)!=null?d:kle}),l=b.computed(()=>typeof a.value.fadeDuration=="number"?a.value.fadeDuration:2),f=b.computed(()=>typeof a.value.timeBeforeFadeout=="number"?a.value.timeBeforeFadeout:3);b.onMounted(async()=>{if(await _o(10),n.value="appear",a.value.skip||o.options.debug){c();return}await _o(l.value*1e3),await _o(f.value*1e3),n.value="disappear",await _o(l.value*1e3),c()});function c(){o.loading.loaded?e("finished"):o.listener.once("gameLoaded",()=>{e("finished")})}return(d,h)=>(b.openBlock(),b.createElementBlock("div",wle,[b.createElementVNode("div",{id:"engine-splash-header",class:b.normalizeClass(["flex justify-center flex-col items-center",b.unref(i)]),style:b.normalizeStyle(b.unref(r))},[b.createElementVNode("h1",_le,b.toDisplayString(b.unref(s)),1),b.createElementVNode("img",{src:b.unref(u),alt:"Narrat Logo",id:"engine-splash-logo"},null,8,xle),b.createVNode(ble,{percentage:b.unref(o).loading.percentage,step:b.unref(o).loading.step},null,8,["percentage","step"])],6)]))}}),Epe="",Sle={id:"game-splash-screen",style:{height:"100%",padding:"20px"},class:"flex justify-center items-center"},Cle={id:"game-splash-screen-header flex justify-center flex-col items-center",class:"flex justify-center flex-col items-center"},$le={class:"title",id:"game-splash-title"},Ole=b.defineComponent({__name:"game-splash",setup(t){const e=Gt(),n=b.computed(()=>{var s,u;return(u=(s=gt().splashScreens)==null?void 0:s.gameSplashScreen)!=null?u:{}}),r=b.computed(()=>typeof n.value.startButtonText=="string"?n.value.startButtonText:"Press to start"),i=b.computed(()=>e.loading.loaded),o=b.computed(()=>gt().gameTitle||"Narrat Game");function a(){e.flowState="menu"}return b.onMounted(()=>{e.options.debug&&a()}),(s,u)=>(b.openBlock(),b.createElementBlock("div",Sle,[b.createElementVNode("div",Cle,[b.createElementVNode("h1",$le,b.toDisplayString(b.unref(o)),1),b.unref(i)?(b.openBlock(),b.createElementBlock("button",{key:0,class:"button menu-button main-menu-button large splash-start-button override",onClick:a},b.toDisplayString(b.unref(r)),1)):b.createCommentVNode("",!0)])]))}}),Tpe="",Ele={key:0,class:"floating-tooltip-title"},Tle=b.createElementVNode("hr",null,null,-1),Ale={class:"floating-tooltip-text"},Mle=b.defineComponent({__name:"floating-tooltip",props:{title:null,text:null,width:null,x:null,y:null},setup(t){const e=t,n=b.ref(150),r=b.ref(null),i=b.computed(()=>{const o={};let a=e.x-e.width/2;a=Math.min(a,window.innerWidth-e.width-5),a=Math.max(5,a),o.left=`${a}px`;let s=window.innerHeight-e.y;return s=Math.max(s,5),s=Math.min(s,window.innerHeight-n.value-5),o.bottom=`${s}px`,o.width=`${e.width}px`,o});return b.onMounted(()=>{r.value&&(n.value=r.value.clientHeight)}),(o,a)=>(b.openBlock(),b.createBlock(b.Transition,{name:"fade"},{default:b.withCtx(()=>[b.createElementVNode("div",{class:"floating-tooltip",style:b.normalizeStyle(b.unref(i)),ref_key:"element",ref:r},[t.title?(b.openBlock(),b.createElementBlock("div",Ele,[b.createTextVNode(b.toDisplayString(e.title)+" ",1),Tle])):b.createCommentVNode("",!0),b.createElementVNode("div",Ale,b.toDisplayString(e.text),1)],4)]),_:1}))}}),Ape="",Ple={class:"tooltips-ui"},Nle=b.defineComponent({__name:"tooltips-ui",setup(t){const e=b.computed(()=>lm().tooltip);return b.computed(()=>ed().options.width),(n,r)=>(b.openBlock(),b.createElementBlock("div",Ple,[b.unref(e)?(b.openBlock(),b.createBlock(Mle,b.normalizeProps(b.mergeProps({key:0},b.unref(e))),null,16)):b.createCommentVNode("",!0)]))}}),Ile=b.defineComponent({setup(){const t=zn(),e=wn(),n=Gt();return{dialog:b.computed(()=>t.dialog),stack:b.computed(()=>e.stack),flowState:b.computed(()=>n.flowState),alerts:b.computed(()=>n.alerts)}},$refs:{dialogContainer:HTMLInputElement},inject:["mq"],components:{DebugMenu:Lse,NotificationToast:zse,StartMenu:gue,AlertModal:bue,InGame:ple,EngineSplash:jle,GameSplash:Ole,TooltipsUi:Nle},data(){return{lineTitle:"title",lineText:"hello"}},props:{options:Object},async mounted(){Fn.callHook("onAppMounted"),await Gt().engineLoading(),window.addEventListener("resize",rR(()=>{this.updateScreenSize()},100,{maxWait:200})),$o.setup(this.options.debug),setTimeout(()=>{this.updateScreenSize()},50)},computed:{...Za(ao,["screenWidth","screenHeight","layoutMode","gameWidth","gameHeight","gameScaleRatio","actualGameHeight"]),...Za(wn,["currentLine"]),appStyle(){return{transform:`scale(${this.gameScaleRatio}, ${this.gameScaleRatio})`,width:`${this.gameWidth}px`,height:`${this.actualGameHeight}px`}},appClass(){return jo().activeMenu?"app-blurred-by-modal":{}}},methods:{closeAlert(t){Gt().closeAlert(t)},engineSplashDone(){Gt().flowState="game-splash"},updateScreenSize(){ao().updateScreenSize(window.innerWidth,window.innerHeight)}}}),Mpe="";function Lle(t,e,n,r,i,o){const a=b.resolveComponent("EngineSplash"),s=b.resolveComponent("GameSplash"),u=b.resolveComponent("StartMenu"),l=b.resolveComponent("InGame"),f=b.resolveComponent("DebugMenu"),c=b.resolveComponent("NotificationToast"),d=b.resolveComponent("AlertModal"),h=b.resolveComponent("TooltipsUi");return b.openBlock(),b.createElementBlock(b.Fragment,null,[b.createElementVNode("div",{id:"app-container",style:b.normalizeStyle(t.appStyle)},[b.createElementVNode("div",{id:"app",class:b.normalizeClass(t.appClass)},[t.flowState==="engine-splash"?(b.openBlock(),b.createBlock(a,{key:0,onFinished:t.engineSplashDone},null,8,["onFinished"])):(b.openBlock(),b.createBlock(b.Transition,{key:1,name:"screens-fade"},{default:b.withCtx(()=>[t.flowState==="game-splash"?(b.openBlock(),b.createBlock(s,{key:"1"})):t.flowState==="menu"?(b.openBlock(),b.createBlock(u,{key:"2"})):t.flowState==="playing"?(b.openBlock(),b.createBlock(l,{key:"3"})):b.createCommentVNode("",!0)]),_:1})),t.options.debug?(b.openBlock(),b.createBlock(f,{key:2})):b.createCommentVNode("",!0),b.createVNode(c),(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.alerts,p=>(b.openBlock(),b.createBlock(d,{key:p.id,title:p.title,text:p.text,onClose:()=>t.closeAlert(p.id)},null,8,["title","text","onClose"]))),128))],2)],4),b.createVNode(h)],64)}const Dle=Hi(Ile,[["render",Lle]]);function qt(t,e){console.error("Runtime error ========================="),console.error(`Command: ${t.commandType}`),console.error("Args: ",t.args),console.error("Options: ",t.options),Kt(`Runtime error at ${t.fileName}:${t.line} (${t.commandType}) ${t.code}. -
224
224
  <br />
225
- Error: ${e}`),console.error("============================")}function Rle(t,...e){console.log(`[${t.fileName}:${t.line}] log: `,...e)}class Je{constructor(e,n,r,i){ei(this,"keyword");ei(this,"runner");ei(this,"argTypes");ei(this,"parser");ei(this,"onPlayerAnswered");ei(this,"returnAfterPlayerAnswer");this.keyword=e,this.runner=r,this.argTypes=n,i?this.parser=i:this.parser=nd(this.keyword,this.argTypes),this.returnAfterPlayerAnswer=!1}async run(e,n){let r=await this.runner(e,n);return this.returnAfterPlayerAnswer&&(r=await new Promise((i,o)=>{wn().waitForPlayerAnswer(e),e.finishCommand=i})),r}async processPlayerAnswer(e,n){let r=n;return this.onPlayerAnswered&&(r=await this.onPlayerAnswered(e,n)),this.returnAfterPlayerAnswer&&e.finishCommand&&e.finishCommand(r),r}static FromOptions(e){var r;const n=new Je(e.keyword,e.argTypes,e.runner,e.parser);return n.onPlayerAnswered=e.onPlayerAnswered,n.returnAfterPlayerAnswer=(r=e.returnAfterPlayerAnswer)!=null?r:!1,n}}function nd(t,e){let n=[];if(e!=="any"){n=[];const r=e.reduce((i,o)=>(o.optional&&i++,o.type==="rest"&&(i=1/0),i),0);r>=1?n.push(e.length-r):n.push(e.length),n.push(e.length)}return(r,i)=>{const o={newLine:r.currentLine+1},a=i.command.args;return e!=="any"&&(a.length<n[0]||a.length>n[1])?(console.log("Error details"),console.log(i.command),console.log(a),r.parserContext.error(r.line.line,`Command ${t}: Expected ${n.join(" to ")} arguments but got ${a.length}`),o):(i.command.commandType=t,e!=="any"&&i.command.args.forEach((s,u)=>{const l=e[u];!a7(s)&&!s7(s)&&(l.type==="any"||l.type==="rest"||typeof s===l.type||r.parserContext.error(r.line.line,`Command ${t}: Argument #${u+1} (${l.name}) should be a ${l.type}, but got type ${typeof s}: ${JSON.stringify(s)}`))}),{newLine:r.currentLine+1})}}const Ble=new Je("add_level",[{name:"skillKey",type:"string"},{name:"amount",type:"number"}],async t=>{let{skillKey:e,amount:n}=t.options;if((!e||!n)&&qt(t,"add_level command needs a skill id and a value as parameters"),!Number.isInteger(n)){const r=n;n=Math.round(n),console.warn(`add_level expects a level to be an integer. Auto Rounding ${r} to ${n}`)}_r().incrementSkill(e,n)}),zle=Je.FromOptions({keyword:"set_level",argTypes:[{name:"skill",type:"string"},{name:"level",type:"number"}],runner:async t=>{let{skill:e,level:n}=t.options;if((!e||!n)&&qt(t,"set_level command needs a skill id and a value as parameters"),!Number.isInteger(n)){const r=n;n=Math.round(n),console.warn(`set_level expects a level to be an integer. Auto Rounding ${r} to ${n}`)}_r().setSkillLevel(e,n)}}),Fle=new Je("add_xp",[{name:"xpKey",type:"string"},{name:"xpToAdd",type:"number"}],async t=>{const{xpKey:e,xpToAdd:n}=t.options;(!e||!n)&&qt(t,"add_xp command needs a skill id and a value as parameters"),_r().addXp(e,n)}),Vle=new Je("get_level",[{name:"skillKey",type:"string"}],async t=>{const{skillKey:e}=t.options;e||qt(t,"get_level command needs a skill id as parameter");const n=_r().getSkill(e);return n||qt(t,`Skill ${e} not found`),n.level}),qle=new Je("get_xp",[{name:"xpKey",type:"string"}],async t=>{const{xpKey:e}=t.options;e||qt(t,"get_xp command needs a skill id as parameter");const n=_r().getSkillXp(e);return n||qt(t,`XP ${e} not found`),n}),Hle=new Je("roll",[{name:"id",type:"string"},{name:"skill",type:"string"},{name:"value",type:"number"},{name:"mode",type:"string",optional:!0}],async t=>{const{id:e,skill:n,value:r,mode:i}=t.options;let o=!1,a=!1;return i==="hideAfterRoll"&&(o=!0),i==="repeatable"&&(a=!0),o7({id:e,skill:n,value:r,hideAfterRoll:o,repeatable:a}).succeeded}),Ule=new Je("get_skill_check",[{name:"skillCheckId",type:"string"}],async t=>_r().getSkillCheck(t.options.skillCheckId)),Wle=new Je("skill_check_result",[{name:"skillCheckId",type:"string"}],async t=>_r().getSkillCheck(t.options.skillCheckId).succeeded),Kle=new Je("reset_roll",[{name:"id",type:"string"}],async t=>_r().resetSkillCheck(t.options.id)),Jle=new Je("add_stat",[{name:"statKey",type:"string"},{name:"amountToAdd",type:"number"}],async t=>{const{statKey:e,amountToAdd:n}=t.options;(!e||typeof n!="number")&&qt(t,"add_stat command needs a stat id and a value as parameters"),$a().addStat(e,n)}),Gle=new Je("set_stat",[{name:"statKey",type:"string"},{name:"value",type:"number"}],async t=>{const{statKey:e,value:n}=t.options;(!e||typeof n!="number")&&qt(t,"set_stat command needs a stat id and a value as parameters"),$a().setStat(e,n)}),Qle=new Je("get_stat_value",[{name:"statKey",type:"string"}],async t=>{const{statKey:e}=t.options;return e||qt(t,"get_stat_value command needs a stat id as parameter"),$a().getStatValue(e)}),Yle=Je.FromOptions({keyword:"jump",argTypes:"any",runner:async t=>{(t.args.length<1||typeof t.args[0]!="string")&&qt(t,"requires a label argument");const e=t.args[0],n=wn(),r={branchData:n.script[e],label:e,args:t.args.splice(1),currentIndex:0};if(!n.script[e]){Kt(`Trying to jump but label ${e} not found`);return}return n.jumpTarget=r,am}}),Xle=Je.FromOptions({keyword:"run",argTypes:"any",runner:async t=>{(t.args.length<1||typeof t.args[0]!="string")&&qt(t,"run command needs a label to argument run");const e=t.args[0];return await wn().runLabelFunction(e,...t.args.slice(1))}}),Zle=Je.FromOptions({keyword:"var",argTypes:[{name:"name",type:"string"},{name:"value",type:"any"}],runner:async t=>{const{name:e,value:n}=t.options;wn().addScopedVariable(e,n)}}),ece=Je.FromOptions({keyword:"return",argTypes:[{name:"value",type:"any"}],runner:async t=>{const{value:e}=t.options;return wn().setReturnValue(e),ab}}),tce=Je.FromOptions({keyword:"log",argTypes:"any",runner:async t=>{Rle(t,...t.args)}}),nce=Je.FromOptions({keyword:"menu_return",argTypes:[],runner:async t=>(Gt().menuReturn(),sm)}),rce=Je.FromOptions({keyword:"save",argTypes:[{name:"name",type:"string",optional:!0}],runner:async t=>{await Gt().manualSave({saveName:t.options.name})}}),ice=Je.FromOptions({keyword:"save_prompt",argTypes:[{name:"name",type:"string",optional:!0}],runner:async t=>{await Gt().manualSave({saveName:t.options.name,withPrompt:!0})}}),oce=Je.FromOptions({keyword:"new",argTypes:[{name:"name",type:"string"},{name:"rest",type:"rest",optional:!0}],runner:async t=>{const e=t.options.name;if(e==="Array")return console.log(t.args),[...t.args.slice(1)];if(e==="Object")return{}}}),ace=[{name:"mode",type:"string"},{name:"audio",type:"string"},{name:"channel",type:"number",optional:!0}],sce=new Je("play",ace,async t=>{const e=Gr(),{mode:n,audio:r,channel:i}=t.options,o=Ik(t,n);o&&e.playChannel(o,r,i!=null?i:0)}),uce=new Je("pause",[{name:"mode",type:"string"},{name:"channel",type:"number",optional:!0}],async t=>{const e=Gr(),{mode:n,channel:r}=t.options,i=Ik(t,n);i&&e.pauseChannel(i,r!=null?r:0)}),lce=new Je("stop",[{name:"mode",type:"string"},{name:"channel",type:"number",optional:!0}],async t=>{const e=Gr(),{mode:n,channel:r}=t.options,i=Ik(t,n);i&&e.stopChannel(i,r!=null?r:0)});function Ik(t,e){return cce(e)?e:(qt(t,`${e} is not a valid audio mode.`),!1)}function cce(t){return!!K8.includes(t)}const fce=new Je("set",[{name:"key",type:"string"},{name:"value",type:"any"}],async t=>{const e=ic();eR(e,`$${t.options.key}`,t.options.value)}),dce=new Je("add",[{name:"key",type:"string"},{name:"value",type:"any"}],async t=>{const e=ic();tR(e,`$${t.options.key}`,t.options.value)}),hce=new Je("set_screen",[{name:"screen",type:"string"},{name:"layer",type:"number",optional:!0},{name:"transitionName",type:"string",optional:!0},{name:"transitionDuration",type:"number",optional:!0},{name:"transitionDelay",type:"number",optional:!0}],async t=>{var r;const e=Uo();if(!XD(t.options.screen)){qt(t,`Screen ${t.options.screen} doesn't exist in the config`);return}return t.options.transitionName?e.transitionScreen(t.options.screen,{transition:t.options.transitionName,duration:t.options.transitionDuration,delay:t.options.transitionDelay},t.options.layer):e.setScreen(t.options.screen,(r=t.options.layer)!=null?r:0)}),pce=new Je("empty_layer",[{name:"layer",type:"number"},{name:"transitionName",type:"string",optional:!0},{name:"transitionDuration",type:"number",optional:!0},{name:"transitionDelay",type:"number",optional:!0}],async t=>{const e=Uo();return t.options.transitionName?e.emptyLayer(t.options.layer,{transition:t.options.transitionName,duration:t.options.transitionDuration,delay:t.options.transitionDelay}):e.emptyLayer(t.options.layer)}),mce=new Je("set_button",[{name:"buttonId",type:"string"},{name:"state",type:"any"}],async t=>{const{buttonId:e,state:n}=t.options,r=Uo();if(!Hs(e)){qt(t,`Button ${e} doesn't exist in the config`);return}r.changeButton(e,n)}),vce=Je.FromOptions({keyword:"talk",argTypes:[{name:"speaker",type:"string"},{name:"pose",type:"string"},{name:"text",type:"string"}],runner:async(t,e)=>{await cb({speaker:t.options.speaker,pose:t.options.pose,cssClass:"talk-command",text:`"${t.options.text}"`,choices:e,interactive:!0})},returnAfterPlayerAnswer:!0}),gce=Je.FromOptions({keyword:"think",argTypes:[{name:"speaker",type:"string"},{name:"pose",type:"string"},{name:"text",type:"string"}],runner:async(t,e)=>{await cb({speaker:t.options.speaker,pose:t.options.pose,cssClass:"think-command",text:`${t.options.text}`,choices:e,interactive:!0})},returnAfterPlayerAnswer:!0}),yce=()=>{const t=nd("text",[]);return(e,n)=>{const r=t(e,n);return n.command.staticOptions={text:n.code.substring(1,n.code.length-1)},r}},bce=Je.FromOptions({keyword:"text",argTypes:[],runner:async(t,e)=>{await cb({speaker:"game",cssClass:"text-command",text:t.staticOptions.text,choices:e,interactive:!0})},parser:yce(),returnAfterPlayerAnswer:!0}),kce=new Je("add_item",[{name:"id",type:"string"},{name:"amount",type:"number"}],async t=>{const{id:e,amount:n}=t.options;Nr().add({id:e,amount:n})}),wce=new Je("remove_item",[{name:"id",type:"string"},{name:"amount",type:"number"}],async t=>{const{id:e,amount:n}=t.options;Nr().remove({id:e,amount:n})}),_ce=new Je("has_item?",[{name:"id",type:"string"},{name:"amount",type:"number",optional:!0}],async t=>{const{id:e,amount:n}=t.options;return Nr().hasItem(e,n)}),xce=new Je("item_amount?",[{name:"id",type:"string"}],async t=>{const{id:e}=t.options;return Nr().getItemAmount(e)}),jce=new Je("enable_interaction",[{name:"tag",type:"string"}],async t=>{const e=t.options.tag;Nr().enableInteraction(e)}),Sce=new Je("disable_interaction",[{name:"tag",type:"string"}],async t=>{const e=t.options.tag;Nr().disableInteraction(e)}),Cce=new Je("start_quest",[{name:"questId",type:"string"}],async t=>{const e=t.options.questId;di().startQuest(e)}),$ce=new Je("start_objective",[{name:"questId",type:"string"},{name:"objectiveId",type:"string"}],async t=>{const{questId:e,objectiveId:n}=t.options;di().startObjective(e,n)}),Oce=new Je("complete_objective",[{name:"questId",type:"string"},{name:"objectiveId",type:"string"}],async t=>{const{questId:e,objectiveId:n}=t.options;di().completeObjective(e,n)}),Ece=new Je("complete_quest",[{name:"questId",type:"string"},{name:"ending",type:"string",optional:!0}],async t=>{const{questId:e,ending:n}=t.options;di().completeQuest(e,n)}),Tce=new Je("quest_completed?",[{name:"questId",type:"string"}],async t=>{const{questId:e}=t.options;return di().isQuestCompleted(e)}),Ace=new Je("objective_completed?",[{name:"questId",type:"string"},{name:"objectiveId",type:"string"}],async t=>{const{questId:e,objectiveId:n}=t.options;return di().isObjectiveCompleted(e,n)}),Mce=new Je("quest_started?",[{name:"questId",type:"string"}],async t=>{const{questId:e}=t.options;return di().isQuestStarted(e)}),Pce=new Je("objective_started?",[{name:"questId",type:"string"},{name:"objectiveId",type:"string"}],async t=>{const{questId:e,objectiveId:n}=t.options;return di().isObjectiveStarted(e,n)}),Nce=Je.FromOptions({keyword:"wait",argTypes:[{name:"duration",type:"number"}],runner:async t=>{await _o(t.options.duration)}}),Ice=new Je("notify",[{name:"text",type:"string"}],async t=>{const{text:e}=t.options;oo().addNotification(e)}),Lce=new Je("disable_notifications",[],async t=>{oo().disableNotifications()}),Dce=new Je("enable_notifications",[],async t=>{oo().enableNotifications()}),Rce=new Je("clear_dialog",[],async t=>{zn().clearDialog()}),Bce=new Je("if",[{name:"condition",type:"boolean"}],async t=>{const e=mee(t),n=wn();if(e){const r={branchData:{branch:e},currentIndex:0};return n.addAndRunBlock(r)}},(t,e)=>{let n=t.currentLine;nd("if",[{name:"condition",type:"string"}])(t,e);const{lines:i,currentLine:o,line:a}=t,s=e.command;let u;const l=vee(i,o+1);return l&&l.code==="else:"&&(u=t.processCommandsFunction(t.parserContext,l.branch,a),n++),s.staticOptions={success:t.processCommandsFunction(t.parserContext,a.branch,a),failure:u},n++,{newLine:n}}),zce=new Je("==","any",async t=>{t.args.length<2&&qt(t,"requires at least two arguments");let e=t.args[0],n=!0;for(const r of t.args)if(r!=e){n=!1;break}else e=r;return n}),Fce=new Je(">",[{name:"a",type:"any"},{name:"b",type:"any"}],async t=>{const{a:e,b:n}=t.options;return e>n}),Vce=new Je("<",[{name:"a",type:"any"},{name:"b",type:"any"}],async t=>{const{a:e,b:n}=t.options;return e<n}),qce=new Je(">=",[{name:"a",type:"any"},{name:"b",type:"any"}],async t=>{const{a:e,b:n}=t.options;return e>=n}),Hce=new Je("<=",[{name:"a",type:"any"},{name:"b",type:"any"}],async t=>{const{a:e,b:n}=t.options;return e<=n}),Uce=new Je("!=",[{name:"a",type:"any"},{name:"b",type:"any"}],async t=>{const{a:e,b:n}=t.options;return e!=n}),Wce=new Je("!",[{name:"a",type:"any"}],async t=>{const{a:e}=t.options;return!e}),Kce=new Je("&&","any",async t=>{const e=t.args;return t.args.length<2&&qt(t,"requires at least two arguments"),e.reduce((n,r)=>n&&r,!0)}),Jce=new Je("||","any",async t=>(t.args.length<2&&qt(t,"requires at least two arguments"),t.args.reduce((e,n)=>e||n,!1))),Gce=new Je("?",[{name:"a",type:"any"},{name:"b",type:"any"},{name:"c",type:"any"}],async t=>{const{a:e,b:n,c:r}=t.options;return e?n:r}),Qce=new Je("+","any",async t=>(t.args.length<2&&qt(t,"requires at least two arguments"),t.args.reduce((e,n)=>typeof n=="number"?e+n:(qt(t,"requires all arguments to be numbers"),e),0))),Yce=new Je("-","any",async t=>(t.args.length<2&&qt(t,"requires at least two arguments"),t.args.slice(1).reduce((e,n)=>typeof n=="number"?e-n:(qt(t,"requires all arguments to be numbers"),e),t.args[0]))),Xce=new Je("neg",[{name:"a",type:"number"}],async t=>(t.args.length!==1&&qt(t,"requires one argument"),-t.options.a)),Zce=new Je("abs",[{name:"a",type:"number"}],async t=>(t.args.length!==1&&qt(t,"requires one argument"),Math.abs(t.options.a))),efe=new Je("*","any",async t=>(t.args.length<2&&qt(t,"requires at least two arguments"),t.args.reduce((e,n)=>typeof n=="number"?e*n:(qt(t,"requires all arguments to be numbers"),e),1))),tfe=new Je("/","any",async t=>{t.args.length<2&&qt(t,"requires at least two arguments");const e=t.args[0]/t.args[1];return t.args.slice(2).reduce((n,r)=>typeof r=="number"?n/r:(qt(t,"requires all arguments to be numbers"),n),e)}),nfe=async t=>{const{prompt:e,choices:n}=t.staticOptions,r=[];for(const[,a]of n.entries()){const s=await Ob(a.prompt);r.push(s)}t.options.choiceResults=r;const i=r.map((a,s)=>{var f,c;let u=!0;return a.skillCheck&&(u=(c=(f=a.skillCheck)==null?void 0:f.allowed)!=null?c:!1),{choice:a.text,originalIndex:s,allowed:u}}).filter(a=>a.choice),o=await kL(e,i);return await afe(t,o)};function rfe(t,e){e.branch||t.parserContext.error(e.line,`Choice option doesn't have any branch to go to (${e.code} - ${e.line})`);let n,r;const i=e.branch;return e.expression[1]==="roll"?((!i[0].branch||!i[1].branch)&&t.parserContext.error(e.line,`Choice option with a skill roll needs success and failure branches (${e.code} - ${e.line})`),n={success:t.processCommandsFunction(t.parserContext,i[0].branch,e),failure:t.processCommandsFunction(t.parserContext,i[1].branch,e)}):r=t.processCommandsFunction(t.parserContext,i,e),{prompt:t.processCommandsFunction(t.parserContext,[e],e)[0],branch:r,skillBranches:n}}const ife=(t,e)=>{let n=t.currentLine;nd("choice",[]);const{line:r}=t,i=e.command;(!r.branch||r.branch.length<2)&&t.parserContext.error(r.line,"Choice menu needs to have at least one option");const o=r.branch[0];o||t.parserContext.error(t.line.line,"Choice prompt is missing ");const s=r.branch.slice(1).map((u,l)=>(u.branch||t.parserContext.error(u.line,`Choice option doesn't have any branch to go to (${u.code})`),u=sfe(t.parserContext,u),rfe(t,u)));return i.staticOptions={prompt:t.processCommandsFunction(t.parserContext,[o],r)[0],choices:s},n++,{newLine:n}},ofe=Je.FromOptions({keyword:"choice",argTypes:[],runner:nfe,parser:ife}),afe=async(t,e)=>{const n=e,r=wn(),{choices:i}=t.staticOptions,o=i[n],a=t.options.choiceResults[n];let s=a.text,u;if(a.skillCheck?(s=null,o7({skill:a.skillCheck.skillId,value:a.skillCheck.difficulty,id:a.skillCheck.skillCheckId,hideAfterRoll:a.skillCheck.hideAfterRoll,repeatable:a.skillCheck.repeatable}).succeeded?u=o.skillBranches.success:u=o.skillBranches.failure):u=o.branch,s){const l={speaker:"player",text:s,interactive:!1};zn().addDialog(l)}if(u){const l={currentIndex:0,branchData:{branch:u}};return await r.addAndRunBlock(l)}};function sfe(t,e){return{code:`choicePrompt ${e.code}`,indentation:e.indentation,line:e.line,branch:e.branch,expression:["choicePrompt",...e.expression]}}const ufe=new Je("choicePrompt","any",async t=>{const e=t.args;if(e[0]==="roll"){const n=e[1],r=e[2],i=e[3],o=e[4];let a=!1;e.length>5&&(a=e[5]);let s=!1,u=!1;a==="hideAfterRoll"&&(s=!0),a==="repeatable"&&(u=!0);const l=_r().getSkillCheck(n);if(l.hidden)return{text:null};const f=!l.happened||l.happened&&l.succeeded||u,{difficultyText:c}=fee({skill:r,skillCheckId:n,value:i});return{text:`${c} ${o}`,skillCheck:{allowed:f,skillId:r,skillCheckId:n,difficulty:i,hideAfterRoll:s,repeatable:u}}}else if(e.length>1&&e[1]==="if"){const n=e[0];let r=!0;return e.length>2&&(r=e[2]),r?{text:n}:{text:null}}else return{text:e[0]}}),sR=Je.FromOptions({keyword:"text_field",argTypes:[{name:"prompt",type:"string"}],returnAfterPlayerAnswer:!0,runner:async t=>{const e={speaker:"game",text:t.options.prompt,textField:!0,interactive:!0};zn().addDialog(e)}});sR.onPlayerAnswered=async(t,e)=>(typeof e!="string"&&qt(t,"The player's answer should be a string"),e);const lfe=Je.FromOptions({keyword:"text_field_prompt",argTypes:[{name:"prompt",type:"string"}],runner:async t=>{const e={speaker:"game",text:t.options.prompt,textField:!0,interactive:!0};zn().addDialog(e)}}),cfe=new Je("random",[{name:"a",type:"number"},{name:"b",type:"number"}],async t=>{const{a:e,b:n}=t.options;return typeof e!="number"||typeof n!="number"?(qt(t,"random command needs two numbers as parameters"),0):Math.floor(Math.random()*(n-e+1))+e}),ffe=new Je("random_float",[{name:"a",type:"number"},{name:"b",type:"number"}],async t=>{const{a:e,b:n}=t.options;return typeof e!="number"||typeof n!="number"?(qt(t,"random_float command needs two numbers as parameters"),0):Math.random()*(n-e)+e}),dfe=new Je("random_from_args",[],async t=>{const e=t.args;return!e||!e.length?(qt(t,"random_from_args command needs at least one argument"),0):e[Math.floor(Math.random()*e.length)]}),hfe=new Je("random_from_array",[{name:"a",type:"any"}],async t=>{const{a:e}=t.options;return Array.isArray(e)?e[Math.floor(Math.random()*e.length)]:(qt(t,"random_from_array command needs an array as parameter"),0)}),pfe=new Je("concat","any",async t=>(t.args.length<2&&qt(t,"requires at least two arguments"),t.args.reduce((e,n)=>typeof n=="string"?`${e}${n}`:(qt(t,"requires all arguments to be strings"),e),""))),mfe=new Je("join","any",async t=>{const e=t.args[0];return t.args.length<3&&qt(t,"requires at least 3 arguments"),t.args.slice(1).reduce((n,r)=>typeof r=="string"?`${n}${e}${r}`:(qt(t,"requires all arguments to be strings"),n),"")}),vfe=Je.FromOptions({keyword:"min",argTypes:[{name:"min",type:"number"},{name:"value",type:"number"}],runner:async t=>{const{min:e,value:n}=t.options;return n<e?n:e}}),gfe=Je.FromOptions({keyword:"max",argTypes:[{name:"max",type:"number"},{name:"value",type:"number"}],runner:async t=>{const{max:e,value:n}=t.options;return n>e?n:e}}),yfe=Je.FromOptions({keyword:"clamp",argTypes:[{name:"min",type:"number"},{name:"max",type:"number"},{name:"value",type:"number"}],runner:async t=>{const{min:e,max:n,value:r}=t.options;return r<e?e:r>n?n:r}}),bfe=Je.FromOptions({keyword:"floor",argTypes:[{name:"value",type:"number"}],runner:async t=>{const{value:e}=t.options;return Math.floor(e)}}),kfe=Je.FromOptions({keyword:"ceil",argTypes:[{name:"value",type:"number"}],runner:async t=>{const{value:e}=t.options;return Math.ceil(e)}}),wfe=Je.FromOptions({keyword:"round",argTypes:[{name:"value",type:"number"}],runner:async t=>{const{value:e}=t.options;return Math.round(e)}}),_fe=Je.FromOptions({keyword:"sqrt",argTypes:[{name:"value",type:"number"}],runner:async t=>{const{value:e}=t.options;return Math.sqrt(e)}}),xfe=Je.FromOptions({keyword:"^",argTypes:[{name:"base",type:"number"},{name:"exponent",type:"number"}],runner:async t=>{const{base:e,exponent:n}=t.options;return Math.pow(e,n)}}),jfe=new Je("create_sprite",[{name:"image",type:"string"},{name:"x",type:"number"},{name:"y",type:"number"},{name:"parent",type:"any",optional:!0}],async t=>{const e=io(),{x:n,y:r,image:i,parent:o}=t.options,a={x:n,y:r,image:i};return typeof o=="object"&&(a.parent=o),typeof o=="string"&&(a.parent=io().getObject(o)),e.createSprite(a)}),Sfe=new Je("create_object",[{name:"x",type:"number"},{name:"y",type:"number"},{name:"parent",type:"any",optional:!0}],async t=>{const e=io(),{x:n,y:r,parent:i}=t.options,o={x:n,y:r};return typeof i=="object"&&(o.parent=i),typeof i=="string"&&(o.parent=io().getObject(i)),e.createObject(o)}),Cfe=new Je("delete_sprite",[{name:"sprite",type:"any"}],async t=>io().destroyObject(t.options.sprite)),$fe=Je.FromOptions({keyword:"shuffle",argTypes:[{name:"array",type:"any"}],runner:async t=>{const e=t.options.array;if(!Array.isArray(e)){qt(t,"requires an array argument");return}return Rfe(e),e}}),Ofe=Je.FromOptions({keyword:"push",argTypes:[{name:"array",type:"any"},{name:"value",type:"any"}],runner:async t=>{const{array:e,value:n}=t.options;if(!Array.isArray(e)){qt(t,"requires an array argument");return}return e.push(n),e}}),Efe=Je.FromOptions({keyword:"pop",argTypes:[{name:"array",type:"any"}],runner:async t=>{const{array:e}=t.options;if(!Array.isArray(e)){qt(t,"requires an array argument");return}return e.pop()}}),Tfe=Je.FromOptions({keyword:"shift",argTypes:[{name:"array",type:"any"}],runner:async t=>{const{array:e}=t.options;if(!Array.isArray(e)){qt(t,"requires an array argument");return}return e.shift()}}),Afe=Je.FromOptions({keyword:"array_join",argTypes:[{name:"array",type:"any"},{name:"separator",type:"string",optional:!0}],runner:async t=>{const{array:e,separator:n}=t.options;if(!Array.isArray(e)){qt(t,"requires an array argument");return}if(typeof n<"u"&&typeof n!="string"){qt(t,"array join string separator must be a string");return}return e.join(n),e}}),Mfe=Je.FromOptions({keyword:"array_concat",argTypes:[{name:"array",type:"any"},{name:"rest",type:"rest",optional:!0}],runner:async t=>{const{array:e}=t.options,n=t.args;if(!Array.isArray(e)){qt(t,"requires an array argument");return}for(const r of n)if(!Array.isArray(r)){qt(t,"All concat arguments should be arrays");return}return e.concat(...n.slice(1))}}),Pfe=Je.FromOptions({keyword:"includes",argTypes:[{name:"array",type:"any"},{name:"searchElement",type:"string"}],runner:async t=>{const{array:e,searchElement:n}=t.options;return Array.isArray(e)||qt(t,"requires an array argument"),typeof n>"u"&&qt(t,"requires a search element argument"),e.includes(n)}}),Nfe=Je.FromOptions({keyword:"reverse",argTypes:[{name:"array",type:"any"}],runner:async t=>{const{array:e}=t.options;return Array.isArray(e)||qt(t,"requires an array argument"),e.reverse(),e}}),Ife=Je.FromOptions({keyword:"slice",argTypes:[{name:"array",type:"any"},{name:"start",type:"number"},{name:"end",type:"number",optional:!0}],runner:async t=>{const{array:e,start:n,end:r}=t.options;return Array.isArray(e)||qt(t,"requires an array argument"),typeof n!="number"&&qt(t,"requires a start index argument"),typeof r<"u"&&typeof r!="number"&&qt(t,"end index argument must be a number if present"),e.slice(n,r)}}),Lfe=Je.FromOptions({keyword:"splice",argTypes:[{name:"array",type:"any"},{name:"start",type:"number"},{name:"end",type:"number",optional:!0}],runner:async t=>{const{array:e,start:n,end:r}=t.options;return Array.isArray(e)||qt(t,"requires an array argument"),typeof n!="number"&&qt(t,"requires a start index argument"),typeof r<"u"&&typeof r!="number"&&qt(t,"end index argument must be a number if present"),e.splice(n,r)}}),Dfe=Je.FromOptions({keyword:"array_find_index",argTypes:[{name:"array",type:"any"},{name:"predicateLabel",type:"string"},{name:"rest",type:"rest",optional:!0}],runner:async t=>{const{array:e,predicateLabel:n}=t.options;Array.isArray(e)||qt(t,"requires an array argument");for(const[r,i]of e.entries())if(await wn().runLabelFunction(n,i,...t.args.slice(2))===!0)return r;return-1}});function Rfe(t){for(let e=t.length-1;e>0;e--){const n=Math.floor(Math.random()*(e+1));[t[e],t[n]]=[t[n],t[e]]}}const Bfe=Je.FromOptions({keyword:"load_data",argTypes:[{name:"url",type:"string"}],runner:async t=>{const{url:e}=t.options;return await vm(Tk(e))}}),zfe=Je.FromOptions({keyword:"time_now",argTypes:[],runner:async t=>Date.now()}),Ffe=Je.FromOptions({keyword:"total_playtime",argTypes:[],runner:async t=>Gt().totalPlayTime}),Vfe=Je.FromOptions({keyword:"session_playtime",argTypes:[],runner:async t=>Gt().sessionPlayTime}),qfe=Je.FromOptions({keyword:"to_days",argTypes:[{name:"time",type:"number"}],runner:async t=>Math.floor(t.options.time/864e5)}),Hfe=Je.FromOptions({keyword:"to_hours",argTypes:[{name:"time",type:"number"}],runner:async t=>Math.floor(t.options.time/36e5)}),Ufe=Je.FromOptions({keyword:"to_minutes",argTypes:[{name:"time",type:"number"}],runner:async t=>Math.floor(t.options.time/6e4)}),Wfe=Je.FromOptions({keyword:"to_seconds",argTypes:[{name:"time",type:"number"}],runner:async t=>Math.floor(t.options.time/1e3)});function Kfe(t){t.addCommand(ofe),t.addCommand(ufe),t.addCommand(Bce),t.addCommand(Jle),t.addCommand(Gle),t.addCommand(Qle),t.addCommand(Rce),t.addCommand(Ice),t.addCommand(Lce),t.addCommand(Dce),t.addCommand(uce),t.addCommand(sce),t.addCommand(lce),t.addCommand(mce),t.addCommand(hce),t.addCommand(pce),t.addCommand(jfe),t.addCommand(Sfe),t.addCommand(Cfe),t.addCommand(Nce),t.addCommand(zce),t.addCommand(Fce),t.addCommand(Vce),t.addCommand(qce),t.addCommand(Hce),t.addCommand(Uce),t.addCommand(Wce),t.addCommand(Kce),t.addCommand(Jce),t.addCommand(Gce),t.addCommand(Qce),t.addCommand(Yce),t.addCommand(efe),t.addCommand(tfe),t.addCommand(Xce),t.addCommand(Zce),t.addCommand(dce),t.addCommand(fce),t.addCommand(bce),t.addCommand(vce),t.addCommand(gce),t.addCommand(Yle),t.addCommand(Xle),t.addCommand(Zle),t.addCommand(ece),t.addCommand(tce),t.addCommand(nce),t.addCommand(rce),t.addCommand(ice),t.addCommand(oce),t.addCommand(Cce),t.addCommand($ce),t.addCommand(Oce),t.addCommand(Ece),t.addCommand(Mce),t.addCommand(Pce),t.addCommand(Tce),t.addCommand(Ace),t.addCommand(kce),t.addCommand(wce),t.addCommand(jce),t.addCommand(Sce),t.addCommand(_ce),t.addCommand(xce),t.addCommand(Ble),t.addCommand(zle),t.addCommand(Fle),t.addCommand(Hle),t.addCommand(Kle),t.addCommand(Ule),t.addCommand(Wle),t.addCommand(Vle),t.addCommand(qle),t.addCommand(sR),t.addCommand(lfe),t.addCommand(cfe),t.addCommand(ffe),t.addCommand(dfe),t.addCommand(hfe),t.addCommand(pfe),t.addCommand(mfe),t.addCommand(vfe),t.addCommand(gfe),t.addCommand(yfe),t.addCommand(bfe),t.addCommand(wfe),t.addCommand(kfe),t.addCommand(_fe),t.addCommand(xfe),t.addCommand($fe),t.addCommand(Ofe),t.addCommand(Efe),t.addCommand(Tfe),t.addCommand(Afe),t.addCommand(Mfe),t.addCommand(Pfe),t.addCommand(Nfe),t.addCommand(Ife),t.addCommand(Lfe),t.addCommand(Dfe),t.addCommand(Bfe),t.addCommand(zfe),t.addCommand(Ffe),t.addCommand(Vfe),t.addCommand(qfe),t.addCommand(Hfe),t.addCommand(Ufe),t.addCommand(Wfe)}const Jfe=b.defineComponent({data(){return{muted:!1,volumes:[],modeNames:{master:"Master volume:",music:"Music:",ambiant:"Ambiant:",sound:"Sound effects:"}}},mounted(){const t=Gr(),e=Ya.Howler.volume();this.volumes.push({mode:"master",volume:e}),t.modes.forEach((n,r)=>{this.volumes.push({mode:r,volume:t.modes.get(r).options.volume})})},methods:{changeVolume(t,e){const n=e.target;t==="master"?Gr().setMasterVolume(n.value):Gr().setModeVolume(t,n.value)},toggleMute(){this.muted?(Ya.Howler.mute(!1),this.muted=!1):(Ya.Howler.mute(!0),this.muted=!0)}}}),Mpe="",Gfe={class:"volume-controls"},Qfe=b.createElementVNode("h3",{class:"subtitle"},"Volume",-1),Yfe={for:"volume",class:"volume-label"},Xfe=["onUpdate:modelValue","onChange"];function Zfe(t,e,n,r,i,o){return b.openBlock(),b.createElementBlock("div",Gfe,[Qfe,(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.volumes,(a,s)=>(b.openBlock(),b.createElementBlock("div",{class:"volume-control",key:a.mode},[b.createElementVNode("label",Yfe,b.toDisplayString(t.modeNames[a.mode]),1),b.withDirectives(b.createElementVNode("input",{ref_for:!0,ref:"slider",class:"volume-slider",type:"range",id:"volume",name:"volume",min:"0",max:"1",step:"0.1","onUpdate:modelValue":u=>t.volumes[s].volume=u,onChange:u=>t.changeVolume(a.mode,u)},null,40,Xfe),[[b.vModelText,t.volumes[s].volume]])]))),128))])}const ede=Hi(Jfe,[["render",Zfe]]),tde=b.defineComponent({components:{VolumeControls:ede},data(){return{}},mounted(){},methods:{quit(){window.close()},mainMenu(){Gt().menuReturn(),this.closeMenu()},closeMenu(){this.$emit("close")},getPlayTimeString(){const t=Fu(Gt().playTime.start,Gt().playTime.previousPlaytime);return Ym(t/1e3)}}}),Ppe="",nde={class:"menu-content"};function rde(t,e,n,r,i,o){const a=b.resolveComponent("VolumeControls");return b.openBlock(),b.createElementBlock("div",nde,[b.createElementVNode("h3",null,"Play time: "+b.toDisplayString(t.getPlayTimeString()),1),b.createVNode(a),b.createElementVNode("button",{class:"button title quit-button",onClick:e[0]||(e[0]=(...s)=>t.mainMenu&&t.mainMenu(...s))}," Main Menu "),b.createElementVNode("button",{class:"button title quit-button",onClick:e[1]||(e[1]=(...s)=>t.quit&&t.quit(...s))},"Exit")])}const ide=Hi(tde,[["render",rde]]),ode={class:"inventory-section-items"},ade=["onClick"],sde={class:"item-title"},ude={class:"item-amount"},lde=b.defineComponent({__name:"inventory-section",props:{items:null,title:null,id:null},setup(t){const e=t;function n(i){return{backgroundImage:`url(${Ma(is(i).icon)})`}}function r(i){return is(i).name}return(i,o)=>(b.openBlock(),b.createElementBlock("div",{class:b.normalizeClass(["inventory-section",`section-${e.id}`])},[b.createElementVNode("h3",null,b.toDisplayString(t.title),1),b.createElementVNode("div",ode,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.items,a=>(b.openBlock(),b.createElementBlock("button",{onClick:()=>i.$emit("chosen",a.id),class:b.normalizeClass(["item-display",`item-${a.id}`]),style:b.normalizeStyle(n(a.id)),key:a.id},[b.createElementVNode("h3",sde,b.toDisplayString(r(a.id)),1),b.createElementVNode("h3",ude,b.toDisplayString(a.amount),1)],14,ade))),128))])],2))}}),Npe="",cde={class:"flex flex-row item-description-container"},fde={class:"flex item-left"},dde={class:"flex item-right"},hde=b.createElementVNode("hr",{class:"hr-solid"},null,-1),pde=b.defineComponent({__name:"item-details",props:{item:null},emits:["close","use"],setup(t,{emit:e}){const n=t,r=b.computed(()=>is(n.item.id)),i=b.computed(()=>({backgroundImage:`url(${Ma(r.value.icon)})`})),o=b.computed(()=>Nr().canUseItem(n.item));return(a,s)=>(b.openBlock(),b.createElementBlock("div",null,[b.createElementVNode("div",cde,[b.createElementVNode("div",fde,[b.createElementVNode("div",{class:"item-display",style:b.normalizeStyle(b.unref(i))},null,4)]),b.createElementVNode("div",dde,[b.createElementVNode("h2",null,b.toDisplayString(b.unref(r).name),1),hde,b.createElementVNode("h3",null,"Amount: "+b.toDisplayString(t.item.amount),1),b.createElementVNode("p",null,b.toDisplayString(b.unref(r).description),1),b.createElementVNode("button",{onClick:s[0]||(s[0]=u=>a.$emit("use")),class:b.normalizeClass(["button",b.unref(o)?"":"disabled"])}," Use ",2)])]),b.createElementVNode("button",{class:"button",onClick:s[1]||(s[1]=u=>a.$emit("close"))},b.toDisplayString("<--"))]))}}),Ipe="",mde=b.defineComponent({setup(){const t=Nr(),e=zn(),n=b.computed(()=>t.items),r=b.computed(()=>e.currentDialog.choices);return{items:n,currentlyChoosing:r}},emits:["close"],data(){return{chosenId:!1}},mounted(){},methods:{close(){this.$emit("close")},clickItem(t){this.chosenId=t},closeItem(){this.chosenId=!1},useItem(){if(this.chosenItem&&this.canUseChosenItem&&this.chosenItemConf){const t=this.chosenItemConf.onUse;this.close(),Eu("onItemUsed"),t.action==="jump"?wn().jumpToLabel(t.label):t.action==="run"?wn().runThenGoBackToPreviousDialog(t.label,!0):Kt(`Unknown action ${t.action}`)}}},computed:{itemsToDisplay(){return Object.values(this.items).filter(t=>t.amount>0?!0:!!is(t.id).showIfEmpty)},chosenItem(){return this.chosenId?this.items[this.chosenId]:null},canUseChosenItem(){return Nr().canUseItem(this.chosenItem)},chosenItemConf(){return this.chosenId?this.itemConf[this.chosenId]:null},itemConf(){return gt().items.items},sections(){const t=gt().items.categories,e=[];return this.itemsToDisplay.reduce((r,i)=>{var u;const o=(u=is(i.id).category)!=null?u:"default",a=t.find(l=>l.id===o);if(!a)return Kt(`Unknown category ${o}`),r;let s=r.find(l=>l.id===o);return s||(s={id:o,title:a.title,items:[]},r.push(s)),s.items.push(i),r},e)}},components:{InventorySection:lde,ItemDetails:pde}}),Lpe="",vde={key:0},gde={key:2},yde=[b.createElementVNode("h2",null,"The inventory is empty!",-1)];function bde(t,e,n,r,i,o){const a=b.resolveComponent("InventorySection"),s=b.resolveComponent("ItemDetails");return!t.chosenItem&&Object.keys(t.itemsToDisplay).length>0?(b.openBlock(),b.createElementBlock("div",vde,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.sections,u=>(b.openBlock(),b.createBlock(a,{key:u.id,items:u.items,title:u.title,id:u.id,onChosen:t.clickItem},null,8,["items","title","id","onChosen"]))),128))])):typeof t.chosenId=="string"?(b.openBlock(),b.createBlock(s,{key:1,item:t.items[t.chosenId],onUse:t.useItem,onClose:t.closeItem},null,8,["item","onUse","onClose"])):(b.openBlock(),b.createElementBlock("div",gde,yde))}const kde=Hi(mde,[["render",bde]]),wde={class:"quest-display"},_de={class:"quest-title"},xde={class:"quest-description"},jde={key:0,class:"quest-objectives-container list-disc"},Sde=b.defineComponent({__name:"QuestDetails",props:{quest:null},setup(t){const e=t,n=b.computed(()=>Bu(e.quest.id));function r(s){return Fm(e.quest.id,s)}const i=b.computed(()=>{switch(e.quest.state){case"hidden":return" Hidden";case"unlocked":return"";case"completed":return" (Completed)";default:return" Unknown"}}),o=b.computed(()=>e.quest.ending?e.quest.ending:n.value.description),a=b.computed(()=>Object.values(e.quest.objectives).filter(s=>s.state!=="hidden"));return(s,u)=>(b.openBlock(),b.createElementBlock("div",wde,[b.createElementVNode("div",{class:b.normalizeClass(["quest-header",t.quest.state==="completed"?"quest-completed":"quest-in-progress"])},[b.createElementVNode("h3",_de,b.toDisplayString(b.unref(n).title)+" "+b.toDisplayString(b.unref(i)),1)],2),b.createElementVNode("p",xde,b.toDisplayString(b.unref(o)),1),t.quest.state!=="completed"?(b.openBlock(),b.createElementBlock("ul",jde,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(b.unref(a),l=>(b.openBlock(),b.createElementBlock("li",{class:"quest-objective-display",key:l.id},[b.createElementVNode("p",{class:b.normalizeClass(["quest-objective-description",l.state==="completed"?"quest-objective-completed":"quest-objctive-in-progress"])},b.toDisplayString(r(l.id).description),3)]))),128))])):b.createCommentVNode("",!0)]))}}),Rpe="",Cde={class:"quest-list-title"},$de=b.defineComponent({__name:"QuestDisplay",props:{quest:null},setup(t){const e=t,n=b.computed(()=>Bu(e.quest.id));return(r,i)=>(b.openBlock(),b.createElementBlock("div",{class:b.normalizeClass(["quest-list-display",t.quest.state==="completed"?"quest-list-completed":"quest-list-in-progress"])},[b.createElementVNode("p",Cde,b.toDisplayString(b.unref(n).title),1)],2))}}),Bpe="",Ode={key:0},Ede={key:0},Tde={key:1},Ade=b.defineComponent({__name:"quests-list-section",props:{quests:null,sectionId:null,title:null,fallbackText:null},emits:["quest-selected"],setup(t,{emit:e}){const n=t,r=b.computed(()=>Zf().categories),i=b.computed(()=>{const o=[];return n.quests.reduce((s,u)=>{var d;const l=(d=Bu(u.id).category)!=null?d:"default",f=r.value.find(h=>h.id===l);if(!f)return Kt(`Quest category ${l} not found in config`),s;let c=s.find(h=>h.category.id===l);return c||(c={category:f,quests:[]},s.push(c)),c.quests.push(u),s},o)});return(o,a)=>(b.openBlock(),b.createElementBlock("div",{class:b.normalizeClass([`${t.sectionId}-quests-container`,"quests-section"])},[b.createElementVNode("h3",null,b.toDisplayString(t.title),1),t.quests.length>0?(b.openBlock(),b.createElementBlock("div",Ode,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(b.unref(i),s=>(b.openBlock(),b.createElementBlock("div",{class:b.normalizeClass([`${t.sectionId}-${s.category.id}-category`,"quests-category"]),key:s.category.id},[b.unref(r).length>1?(b.openBlock(),b.createElementBlock("h4",Ede,b.toDisplayString(s.category.title),1)):b.createCommentVNode("",!0),b.createElementVNode("div",{class:b.normalizeClass(`${t.sectionId}-${s.category.id}-quests`)},[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(s.quests,u=>(b.openBlock(),b.createBlock($de,{key:u.id,quest:u,onClick:l=>o.$emit("quest-selected",u)},null,8,["quest","onClick"]))),128))],2)],2))),128))])):(b.openBlock(),b.createElementBlock("div",Tde,[b.createElementVNode("p",null,b.toDisplayString(t.fallbackText),1)]))],2))}}),zpe="",Mde=b.defineComponent({setup(){const t=di(),e=b.computed(()=>t.quests),n=b.ref(null);return{quests:e,selectedQuest:n}},computed:{questsToDisplay(){return Object.values(this.quests).filter(t=>t.state!=="hidden")},activeQuests(){return this.questsToDisplay.filter(t=>t.state==="unlocked")},completedQuests(){return this.questsToDisplay.filter(t=>t.state==="completed")},questsUiClass(){return ao().layoutMode==="horizontal"?"quests-ui-horizontal":"quests-ui-vertical"}},mounted(){this.activeQuests.length>0?this.selectedQuest=this.activeQuests[0]:this.completedQuests.length>0&&(this.selectedQuest=this.completedQuests[0])},methods:{clickOnQuest(t){this.selectedQuest=t}},components:{QuestDetails:Sde,QuestsListSection:Ade}}),Fpe="",Pde={class:"quests-list-container"},Nde={class:"quest-details"};function Ide(t,e,n,r,i,o){const a=b.resolveComponent("QuestsListSection"),s=b.resolveComponent("QuestDetails");return b.openBlock(),b.createElementBlock("div",{class:b.normalizeClass(["quests-ui",t.questsUiClass])},[b.createElementVNode("div",Pde,[b.createVNode(a,{quests:t.activeQuests,sectionId:"active",title:"Active Quests",fallbackText:"No active quests",onQuestSelected:t.clickOnQuest},null,8,["quests","onQuestSelected"]),b.createVNode(a,{quests:t.completedQuests,sectionId:"completed",title:"Completed Quests",fallbackText:"No completed quests",onQuestSelected:t.clickOnQuest},null,8,["quests","onQuestSelected"])]),b.createElementVNode("div",Nde,[t.selectedQuest?(b.openBlock(),b.createBlock(s,{key:0,quest:t.selectedQuest},null,8,["quest"])):b.createCommentVNode("",!0)])],2)}const Lde=Hi(Mde,[["render",Ide]]),Dde=b.defineComponent({setup(){const t=_r();return{skills:b.computed(()=>t.skills)}},data(){return{chosenSkill:!1}},mounted(){},methods:{getSkillStyle(t){return{backgroundImage:`url(${Ma(this.skillConf[t].icon)})`}},getSkillName(t){return this.skillConf[t].name},clickSkill(t){this.chosenSkill=t},closeSkill(){this.chosenSkill=!1},xpBarWidth(t){return{width:`${Math.floor(t/this.xpPerLevel*100)}%`}}},computed:{skillsToDisplay(){const t={};for(const e in this.skills)this.skillConf[e].hidden&&this.skills[e].level<1||(t[e]=this.skills[e]);return t},skillConf(){return Co().skills},xpPerLevel(){return Co().skillOptions.xpPerLevel}}}),Vpe="",Rde={key:0,class:"skills-container"},Bde=["onClick"],zde={class:"skill-title"},Fde={class:"skill-xp-container"},Vde={class:"skill-xp-text"},qde={class:"skill-level"},Hde={key:1},Ude={class:"flex flex-row skill-description-container"},Wde={class:"flex skill-left"},Kde={class:"flex skill-right"},Jde=b.createElementVNode("hr",{class:"hr-solid"},null,-1);function Gde(t,e,n,r,i,o){return t.chosenSkill?typeof t.chosenSkill=="string"?(b.openBlock(),b.createElementBlock("div",Hde,[b.createElementVNode("div",Ude,[b.createElementVNode("div",Wde,[b.createElementVNode("div",{class:"skill-display",style:b.normalizeStyle(t.getSkillStyle(t.chosenSkill))},null,4)]),b.createElementVNode("div",Kde,[b.createElementVNode("h2",null,b.toDisplayString(t.getSkillName(t.chosenSkill)),1),Jde,b.createElementVNode("h3",null,"Level: "+b.toDisplayString(t.skills[t.chosenSkill].level),1),b.createElementVNode("p",null,b.toDisplayString(t.skillConf[t.chosenSkill].description),1)])]),b.createElementVNode("button",{class:"button",onClick:e[0]||(e[0]=(...a)=>t.closeSkill&&t.closeSkill(...a))},b.toDisplayString("<--"))])):b.createCommentVNode("",!0):(b.openBlock(),b.createElementBlock("div",Rde,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.skillsToDisplay,a=>(b.openBlock(),b.createElementBlock("button",{onClick:()=>t.clickSkill(a.id),class:"skill-display",style:b.normalizeStyle(t.getSkillStyle(a.id)),key:a.id},[b.createElementVNode("h3",zde,b.toDisplayString(t.getSkillName(a.id)),1),b.createElementVNode("div",Fde,[b.createElementVNode("div",{class:"skill-xp-bar",style:b.normalizeStyle(t.xpBarWidth(a.xp))},null,4),b.createElementVNode("h3",Vde,b.toDisplayString(a.xp)+" / "+b.toDisplayString(t.xpPerLevel)+" XP",1)]),b.createElementVNode("h3",qde,b.toDisplayString(a.level),1)],12,Bde))),128))]))}const Qde=Hi(Dde,[["render",Gde]]);function Yde(t){t.component("MainMenu",ide),t.component("InventoryUi",kde),t.component("QuestsUi",Lde),t.component("SkillsWindow",Qde),jo().menus={system:{label:"System",cssClass:"system-menu",id:"system",tabs:[{id:"system-tab",cssId:"system-tab",text:"System",component:"MainMenu"}],activeTab:0},menu:{label:"Menu",id:"menu",cssClass:"menu-menu",tabs:[{id:"skills",cssId:"skills-menu-button",text:"Skills",condition:()=>jo().showSkills,component:"SkillsWindow"},{id:"inventory",cssId:"inventory-menu-button",text:"Items",condition:()=>jo().showInventory,component:"InventoryUi"},{id:"quests",cssId:"quests-menu-button",text:"Quests",condition:()=>jo().showQuests,component:"QuestsUi"}],activeTab:0}}}function uR(t,e,n){const r=window.narrat.app;for(const i in e.tabs){const o=e.tabs[i].component;r.component(o,n[o])}jo().addMenu(t,e)}function Xde(t,e,n){window.narrat.app.component(e.component,n),jo().addMenuOption(t,e)}function Zde(){for(const t of Fn.plugins){if(t.customMenuButtons)for(const e of t.customMenuButtons)uR(e.config.id,e.config,e.components);if(t.customMenuTabs)for(const e of t.customMenuTabs)Xde(e.config.id,e.config,e.component)}}function ehe(t){t.directive("visible",{mounted(e,n){n.value?e.style.visibility="visible":e.style.visibility="hidden"},updated(e,n){n.value?e.style.visibility="visible":e.style.visibility="hidden"}})}class the extends Eb{setup(){const e=()=>{this.emit("preUpdate"),this.emit("update"),this.emit("postUpdate"),requestAnimationFrame(e)};e()}}const Lk=new the;Ze.Vec2=void 0,(t=>{function e(p,m){return{x:p!=null?p:0,y:m!=null?m:0}}t.create=e;function n(p){return Math.sqrt(p.x*p.x+p.y*p.y)}t.magnitude=n;function r(p){const m=n(p);return m===0?e(0,0):{x:p.x/m,y:p.y/m}}t.normalize=r;function i(p,m){return{x:p.x+m.x,y:p.y+m.y}}t.add=i;function o(p,m){return{x:p.x-m.x,y:p.y-m.y}}t.subtract=o;function a(p,m){return{x:p.x*m.x,y:p.y*m.y}}t.multiply=a;function s(p,m){return{x:p.x*m,y:p.y*m}}t.scale=s;function u(p,m){return{x:p.x/m.x,y:p.y/m.y}}t.divide=u;function l(p,m){return n(o(p,m))}t.distance=l;function f(p,m,g){return{x:p.x+(m.x-p.x)*g,y:p.y+(m.y-p.y)*g}}t.lerp=f;function c(p,m){const g=Math.cos(m),v=Math.sin(m);return{x:p.x*g-p.y*v,y:p.x*v+p.y*g}}t.rotate=c;function d(p,m){const g=o(m,p);return t.normalize({x:-g.y,y:g.x})}t.normal=d;function h(p,m){return p.x*m.x+p.y*m.y}t.dot=h})(Ze.Vec2||(Ze.Vec2={}));class nhe{constructor(){ei(this,"gameActions",{});ei(this,"keyboardState",{});ei(this,"actions",{})}startListening(){window.addEventListener("keydown",e=>{const n=this.getKeyState(e.key);this.keyboardState[e.key]={previous:n.current,current:!0}}),window.addEventListener("keyup",e=>{const n=this.getKeyState(e.key);this.keyboardState[e.key]={previous:n.current,current:!1}}),Lk.on("preUpdate",()=>{this.update()})}addAction(e){this.gameActions[e.id]=e,e.type==="button"?this.actions[e.id]={active:!1,previous:!1}:this.actions[e.id]={value:Ze.Vec2.create(0,0),previous:Ze.Vec2.create(0,0),fullState:{left:0,right:0,up:0,down:0},previousFullState:{left:0,right:0,up:0,down:0}}}getAnalog(e){return this.actions[e]||Kt(`Action ${e} does not exist`),this.actions[e]}getButton(e){return this.actions[e]||Kt(`Action ${e} does not exist`),this.actions[e]}getKeyState(e){return this.keyboardState[e]?this.keyboardState[e]:(this.keyboardState[e]={current:!1,previous:!1},this.keyboardState[e])}update(){Object.values(this.gameActions).forEach(e=>{if(e.type==="button")e.action==="press"&&(this.actions[e.id].previous=this.actions[e.id].active,e.keybinds.some(r=>{const i=this.getKeyState(r.keyboardKey);return i.current===!0&&i.previous===!1})?this.actions[e.id].active=!0:this.actions[e.id].active=!1);else if(e.type==="analog"){const n=this.actions[e.id];n.previous=n.value,n.previousFullState=n.fullState;let r=Ze.Vec2.create(0,0);e.keybinds.forEach(i=>{this.getKeyState(i.left).current&&(n.fullState.left=1,r.x-=1),this.getKeyState(i.right).current&&(n.fullState.right=1,r.x+=1),this.getKeyState(i.up).current&&(n.fullState.up=1,r.y-=1),this.getKeyState(i.down).current&&(n.fullState.down=1,r.y+=1)}),r=Ze.Vec2.normalize(r),n.value=r}})}}const lR=Jr("inputs",{state:()=>({inputs:new nhe}),actions:{setupInputs(){this.inputs.startListening()}}});let os;Fn.callHook("onPageLoaded");async function rhe(t){Lk.setup(),console.log("Starting narrat...");const e=Object.assign(pre(),t),n=RZ();os=b.createApp(Dle,{options:e}),ehe(os),os.use(n);const r=await ase(e);Tb().setConfig(r),lR().setupInputs(),Fn.pinia=n,Gt();const i={app:os,vm:Fn,jump:o=>{wn().jumpToLabel(o)}};return window.narrat=i,Yde(os),Zde(),aR().addButtonsFromPlugins(),Gt().setOptions(e),os.use(TR,{breakpoints:{s:0,m:800,l:1200}}),Kfe(Fn),Qm.setupDebugger(e.debug),console.log(`%c Narrat game engine v${GZ} - Built at ${QZ.toLocaleString()}`,"background: #222; color: #bada55"),Fn.callHook("onNarratSetup"),os.mount("#game-holder"),os}function ihe(t,e){os.component(t,e)}class ohe{constructor(){ei(this,"pluginId","narrat-plugin")}onPageLoaded(){}onNarratSetup(){}onAppMounted(){}onAssetsLoaded(){}onGameSetup(){}onGameStart(){}onGameMounted(){}onGameDismounted(){}}function ahe(t){Fn.addPlugin(t)}function she(t){Fn.addCommand(t)}Ze.CommandPlugin=Je,Ze.InputsListener=oR,Ze.LogManager=Gm,Ze.ModalWindow=Ws,Ze.NarratPlugin=ohe,Ze.addCommand=she,Ze.aspectRatioFit=xL,Ze.audioConfig=Aa,Ze.buttonsConfig=$k,Ze.charactersConfig=Ok,Ze.error=Kt,Ze.findVariable=n7,Ze.gameloop=Lk,Ze.generateParser=nd,Ze.getAssetUrl=Ma,Ze.getButtonConfig=Hs,Ze.getConfig=gt,Ze.getDataUrl=Tk,Ze.getFile=Sb,Ze.getImageUrl=td,Ze.getItemConfig=is,Ze.getObjectiveConfig=Fm,Ze.getQuestConfig=Bu,Ze.getScreenConfig=XD,Ze.getSkillConfig=Ek,Ze.getSplitConfigUrl=YD,Ze.getWindow=lb,Ze.inputEvents=$o,Ze.itemsConfig=Bm,Ze.loadDataFile=vm,Ze.logManager=Qm,Ze.logger=Zo,Ze.processText=es,Ze.questsConfig=Zf,Ze.randomId=ql,Ze.registerComponent=ihe,Ze.registerMenuButton=uR,Ze.registerPlugin=ahe,Ze.screensConfig=zm,Ze.skillsConfig=Co,Ze.startApp=rhe,Ze.timeout=_o,Ze.tooltipsConfig=ed,Ze.useAudio=Gr,Ze.useConfig=Tb,Ze.useDialogStore=zn,Ze.useHud=$a,Ze.useInputs=lR,Ze.useInventory=Nr,Ze.useMain=Gt,Ze.useMenu=jo,Ze.useNotifications=oo,Ze.useQuests=di,Ze.useRenderingStore=ao,Ze.useScreenObjects=io,Ze.useScreens=Uo,Ze.useSkills=_r,Ze.useTooltips=lm,Ze.useVM=wn,Ze.warning=Au,Object.defineProperties(Ze,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
225
+ Error: ${e}`),console.error("============================")}function Rle(t,...e){console.log(`[${t.fileName}:${t.line}] log: `,...e)}class Je{constructor(e,n,r,i){ei(this,"keyword");ei(this,"runner");ei(this,"argTypes");ei(this,"parser");ei(this,"onPlayerAnswered");ei(this,"returnAfterPlayerAnswer");this.keyword=e,this.runner=r,this.argTypes=n,i?this.parser=i:this.parser=nd(this.keyword,this.argTypes),this.returnAfterPlayerAnswer=!1}async run(e,n){let r=await this.runner(e,n);return this.returnAfterPlayerAnswer&&(r=await new Promise((i,o)=>{wn().waitForPlayerAnswer(e),e.finishCommand=i})),r}async processPlayerAnswer(e,n){let r=n;return this.onPlayerAnswered&&(r=await this.onPlayerAnswered(e,n)),this.returnAfterPlayerAnswer&&e.finishCommand&&e.finishCommand(r),r}static FromOptions(e){var r;const n=new Je(e.keyword,e.argTypes,e.runner,e.parser);return n.onPlayerAnswered=e.onPlayerAnswered,n.returnAfterPlayerAnswer=(r=e.returnAfterPlayerAnswer)!=null?r:!1,n}}function nd(t,e){let n=[];if(e!=="any"){n=[];const r=e.reduce((i,o)=>(o.optional&&i++,o.type==="rest"&&(i=1/0),i),0);r>=1?n.push(e.length-r):n.push(e.length),n.push(e.length)}return(r,i)=>{const o={newLine:r.currentLine+1},a=i.command.args;return e!=="any"&&(a.length<n[0]||a.length>n[1])?(console.log("Error details"),console.log(i.command),console.log(a),r.parserContext.error(r.line.line,`Command ${t}: Expected ${n.join(" to ")} arguments but got ${a.length}`),o):(i.command.commandType=t,e!=="any"&&i.command.args.forEach((s,u)=>{const l=e[u];!a7(s)&&!s7(s)&&(l.type==="any"||l.type==="rest"||typeof s===l.type||r.parserContext.error(r.line.line,`Command ${t}: Argument #${u+1} (${l.name}) should be a ${l.type}, but got type ${typeof s}: ${JSON.stringify(s)}`))}),{newLine:r.currentLine+1})}}const Ble=new Je("add_level",[{name:"skillKey",type:"string"},{name:"amount",type:"number"}],async t=>{let{skillKey:e,amount:n}=t.options;if((!e||!n)&&qt(t,"add_level command needs a skill id and a value as parameters"),!Number.isInteger(n)){const r=n;n=Math.round(n),console.warn(`add_level expects a level to be an integer. Auto Rounding ${r} to ${n}`)}_r().incrementSkill(e,n)}),zle=Je.FromOptions({keyword:"set_level",argTypes:[{name:"skill",type:"string"},{name:"level",type:"number"}],runner:async t=>{let{skill:e,level:n}=t.options;if((!e||!n)&&qt(t,"set_level command needs a skill id and a value as parameters"),!Number.isInteger(n)){const r=n;n=Math.round(n),console.warn(`set_level expects a level to be an integer. Auto Rounding ${r} to ${n}`)}_r().setSkillLevel(e,n)}}),Fle=new Je("add_xp",[{name:"xpKey",type:"string"},{name:"xpToAdd",type:"number"}],async t=>{const{xpKey:e,xpToAdd:n}=t.options;(!e||!n)&&qt(t,"add_xp command needs a skill id and a value as parameters"),_r().addXp(e,n)}),Vle=new Je("get_level",[{name:"skillKey",type:"string"}],async t=>{const{skillKey:e}=t.options;e||qt(t,"get_level command needs a skill id as parameter");const n=_r().getSkill(e);return n||qt(t,`Skill ${e} not found`),n.level}),qle=new Je("get_xp",[{name:"xpKey",type:"string"}],async t=>{const{xpKey:e}=t.options;e||qt(t,"get_xp command needs a skill id as parameter");const n=_r().getSkillXp(e);return n||qt(t,`XP ${e} not found`),n}),Hle=new Je("roll",[{name:"id",type:"string"},{name:"skill",type:"string"},{name:"value",type:"number"},{name:"mode",type:"string",optional:!0}],async t=>{const{id:e,skill:n,value:r,mode:i}=t.options;let o=!1,a=!1;return i==="hideAfterRoll"&&(o=!0),i==="repeatable"&&(a=!0),o7({id:e,skill:n,value:r,hideAfterRoll:o,repeatable:a}).succeeded}),Ule=new Je("get_skill_check",[{name:"skillCheckId",type:"string"}],async t=>_r().getSkillCheck(t.options.skillCheckId)),Wle=new Je("skill_check_result",[{name:"skillCheckId",type:"string"}],async t=>_r().getSkillCheck(t.options.skillCheckId).succeeded),Kle=new Je("reset_roll",[{name:"id",type:"string"}],async t=>_r().resetSkillCheck(t.options.id)),Jle=new Je("add_stat",[{name:"statKey",type:"string"},{name:"amountToAdd",type:"number"}],async t=>{const{statKey:e,amountToAdd:n}=t.options;(!e||typeof n!="number")&&qt(t,"add_stat command needs a stat id and a value as parameters"),$a().addStat(e,n)}),Gle=new Je("set_stat",[{name:"statKey",type:"string"},{name:"value",type:"number"}],async t=>{const{statKey:e,value:n}=t.options;(!e||typeof n!="number")&&qt(t,"set_stat command needs a stat id and a value as parameters"),$a().setStat(e,n)}),Qle=new Je("get_stat_value",[{name:"statKey",type:"string"}],async t=>{const{statKey:e}=t.options;return e||qt(t,"get_stat_value command needs a stat id as parameter"),$a().getStatValue(e)}),Yle=Je.FromOptions({keyword:"jump",argTypes:"any",runner:async t=>{(t.args.length<1||typeof t.args[0]!="string")&&qt(t,"requires a label argument");const e=t.args[0],n=wn(),r={branchData:n.script[e],label:e,args:t.args.splice(1),currentIndex:0};if(!n.script[e]){Kt(`Trying to jump but label ${e} not found`);return}return n.jumpTarget=r,am}}),Xle=Je.FromOptions({keyword:"run",argTypes:"any",runner:async t=>{(t.args.length<1||typeof t.args[0]!="string")&&qt(t,"run command needs a label to argument run");const e=t.args[0];return await wn().runLabelFunction(e,...t.args.slice(1))}}),Zle=Je.FromOptions({keyword:"var",argTypes:[{name:"name",type:"string"},{name:"value",type:"any"}],runner:async t=>{const{name:e,value:n}=t.options;wn().addScopedVariable(e,n)}}),ece=Je.FromOptions({keyword:"return",argTypes:[{name:"value",type:"any"}],runner:async t=>{const{value:e}=t.options;return wn().setReturnValue(e),ab}}),tce=Je.FromOptions({keyword:"log",argTypes:"any",runner:async t=>{Rle(t,...t.args)}}),nce=Je.FromOptions({keyword:"menu_return",argTypes:[],runner:async t=>(Gt().menuReturn(),sm)}),rce=Je.FromOptions({keyword:"save",argTypes:[{name:"name",type:"string",optional:!0}],runner:async t=>{await Gt().manualSave({saveName:t.options.name})}}),ice=Je.FromOptions({keyword:"save_prompt",argTypes:[{name:"name",type:"string",optional:!0}],runner:async t=>{await Gt().manualSave({saveName:t.options.name,withPrompt:!0})}}),oce=Je.FromOptions({keyword:"new",argTypes:[{name:"name",type:"string"},{name:"rest",type:"rest",optional:!0}],runner:async t=>{const e=t.options.name;if(e==="Array")return console.log(t.args),[...t.args.slice(1)];if(e==="Object")return{}}}),ace=[{name:"mode",type:"string"},{name:"audio",type:"string"},{name:"channel",type:"number",optional:!0}],sce=new Je("play",ace,async t=>{const e=Gr(),{mode:n,audio:r,channel:i}=t.options,o=Ik(t,n);o&&e.playChannel(o,r,i!=null?i:0)}),uce=new Je("pause",[{name:"mode",type:"string"},{name:"channel",type:"number",optional:!0}],async t=>{const e=Gr(),{mode:n,channel:r}=t.options,i=Ik(t,n);i&&e.pauseChannel(i,r!=null?r:0)}),lce=new Je("stop",[{name:"mode",type:"string"},{name:"channel",type:"number",optional:!0}],async t=>{const e=Gr(),{mode:n,channel:r}=t.options,i=Ik(t,n);i&&e.stopChannel(i,r!=null?r:0)});function Ik(t,e){return cce(e)?e:(qt(t,`${e} is not a valid audio mode.`),!1)}function cce(t){return!!K8.includes(t)}const fce=new Je("set",[{name:"key",type:"string"},{name:"value",type:"any"}],async t=>{const e=ic();eR(e,`$${t.options.key}`,t.options.value)}),dce=new Je("add",[{name:"key",type:"string"},{name:"value",type:"any"}],async t=>{const e=ic();tR(e,`$${t.options.key}`,t.options.value)}),hce=new Je("set_screen",[{name:"screen",type:"string"},{name:"layer",type:"number",optional:!0},{name:"transitionName",type:"string",optional:!0},{name:"transitionDuration",type:"number",optional:!0},{name:"transitionDelay",type:"number",optional:!0}],async t=>{var r;const e=Uo();if(!XD(t.options.screen)){qt(t,`Screen ${t.options.screen} doesn't exist in the config`);return}return t.options.transitionName?e.transitionScreen(t.options.screen,{transition:t.options.transitionName,duration:t.options.transitionDuration,delay:t.options.transitionDelay},t.options.layer):e.setScreen(t.options.screen,(r=t.options.layer)!=null?r:0)}),pce=new Je("empty_layer",[{name:"layer",type:"number"},{name:"transitionName",type:"string",optional:!0},{name:"transitionDuration",type:"number",optional:!0},{name:"transitionDelay",type:"number",optional:!0}],async t=>{const e=Uo();return t.options.transitionName?e.emptyLayer(t.options.layer,{transition:t.options.transitionName,duration:t.options.transitionDuration,delay:t.options.transitionDelay}):e.emptyLayer(t.options.layer)}),mce=new Je("set_button",[{name:"buttonId",type:"string"},{name:"state",type:"any"}],async t=>{const{buttonId:e,state:n}=t.options,r=Uo();if(!Hs(e)){qt(t,`Button ${e} doesn't exist in the config`);return}r.changeButton(e,n)}),vce=Je.FromOptions({keyword:"talk",argTypes:[{name:"speaker",type:"string"},{name:"pose",type:"string"},{name:"text",type:"string"}],runner:async(t,e)=>{await cb({speaker:t.options.speaker,pose:t.options.pose,cssClass:"talk-command",text:`"${t.options.text}"`,choices:e,interactive:!0})},returnAfterPlayerAnswer:!0}),gce=Je.FromOptions({keyword:"think",argTypes:[{name:"speaker",type:"string"},{name:"pose",type:"string"},{name:"text",type:"string"}],runner:async(t,e)=>{await cb({speaker:t.options.speaker,pose:t.options.pose,cssClass:"think-command",text:`${t.options.text}`,choices:e,interactive:!0})},returnAfterPlayerAnswer:!0}),yce=()=>{const t=nd("text",[]);return(e,n)=>{const r=t(e,n);return n.command.staticOptions={text:n.code.substring(1,n.code.length-1)},r}},bce=Je.FromOptions({keyword:"text",argTypes:[],runner:async(t,e)=>{await cb({speaker:"game",cssClass:"text-command",text:t.staticOptions.text,choices:e,interactive:!0})},parser:yce(),returnAfterPlayerAnswer:!0}),kce=new Je("add_item",[{name:"id",type:"string"},{name:"amount",type:"number"}],async t=>{const{id:e,amount:n}=t.options;Nr().add({id:e,amount:n})}),wce=new Je("remove_item",[{name:"id",type:"string"},{name:"amount",type:"number"}],async t=>{const{id:e,amount:n}=t.options;Nr().remove({id:e,amount:n})}),_ce=new Je("has_item?",[{name:"id",type:"string"},{name:"amount",type:"number",optional:!0}],async t=>{const{id:e,amount:n}=t.options;return Nr().hasItem(e,n)}),xce=new Je("item_amount?",[{name:"id",type:"string"}],async t=>{const{id:e}=t.options;return Nr().getItemAmount(e)}),jce=new Je("enable_interaction",[{name:"tag",type:"string"}],async t=>{const e=t.options.tag;Nr().enableInteraction(e)}),Sce=new Je("disable_interaction",[{name:"tag",type:"string"}],async t=>{const e=t.options.tag;Nr().disableInteraction(e)}),Cce=new Je("start_quest",[{name:"questId",type:"string"}],async t=>{const e=t.options.questId;di().startQuest(e)}),$ce=new Je("start_objective",[{name:"questId",type:"string"},{name:"objectiveId",type:"string"}],async t=>{const{questId:e,objectiveId:n}=t.options;di().startObjective(e,n)}),Oce=new Je("complete_objective",[{name:"questId",type:"string"},{name:"objectiveId",type:"string"}],async t=>{const{questId:e,objectiveId:n}=t.options;di().completeObjective(e,n)}),Ece=new Je("complete_quest",[{name:"questId",type:"string"},{name:"ending",type:"string",optional:!0}],async t=>{const{questId:e,ending:n}=t.options;di().completeQuest(e,n)}),Tce=new Je("quest_completed?",[{name:"questId",type:"string"}],async t=>{const{questId:e}=t.options;return di().isQuestCompleted(e)}),Ace=new Je("objective_completed?",[{name:"questId",type:"string"},{name:"objectiveId",type:"string"}],async t=>{const{questId:e,objectiveId:n}=t.options;return di().isObjectiveCompleted(e,n)}),Mce=new Je("quest_started?",[{name:"questId",type:"string"}],async t=>{const{questId:e}=t.options;return di().isQuestStarted(e)}),Pce=new Je("objective_started?",[{name:"questId",type:"string"},{name:"objectiveId",type:"string"}],async t=>{const{questId:e,objectiveId:n}=t.options;return di().isObjectiveStarted(e,n)}),Nce=Je.FromOptions({keyword:"wait",argTypes:[{name:"duration",type:"number"}],runner:async t=>{await _o(t.options.duration)}}),Ice=new Je("notify",[{name:"text",type:"string"}],async t=>{const{text:e}=t.options;oo().addNotification(e)}),Lce=new Je("disable_notifications",[],async t=>{oo().disableNotifications()}),Dce=new Je("enable_notifications",[],async t=>{oo().enableNotifications()}),Rce=new Je("clear_dialog",[],async t=>{zn().clearDialog()}),Bce=new Je("if",[{name:"condition",type:"boolean"}],async t=>{const e=mee(t),n=wn();if(e){const r={branchData:{branch:e},currentIndex:0};return n.addAndRunBlock(r)}},(t,e)=>{let n=t.currentLine;nd("if",[{name:"condition",type:"string"}])(t,e);const{lines:i,currentLine:o,line:a}=t,s=e.command;let u;const l=vee(i,o+1);return l&&l.code==="else:"&&(u=t.processCommandsFunction(t.parserContext,l.branch,a),n++),s.staticOptions={success:t.processCommandsFunction(t.parserContext,a.branch,a),failure:u},n++,{newLine:n}}),zce=new Je("==","any",async t=>{t.args.length<2&&qt(t,"requires at least two arguments");let e=t.args[0],n=!0;for(const r of t.args)if(r!=e){n=!1;break}else e=r;return n}),Fce=new Je(">",[{name:"a",type:"any"},{name:"b",type:"any"}],async t=>{const{a:e,b:n}=t.options;return e>n}),Vce=new Je("<",[{name:"a",type:"any"},{name:"b",type:"any"}],async t=>{const{a:e,b:n}=t.options;return e<n}),qce=new Je(">=",[{name:"a",type:"any"},{name:"b",type:"any"}],async t=>{const{a:e,b:n}=t.options;return e>=n}),Hce=new Je("<=",[{name:"a",type:"any"},{name:"b",type:"any"}],async t=>{const{a:e,b:n}=t.options;return e<=n}),Uce=new Je("!=",[{name:"a",type:"any"},{name:"b",type:"any"}],async t=>{const{a:e,b:n}=t.options;return e!=n}),Wce=new Je("!",[{name:"a",type:"any"}],async t=>{const{a:e}=t.options;return!e}),Kce=new Je("&&","any",async t=>{const e=t.args;return t.args.length<2&&qt(t,"requires at least two arguments"),e.reduce((n,r)=>n&&r,!0)}),Jce=new Je("||","any",async t=>(t.args.length<2&&qt(t,"requires at least two arguments"),t.args.reduce((e,n)=>e||n,!1))),Gce=new Je("?",[{name:"a",type:"any"},{name:"b",type:"any"},{name:"c",type:"any"}],async t=>{const{a:e,b:n,c:r}=t.options;return e?n:r}),Qce=new Je("+","any",async t=>(t.args.length<2&&qt(t,"requires at least two arguments"),t.args.reduce((e,n)=>typeof n=="number"?e+n:(qt(t,"requires all arguments to be numbers"),e),0))),Yce=new Je("-","any",async t=>(t.args.length<2&&qt(t,"requires at least two arguments"),t.args.slice(1).reduce((e,n)=>typeof n=="number"?e-n:(qt(t,"requires all arguments to be numbers"),e),t.args[0]))),Xce=new Je("neg",[{name:"a",type:"number"}],async t=>(t.args.length!==1&&qt(t,"requires one argument"),-t.options.a)),Zce=new Je("abs",[{name:"a",type:"number"}],async t=>(t.args.length!==1&&qt(t,"requires one argument"),Math.abs(t.options.a))),efe=new Je("*","any",async t=>(t.args.length<2&&qt(t,"requires at least two arguments"),t.args.reduce((e,n)=>typeof n=="number"?e*n:(qt(t,"requires all arguments to be numbers"),e),1))),tfe=new Je("/","any",async t=>{t.args.length<2&&qt(t,"requires at least two arguments");const e=t.args[0]/t.args[1];return t.args.slice(2).reduce((n,r)=>typeof r=="number"?n/r:(qt(t,"requires all arguments to be numbers"),n),e)}),nfe=async t=>{const{prompt:e,choices:n}=t.staticOptions,r=[];for(const[,a]of n.entries()){const s=await Ob(a.prompt);r.push(s)}t.options.choiceResults=r;const i=r.map((a,s)=>{var f,c;let u=!0;return a.skillCheck&&(u=(c=(f=a.skillCheck)==null?void 0:f.allowed)!=null?c:!1),{choice:a.text,originalIndex:s,allowed:u}}).filter(a=>a.choice),o=await kL(e,i);return await afe(t,o)};function rfe(t,e){e.branch||t.parserContext.error(e.line,`Choice option doesn't have any branch to go to (${e.code} - ${e.line})`);let n,r;const i=e.branch;return e.expression[1]==="roll"?((!i[0].branch||!i[1].branch)&&t.parserContext.error(e.line,`Choice option with a skill roll needs success and failure branches (${e.code} - ${e.line})`),n={success:t.processCommandsFunction(t.parserContext,i[0].branch,e),failure:t.processCommandsFunction(t.parserContext,i[1].branch,e)}):r=t.processCommandsFunction(t.parserContext,i,e),{prompt:t.processCommandsFunction(t.parserContext,[e],e)[0],branch:r,skillBranches:n}}const ife=(t,e)=>{let n=t.currentLine;nd("choice",[]);const{line:r}=t,i=e.command;(!r.branch||r.branch.length<2)&&t.parserContext.error(r.line,"Choice menu needs to have at least one option");const o=r.branch[0];o||t.parserContext.error(t.line.line,"Choice prompt is missing ");const s=r.branch.slice(1).map((u,l)=>(u.branch||t.parserContext.error(u.line,`Choice option doesn't have any branch to go to (${u.code})`),u=sfe(t.parserContext,u),rfe(t,u)));return i.staticOptions={prompt:t.processCommandsFunction(t.parserContext,[o],r)[0],choices:s},n++,{newLine:n}},ofe=Je.FromOptions({keyword:"choice",argTypes:[],runner:nfe,parser:ife}),afe=async(t,e)=>{const n=e,r=wn(),{choices:i}=t.staticOptions,o=i[n],a=t.options.choiceResults[n];let s=a.text,u;if(a.skillCheck?(s=null,o7({skill:a.skillCheck.skillId,value:a.skillCheck.difficulty,id:a.skillCheck.skillCheckId,hideAfterRoll:a.skillCheck.hideAfterRoll,repeatable:a.skillCheck.repeatable}).succeeded?u=o.skillBranches.success:u=o.skillBranches.failure):u=o.branch,s){const l={speaker:"player",text:s,interactive:!1};zn().addDialog(l)}if(u){const l={currentIndex:0,branchData:{branch:u}};return await r.addAndRunBlock(l)}};function sfe(t,e){return{code:`choicePrompt ${e.code}`,indentation:e.indentation,line:e.line,branch:e.branch,expression:["choicePrompt",...e.expression]}}const ufe=new Je("choicePrompt","any",async t=>{const e=t.args;if(e[0]==="roll"){const n=e[1],r=e[2],i=e[3],o=e[4];let a=!1;e.length>5&&(a=e[5]);let s=!1,u=!1;a==="hideAfterRoll"&&(s=!0),a==="repeatable"&&(u=!0);const l=_r().getSkillCheck(n);if(l.hidden)return{text:null};const f=!l.happened||l.happened&&l.succeeded||u,{difficultyText:c}=fee({skill:r,skillCheckId:n,value:i});return{text:`${c} ${o}`,skillCheck:{allowed:f,skillId:r,skillCheckId:n,difficulty:i,hideAfterRoll:s,repeatable:u}}}else if(e.length>1&&e[1]==="if"){const n=e[0];let r=!0;return e.length>2&&(r=e[2]),r?{text:n}:{text:null}}else return{text:e[0]}}),sR=Je.FromOptions({keyword:"text_field",argTypes:[{name:"prompt",type:"string"}],returnAfterPlayerAnswer:!0,runner:async t=>{const e={speaker:"game",text:t.options.prompt,textField:!0,interactive:!0};zn().addDialog(e)}});sR.onPlayerAnswered=async(t,e)=>(typeof e!="string"&&qt(t,"The player's answer should be a string"),e);const lfe=Je.FromOptions({keyword:"text_field_prompt",argTypes:[{name:"prompt",type:"string"}],runner:async t=>{const e={speaker:"game",text:t.options.prompt,textField:!0,interactive:!0};zn().addDialog(e)}}),cfe=new Je("random",[{name:"a",type:"number"},{name:"b",type:"number"}],async t=>{const{a:e,b:n}=t.options;return typeof e!="number"||typeof n!="number"?(qt(t,"random command needs two numbers as parameters"),0):Math.floor(Math.random()*(n-e+1))+e}),ffe=new Je("random_float",[{name:"a",type:"number"},{name:"b",type:"number"}],async t=>{const{a:e,b:n}=t.options;return typeof e!="number"||typeof n!="number"?(qt(t,"random_float command needs two numbers as parameters"),0):Math.random()*(n-e)+e}),dfe=new Je("random_from_args",[],async t=>{const e=t.args;return!e||!e.length?(qt(t,"random_from_args command needs at least one argument"),0):e[Math.floor(Math.random()*e.length)]}),hfe=new Je("random_from_array",[{name:"a",type:"any"}],async t=>{const{a:e}=t.options;return Array.isArray(e)?e[Math.floor(Math.random()*e.length)]:(qt(t,"random_from_array command needs an array as parameter"),0)}),pfe=new Je("concat","any",async t=>(t.args.length<2&&qt(t,"requires at least two arguments"),t.args.reduce((e,n)=>typeof n=="string"?`${e}${n}`:(qt(t,"requires all arguments to be strings"),e),""))),mfe=new Je("join","any",async t=>{const e=t.args[0];return t.args.length<3&&qt(t,"requires at least 3 arguments"),t.args.slice(1).reduce((n,r)=>typeof r=="string"?`${n}${e}${r}`:(qt(t,"requires all arguments to be strings"),n),"")}),vfe=Je.FromOptions({keyword:"min",argTypes:[{name:"min",type:"number"},{name:"value",type:"number"}],runner:async t=>{const{min:e,value:n}=t.options;return n<e?n:e}}),gfe=Je.FromOptions({keyword:"max",argTypes:[{name:"max",type:"number"},{name:"value",type:"number"}],runner:async t=>{const{max:e,value:n}=t.options;return n>e?n:e}}),yfe=Je.FromOptions({keyword:"clamp",argTypes:[{name:"min",type:"number"},{name:"max",type:"number"},{name:"value",type:"number"}],runner:async t=>{const{min:e,max:n,value:r}=t.options;return r<e?e:r>n?n:r}}),bfe=Je.FromOptions({keyword:"floor",argTypes:[{name:"value",type:"number"}],runner:async t=>{const{value:e}=t.options;return Math.floor(e)}}),kfe=Je.FromOptions({keyword:"ceil",argTypes:[{name:"value",type:"number"}],runner:async t=>{const{value:e}=t.options;return Math.ceil(e)}}),wfe=Je.FromOptions({keyword:"round",argTypes:[{name:"value",type:"number"}],runner:async t=>{const{value:e}=t.options;return Math.round(e)}}),_fe=Je.FromOptions({keyword:"sqrt",argTypes:[{name:"value",type:"number"}],runner:async t=>{const{value:e}=t.options;return Math.sqrt(e)}}),xfe=Je.FromOptions({keyword:"^",argTypes:[{name:"base",type:"number"},{name:"exponent",type:"number"}],runner:async t=>{const{base:e,exponent:n}=t.options;return Math.pow(e,n)}}),jfe=new Je("create_sprite",[{name:"image",type:"string"},{name:"x",type:"number"},{name:"y",type:"number"},{name:"parent",type:"any",optional:!0}],async t=>{const e=io(),{x:n,y:r,image:i,parent:o}=t.options,a={x:n,y:r,image:i};return typeof o=="object"&&(a.parent=o),typeof o=="string"&&(a.parent=io().getObject(o)),e.createSprite(a)}),Sfe=new Je("create_object",[{name:"x",type:"number"},{name:"y",type:"number"},{name:"parent",type:"any",optional:!0}],async t=>{const e=io(),{x:n,y:r,parent:i}=t.options,o={x:n,y:r};return typeof i=="object"&&(o.parent=i),typeof i=="string"&&(o.parent=io().getObject(i)),e.createObject(o)}),Cfe=new Je("delete_sprite",[{name:"sprite",type:"any"}],async t=>io().destroyObject(t.options.sprite)),$fe=Je.FromOptions({keyword:"shuffle",argTypes:[{name:"array",type:"any"}],runner:async t=>{const e=t.options.array;if(!Array.isArray(e)){qt(t,"requires an array argument");return}return Rfe(e),e}}),Ofe=Je.FromOptions({keyword:"push",argTypes:[{name:"array",type:"any"},{name:"value",type:"any"}],runner:async t=>{const{array:e,value:n}=t.options;if(!Array.isArray(e)){qt(t,"requires an array argument");return}return e.push(n),e}}),Efe=Je.FromOptions({keyword:"pop",argTypes:[{name:"array",type:"any"}],runner:async t=>{const{array:e}=t.options;if(!Array.isArray(e)){qt(t,"requires an array argument");return}return e.pop()}}),Tfe=Je.FromOptions({keyword:"shift",argTypes:[{name:"array",type:"any"}],runner:async t=>{const{array:e}=t.options;if(!Array.isArray(e)){qt(t,"requires an array argument");return}return e.shift()}}),Afe=Je.FromOptions({keyword:"array_join",argTypes:[{name:"array",type:"any"},{name:"separator",type:"string",optional:!0}],runner:async t=>{const{array:e,separator:n}=t.options;if(!Array.isArray(e)){qt(t,"requires an array argument");return}if(typeof n<"u"&&typeof n!="string"){qt(t,"array join string separator must be a string");return}return e.join(n),e}}),Mfe=Je.FromOptions({keyword:"array_concat",argTypes:[{name:"array",type:"any"},{name:"rest",type:"rest",optional:!0}],runner:async t=>{const{array:e}=t.options,n=t.args;if(!Array.isArray(e)){qt(t,"requires an array argument");return}for(const r of n)if(!Array.isArray(r)){qt(t,"All concat arguments should be arrays");return}return e.concat(...n.slice(1))}}),Pfe=Je.FromOptions({keyword:"includes",argTypes:[{name:"array",type:"any"},{name:"searchElement",type:"string"}],runner:async t=>{const{array:e,searchElement:n}=t.options;return Array.isArray(e)||qt(t,"requires an array argument"),typeof n>"u"&&qt(t,"requires a search element argument"),e.includes(n)}}),Nfe=Je.FromOptions({keyword:"reverse",argTypes:[{name:"array",type:"any"}],runner:async t=>{const{array:e}=t.options;return Array.isArray(e)||qt(t,"requires an array argument"),e.reverse(),e}}),Ife=Je.FromOptions({keyword:"slice",argTypes:[{name:"array",type:"any"},{name:"start",type:"number"},{name:"end",type:"number",optional:!0}],runner:async t=>{const{array:e,start:n,end:r}=t.options;return Array.isArray(e)||qt(t,"requires an array argument"),typeof n!="number"&&qt(t,"requires a start index argument"),typeof r<"u"&&typeof r!="number"&&qt(t,"end index argument must be a number if present"),e.slice(n,r)}}),Lfe=Je.FromOptions({keyword:"splice",argTypes:[{name:"array",type:"any"},{name:"start",type:"number"},{name:"end",type:"number",optional:!0}],runner:async t=>{const{array:e,start:n,end:r}=t.options;return Array.isArray(e)||qt(t,"requires an array argument"),typeof n!="number"&&qt(t,"requires a start index argument"),typeof r<"u"&&typeof r!="number"&&qt(t,"end index argument must be a number if present"),e.splice(n,r)}}),Dfe=Je.FromOptions({keyword:"array_find_index",argTypes:[{name:"array",type:"any"},{name:"predicateLabel",type:"string"},{name:"rest",type:"rest",optional:!0}],runner:async t=>{const{array:e,predicateLabel:n}=t.options;Array.isArray(e)||qt(t,"requires an array argument");for(const[r,i]of e.entries())if(await wn().runLabelFunction(n,i,...t.args.slice(2))===!0)return r;return-1}});function Rfe(t){for(let e=t.length-1;e>0;e--){const n=Math.floor(Math.random()*(e+1));[t[e],t[n]]=[t[n],t[e]]}}const Bfe=Je.FromOptions({keyword:"load_data",argTypes:[{name:"url",type:"string"}],runner:async t=>{const{url:e}=t.options;return await vm(Tk(e))}}),zfe=Je.FromOptions({keyword:"time_now",argTypes:[],runner:async t=>Date.now()}),Ffe=Je.FromOptions({keyword:"total_playtime",argTypes:[],runner:async t=>Gt().totalPlayTime}),Vfe=Je.FromOptions({keyword:"session_playtime",argTypes:[],runner:async t=>Gt().sessionPlayTime}),qfe=Je.FromOptions({keyword:"to_days",argTypes:[{name:"time",type:"number"}],runner:async t=>Math.floor(t.options.time/864e5)}),Hfe=Je.FromOptions({keyword:"to_hours",argTypes:[{name:"time",type:"number"}],runner:async t=>Math.floor(t.options.time/36e5)}),Ufe=Je.FromOptions({keyword:"to_minutes",argTypes:[{name:"time",type:"number"}],runner:async t=>Math.floor(t.options.time/6e4)}),Wfe=Je.FromOptions({keyword:"to_seconds",argTypes:[{name:"time",type:"number"}],runner:async t=>Math.floor(t.options.time/1e3)});function Kfe(t){t.addCommand(ofe),t.addCommand(ufe),t.addCommand(Bce),t.addCommand(Jle),t.addCommand(Gle),t.addCommand(Qle),t.addCommand(Rce),t.addCommand(Ice),t.addCommand(Lce),t.addCommand(Dce),t.addCommand(uce),t.addCommand(sce),t.addCommand(lce),t.addCommand(mce),t.addCommand(hce),t.addCommand(pce),t.addCommand(jfe),t.addCommand(Sfe),t.addCommand(Cfe),t.addCommand(Nce),t.addCommand(zce),t.addCommand(Fce),t.addCommand(Vce),t.addCommand(qce),t.addCommand(Hce),t.addCommand(Uce),t.addCommand(Wce),t.addCommand(Kce),t.addCommand(Jce),t.addCommand(Gce),t.addCommand(Qce),t.addCommand(Yce),t.addCommand(efe),t.addCommand(tfe),t.addCommand(Xce),t.addCommand(Zce),t.addCommand(dce),t.addCommand(fce),t.addCommand(bce),t.addCommand(vce),t.addCommand(gce),t.addCommand(Yle),t.addCommand(Xle),t.addCommand(Zle),t.addCommand(ece),t.addCommand(tce),t.addCommand(nce),t.addCommand(rce),t.addCommand(ice),t.addCommand(oce),t.addCommand(Cce),t.addCommand($ce),t.addCommand(Oce),t.addCommand(Ece),t.addCommand(Mce),t.addCommand(Pce),t.addCommand(Tce),t.addCommand(Ace),t.addCommand(kce),t.addCommand(wce),t.addCommand(jce),t.addCommand(Sce),t.addCommand(_ce),t.addCommand(xce),t.addCommand(Ble),t.addCommand(zle),t.addCommand(Fle),t.addCommand(Hle),t.addCommand(Kle),t.addCommand(Ule),t.addCommand(Wle),t.addCommand(Vle),t.addCommand(qle),t.addCommand(sR),t.addCommand(lfe),t.addCommand(cfe),t.addCommand(ffe),t.addCommand(dfe),t.addCommand(hfe),t.addCommand(pfe),t.addCommand(mfe),t.addCommand(vfe),t.addCommand(gfe),t.addCommand(yfe),t.addCommand(bfe),t.addCommand(wfe),t.addCommand(kfe),t.addCommand(_fe),t.addCommand(xfe),t.addCommand($fe),t.addCommand(Ofe),t.addCommand(Efe),t.addCommand(Tfe),t.addCommand(Afe),t.addCommand(Mfe),t.addCommand(Pfe),t.addCommand(Nfe),t.addCommand(Ife),t.addCommand(Lfe),t.addCommand(Dfe),t.addCommand(Bfe),t.addCommand(zfe),t.addCommand(Ffe),t.addCommand(Vfe),t.addCommand(qfe),t.addCommand(Hfe),t.addCommand(Ufe),t.addCommand(Wfe)}const Jfe=b.defineComponent({data(){return{muted:!1,volumes:[],modeNames:{master:"Master volume:",music:"Music:",ambiant:"Ambiant:",sound:"Sound effects:"}}},mounted(){const t=Gr(),e=Ya.Howler.volume();this.volumes.push({mode:"master",volume:e}),t.modes.forEach((n,r)=>{this.volumes.push({mode:r,volume:t.modes.get(r).options.volume})})},methods:{changeVolume(t,e){const n=e.target;t==="master"?Gr().setMasterVolume(n.value):Gr().setModeVolume(t,n.value)},toggleMute(){this.muted?(Ya.Howler.mute(!1),this.muted=!1):(Ya.Howler.mute(!0),this.muted=!0)}}}),Ppe="",Gfe={class:"volume-controls"},Qfe=b.createElementVNode("h3",{class:"subtitle"},"Volume",-1),Yfe={for:"volume",class:"volume-label"},Xfe=["onUpdate:modelValue","onChange"];function Zfe(t,e,n,r,i,o){return b.openBlock(),b.createElementBlock("div",Gfe,[Qfe,(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.volumes,(a,s)=>(b.openBlock(),b.createElementBlock("div",{class:"volume-control",key:a.mode},[b.createElementVNode("label",Yfe,b.toDisplayString(t.modeNames[a.mode]),1),b.withDirectives(b.createElementVNode("input",{ref_for:!0,ref:"slider",class:"volume-slider",type:"range",id:"volume",name:"volume",min:"0",max:"1",step:"0.1","onUpdate:modelValue":u=>t.volumes[s].volume=u,onChange:u=>t.changeVolume(a.mode,u)},null,40,Xfe),[[b.vModelText,t.volumes[s].volume]])]))),128))])}const ede=Hi(Jfe,[["render",Zfe]]),tde=b.defineComponent({components:{VolumeControls:ede},data(){return{}},mounted(){},methods:{quit(){window.close()},mainMenu(){Gt().menuReturn(),this.closeMenu()},closeMenu(){this.$emit("close")},getPlayTimeString(){const t=Fu(Gt().playTime.start,Gt().playTime.previousPlaytime);return Ym(t/1e3)}}}),Npe="",nde={class:"menu-content"};function rde(t,e,n,r,i,o){const a=b.resolveComponent("VolumeControls");return b.openBlock(),b.createElementBlock("div",nde,[b.createElementVNode("h3",null,"Play time: "+b.toDisplayString(t.getPlayTimeString()),1),b.createVNode(a),b.createElementVNode("button",{class:"button title quit-button",onClick:e[0]||(e[0]=(...s)=>t.mainMenu&&t.mainMenu(...s))}," Main Menu "),b.createElementVNode("button",{class:"button title quit-button",onClick:e[1]||(e[1]=(...s)=>t.quit&&t.quit(...s))},"Exit")])}const ide=Hi(tde,[["render",rde]]),ode={class:"inventory-section-items"},ade=["onClick"],sde={class:"item-title"},ude={class:"item-amount"},lde=b.defineComponent({__name:"inventory-section",props:{items:null,title:null,id:null},setup(t){const e=t;function n(i){return{backgroundImage:`url(${Ma(is(i).icon)})`}}function r(i){return is(i).name}return(i,o)=>(b.openBlock(),b.createElementBlock("div",{class:b.normalizeClass(["inventory-section",`section-${e.id}`])},[b.createElementVNode("h3",null,b.toDisplayString(t.title),1),b.createElementVNode("div",ode,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.items,a=>(b.openBlock(),b.createElementBlock("button",{onClick:()=>i.$emit("chosen",a.id),class:b.normalizeClass(["item-display",`item-${a.id}`]),style:b.normalizeStyle(n(a.id)),key:a.id},[b.createElementVNode("h3",sde,b.toDisplayString(r(a.id)),1),b.createElementVNode("h3",ude,b.toDisplayString(a.amount),1)],14,ade))),128))])],2))}}),Ipe="",cde={class:"flex flex-row item-description-container"},fde={class:"flex item-left"},dde={class:"flex item-right"},hde=b.createElementVNode("hr",{class:"hr-solid"},null,-1),pde=b.defineComponent({__name:"item-details",props:{item:null},emits:["close","use"],setup(t,{emit:e}){const n=t,r=b.computed(()=>is(n.item.id)),i=b.computed(()=>({backgroundImage:`url(${Ma(r.value.icon)})`})),o=b.computed(()=>Nr().canUseItem(n.item));return(a,s)=>(b.openBlock(),b.createElementBlock("div",null,[b.createElementVNode("div",cde,[b.createElementVNode("div",fde,[b.createElementVNode("div",{class:"item-display",style:b.normalizeStyle(b.unref(i))},null,4)]),b.createElementVNode("div",dde,[b.createElementVNode("h2",null,b.toDisplayString(b.unref(r).name),1),hde,b.createElementVNode("h3",null,"Amount: "+b.toDisplayString(t.item.amount),1),b.createElementVNode("p",null,b.toDisplayString(b.unref(r).description),1),b.createElementVNode("button",{onClick:s[0]||(s[0]=u=>a.$emit("use")),class:b.normalizeClass(["button",b.unref(o)?"":"disabled"])}," Use ",2)])]),b.createElementVNode("button",{class:"button",onClick:s[1]||(s[1]=u=>a.$emit("close"))},b.toDisplayString("<--"))]))}}),Lpe="",mde=b.defineComponent({setup(){const t=Nr(),e=zn(),n=b.computed(()=>t.items),r=b.computed(()=>e.currentDialog.choices);return{items:n,currentlyChoosing:r}},emits:["close"],data(){return{chosenId:!1}},mounted(){},methods:{close(){this.$emit("close")},clickItem(t){this.chosenId=t},closeItem(){this.chosenId=!1},useItem(){if(this.chosenItem&&this.canUseChosenItem&&this.chosenItemConf){const t=this.chosenItemConf.onUse;this.close(),Eu("onItemUsed"),t.action==="jump"?wn().jumpToLabel(t.label):t.action==="run"?wn().runThenGoBackToPreviousDialog(t.label,!0):Kt(`Unknown action ${t.action}`)}}},computed:{itemsToDisplay(){return Object.values(this.items).filter(t=>t.amount>0?!0:!!is(t.id).showIfEmpty)},chosenItem(){return this.chosenId?this.items[this.chosenId]:null},canUseChosenItem(){return Nr().canUseItem(this.chosenItem)},chosenItemConf(){return this.chosenId?this.itemConf[this.chosenId]:null},itemConf(){return gt().items.items},sections(){const t=gt().items.categories,e=[];return this.itemsToDisplay.reduce((r,i)=>{var u;const o=(u=is(i.id).category)!=null?u:"default",a=t.find(l=>l.id===o);if(!a)return Kt(`Unknown category ${o}`),r;let s=r.find(l=>l.id===o);return s||(s={id:o,title:a.title,items:[]},r.push(s)),s.items.push(i),r},e)}},components:{InventorySection:lde,ItemDetails:pde}}),Dpe="",vde={key:0},gde={key:2},yde=[b.createElementVNode("h2",null,"The inventory is empty!",-1)];function bde(t,e,n,r,i,o){const a=b.resolveComponent("InventorySection"),s=b.resolveComponent("ItemDetails");return!t.chosenItem&&Object.keys(t.itemsToDisplay).length>0?(b.openBlock(),b.createElementBlock("div",vde,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.sections,u=>(b.openBlock(),b.createBlock(a,{key:u.id,items:u.items,title:u.title,id:u.id,onChosen:t.clickItem},null,8,["items","title","id","onChosen"]))),128))])):typeof t.chosenId=="string"?(b.openBlock(),b.createBlock(s,{key:1,item:t.items[t.chosenId],onUse:t.useItem,onClose:t.closeItem},null,8,["item","onUse","onClose"])):(b.openBlock(),b.createElementBlock("div",gde,yde))}const kde=Hi(mde,[["render",bde]]),wde={class:"quest-display"},_de={class:"quest-title"},xde={class:"quest-description"},jde={key:0,class:"quest-objectives-container list-disc"},Sde=b.defineComponent({__name:"QuestDetails",props:{quest:null},setup(t){const e=t,n=b.computed(()=>Bu(e.quest.id));function r(s){return Fm(e.quest.id,s)}const i=b.computed(()=>{switch(e.quest.state){case"hidden":return" Hidden";case"unlocked":return"";case"completed":return" (Completed)";default:return" Unknown"}}),o=b.computed(()=>e.quest.ending?e.quest.ending:n.value.description),a=b.computed(()=>Object.values(e.quest.objectives).filter(s=>s.state!=="hidden"));return(s,u)=>(b.openBlock(),b.createElementBlock("div",wde,[b.createElementVNode("div",{class:b.normalizeClass(["quest-header",t.quest.state==="completed"?"quest-completed":"quest-in-progress"])},[b.createElementVNode("h3",_de,b.toDisplayString(b.unref(n).title)+" "+b.toDisplayString(b.unref(i)),1)],2),b.createElementVNode("p",xde,b.toDisplayString(b.unref(o)),1),t.quest.state!=="completed"?(b.openBlock(),b.createElementBlock("ul",jde,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(b.unref(a),l=>(b.openBlock(),b.createElementBlock("li",{class:"quest-objective-display",key:l.id},[b.createElementVNode("p",{class:b.normalizeClass(["quest-objective-description",l.state==="completed"?"quest-objective-completed":"quest-objctive-in-progress"])},b.toDisplayString(r(l.id).description),3)]))),128))])):b.createCommentVNode("",!0)]))}}),Bpe="",Cde={class:"quest-list-title"},$de=b.defineComponent({__name:"QuestDisplay",props:{quest:null},setup(t){const e=t,n=b.computed(()=>Bu(e.quest.id));return(r,i)=>(b.openBlock(),b.createElementBlock("div",{class:b.normalizeClass(["quest-list-display",t.quest.state==="completed"?"quest-list-completed":"quest-list-in-progress"])},[b.createElementVNode("p",Cde,b.toDisplayString(b.unref(n).title),1)],2))}}),zpe="",Ode={key:0},Ede={key:0},Tde={key:1},Ade=b.defineComponent({__name:"quests-list-section",props:{quests:null,sectionId:null,title:null,fallbackText:null},emits:["quest-selected"],setup(t,{emit:e}){const n=t,r=b.computed(()=>Zf().categories),i=b.computed(()=>{const o=[];return n.quests.reduce((s,u)=>{var d;const l=(d=Bu(u.id).category)!=null?d:"default",f=r.value.find(h=>h.id===l);if(!f)return Kt(`Quest category ${l} not found in config`),s;let c=s.find(h=>h.category.id===l);return c||(c={category:f,quests:[]},s.push(c)),c.quests.push(u),s},o)});return(o,a)=>(b.openBlock(),b.createElementBlock("div",{class:b.normalizeClass([`${t.sectionId}-quests-container`,"quests-section"])},[b.createElementVNode("h3",null,b.toDisplayString(t.title),1),t.quests.length>0?(b.openBlock(),b.createElementBlock("div",Ode,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(b.unref(i),s=>(b.openBlock(),b.createElementBlock("div",{class:b.normalizeClass([`${t.sectionId}-${s.category.id}-category`,"quests-category"]),key:s.category.id},[b.unref(r).length>1?(b.openBlock(),b.createElementBlock("h4",Ede,b.toDisplayString(s.category.title),1)):b.createCommentVNode("",!0),b.createElementVNode("div",{class:b.normalizeClass(`${t.sectionId}-${s.category.id}-quests`)},[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(s.quests,u=>(b.openBlock(),b.createBlock($de,{key:u.id,quest:u,onClick:l=>o.$emit("quest-selected",u)},null,8,["quest","onClick"]))),128))],2)],2))),128))])):(b.openBlock(),b.createElementBlock("div",Tde,[b.createElementVNode("p",null,b.toDisplayString(t.fallbackText),1)]))],2))}}),Fpe="",Mde=b.defineComponent({setup(){const t=di(),e=b.computed(()=>t.quests),n=b.ref(null);return{quests:e,selectedQuest:n}},computed:{questsToDisplay(){return Object.values(this.quests).filter(t=>t.state!=="hidden")},activeQuests(){return this.questsToDisplay.filter(t=>t.state==="unlocked")},completedQuests(){return this.questsToDisplay.filter(t=>t.state==="completed")},questsUiClass(){return ao().layoutMode==="horizontal"?"quests-ui-horizontal":"quests-ui-vertical"}},mounted(){this.activeQuests.length>0?this.selectedQuest=this.activeQuests[0]:this.completedQuests.length>0&&(this.selectedQuest=this.completedQuests[0])},methods:{clickOnQuest(t){this.selectedQuest=t}},components:{QuestDetails:Sde,QuestsListSection:Ade}}),Vpe="",Pde={class:"quests-list-container"},Nde={class:"quest-details"};function Ide(t,e,n,r,i,o){const a=b.resolveComponent("QuestsListSection"),s=b.resolveComponent("QuestDetails");return b.openBlock(),b.createElementBlock("div",{class:b.normalizeClass(["quests-ui",t.questsUiClass])},[b.createElementVNode("div",Pde,[b.createVNode(a,{quests:t.activeQuests,sectionId:"active",title:"Active Quests",fallbackText:"No active quests",onQuestSelected:t.clickOnQuest},null,8,["quests","onQuestSelected"]),b.createVNode(a,{quests:t.completedQuests,sectionId:"completed",title:"Completed Quests",fallbackText:"No completed quests",onQuestSelected:t.clickOnQuest},null,8,["quests","onQuestSelected"])]),b.createElementVNode("div",Nde,[t.selectedQuest?(b.openBlock(),b.createBlock(s,{key:0,quest:t.selectedQuest},null,8,["quest"])):b.createCommentVNode("",!0)])],2)}const Lde=Hi(Mde,[["render",Ide]]),Dde=b.defineComponent({setup(){const t=_r();return{skills:b.computed(()=>t.skills)}},data(){return{chosenSkill:!1}},mounted(){},methods:{getSkillStyle(t){return{backgroundImage:`url(${Ma(this.skillConf[t].icon)})`}},getSkillName(t){return this.skillConf[t].name},clickSkill(t){this.chosenSkill=t},closeSkill(){this.chosenSkill=!1},xpBarWidth(t){return{width:`${Math.floor(t/this.xpPerLevel*100)}%`}}},computed:{skillsToDisplay(){const t={};for(const e in this.skills)this.skillConf[e].hidden&&this.skills[e].level<1||(t[e]=this.skills[e]);return t},skillConf(){return Co().skills},xpPerLevel(){return Co().skillOptions.xpPerLevel}}}),qpe="",Rde={key:0,class:"skills-container"},Bde=["onClick"],zde={class:"skill-title"},Fde={class:"skill-xp-container"},Vde={class:"skill-xp-text"},qde={class:"skill-level"},Hde={key:1},Ude={class:"flex flex-row skill-description-container"},Wde={class:"flex skill-left"},Kde={class:"flex skill-right"},Jde=b.createElementVNode("hr",{class:"hr-solid"},null,-1);function Gde(t,e,n,r,i,o){return t.chosenSkill?typeof t.chosenSkill=="string"?(b.openBlock(),b.createElementBlock("div",Hde,[b.createElementVNode("div",Ude,[b.createElementVNode("div",Wde,[b.createElementVNode("div",{class:"skill-display",style:b.normalizeStyle(t.getSkillStyle(t.chosenSkill))},null,4)]),b.createElementVNode("div",Kde,[b.createElementVNode("h2",null,b.toDisplayString(t.getSkillName(t.chosenSkill)),1),Jde,b.createElementVNode("h3",null,"Level: "+b.toDisplayString(t.skills[t.chosenSkill].level),1),b.createElementVNode("p",null,b.toDisplayString(t.skillConf[t.chosenSkill].description),1)])]),b.createElementVNode("button",{class:"button",onClick:e[0]||(e[0]=(...a)=>t.closeSkill&&t.closeSkill(...a))},b.toDisplayString("<--"))])):b.createCommentVNode("",!0):(b.openBlock(),b.createElementBlock("div",Rde,[(b.openBlock(!0),b.createElementBlock(b.Fragment,null,b.renderList(t.skillsToDisplay,a=>(b.openBlock(),b.createElementBlock("button",{onClick:()=>t.clickSkill(a.id),class:"skill-display",style:b.normalizeStyle(t.getSkillStyle(a.id)),key:a.id},[b.createElementVNode("h3",zde,b.toDisplayString(t.getSkillName(a.id)),1),b.createElementVNode("div",Fde,[b.createElementVNode("div",{class:"skill-xp-bar",style:b.normalizeStyle(t.xpBarWidth(a.xp))},null,4),b.createElementVNode("h3",Vde,b.toDisplayString(a.xp)+" / "+b.toDisplayString(t.xpPerLevel)+" XP",1)]),b.createElementVNode("h3",qde,b.toDisplayString(a.level),1)],12,Bde))),128))]))}const Qde=Hi(Dde,[["render",Gde]]);function Yde(t){t.component("MainMenu",ide),t.component("InventoryUi",kde),t.component("QuestsUi",Lde),t.component("SkillsWindow",Qde),jo().menus={system:{label:"System",cssClass:"system-menu",id:"system",tabs:[{id:"system-tab",cssId:"system-tab",text:"System",component:"MainMenu"}],activeTab:0},menu:{label:"Menu",id:"menu",cssClass:"menu-menu",tabs:[{id:"skills",cssId:"skills-menu-button",text:"Skills",condition:()=>jo().showSkills,component:"SkillsWindow"},{id:"inventory",cssId:"inventory-menu-button",text:"Items",condition:()=>jo().showInventory,component:"InventoryUi"},{id:"quests",cssId:"quests-menu-button",text:"Quests",condition:()=>jo().showQuests,component:"QuestsUi"}],activeTab:0}}}function uR(t,e,n){const r=window.narrat.app;for(const i in e.tabs){const o=e.tabs[i].component;r.component(o,n[o])}jo().addMenu(t,e)}function Xde(t,e,n){window.narrat.app.component(e.component,n),jo().addMenuOption(t,e)}function Zde(){for(const t of Fn.plugins){if(t.customMenuButtons)for(const e of t.customMenuButtons)uR(e.config.id,e.config,e.components);if(t.customMenuTabs)for(const e of t.customMenuTabs)Xde(e.config.id,e.config,e.component)}}function ehe(t){t.directive("visible",{mounted(e,n){n.value?e.style.visibility="visible":e.style.visibility="hidden"},updated(e,n){n.value?e.style.visibility="visible":e.style.visibility="hidden"}})}class the extends Eb{setup(){const e=()=>{this.emit("preUpdate"),this.emit("update"),this.emit("postUpdate"),requestAnimationFrame(e)};e()}}const Lk=new the;Ze.Vec2=void 0,(t=>{function e(p,m){return{x:p!=null?p:0,y:m!=null?m:0}}t.create=e;function n(p){return Math.sqrt(p.x*p.x+p.y*p.y)}t.magnitude=n;function r(p){const m=n(p);return m===0?e(0,0):{x:p.x/m,y:p.y/m}}t.normalize=r;function i(p,m){return{x:p.x+m.x,y:p.y+m.y}}t.add=i;function o(p,m){return{x:p.x-m.x,y:p.y-m.y}}t.subtract=o;function a(p,m){return{x:p.x*m.x,y:p.y*m.y}}t.multiply=a;function s(p,m){return{x:p.x*m,y:p.y*m}}t.scale=s;function u(p,m){return{x:p.x/m.x,y:p.y/m.y}}t.divide=u;function l(p,m){return n(o(p,m))}t.distance=l;function f(p,m,g){return{x:p.x+(m.x-p.x)*g,y:p.y+(m.y-p.y)*g}}t.lerp=f;function c(p,m){const g=Math.cos(m),v=Math.sin(m);return{x:p.x*g-p.y*v,y:p.x*v+p.y*g}}t.rotate=c;function d(p,m){const g=o(m,p);return t.normalize({x:-g.y,y:g.x})}t.normal=d;function h(p,m){return p.x*m.x+p.y*m.y}t.dot=h})(Ze.Vec2||(Ze.Vec2={}));class nhe{constructor(){ei(this,"gameActions",{});ei(this,"keyboardState",{});ei(this,"actions",{})}startListening(){window.addEventListener("keydown",e=>{const n=this.getKeyState(e.key);this.keyboardState[e.key]={previous:n.current,current:!0}}),window.addEventListener("keyup",e=>{const n=this.getKeyState(e.key);this.keyboardState[e.key]={previous:n.current,current:!1}}),Lk.on("preUpdate",()=>{this.update()})}addAction(e){this.gameActions[e.id]=e,e.type==="button"?this.actions[e.id]={active:!1,previous:!1}:this.actions[e.id]={value:Ze.Vec2.create(0,0),previous:Ze.Vec2.create(0,0),fullState:{left:0,right:0,up:0,down:0},previousFullState:{left:0,right:0,up:0,down:0}}}getAnalog(e){return this.actions[e]||Kt(`Action ${e} does not exist`),this.actions[e]}getButton(e){return this.actions[e]||Kt(`Action ${e} does not exist`),this.actions[e]}getKeyState(e){return this.keyboardState[e]?this.keyboardState[e]:(this.keyboardState[e]={current:!1,previous:!1},this.keyboardState[e])}update(){Object.values(this.gameActions).forEach(e=>{if(e.type==="button")e.action==="press"&&(this.actions[e.id].previous=this.actions[e.id].active,e.keybinds.some(r=>{const i=this.getKeyState(r.keyboardKey);return i.current===!0&&i.previous===!1})?this.actions[e.id].active=!0:this.actions[e.id].active=!1);else if(e.type==="analog"){const n=this.actions[e.id];n.previous=n.value,n.previousFullState=n.fullState;let r=Ze.Vec2.create(0,0);e.keybinds.forEach(i=>{this.getKeyState(i.left).current&&(n.fullState.left=1,r.x-=1),this.getKeyState(i.right).current&&(n.fullState.right=1,r.x+=1),this.getKeyState(i.up).current&&(n.fullState.up=1,r.y-=1),this.getKeyState(i.down).current&&(n.fullState.down=1,r.y+=1)}),r=Ze.Vec2.normalize(r),n.value=r}})}}const lR=Jr("inputs",{state:()=>({inputs:new nhe}),actions:{setupInputs(){this.inputs.startListening()}}});let os;Fn.callHook("onPageLoaded");async function rhe(t){Lk.setup(),console.log("Starting narrat...");const e=Object.assign(pre(),t),n=RZ();os=b.createApp(Dle,{options:e}),ehe(os),os.use(n);const r=await ase(e);Tb().setConfig(r),lR().setupInputs(),Fn.pinia=n,Gt();const i={app:os,vm:Fn,jump:o=>{wn().jumpToLabel(o)}};return window.narrat=i,Yde(os),Zde(),aR().addButtonsFromPlugins(),Gt().setOptions(e),os.use(TR,{breakpoints:{s:0,m:800,l:1200}}),Kfe(Fn),Qm.setupDebugger(e.debug),console.log(`%c Narrat game engine v${GZ} - Built at ${QZ.toLocaleString()}`,"background: #222; color: #bada55"),Fn.callHook("onNarratSetup"),os.mount("#game-holder"),os}function ihe(t,e){os.component(t,e)}class ohe{constructor(){ei(this,"pluginId","narrat-plugin")}onPageLoaded(){}onNarratSetup(){}onAppMounted(){}onAssetsLoaded(){}onGameSetup(){}onGameStart(){}onGameMounted(){}onGameDismounted(){}}function ahe(t){Fn.addPlugin(t)}function she(t){Fn.addCommand(t)}Ze.CommandPlugin=Je,Ze.InputsListener=oR,Ze.LogManager=Gm,Ze.ModalWindow=Ws,Ze.NarratPlugin=ohe,Ze.addCommand=she,Ze.aspectRatioFit=xL,Ze.audioConfig=Aa,Ze.buttonsConfig=$k,Ze.charactersConfig=Ok,Ze.error=Kt,Ze.findVariable=n7,Ze.gameloop=Lk,Ze.generateParser=nd,Ze.getAssetUrl=Ma,Ze.getButtonConfig=Hs,Ze.getConfig=gt,Ze.getDataUrl=Tk,Ze.getFile=Sb,Ze.getImageUrl=td,Ze.getItemConfig=is,Ze.getObjectiveConfig=Fm,Ze.getQuestConfig=Bu,Ze.getScreenConfig=XD,Ze.getSkillConfig=Ek,Ze.getSplitConfigUrl=YD,Ze.getWindow=lb,Ze.inputEvents=$o,Ze.itemsConfig=Bm,Ze.loadDataFile=vm,Ze.logManager=Qm,Ze.logger=Zo,Ze.processText=es,Ze.questsConfig=Zf,Ze.randomId=ql,Ze.registerComponent=ihe,Ze.registerMenuButton=uR,Ze.registerPlugin=ahe,Ze.screensConfig=zm,Ze.skillsConfig=Co,Ze.startApp=rhe,Ze.timeout=_o,Ze.tooltipsConfig=ed,Ze.useAudio=Gr,Ze.useConfig=Tb,Ze.useDialogStore=zn,Ze.useHud=$a,Ze.useInputs=lR,Ze.useInventory=Nr,Ze.useMain=Gt,Ze.useMenu=jo,Ze.useNotifications=oo,Ze.useQuests=di,Ze.useRenderingStore=ao,Ze.useScreenObjects=io,Ze.useScreens=Uo,Ze.useSkills=_r,Ze.useTooltips=lm,Ze.useVM=wn,Ze.warning=Au,Object.defineProperties(Ze,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
226
226
  //# sourceMappingURL=narrat.umd.js.map