narrat 1.3.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -1,4 +1,4 @@
1
- // Version: 1.3.0 - June 25, 2022 18:05:43
1
+ // Version: 1.3.1 - June 25, 2022 22:52:46
2
2
  'use strict';
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
@@ -34,7 +34,7 @@ function styleInject(css, ref) {
34
34
  }
35
35
  }
36
36
 
37
- var css_248z = "/*! @import */\n\n/*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */\n\n/*\nDocument\n========\n*/\n\n/**\nUse a better box model (opinionated).\n*/\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n/**\nUse a more readable tab size (opinionated).\n*/\n\n:root {\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4;\n}\n\n/**\n1. Correct the line height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n*/\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/*\nSections\n========\n*/\n\n/**\nRemove the margin in all browsers.\n*/\n\nbody {\n margin: 0;\n}\n\n/**\nImprove consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n*/\n\nbody {\n font-family:\n\t\tsystem-ui,\n\t\t-apple-system, /* Firefox supports this but not yet `system-ui` */\n\t\t'Segoe UI',\n\t\tRoboto,\n\t\tHelvetica,\n\t\tArial,\n\t\tsans-serif,\n\t\t'Apple Color Emoji',\n\t\t'Segoe UI Emoji';\n}\n\n/*\nGrouping content\n================\n*/\n\n/**\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n}\n\n/*\nText-level semantics\n====================\n*/\n\n/**\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr[title] {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/**\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n2. Correct the odd 'em' font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family:\n\t\tui-monospace,\n\t\tSFMono-Regular,\n\t\tConsolas,\n\t\t'Liberation Mono',\n\t\tMenlo,\n\t\tmonospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/**\nPrevent 'sub' and 'sup' elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\nTabular data\n============\n*/\n\n/**\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n}\n\n/*\nForms\n=====\n*/\n\n/**\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\nRemove the inheritance of text transform in Edge and Firefox.\n1. Remove the inheritance of text transform in Firefox.\n*/\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\nCorrect the inability to style clickable types in iOS and Safari.\n*/\n\nbutton,\n[type='button'],\n[type='reset'] {\n -webkit-appearance: button;\n}\n\n/**\nRemove the inner border and padding in Firefox.\n*/\n\n/**\nRestore the focus styles unset by the previous rule.\n*/\n\n/**\nRemove the additional ':invalid' styles in Firefox.\nSee: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737\n*/\n\n/**\nRemove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers.\n*/\n\nlegend {\n padding: 0;\n}\n\n/**\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n/**\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n/**\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to 'inherit' in Safari.\n*/\n\n/*\nInteractive\n===========\n*/\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/**\n * Manually forked from SUIT CSS Base: https://github.com/suitcss/base\n * A thin layer on top of normalize.css that provides a starting point more\n * suitable for web applications.\n */\n\n/**\n * Removes the default spacing and border for appropriate elements.\n */\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nbutton {\n background-color: transparent;\n background-image: none;\n}\n\n/**\n * Work around a Firefox/IE bug where the transparent `button` background\n * results in a loss of the default `button` focus styles.\n */\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nol,\nul {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/**\n * Tailwind custom reset styles\n */\n\n/**\n * 1. Use the user's configured `sans` font-family (with Tailwind's default\n * sans-serif font stack as a fallback) as a sane default.\n * 2. Use Tailwind's default \"normal\" line-height so the user isn't forced\n * to override it to ensure consistency even when using the default theme.\n */\n\nhtml {\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"; /* 1 */\n line-height: 1.5; /* 2 */\n}\n\n/**\n * Inherit font-family and line-height from `html` so users can set them as\n * a class directly on the `html` element.\n */\n\nbody {\n font-family: inherit;\n line-height: inherit;\n}\n\n/**\n * 1. Prevent padding and border from affecting element width.\n *\n * We used to set this in the html element and inherit from\n * the parent element for everything else. This caused issues\n * in shadow-dom-enhanced elements like <details> where the content\n * is wrapped by a div with box-sizing set to `content-box`.\n *\n * https://github.com/mozdevs/cssremedy/issues/4\n *\n *\n * 2. Allow adding a border to an element by just adding a border-width.\n *\n * By default, the way the browser specifies that an element should have no\n * border is by setting it's border-style to `none` in the user-agent\n * stylesheet.\n *\n * In order to easily add borders to elements by just setting the `border-width`\n * property, we change the default border-style for all elements to `solid`, and\n * use border-width to hide them instead. This way our `border` utilities only\n * need to set the `border-width` property instead of the entire `border`\n * shorthand, making our border utilities much more straightforward to compose.\n *\n * https://github.com/tailwindcss/tailwindcss/pull/116\n */\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n/*\n * Ensure horizontal rules are visible by default\n */\n\nhr {\n border-top-width: 1px;\n}\n\n/**\n * Undo the `border-style: none` reset that Normalize applies to images so that\n * our `border-{width}` utilities have the expected effect.\n *\n * The Normalize reset is unnecessary for us since we default the border-width\n * to 0 on all elements.\n *\n * https://github.com/tailwindcss/tailwindcss/issues/362\n */\n\nimg {\n border-style: solid;\n}\n\ntextarea {\n resize: vertical;\n}\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n color: #9ca3af;\n}\n\ninput:-ms-input-placeholder, textarea:-ms-input-placeholder {\n color: #9ca3af;\n}\n\ninput::placeholder,\ntextarea::placeholder {\n color: #9ca3af;\n}\n\nbutton {\n cursor: pointer;\n}\n\ntable {\n border-collapse: collapse;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/**\n * Reset links to optimize for opt-in styling instead of\n * opt-out.\n */\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/**\n * Reset form element properties that are easy to forget to\n * style explicitly so you don't inadvertently introduce\n * styles that deviate from your design system. These styles\n * supplement a partial reset that is already applied by\n * normalize.css.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n padding: 0;\n line-height: inherit;\n color: inherit;\n}\n\n/**\n * Use the configured 'mono' font family for elements that\n * are expected to be rendered with a monospace font, falling\n * back to the system monospace stack if there is no configured\n * 'mono' font family.\n */\n\npre,\ncode,\nkbd,\nsamp {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n/**\n * Make replaced elements `display: block` by default as that's\n * the behavior you want almost all of the time. Inspired by\n * CSS Remedy, with `svg` added as well.\n *\n * https://github.com/mozdevs/cssremedy/issues/14\n */\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block;\n vertical-align: middle;\n}\n\n/**\n * Constrain images and videos to the parent width and preserve\n * their instrinsic aspect ratio.\n *\n * https://github.com/mozdevs/cssremedy/issues/14\n */\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n.container {\n width: 100%;\n}\n\n@media (min-width: 640px) {\n .container {\n max-width: 640px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 768px;\n }\n}\n\n@media (min-width: 1024px) {\n .container {\n max-width: 1024px;\n }\n}\n\n@media (min-width: 1280px) {\n .container {\n max-width: 1280px;\n }\n}\n\n@media (min-width: 1536px) {\n .container {\n max-width: 1536px;\n }\n}\n\n.bg-gray-800 {\n --tw-bg-opacity: 1;\n background-color: rgba(31, 41, 55, var(--tw-bg-opacity));\n}\n\n.border {\n border-width: 1px;\n}\n\n.flex {\n display: flex;\n}\n\n.table {\n display: table;\n}\n\n.grid {\n display: grid;\n}\n\n.hidden {\n display: none;\n}\n\n.flex-row {\n flex-direction: row;\n}\n\n.flex-col {\n flex-direction: column;\n}\n\n.flex-grow {\n flex-grow: 1;\n}\n\n.flex-shrink {\n flex-shrink: 1;\n}\n\n.list-disc {\n list-style-type: disc;\n}\n\n.absolute {\n position: absolute;\n}\n\n.resize {\n resize: both;\n}\n\n* {\n --tw-shadow: 0 0 #0000;\n}\n\n* {\n --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgba(59, 130, 246, 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n}\n\n.table-auto {\n table-layout: auto;\n}\n\n.line-through {\n text-decoration: line-through;\n}\n\n.w-full {\n width: 100%;\n}\n\n.gap-4 {\n gap: 1rem;\n}\n\n.grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n}\n\n.transform {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.transition {\n transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n@-webkit-keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@-webkit-keyframes ping {\n 75%, 100% {\n transform: scale(2);\n opacity: 0;\n }\n}\n\n@keyframes ping {\n 75%, 100% {\n transform: scale(2);\n opacity: 0;\n }\n}\n\n@-webkit-keyframes pulse {\n 50% {\n opacity: .5;\n }\n}\n\n@keyframes pulse {\n 50% {\n opacity: .5;\n }\n}\n\n@-webkit-keyframes bounce {\n 0%, 100% {\n transform: translateY(-25%);\n -webkit-animation-timing-function: cubic-bezier(0.8,0,1,1);\n animation-timing-function: cubic-bezier(0.8,0,1,1);\n }\n\n 50% {\n transform: none;\n -webkit-animation-timing-function: cubic-bezier(0,0,0.2,1);\n animation-timing-function: cubic-bezier(0,0,0.2,1);\n }\n}\n\n@keyframes bounce {\n 0%, 100% {\n transform: translateY(-25%);\n -webkit-animation-timing-function: cubic-bezier(0.8,0,1,1);\n animation-timing-function: cubic-bezier(0.8,0,1,1);\n }\n\n 50% {\n transform: none;\n -webkit-animation-timing-function: cubic-bezier(0,0,0.2,1);\n animation-timing-function: cubic-bezier(0,0,0.2,1);\n }\n}\n\n:root {\n --bg-color: #131720;\n --text-color: #d9e1f2;\n --primary: hsl(255, 30%, 55%);\n --focus: hsl(210, 90%, 50%);\n --secondary: #42b983;\n --border-color: hsla(0, 0%, 100%, 0.2);\n --light-1: hsl(210, 30%, 40%);\n --light-2: hsl(255, 30%, 50%);\n --light-background: linear-gradient(to right, var(--light-1), var(--light-2));\n --shadow-1: hsla(236, 50%, 50%, 0.3);\n --shadow-2: hsla(236, 50%, 50%, 0.4);\n --hud-background: rgba(0, 0, 0, 0.4);\n --hud-text-color: var(--text-color);\n --notifications-bg: darkslateblue;\n --skills-text-background: rgba(0, 0, 0, 0.5);\n --skills-text-color: var(--text-color);\n --skills-level-background: rgba(0, 0, 0, 0.5);\n --skills-level-color: orange;\n --skills-xp-bar-height: 40px;\n --skill-check-name-color: orange;\n --skill-check-difficulty: orange;\n --skill-check-success: green;\n --skill-check-failed: red;\n --skill-check-color: orange;\n --dialog-choice-color: orange;\n --dialog-choice-hover-color: var(--text-color);\n --inventory-text-background: rgba(0, 0, 0, 0.5);\n --inventory-text-color: var(--text-color);\n --inventory-amount-background: rgba(0, 0, 0, 0.5);\n --inventory-amount-color: orange;\n --quest-title-color: yellow;\n --completed-quest-title-color: grey;\n --objective-in-progress-color: white;\n --objective-completed-color: grey;\n}\n\n.list-item {\n display: inline-block;\n margin-right: 10px;\n}\n\n.list-enter-active,\r\n.list-leave-active {\n transition: all 0.3s ease;\n}\n\n/* .list-move {\r\n transition: transform 0.3s ease;\r\n} */\n\n.list-enter-from,\r\n.list-leave-to {\n opacity: 0;\n transform: translateX(300px);\n}\n\n.notification-item {\n display: inline-block;\n margin-right: 10px;\n}\n\n.notification-enter-active,\r\n.notification-leave-active {\n transition: all 0.3s ease;\n}\n\n/* .notification-move {\r\n transition: transform 0.3s ease;\r\n} */\n\n.notification-enter-from,\r\n.notification-leave-to {\n opacity: 0;\n transform: translateY(-300px);\n}\n\n.fade-enter-active,\r\n.fade-leave-active {\n transition: opacity 0.3s ease;\n}\n\n.fade-enter-from,\r\n.fade-leave-to {\n opacity: 0;\n}\n\n.fade-in-enter-active {\n transition: opacity 0.1s ease;\n}\n\n.fade-in-enter-from {\n opacity: 0;\n}\n\nbody {\n padding: 0;\n margin: 0;\n font-family: Arial, sans-serif;\n background-color: black;\n}\n\n.select {\n background: var(--light-background);\n padding: 10px;\n}\n\n.option {\n background-color: var(--light-2);\n padding: 5px;\n color: var(--text-color);\n}\n\n.button {\n background: var(--light-background);\n color: var(--text-color);\n box-shadow: 0.4rem 0.4rem 2.4rem 0.2rem var(--shadow-1);\n border-radius: 100px;\n padding: 10px;\n font-weight: 800;\n font-size: 16px;\n margin: 10px;\n transition: 0.2s;\n}\n\n.button:focus,\r\n.button:hover {\n transform: translateY(-0.2rem);\n box-shadow: 0 0 2.4rem 0.2rem var(--shadow-2);\n}\n\n.input {\n background: var(--light-background);\n color: var(--text-color);\n box-shadow: 0.4rem 0.4rem 2.4rem 0.2rem var(--shadow-1);\n border-radius: 100px;\n padding: 10px;\n font-weight: 800;\n font-size: 16px;\n margin: 10px;\n transition: 0.2s;\n}\n\n.input:focus,\r\n.input:hover {\n transform: translateY(-0.2rem);\n box-shadow: 0 0 2.4rem 0.2rem var(--shadow-2);\n}\n\na {\n color: pink;\n text-decoration: underline;\n}\n\nth,\r\ntd {\n padding: 4px;\n border: 1px solid var(--text-color);\n text-align: center;\n}\n\n#game-holder {\n width: 100vw;\n height: 100vh;\n padding: 0;\n margin: 0;\n top: 0;\n left: 0;\n background-color: black;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: -webkit-fill-available;\n}\n\n.title {\n font-size: 30px;\n font-weight: 700;\n text-align: center;\n}\n\n.container {\n padding: 20px;\n}\n\nh1,\r\nh2,\r\nh3,\r\nh4 {\n font-weight: 700;\n}\n\nh1 {\n font-size: 30px;\n}\n\nh2 {\n font-size: 26px;\n}\n\nh3 {\n font-size: 24px;\n}\n\nhr.solid {\n border: 1px solid var(--text-color);\n margin-top: 30px;\n margin-bottom: 30px;\n}\n\n.card-1 {\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);\n transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);\n}\n\n.card-1:hover {\n box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);\n}\n\n.card-2 {\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);\n}\n\n.card-3 {\n box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23);\n}\n\n.card-4 {\n box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);\n}\n\n.card-5 {\n box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22);\n}\n\n.dialog-choice {\n transition: 0.2s;\n}\n\n.dialog-choice:hover {\n transform: scale(1.05, 1.05);\n transform-origin: center;\n}\n\n/* Somewhat arcane CSS to force the hover color to override the child style.\r\nOtherwise hovering choices doesn't change the color of skill check prompts. */\n\n.dialog-choice:not(:hover) > .skill-check-name,\r\n.passive-skill-check > .skill-check-name {\n color: var(--skill-check-name-color);\n}\n\n.dialog-choice:not(:hover) > .skill-check-difficulty,\r\n.passive-skill-check > .skill-check-difficulty {\n color: var(--skill-check-difficulty);\n}\n\n.skill-check-difficulty {\n font-weight: 700;\n}\n\n.dialog-choice:not(:hover) > .skill-check-success,\r\n.passive-skill-check > .skill-check-success {\n color: var(--skill-check-success);\n}\n\n.dialog-choice:not(:hover) > .skill-check-failed,\r\n.passive-skill-check > .skill-check-failed {\n color: var(--skill-check-failed);\n}\n\n.dialog-choice:not(:hover) > .skill-check,\r\n.passive-skill-check.skill-check {\n color: var(--skill-check-color);\n}\n\n.narrat-canvas {\n position: absolute;\n height: 100%;\n top: 0;\n left: 0;\n}\n\n/* Looks ugly */\n\n/* @keyframes strike-anim {\r\n 0% {\r\n width: 0;\r\n }\r\n 100% {\r\n width: 100%;\r\n }\r\n}\r\n.strike-anim {\r\n position: relative;\r\n}\r\n.strike-anim::after {\r\n content: ' ';\r\n position: absolute;\r\n top: 50%;\r\n left: 0;\r\n width: 100%;\r\n height: 1px;\r\n background: var(--text-color);\r\n animation-name: strike-anim;\r\n animation-duration: 0.5s;\r\n animation-timing-function: linear;\r\n animation-iteration-count: 1;\r\n animation-fill-mode: forwards;\r\n} */\n\n#touchTrigger {\n pointer-events: none;\n}\n\n@media (min-width: 640px) {\n}\n\n@media (min-width: 768px) {\n}\n\n@media (min-width: 1024px) {\n}\n\n@media (min-width: 1280px) {\n}\n\n@media (min-width: 1536px) {\n}\r\n";
37
+ var css_248z = "/*! @import */\n\n/*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */\n\n/*\nDocument\n========\n*/\n\n/**\nUse a better box model (opinionated).\n*/\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n/**\nUse a more readable tab size (opinionated).\n*/\n\n:root {\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4;\n}\n\n/**\n1. Correct the line height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n*/\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/*\nSections\n========\n*/\n\n/**\nRemove the margin in all browsers.\n*/\n\nbody {\n margin: 0;\n}\n\n/**\nImprove consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n*/\n\nbody {\n font-family:\n\t\tsystem-ui,\n\t\t-apple-system, /* Firefox supports this but not yet `system-ui` */\n\t\t'Segoe UI',\n\t\tRoboto,\n\t\tHelvetica,\n\t\tArial,\n\t\tsans-serif,\n\t\t'Apple Color Emoji',\n\t\t'Segoe UI Emoji';\n}\n\n/*\nGrouping content\n================\n*/\n\n/**\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n}\n\n/*\nText-level semantics\n====================\n*/\n\n/**\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr[title] {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/**\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n2. Correct the odd 'em' font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family:\n\t\tui-monospace,\n\t\tSFMono-Regular,\n\t\tConsolas,\n\t\t'Liberation Mono',\n\t\tMenlo,\n\t\tmonospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/**\nPrevent 'sub' and 'sup' elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\nTabular data\n============\n*/\n\n/**\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n}\n\n/*\nForms\n=====\n*/\n\n/**\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\nRemove the inheritance of text transform in Edge and Firefox.\n1. Remove the inheritance of text transform in Firefox.\n*/\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\nCorrect the inability to style clickable types in iOS and Safari.\n*/\n\nbutton,\n[type='button'],\n[type='reset'] {\n -webkit-appearance: button;\n}\n\n/**\nRemove the inner border and padding in Firefox.\n*/\n\n/**\nRestore the focus styles unset by the previous rule.\n*/\n\n/**\nRemove the additional ':invalid' styles in Firefox.\nSee: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737\n*/\n\n/**\nRemove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers.\n*/\n\nlegend {\n padding: 0;\n}\n\n/**\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n/**\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n/**\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to 'inherit' in Safari.\n*/\n\n/*\nInteractive\n===========\n*/\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/**\n * Manually forked from SUIT CSS Base: https://github.com/suitcss/base\n * A thin layer on top of normalize.css that provides a starting point more\n * suitable for web applications.\n */\n\n/**\n * Removes the default spacing and border for appropriate elements.\n */\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nbutton {\n background-color: transparent;\n background-image: none;\n}\n\n/**\n * Work around a Firefox/IE bug where the transparent `button` background\n * results in a loss of the default `button` focus styles.\n */\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nol,\nul {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/**\n * Tailwind custom reset styles\n */\n\n/**\n * 1. Use the user's configured `sans` font-family (with Tailwind's default\n * sans-serif font stack as a fallback) as a sane default.\n * 2. Use Tailwind's default \"normal\" line-height so the user isn't forced\n * to override it to ensure consistency even when using the default theme.\n */\n\nhtml {\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"; /* 1 */\n line-height: 1.5; /* 2 */\n}\n\n/**\n * Inherit font-family and line-height from `html` so users can set them as\n * a class directly on the `html` element.\n */\n\nbody {\n font-family: inherit;\n line-height: inherit;\n}\n\n/**\n * 1. Prevent padding and border from affecting element width.\n *\n * We used to set this in the html element and inherit from\n * the parent element for everything else. This caused issues\n * in shadow-dom-enhanced elements like <details> where the content\n * is wrapped by a div with box-sizing set to `content-box`.\n *\n * https://github.com/mozdevs/cssremedy/issues/4\n *\n *\n * 2. Allow adding a border to an element by just adding a border-width.\n *\n * By default, the way the browser specifies that an element should have no\n * border is by setting it's border-style to `none` in the user-agent\n * stylesheet.\n *\n * In order to easily add borders to elements by just setting the `border-width`\n * property, we change the default border-style for all elements to `solid`, and\n * use border-width to hide them instead. This way our `border` utilities only\n * need to set the `border-width` property instead of the entire `border`\n * shorthand, making our border utilities much more straightforward to compose.\n *\n * https://github.com/tailwindcss/tailwindcss/pull/116\n */\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n/*\n * Ensure horizontal rules are visible by default\n */\n\nhr {\n border-top-width: 1px;\n}\n\n/**\n * Undo the `border-style: none` reset that Normalize applies to images so that\n * our `border-{width}` utilities have the expected effect.\n *\n * The Normalize reset is unnecessary for us since we default the border-width\n * to 0 on all elements.\n *\n * https://github.com/tailwindcss/tailwindcss/issues/362\n */\n\nimg {\n border-style: solid;\n}\n\ntextarea {\n resize: vertical;\n}\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n color: #9ca3af;\n}\n\ninput:-ms-input-placeholder, textarea:-ms-input-placeholder {\n color: #9ca3af;\n}\n\ninput::placeholder,\ntextarea::placeholder {\n color: #9ca3af;\n}\n\nbutton {\n cursor: pointer;\n}\n\ntable {\n border-collapse: collapse;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/**\n * Reset links to optimize for opt-in styling instead of\n * opt-out.\n */\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/**\n * Reset form element properties that are easy to forget to\n * style explicitly so you don't inadvertently introduce\n * styles that deviate from your design system. These styles\n * supplement a partial reset that is already applied by\n * normalize.css.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n padding: 0;\n line-height: inherit;\n color: inherit;\n}\n\n/**\n * Use the configured 'mono' font family for elements that\n * are expected to be rendered with a monospace font, falling\n * back to the system monospace stack if there is no configured\n * 'mono' font family.\n */\n\npre,\ncode,\nkbd,\nsamp {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n/**\n * Make replaced elements `display: block` by default as that's\n * the behavior you want almost all of the time. Inspired by\n * CSS Remedy, with `svg` added as well.\n *\n * https://github.com/mozdevs/cssremedy/issues/14\n */\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block;\n vertical-align: middle;\n}\n\n/**\n * Constrain images and videos to the parent width and preserve\n * their instrinsic aspect ratio.\n *\n * https://github.com/mozdevs/cssremedy/issues/14\n */\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n.container {\n width: 100%;\n}\n\n@media (min-width: 640px) {\n .container {\n max-width: 640px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 768px;\n }\n}\n\n@media (min-width: 1024px) {\n .container {\n max-width: 1024px;\n }\n}\n\n@media (min-width: 1280px) {\n .container {\n max-width: 1280px;\n }\n}\n\n@media (min-width: 1536px) {\n .container {\n max-width: 1536px;\n }\n}\n\n.bg-gray-800 {\n --tw-bg-opacity: 1;\n background-color: rgba(31, 41, 55, var(--tw-bg-opacity));\n}\n\n.border {\n border-width: 1px;\n}\n\n.flex {\n display: flex;\n}\n\n.table {\n display: table;\n}\n\n.grid {\n display: grid;\n}\n\n.hidden {\n display: none;\n}\n\n.flex-row {\n flex-direction: row;\n}\n\n.flex-col {\n flex-direction: column;\n}\n\n.flex-grow {\n flex-grow: 1;\n}\n\n.flex-shrink {\n flex-shrink: 1;\n}\n\n.list-disc {\n list-style-type: disc;\n}\n\n.absolute {\n position: absolute;\n}\n\n.resize {\n resize: both;\n}\n\n* {\n --tw-shadow: 0 0 #0000;\n}\n\n* {\n --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgba(59, 130, 246, 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n}\n\n.table-auto {\n table-layout: auto;\n}\n\n.line-through {\n text-decoration: line-through;\n}\n\n.w-full {\n width: 100%;\n}\n\n.gap-4 {\n gap: 1rem;\n}\n\n.grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n}\n\n.transform {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.transition {\n transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n@-webkit-keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@-webkit-keyframes ping {\n 75%, 100% {\n transform: scale(2);\n opacity: 0;\n }\n}\n\n@keyframes ping {\n 75%, 100% {\n transform: scale(2);\n opacity: 0;\n }\n}\n\n@-webkit-keyframes pulse {\n 50% {\n opacity: .5;\n }\n}\n\n@keyframes pulse {\n 50% {\n opacity: .5;\n }\n}\n\n@-webkit-keyframes bounce {\n 0%, 100% {\n transform: translateY(-25%);\n -webkit-animation-timing-function: cubic-bezier(0.8,0,1,1);\n animation-timing-function: cubic-bezier(0.8,0,1,1);\n }\n\n 50% {\n transform: none;\n -webkit-animation-timing-function: cubic-bezier(0,0,0.2,1);\n animation-timing-function: cubic-bezier(0,0,0.2,1);\n }\n}\n\n@keyframes bounce {\n 0%, 100% {\n transform: translateY(-25%);\n -webkit-animation-timing-function: cubic-bezier(0.8,0,1,1);\n animation-timing-function: cubic-bezier(0.8,0,1,1);\n }\n\n 50% {\n transform: none;\n -webkit-animation-timing-function: cubic-bezier(0,0,0.2,1);\n animation-timing-function: cubic-bezier(0,0,0.2,1);\n }\n}\n\n:root {\n --bg-color: #131720;\n --text-color: #d9e1f2;\n --primary: hsl(255, 30%, 55%);\n --focus: hsl(210, 90%, 50%);\n --secondary: #42b983;\n --border-color: hsla(0, 0%, 100%, 0.2);\n --light-1: hsl(210, 30%, 40%);\n --light-2: hsl(255, 30%, 50%);\n --light-background: linear-gradient(to right, var(--light-1), var(--light-2));\n --shadow-1: hsla(236, 50%, 50%, 0.3);\n --shadow-2: hsla(236, 50%, 50%, 0.4);\n --hud-background: rgba(0, 0, 0, 0.4);\n --hud-text-color: var(--text-color);\n --notifications-bg: darkslateblue;\n --skills-text-background: rgba(0, 0, 0, 0.5);\n --skills-text-color: var(--text-color);\n --skills-level-background: rgba(0, 0, 0, 0.5);\n --skills-level-color: orange;\n --skills-xp-bar-height: 40px;\n --skill-check-name-color: orange;\n --skill-check-difficulty: orange;\n --skill-check-success: green;\n --skill-check-failed: red;\n --skill-check-color: orange;\n --dialog-choice-color: orange;\n --dialog-choice-hover-color: var(--text-color);\n --inventory-text-background: rgba(0, 0, 0, 0.5);\n --inventory-text-color: var(--text-color);\n --inventory-amount-background: rgba(0, 0, 0, 0.5);\n --inventory-amount-color: orange;\n --quest-title-color: yellow;\n --completed-quest-title-color: grey;\n --objective-in-progress-color: white;\n --objective-completed-color: grey;\n}\n\n.list-item {\n display: inline-block;\n margin-right: 10px;\n}\n\n.list-enter-active,\r\n.list-leave-active {\n transition: all 0.3s ease;\n}\n\n/* .list-move {\r\n transition: transform 0.3s ease;\r\n} */\n\n.list-enter-from,\r\n.list-leave-to {\n opacity: 0;\n transform: translateX(300px);\n}\n\n.notification-item {\n display: inline-block;\n margin-right: 10px;\n}\n\n.notification-enter-active,\r\n.notification-leave-active {\n transition: all 0.3s ease;\n}\n\n/* .notification-move {\r\n transition: transform 0.3s ease;\r\n} */\n\n.notification-enter-from,\r\n.notification-leave-to {\n opacity: 0;\n transform: translateY(-300px);\n}\n\n.fade-enter-active,\r\n.fade-leave-active {\n transition: opacity 0.3s ease;\n}\n\n.fade-enter-from,\r\n.fade-leave-to {\n opacity: 0;\n}\n\n.fade-in-enter-active {\n transition: opacity 0.1s ease;\n}\n\n.fade-in-enter-from {\n opacity: 0;\n}\n\nbody {\n padding: 0;\n margin: 0;\n font-family: Arial, sans-serif;\n background-color: black;\n}\n\n.select {\n background: var(--light-background);\n padding: 10px;\n}\n\n.option {\n background-color: var(--light-2);\n padding: 5px;\n color: var(--text-color);\n}\n\n.button {\n background: var(--light-background);\n color: var(--text-color);\n box-shadow: 0.4rem 0.4rem 2.4rem 0.2rem var(--shadow-1);\n border-radius: 100px;\n padding: 10px;\n font-weight: 800;\n font-size: 16px;\n margin: 10px;\n transition: 0.2s;\n}\n\n.button:focus,\r\n.button:hover {\n transform: translateY(-0.2rem);\n box-shadow: 0 0 2.4rem 0.2rem var(--shadow-2);\n}\n\n.disabled {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n pointer-events: none;\n}\n\n.button.disabled {\n box-shadow: unset;\n color: grey;\n background: var(--border-color);\n}\n\n.input {\n background: var(--light-background);\n color: var(--text-color);\n box-shadow: 0.4rem 0.4rem 2.4rem 0.2rem var(--shadow-1);\n border-radius: 100px;\n padding: 10px;\n font-weight: 800;\n font-size: 16px;\n margin: 10px;\n transition: 0.2s;\n}\n\n.input:focus,\r\n.input:hover {\n transform: translateY(-0.2rem);\n box-shadow: 0 0 2.4rem 0.2rem var(--shadow-2);\n}\n\na {\n color: pink;\n text-decoration: underline;\n}\n\nth,\r\ntd {\n padding: 4px;\n border: 1px solid var(--text-color);\n text-align: center;\n}\n\n#game-holder {\n width: 100vw;\n height: 100vh;\n padding: 0;\n margin: 0;\n top: 0;\n left: 0;\n background-color: black;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: -webkit-fill-available;\n}\n\n.title {\n font-size: 30px;\n font-weight: 700;\n text-align: center;\n}\n\n.container {\n padding: 20px;\n}\n\nh1,\r\nh2,\r\nh3,\r\nh4 {\n font-weight: 700;\n}\n\nh1 {\n font-size: 30px;\n}\n\nh2 {\n font-size: 26px;\n}\n\nh3 {\n font-size: 24px;\n}\n\nhr.solid {\n border: 1px solid var(--text-color);\n margin-top: 30px;\n margin-bottom: 30px;\n}\n\n.card-1 {\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);\n transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);\n}\n\n.card-1:hover {\n box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);\n}\n\n.card-2 {\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);\n}\n\n.card-3 {\n box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23);\n}\n\n.card-4 {\n box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);\n}\n\n.card-5 {\n box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22);\n}\n\n.dialog-choice {\n transition: 0.2s;\n}\n\n.dialog-choice:hover {\n transform: scale(1.05, 1.05);\n transform-origin: center;\n}\n\n/* Somewhat arcane CSS to force the hover color to override the child style.\r\nOtherwise hovering choices doesn't change the color of skill check prompts. */\n\n.dialog-choice:not(:hover) > .skill-check-name,\r\n.passive-skill-check > .skill-check-name {\n color: var(--skill-check-name-color);\n}\n\n.dialog-choice:not(:hover) > .skill-check-difficulty,\r\n.passive-skill-check > .skill-check-difficulty {\n color: var(--skill-check-difficulty);\n}\n\n.skill-check-difficulty {\n font-weight: 700;\n}\n\n.dialog-choice:not(:hover) > .skill-check-success,\r\n.passive-skill-check > .skill-check-success {\n color: var(--skill-check-success);\n}\n\n.dialog-choice:not(:hover) > .skill-check-failed,\r\n.passive-skill-check > .skill-check-failed {\n color: var(--skill-check-failed);\n}\n\n.dialog-choice:not(:hover) > .skill-check,\r\n.passive-skill-check.skill-check {\n color: var(--skill-check-color);\n}\n\n.narrat-canvas {\n position: absolute;\n height: 100%;\n top: 0;\n left: 0;\n}\n\n/* Looks ugly */\n\n/* @keyframes strike-anim {\r\n 0% {\r\n width: 0;\r\n }\r\n 100% {\r\n width: 100%;\r\n }\r\n}\r\n.strike-anim {\r\n position: relative;\r\n}\r\n.strike-anim::after {\r\n content: ' ';\r\n position: absolute;\r\n top: 50%;\r\n left: 0;\r\n width: 100%;\r\n height: 1px;\r\n background: var(--text-color);\r\n animation-name: strike-anim;\r\n animation-duration: 0.5s;\r\n animation-timing-function: linear;\r\n animation-iteration-count: 1;\r\n animation-fill-mode: forwards;\r\n} */\n\n#touchTrigger {\n pointer-events: none;\n}\n\n@media (min-width: 640px) {\n}\n\n@media (min-width: 768px) {\n}\n\n@media (min-width: 1024px) {\n}\n\n@media (min-width: 1280px) {\n}\n\n@media (min-width: 1536px) {\n}\r\n";
38
38
  styleInject(css_248z);
39
39
 
40
40
  const f=vue.ref([]),v=vue.ref(null),m=vue.ref(null),g=vue.ref(null),h=vue.reactive({current:""}),y=[],b=vue.ref(!1),k=vue.readonly(f),w=vue.readonly(v),M=vue.readonly(m),q=vue.readonly(g),x=vue.readonly(h),$=(e=w.value)=>{h.current=e;const t=k.value.findIndex((t=>t.name===e)),n=k.value.map((e=>e.name));for(let a=0;a<n.length;a++){if(a>0&&a<n.length-1){const e=n[a]+"Minus",r=n[a]+"Plus";h[e]=t<=a,h[r]=t>=a;}h[n[a]]=n[a]===e;}},V=(e=M.value)=>{h.orientation=e,h.isLandscape="landscape"===e,h.isPortrait="portrait"===e;},O=(e=q.value||"light")=>{h.theme=e,h.isDark="dark"===e,h.isLight="light"===e;};function j(e,t){if("undefined"==typeof window||!window.matchMedia)return !1;if("undefined"!=typeof window&&!window.matchMedia)return console.error("Vue3 Mq: No MatchMedia support detected in this browser. Responsive breakpoints not available."),!1;{b.value=!0;const n=window.matchMedia(e),a=({matches:e})=>{e&&t();};y.push({mql:n,cb:a});n.addEventListener&&"function"==typeof n.addEventListener?n.addEventListener("change",a):n.addListener(a),a(n);}}var L=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",bootstrap5:{xs:0,sm:576,md:768,lg:992,xl:1200,xxl:1400},bootstrap4:{xs:0,sm:576,md:768,lg:992,xl:1200},bootstrap3:{xs:0,sm:768,md:992,lg:1200},vuetify:{xs:0,sm:600,md:960,lg:1264,xl:1904},tailwind:{xs:0,sm:640,md:768,lg:1024,xl:1280,xxl:1536},devices:{phone:0,tablet:768,laptop:1370,desktop:1906}});const T=e=>{if(!e||"object"!=typeof e)return !1;const t=[];for(let n in e){const a=parseFloat(e[n]);n&&"string"==typeof n?/^[^a-z]/i.test(n)||/[^a-zA-Z0-9_]/.test(n)?console.warn(`Vue3 Mq: "${n}" is an invalid breakpoint key. Breakpoint keys must start with a letter and contain only alphanumeric characters and underscores. Skipping.`):!a&&0!==a||isNaN(a)||a<0?console.warn(`Vue3 Mq: "${n}: ${e[n]}" is not a valid breakpoint. Breakpoints should be a number of zero or above. Skipping.`):t.push({name:n,min:a}):console.warn(`Vue3 Mq: Invalid or missing breakpoint key (${JSON.stringify(n)}). Skipping.`);}t.some((e=>0===e.min))||console.warn("Vue3 Mq: You have not declared a breakpoint with a minimum value of 0. There may be screen sizes to which Vue3Mq does not respond.");return new Set(t.map((e=>e.min))).size<t.length&&console.warn("Vue3 Mq: Your breakpoint configuration contains duplicate values. Behaviour may be unpredictable."),0!==t.length&&t.sort(((e,t)=>e.min-t.min))};function R({breakpoints:e,preset:t}){const n=(e=>{if("string"==typeof e&&L[e])return L[e];{const t=Object.keys(L);return console.error(`Vue3 Mq: "${e}" is not a valid preset. Available options are: ${t.join(", ")}`),!1}})(t),a=T(e);if(!1===n&&!a)throw new TypeError("Vue3 Mq: You must provide a valid preset, or valid breakpoint settings.");var r;r=a||T(n),f.value=r,function(){for(;y.length>0;){const e=y.shift();if(e&&"object"==typeof e){const{mql:t,cb:n}=e;t.addEventListener&&"function"==typeof t.addEventListener?t.removeEventListener("change",n):t.removeListener(n);}}}(),(()=>{const e=Object.keys(h);for(let t of e)delete h[t];$(),V(),O();})();const o=k.value.reduce(((e,t,n,a)=>{const r=`(min-width: ${t.min}px)`,o=n<a.length-1?`(max-width: ${a[n+1].min-1}px)`:null,i=r+(o?" and "+o:"");return Object.assign(e,{[t.name]:i})}),{});for(const i in o){j(o[i],(()=>{$(i);}));}["portrait","landscape"].forEach((e=>{j(`(orientation: ${e})`,(()=>{V(e);}));})),["light","dark"].forEach((e=>{j(`(prefers-color-scheme: ${e})`,(()=>{O(e);}));}));}var N={install:(e,{preset:t="bootstrap5",breakpoints:n,defaultBreakpoint:a,defaultOrientation:r="landscape",defaultTheme:o}={})=>{try{const l=!1===["landscape","portrait"].includes(s=r)?(console.error(`Vue3 Mq: "${s}" is not a valid default orientation. Reverting to unset value.`),null):s,u=((e=null)=>!1===["dark","light"].includes(e)&&null!==e?(console.error(`Vue3 Mq: "${e}" is not a valid default theme. Reverting to unset value.`),null):e)(o);i=a,v.value=i,(e=>{m.value=e;})(l),(e=>{g.value=e;})(u),e.provide("mq",x),e.provide("updateBreakpoints",R),R({breakpoints:n,preset:t});}catch(l){console.error(l);}var i,s;}};
@@ -102,6 +102,11 @@ const defaultConfig = {
102
102
  },
103
103
  hudStats: {},
104
104
  items: {},
105
+ interactionTags: {
106
+ default: {
107
+ onlyInteractOutsideOfScripts: true,
108
+ },
109
+ },
105
110
  quests: {},
106
111
  };
107
112
 
@@ -3592,15 +3597,18 @@ const useNotifications = pinia.defineStore('notifications', {
3592
3597
  const useInventory = pinia.defineStore('inventory', {
3593
3598
  state: () => ({
3594
3599
  items: {},
3600
+ interactionTags: {},
3595
3601
  }),
3596
3602
  actions: {
3597
3603
  generateSaveData() {
3598
3604
  return {
3599
3605
  items: this.items,
3606
+ interactionTags: this.interactionTags,
3600
3607
  };
3601
3608
  },
3602
3609
  loadSaveData(save) {
3603
3610
  this.items = { ...this.items, ...save.items };
3611
+ this.interactionTags = { ...save.interactionTags };
3604
3612
  },
3605
3613
  setupItems(items) {
3606
3614
  Object.keys(items).forEach((key) => {
@@ -3626,6 +3634,49 @@ const useInventory = pinia.defineStore('inventory', {
3626
3634
  }
3627
3635
  useNotifications().addNotification(`Received item: ${getItemConfig(item.id).name} x ${item.amount}`);
3628
3636
  },
3637
+ enableInteraction(tag) {
3638
+ if (!tag) {
3639
+ tag = 'default';
3640
+ }
3641
+ this.interactionTags[tag] = {
3642
+ blockedInteraction: false,
3643
+ };
3644
+ },
3645
+ disableInteraction(tag) {
3646
+ if (!tag) {
3647
+ tag = 'default';
3648
+ }
3649
+ this.interactionTags[tag] = {
3650
+ blockedInteraction: true,
3651
+ };
3652
+ },
3653
+ onScriptStart() {
3654
+ const tags = getConfig().interactionTags;
3655
+ Object.keys(tags).forEach((tag) => {
3656
+ const conf = tags[tag];
3657
+ if (conf.onlyInteractOutsideOfScripts) {
3658
+ this.disableInteraction(tag);
3659
+ }
3660
+ });
3661
+ },
3662
+ onScriptEnd() {
3663
+ const tags = getConfig().interactionTags;
3664
+ Object.keys(tags).forEach((tag) => {
3665
+ const conf = tags[tag];
3666
+ if (conf.onlyInteractOutsideOfScripts) {
3667
+ this.enableInteraction(tag);
3668
+ }
3669
+ });
3670
+ },
3671
+ isInteractionTagBlocked(tag) {
3672
+ if (!tag) {
3673
+ tag = 'default';
3674
+ }
3675
+ if (this.interactionTags[tag]) {
3676
+ return this.interactionTags[tag].blockedInteraction;
3677
+ }
3678
+ return false;
3679
+ },
3629
3680
  remove(item) {
3630
3681
  const existingItem = this.getExistingItem(item.id);
3631
3682
  if (existingItem) {
@@ -4330,6 +4381,7 @@ const useVM = pinia.defineStore('vm', {
4330
4381
  newStack.label = this.currentStack.label;
4331
4382
  }
4332
4383
  this.stack.push(newStack);
4384
+ return this.runLine();
4333
4385
  },
4334
4386
  async nextLine() {
4335
4387
  if (this.stack.length === 0) {
@@ -4357,6 +4409,7 @@ const useVM = pinia.defineStore('vm', {
4357
4409
  this.stack.splice(this.stack.length - 1, 1);
4358
4410
  },
4359
4411
  finishGame() {
4412
+ useInventory().onScriptEnd();
4360
4413
  const mainStore = useMain();
4361
4414
  if (mainStore.options.debug) {
4362
4415
  const dialogStore = useDialogStore();
@@ -4368,9 +4421,13 @@ const useVM = pinia.defineStore('vm', {
4368
4421
  },
4369
4422
  async runLine() {
4370
4423
  const cmd = this.currentLine;
4424
+ useInventory().onScriptStart();
4371
4425
  await runCommand(cmd);
4372
4426
  },
4373
- async runLabelFunction(label) {
4427
+ async runLabelFunction(label, comeBackToSameLine) {
4428
+ if (comeBackToSameLine) {
4429
+ this.currentStack.currentIndex--;
4430
+ }
4374
4431
  const branch = this.script[label];
4375
4432
  if (!branch) {
4376
4433
  console.error(`Label ${branch} doesn't exist`);
@@ -4380,8 +4437,7 @@ const useVM = pinia.defineStore('vm', {
4380
4437
  branch: branch,
4381
4438
  label,
4382
4439
  };
4383
- this.addStack(stack);
4384
- await this.runLine();
4440
+ await this.addStack(stack);
4385
4441
  },
4386
4442
  runLabel(label) {
4387
4443
  const branch = this.script[label];
@@ -4456,6 +4512,11 @@ const useDialogStore = pinia.defineStore('dialog', {
4456
4512
  this.dialog = [];
4457
4513
  },
4458
4514
  },
4515
+ getters: {
4516
+ currentDialog() {
4517
+ return this.dialog[this.dialog.length - 1];
4518
+ },
4519
+ },
4459
4520
  });
4460
4521
 
4461
4522
  // Create a pinia store named hud with a state using the type HudState, and save type HudSave, with actions:
@@ -4766,8 +4827,7 @@ async function playerAnswered(choiceIndex) {
4766
4827
  branch: newBranch,
4767
4828
  };
4768
4829
  const vmStore = useVM();
4769
- vmStore.addStack(newStack);
4770
- vmStore.runLine();
4830
+ return vmStore.addStack(newStack);
4771
4831
  }
4772
4832
  else {
4773
4833
  vmStore.nextLine();
@@ -4912,7 +4972,12 @@ const useMain = pinia.defineStore('main', {
4912
4972
  this.modal = false;
4913
4973
  },
4914
4974
  toggleMenu() {
4915
- this.flowState = this.flowState === 'menu' ? 'playing' : 'menu';
4975
+ if (this.modal) {
4976
+ this.modal = false;
4977
+ }
4978
+ else {
4979
+ this.modal = 'menu';
4980
+ }
4916
4981
  },
4917
4982
  pause() {
4918
4983
  this.paused = true;
@@ -7974,7 +8039,9 @@ var script$9 = vue.defineComponent({
7974
8039
  Modal: script$2,
7975
8040
  VolumeControls: script$4,
7976
8041
  },
7977
- props: {},
8042
+ props: {
8043
+ close: Function,
8044
+ },
7978
8045
  data() { },
7979
8046
  mounted() { },
7980
8047
  methods: {
@@ -7982,9 +8049,6 @@ var script$9 = vue.defineComponent({
7982
8049
  window.close();
7983
8050
  // quit
7984
8051
  },
7985
- close() {
7986
- this.$emit('close');
7987
- },
7988
8052
  mainMenu() {
7989
8053
  useMain().menuReturn();
7990
8054
  this.close();
@@ -8048,7 +8112,7 @@ var script$a = vue.defineComponent({
8048
8112
  VolumeControls: script$4,
8049
8113
  },
8050
8114
  props: {
8051
- close: (() => { }),
8115
+ close: Function,
8052
8116
  },
8053
8117
  data() {
8054
8118
  return {
@@ -8099,20 +8163,17 @@ var script$a = vue.defineComponent({
8099
8163
  });
8100
8164
 
8101
8165
  const _hoisted_1$9 = /*#__PURE__*/vue.createElementVNode("h3", { class: "title" }, "Skills", -1);
8102
- const _hoisted_2$7 = { class: "menu-content" };
8103
- const _hoisted_3$4 = {
8166
+ const _hoisted_2$7 = {
8104
8167
  key: 0,
8105
8168
  class: "skills-container"
8106
8169
  };
8107
- const _hoisted_4$3 = ["onClick"];
8108
- const _hoisted_5$3 = { class: "skill-title" };
8109
- const _hoisted_6$3 = { class: "skill-xp-container" };
8110
- const _hoisted_7$2 = { class: "skill-xp-text" };
8111
- const _hoisted_8$1 = { class: "skill-level" };
8112
- const _hoisted_9$1 = {
8113
- key: 1,
8114
- class: "flex flex-row skill-description-container"
8115
- };
8170
+ const _hoisted_3$4 = ["onClick"];
8171
+ const _hoisted_4$3 = { class: "skill-title" };
8172
+ const _hoisted_5$3 = { class: "skill-xp-container" };
8173
+ const _hoisted_6$3 = { class: "skill-xp-text" };
8174
+ const _hoisted_7$2 = { class: "skill-level" };
8175
+ const _hoisted_8$1 = { key: 1 };
8176
+ const _hoisted_9$1 = { class: "flex flex-row skill-description-container" };
8116
8177
  const _hoisted_10$1 = { class: "flex skill-left" };
8117
8178
  const _hoisted_11$1 = { class: "flex skill-right" };
8118
8179
  const _hoisted_12$1 = /*#__PURE__*/vue.createElementVNode("hr", { class: "hr-solid" }, null, -1);
@@ -8129,35 +8190,31 @@ function render$a(_ctx, _cache, $props, $setup, $data, $options) {
8129
8190
  _hoisted_1$9
8130
8191
  ]),
8131
8192
  body: vue.withCtx(() => [
8132
- vue.createElementVNode("div", _hoisted_2$7, [
8133
- (!_ctx.chosenSkill)
8134
- ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$4, [
8135
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.skillsToDisplay, (skill, key) => {
8136
- return (vue.openBlock(), vue.createElementBlock("button", {
8137
- onClick: () => _ctx.clickSkill(key),
8138
- class: "skill-display",
8139
- style: vue.normalizeStyle(_ctx.getSkillStyle(key)),
8140
- key: key
8141
- }, [
8142
- vue.createElementVNode("h3", _hoisted_5$3, vue.toDisplayString(_ctx.getSkillName(key)), 1),
8143
- vue.createElementVNode("div", _hoisted_6$3, [
8144
- vue.createElementVNode("div", {
8145
- class: "skill-xp-bar",
8146
- style: vue.normalizeStyle(_ctx.xpBarWidth(skill.xp))
8147
- }, null, 4),
8148
- vue.createElementVNode("h3", _hoisted_7$2, vue.toDisplayString(skill.xp) + " / " + vue.toDisplayString(_ctx.xpPerLevel) + " XP ", 1)
8149
- ]),
8150
- vue.createElementVNode("h3", _hoisted_8$1, vue.toDisplayString(skill.level), 1)
8151
- ], 12, _hoisted_4$3))
8152
- }), 128))
8153
- ]))
8154
- : (typeof _ctx.chosenSkill === 'string')
8155
- ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_9$1, [
8193
+ (!_ctx.chosenSkill)
8194
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$7, [
8195
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.skillsToDisplay, (skill, key) => {
8196
+ return (vue.openBlock(), vue.createElementBlock("button", {
8197
+ onClick: () => _ctx.clickSkill(key),
8198
+ class: "skill-display",
8199
+ style: vue.normalizeStyle(_ctx.getSkillStyle(key)),
8200
+ key: key
8201
+ }, [
8202
+ vue.createElementVNode("h3", _hoisted_4$3, vue.toDisplayString(_ctx.getSkillName(key)), 1),
8203
+ vue.createElementVNode("div", _hoisted_5$3, [
8204
+ vue.createElementVNode("div", {
8205
+ class: "skill-xp-bar",
8206
+ style: vue.normalizeStyle(_ctx.xpBarWidth(skill.xp))
8207
+ }, null, 4),
8208
+ vue.createElementVNode("h3", _hoisted_6$3, vue.toDisplayString(skill.xp) + " / " + vue.toDisplayString(_ctx.xpPerLevel) + " XP", 1)
8209
+ ]),
8210
+ vue.createElementVNode("h3", _hoisted_7$2, vue.toDisplayString(skill.level), 1)
8211
+ ], 12, _hoisted_3$4))
8212
+ }), 128))
8213
+ ]))
8214
+ : (typeof _ctx.chosenSkill === 'string')
8215
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8$1, [
8216
+ vue.createElementVNode("div", _hoisted_9$1, [
8156
8217
  vue.createElementVNode("div", _hoisted_10$1, [
8157
- vue.createElementVNode("button", {
8158
- class: "button",
8159
- onClick: _cache[0] || (_cache[0] = (...args) => (_ctx.closeSkill && _ctx.closeSkill(...args)))
8160
- }, "Back"),
8161
8218
  vue.createElementVNode("div", {
8162
8219
  class: "skill-display",
8163
8220
  style: vue.normalizeStyle(_ctx.getSkillStyle(_ctx.chosenSkill))
@@ -8169,15 +8226,19 @@ function render$a(_ctx, _cache, $props, $setup, $data, $options) {
8169
8226
  vue.createElementVNode("h3", null, "Level: " + vue.toDisplayString(_ctx.skills[_ctx.chosenSkill].level), 1),
8170
8227
  vue.createElementVNode("p", null, vue.toDisplayString(_ctx.skillConf[_ctx.chosenSkill].description), 1)
8171
8228
  ])
8172
- ]))
8173
- : vue.createCommentVNode("", true)
8174
- ])
8229
+ ]),
8230
+ vue.createElementVNode("button", {
8231
+ class: "button",
8232
+ onClick: _cache[0] || (_cache[0] = (...args) => (_ctx.closeSkill && _ctx.closeSkill(...args)))
8233
+ }, vue.toDisplayString('<--'))
8234
+ ]))
8235
+ : vue.createCommentVNode("", true)
8175
8236
  ]),
8176
8237
  _: 1
8177
8238
  }, 8, ["onClose"]))
8178
8239
  }
8179
8240
 
8180
- var css_248z$b = ".skills-modal {\n width: 800px;\n}\n\n.skills-container {\n display: grid;\n grid-auto-rows: auto;\n grid-template-columns: repeat(3, 1fr);\n grid-gap: 20px 20px;\n}\n\n.skill-display {\n width: 200px;\n height: 300px;\n position: relative;\n background-size: cover;\n}\n\n.skill-title {\n position: absolute;\n bottom: 0px;\n text-align: center;\n width: 100%;\n color: var(--skills-text-color);\n background: var(--skills-text-background);\n}\n\n.skill-level {\n position: absolute;\n top: 0;\n right: 0;\n font-weight: 700;\n font-size: 25px;\n color: var(--skills-level-color);\n width: var(--skills-xp-bar-height);\n height: var(--skills-xp-bar-height);\n background-color: var(--skills-level-background);\n}\n\n.skill-description-container {\n justify-content: space-between;\n align-items: center;\n}\n\n.skill-left {\n flex-direction: column;\n}\n\n.skill-right {\n flex-direction: column;\n align-items: baseline;\n}\n\n.skill-xp-container {\n position: absolute;\n top: 0;\n left: 0;\n height: var(--skills-xp-bar-height);\n width: calc(100% - var(--skills-xp-bar-height));\n background-color: rgba(0, 0, 0, 0.5);\n}\n\n.skill-xp-bar {\n position: absolute;\n top: 0;\n left: 0;\n width: 50%;\n height: 100%;\n background-color: rgba(0, 0, 250, 0.5);\n}\n\n.skill-xp-text {\n z-index: 2;\n}\r\n";
8241
+ var css_248z$b = ".skills-modal {\n width: 800px;\n}\n\n.skills-container {\n display: grid;\n grid-auto-rows: auto;\n grid-template-columns: repeat(3, 1fr);\n grid-gap: 20px 20px;\n}\n\n.skill-display {\n width: 200px;\n height: 300px;\n position: relative;\n background-size: cover;\n}\n\n.skill-title {\n position: absolute;\n bottom: 0px;\n text-align: center;\n width: 100%;\n color: var(--skills-text-color);\n background: var(--skills-text-background);\n}\n\n.skill-level {\n position: absolute;\n top: 0;\n right: 0;\n font-weight: 700;\n font-size: 25px;\n color: var(--skills-level-color);\n width: var(--skills-xp-bar-height);\n height: var(--skills-xp-bar-height);\n background-color: var(--skills-level-background);\n}\n\n.skill-description-container {\n justify-content: space-between;\n align-items: stretch;\n}\n\n.skill-left {\n flex-direction: column;\n border: 1px dashed white;\n padding: 10px;\n justify-content: center;\n}\n\n.skill-right {\n border: 1px dashed white;\n flex-direction: column;\n align-items: baseline;\n flex-grow: 2;\n align-items: baseline;\n}\n\n.skill-xp-container {\n position: absolute;\n top: 0;\n left: 0;\n height: var(--skills-xp-bar-height);\n width: calc(100% - var(--skills-xp-bar-height));\n background-color: rgba(0, 0, 0, 0.5);\n}\n\n.skill-xp-bar {\n position: absolute;\n top: 0;\n left: 0;\n width: 50%;\n height: 100%;\n background-color: rgba(0, 0, 250, 0.5);\n}\n\n.skill-xp-text {\n z-index: 2;\n}\r\n";
8181
8242
  styleInject(css_248z$b);
8182
8243
 
8183
8244
  script$a.render = render$a;
@@ -8185,14 +8246,16 @@ script$a.render = render$a;
8185
8246
  var script$b = vue.defineComponent({
8186
8247
  setup() {
8187
8248
  const store = useInventory();
8249
+ const dialogStore = useDialogStore();
8188
8250
  const items = vue.computed(() => store.items);
8189
- return { items };
8251
+ const currentlyChoosing = vue.computed(() => dialogStore.currentDialog.choices);
8252
+ return { items, currentlyChoosing };
8190
8253
  },
8191
8254
  components: {
8192
8255
  Modal: script$2,
8193
8256
  },
8194
8257
  props: {
8195
- close: (() => { }),
8258
+ close: Function,
8196
8259
  },
8197
8260
  data() {
8198
8261
  return {
@@ -8209,12 +8272,40 @@ var script$b = vue.defineComponent({
8209
8272
  getItemName(item) {
8210
8273
  return this.itemConf[item].name;
8211
8274
  },
8275
+ getItemConf(item) {
8276
+ return this.itemConf[item];
8277
+ },
8212
8278
  clickItem(item) {
8213
8279
  this.chosenId = item;
8214
8280
  },
8215
8281
  closeItem() {
8216
8282
  this.chosenId = false;
8217
8283
  },
8284
+ useItem() {
8285
+ if (this.canUseChosenItem) {
8286
+ const onUse = this.chosenItemConf.onUse;
8287
+ this.close();
8288
+ if (onUse.action === 'jump') {
8289
+ useVM().runLabel(onUse.label);
8290
+ }
8291
+ else if (onUse.action === 'run_label') {
8292
+ useVM().runLabelFunction(onUse.label, true);
8293
+ }
8294
+ else {
8295
+ error(`Unknown action ${onUse.action}`);
8296
+ }
8297
+ }
8298
+ },
8299
+ canUseItem(item) {
8300
+ const conf = this.itemConf[item.id];
8301
+ if (conf &&
8302
+ conf.onUse &&
8303
+ !useInventory().isInteractionTagBlocked(conf.tag) &&
8304
+ !this.currentlyChoosing) {
8305
+ return true;
8306
+ }
8307
+ return false;
8308
+ },
8218
8309
  },
8219
8310
  computed: {
8220
8311
  itemsToDisplay() {
@@ -8232,6 +8323,9 @@ var script$b = vue.defineComponent({
8232
8323
  }
8233
8324
  return null;
8234
8325
  },
8326
+ canUseChosenItem() {
8327
+ return this.canUseItem(this.chosenItem);
8328
+ },
8235
8329
  chosenItemConf() {
8236
8330
  if (this.chosenId) {
8237
8331
  return this.itemConf[this.chosenId];
@@ -8245,18 +8339,15 @@ var script$b = vue.defineComponent({
8245
8339
  });
8246
8340
 
8247
8341
  const _hoisted_1$a = /*#__PURE__*/vue.createElementVNode("h3", { class: "title" }, "Inventory", -1);
8248
- const _hoisted_2$8 = { class: "menu-content" };
8249
- const _hoisted_3$5 = {
8342
+ const _hoisted_2$8 = {
8250
8343
  key: 0,
8251
8344
  class: "inventory-container"
8252
8345
  };
8253
- const _hoisted_4$4 = ["onClick"];
8254
- const _hoisted_5$4 = { class: "item-title" };
8255
- const _hoisted_6$4 = { class: "item-amount" };
8256
- const _hoisted_7$3 = {
8257
- key: 1,
8258
- class: "flex flex-row item-description-container"
8259
- };
8346
+ const _hoisted_3$5 = ["onClick"];
8347
+ const _hoisted_4$4 = { class: "item-title" };
8348
+ const _hoisted_5$4 = { class: "item-amount" };
8349
+ const _hoisted_6$4 = { key: 1 };
8350
+ const _hoisted_7$3 = { class: "flex flex-row item-description-container" };
8260
8351
  const _hoisted_8$2 = { class: "flex item-left" };
8261
8352
  const _hoisted_9$2 = { class: "flex item-right" };
8262
8353
  const _hoisted_10$2 = /*#__PURE__*/vue.createElementVNode("hr", { class: "hr-solid" }, null, -1);
@@ -8278,28 +8369,24 @@ function render$b(_ctx, _cache, $props, $setup, $data, $options) {
8278
8369
  _hoisted_1$a
8279
8370
  ]),
8280
8371
  body: vue.withCtx(() => [
8281
- vue.createElementVNode("div", _hoisted_2$8, [
8282
- (!_ctx.chosenItem && Object.keys(_ctx.itemsToDisplay).length > 0)
8283
- ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$5, [
8284
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.itemsToDisplay, (item) => {
8285
- return (vue.openBlock(), vue.createElementBlock("button", {
8286
- onClick: () => _ctx.clickItem(item.id),
8287
- class: "item-display",
8288
- style: vue.normalizeStyle(_ctx.getItemStyle(item.id)),
8289
- key: item.id
8290
- }, [
8291
- vue.createElementVNode("h3", _hoisted_5$4, vue.toDisplayString(_ctx.getItemName(item.id)), 1),
8292
- vue.createElementVNode("h3", _hoisted_6$4, vue.toDisplayString(item.amount), 1)
8293
- ], 12, _hoisted_4$4))
8294
- }), 128))
8295
- ]))
8296
- : (typeof _ctx.chosenId === 'string')
8297
- ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$3, [
8372
+ (!_ctx.chosenItem && Object.keys(_ctx.itemsToDisplay).length > 0)
8373
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$8, [
8374
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.itemsToDisplay, (item) => {
8375
+ return (vue.openBlock(), vue.createElementBlock("button", {
8376
+ onClick: () => _ctx.clickItem(item.id),
8377
+ class: "item-display",
8378
+ style: vue.normalizeStyle(_ctx.getItemStyle(item.id)),
8379
+ key: item.id
8380
+ }, [
8381
+ vue.createElementVNode("h3", _hoisted_4$4, vue.toDisplayString(_ctx.getItemName(item.id)), 1),
8382
+ vue.createElementVNode("h3", _hoisted_5$4, vue.toDisplayString(item.amount), 1)
8383
+ ], 12, _hoisted_3$5))
8384
+ }), 128))
8385
+ ]))
8386
+ : (typeof _ctx.chosenId === 'string')
8387
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$4, [
8388
+ vue.createElementVNode("div", _hoisted_7$3, [
8298
8389
  vue.createElementVNode("div", _hoisted_8$2, [
8299
- vue.createElementVNode("button", {
8300
- class: "button",
8301
- onClick: _cache[0] || (_cache[0] = (...args) => (_ctx.closeItem && _ctx.closeItem(...args)))
8302
- }, "Back"),
8303
8390
  vue.createElementVNode("div", {
8304
8391
  class: "item-display",
8305
8392
  style: vue.normalizeStyle(_ctx.getItemStyle(_ctx.chosenId))
@@ -8309,17 +8396,25 @@ function render$b(_ctx, _cache, $props, $setup, $data, $options) {
8309
8396
  vue.createElementVNode("h2", null, vue.toDisplayString(_ctx.getItemName(_ctx.chosenId)), 1),
8310
8397
  _hoisted_10$2,
8311
8398
  vue.createElementVNode("h3", null, "Amount: " + vue.toDisplayString(_ctx.chosenItem.amount), 1),
8312
- vue.createElementVNode("p", null, vue.toDisplayString(_ctx.chosenItemConf.description), 1)
8399
+ vue.createElementVNode("p", null, vue.toDisplayString(_ctx.chosenItemConf.description), 1),
8400
+ vue.createElementVNode("button", {
8401
+ onClick: _cache[0] || (_cache[0] = (...args) => (_ctx.useItem && _ctx.useItem(...args))),
8402
+ class: vue.normalizeClass(["button", _ctx.canUseChosenItem ? '' : 'disabled'])
8403
+ }, " Use ", 2)
8313
8404
  ])
8314
- ]))
8315
- : (vue.openBlock(), vue.createElementBlock("div", _hoisted_11$2, _hoisted_13$1))
8316
- ])
8405
+ ]),
8406
+ vue.createElementVNode("button", {
8407
+ class: "button",
8408
+ onClick: _cache[1] || (_cache[1] = (...args) => (_ctx.closeItem && _ctx.closeItem(...args)))
8409
+ }, vue.toDisplayString('<--'))
8410
+ ]))
8411
+ : (vue.openBlock(), vue.createElementBlock("div", _hoisted_11$2, _hoisted_13$1))
8317
8412
  ]),
8318
8413
  _: 1
8319
8414
  }, 8, ["onClose"]))
8320
8415
  }
8321
8416
 
8322
- var css_248z$c = ".inventory-modal {\n width: 800px;\n min-height: 50%;\n}\n\n.inventory-container {\n display: grid;\n grid-auto-rows: auto;\n grid-template-columns: repeat(3, 1fr);\n grid-gap: 20px 20px;\n}\n\n.item-display {\n width: 200px;\n height: 300px;\n position: relative;\n background-repeat: no-repeat;\n background-size: contain;\n}\n\n.item-title {\n position: absolute;\n bottom: 0px;\n text-align: center;\n width: 100%;\n color: var(--inventory-text-color);\n background: var(--inventory-text-background);\n}\n\n.item-amount {\n position: absolute;\n top: 0;\n right: 0;\n font-weight: 700;\n font-size: 25px;\n color: var(--inventory-amount-color);\n width: 40px;\n height: 40px;\n background-color: var(--inventory-amount-background);\n}\n\n.item-description-container {\n justify-content: space-between;\n align-items: center;\n}\n\n.item-left {\n flex-direction: column;\n}\n\n.item-right {\n flex-direction: column;\n align-items: baseline;\n}\r\n";
8417
+ var css_248z$c = ".inventory-modal {\n width: 800px;\n min-height: 50%;\n}\n\n.inventory-container {\n display: grid;\n grid-auto-rows: auto;\n grid-template-columns: repeat(3, 1fr);\n grid-gap: 20px 20px;\n}\n\n.item-display {\n width: 200px;\n height: 300px;\n position: relative;\n background-repeat: no-repeat;\n background-size: contain;\n}\n\n.item-title {\n position: absolute;\n bottom: 0px;\n text-align: center;\n width: 100%;\n color: var(--inventory-text-color);\n background: var(--inventory-text-background);\n}\n\n.item-amount {\n position: absolute;\n top: 0;\n right: 0;\n font-weight: 700;\n font-size: 25px;\n color: var(--inventory-amount-color);\n width: 40px;\n height: 40px;\n background-color: var(--inventory-amount-background);\n}\n\n.item-description-container {\n justify-content: space-between;\n align-items: stretch;\n}\n\n.item-left {\n border: 1px dashed white;\n flex-direction: column;\n padding: 10px;\n justify-content: center;\n}\n\n.item-right {\n border: 1px dashed white;\n flex-direction: column;\n flex-grow: 2;\n align-items: baseline;\n padding: 10px;\n}\r\n";
8323
8418
  styleInject(css_248z$c);
8324
8419
 
8325
8420
  script$b.render = render$b;
@@ -8336,7 +8431,7 @@ var script$c = vue.defineComponent({
8336
8431
  },
8337
8432
  },
8338
8433
  props: {
8339
- close: (() => { }),
8434
+ close: Function,
8340
8435
  },
8341
8436
  methods: {
8342
8437
  getQuestData(questId) {
@@ -8793,26 +8888,26 @@ function render$d(_ctx, _cache, $props, $setup, $data, $options) {
8793
8888
  (_ctx.modal === 'skills')
8794
8889
  ? (vue.openBlock(), vue.createBlock(_component_Skills, {
8795
8890
  key: 0,
8796
- onClose: _ctx.closeModal
8797
- }, null, 8, ["onClose"]))
8891
+ close: _ctx.closeModal
8892
+ }, null, 8, ["close"]))
8798
8893
  : vue.createCommentVNode("", true),
8799
8894
  (_ctx.modal === 'inventory')
8800
8895
  ? (vue.openBlock(), vue.createBlock(_component_Inventory, {
8801
8896
  key: 1,
8802
- onClose: _ctx.closeModal
8803
- }, null, 8, ["onClose"]))
8897
+ close: _ctx.closeModal
8898
+ }, null, 8, ["close"]))
8804
8899
  : vue.createCommentVNode("", true),
8805
8900
  (_ctx.modal === 'quests')
8806
8901
  ? (vue.openBlock(), vue.createBlock(_component_Quests, {
8807
8902
  key: 2,
8808
- onClose: _ctx.closeModal
8809
- }, null, 8, ["onClose"]))
8903
+ close: _ctx.closeModal
8904
+ }, null, 8, ["close"]))
8810
8905
  : vue.createCommentVNode("", true),
8811
8906
  (_ctx.modal === 'menu')
8812
8907
  ? (vue.openBlock(), vue.createBlock(_component_MainMenu, {
8813
8908
  key: 3,
8814
- onClose: _ctx.closeModal
8815
- }, null, 8, ["onClose"]))
8909
+ close: _ctx.closeModal
8910
+ }, null, 8, ["close"]))
8816
8911
  : vue.createCommentVNode("", true),
8817
8912
  vue.createVNode(vue.Transition, { name: "fade" }, {
8818
8913
  default: vue.withCtx(() => [
@@ -9186,8 +9281,7 @@ const ifFunction = async (cmd) => {
9186
9281
  branch: newBranch,
9187
9282
  currentIndex: 0,
9188
9283
  };
9189
- vmStore.addStack(newStack);
9190
- return vmStore.runLine();
9284
+ return vmStore.addStack(newStack);
9191
9285
  }
9192
9286
  return vmStore.nextLine();
9193
9287
  };
@@ -9412,8 +9506,7 @@ const addItemPlugin = new CommandPlugin('add_item', async (cmd) => {
9412
9506
  amount,
9413
9507
  });
9414
9508
  return useVM().nextLine();
9415
- }, generateParser('add_item'));
9416
-
9509
+ }, generateParser('add_item'));
9417
9510
  // Write a CommandPlugin for removeing items to the inventory store
9418
9511
  const removeItemPlugin = new CommandPlugin('remove_item', async (cmd) => {
9419
9512
  const id = cmd.args[0];
@@ -9424,7 +9517,21 @@ const removeItemPlugin = new CommandPlugin('remove_item', async (cmd) => {
9424
9517
  amount,
9425
9518
  });
9426
9519
  return useVM().nextLine();
9427
- }, generateParser('remove_item'));
9520
+ }, generateParser('remove_item'));
9521
+ // Write a CommandPlugin for enabling an interactiongTag in the inventory store
9522
+ const enableInteractionPlugin = new CommandPlugin('enable_interaction', async (cmd) => {
9523
+ const tag = cmd.args[0];
9524
+ const inventory = useInventory();
9525
+ inventory.enableInteraction(tag);
9526
+ return useVM().nextLine();
9527
+ }, generateParser('enable_interaction'));
9528
+ // Write a CommandPlugin for disabling an interactiongTag in the inventory store
9529
+ const disableInteractionPlugin = new CommandPlugin('disable_interaction', async (cmd) => {
9530
+ const tag = cmd.args[0];
9531
+ const inventory = useInventory();
9532
+ inventory.disableInteraction(tag);
9533
+ return useVM().nextLine();
9534
+ }, generateParser('disable_interaction'));
9428
9535
 
9429
9536
  // Write a CommandPlugin for starting a quest with the useQuests quests store
9430
9537
  const startQuestPlugin = new CommandPlugin('start_quest', async (cmd) => {
@@ -9471,7 +9578,6 @@ const runLabelPlugin = new CommandPlugin('run_label', async (cmd) => {
9471
9578
  }, generateParser('run_label'));
9472
9579
 
9473
9580
  function registerBaseCommands(vm) {
9474
- vm.addCommand(addItemPlugin);
9475
9581
  vm.addCommand(addLevelPlugin);
9476
9582
  vm.addCommand(addStatPlugin);
9477
9583
  vm.addCommand(addXpPlugin);
@@ -9483,7 +9589,6 @@ function registerBaseCommands(vm) {
9483
9589
  vm.addCommand(notifyPlugin);
9484
9590
  vm.addCommand(pauseCommand);
9485
9591
  vm.addCommand(playCommand);
9486
- vm.addCommand(removeItemPlugin);
9487
9592
  vm.addCommand(setButtonCommand);
9488
9593
  vm.addCommand(setScreenCommand);
9489
9594
  vm.addCommand(setStatCommand);
@@ -9500,6 +9605,11 @@ function registerBaseCommands(vm) {
9500
9605
  vm.addCommand(startObjectivePlugin);
9501
9606
  vm.addCommand(completeObjectivePlugin);
9502
9607
  vm.addCommand(completeQuestPlugin);
9608
+ // Inventory
9609
+ vm.addCommand(addItemPlugin);
9610
+ vm.addCommand(removeItemPlugin);
9611
+ vm.addCommand(enableInteractionPlugin);
9612
+ vm.addCommand(disableInteractionPlugin);
9503
9613
  }
9504
9614
 
9505
9615
  class NarratPlugin {
@@ -9542,7 +9652,7 @@ async function startApp(config, options) {
9542
9652
  });
9543
9653
  registerBaseCommands(vm);
9544
9654
  logManager.setupDebugger(options.debug);
9545
- console.log('%c Narrat game engine – 1.3.0 - June 25, 2022 18:05:43', 'background: #222; color: #bada55');
9655
+ console.log('%c Narrat game engine – 1.3.1 - June 25, 2022 22:52:46', 'background: #222; color: #bada55');
9546
9656
  vm.callHook('onNarratSetup');
9547
9657
  app.mount('#game-holder');
9548
9658
  if (options.debug) {