narrat 0.8.0 → 0.8.3

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/CHANGELOG.md CHANGED
@@ -1,9 +1,23 @@
1
1
  # Narrat changelog
2
2
 
3
- ## 0.7.2
3
+ ## 0.8.3
4
+
5
+ - Fixed bug where menu button would move up as more text gets added to the game
6
+
7
+ ## 0.8.2
8
+
9
+ - Added css to hide scrollbars in the game UI
10
+ - Added a new Menu button with the options to quit and change volume
11
+ - Removed volume slider from the HUD and moved it to the new menu
12
+
13
+ ## 0.8.1
14
+
15
+ - Fixed a bug in accessing values inside conditions caused by changed in 0.7.2
16
+
17
+ ## 0.8.0
4
18
 
5
19
  - Changed the `set` method to access things without caps (`data`, `skills`, `buttons` instead of `DATA`, `SKILLS`, `BUTTONS`) for consistency.
6
- - Changed string interpolation to have more accessible objects, now values in `data` need to be access with `%{data.something}` instead of just `%{something}`
20
+ - Changed string interpolation to have more accessible objects, now values in `data` need to be accessed with `%{data.something}` instead of just `%{something}`
7
21
  - Now possible to access skill levels in string interpolation with `%{skills.someSkill.level}`
8
22
  - Improvements to how skill checks are printed to be less awkward
9
23
 
@@ -0,0 +1,61 @@
1
+ declare const _default: import("vue").DefineComponent<Readonly<import("vue").ComponentPropsOptions<{
2
+ [x: string]: unknown;
3
+ }>>, unknown, {
4
+ menuActive: boolean;
5
+ }, {}, {
6
+ openMenu(): void;
7
+ closeMenu(): void;
8
+ toggleMenu(): void;
9
+ quit(): void;
10
+ }, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<(readonly unknown[] & {
11
+ [x: number]: string;
12
+ } & {
13
+ [Symbol.iterator]?: IterableIterator<string>;
14
+ length?: number;
15
+ toString?: string;
16
+ toLocaleString?: string;
17
+ concat?: string[];
18
+ join?: string;
19
+ slice?: string[];
20
+ indexOf?: (searchElement: string, fromIndex?: number) => number;
21
+ lastIndexOf?: (searchElement: string, fromIndex?: number) => number;
22
+ every?: {
23
+ <S extends string>(predicate: (value: string, index: number, array: readonly string[]) => value is S, thisArg?: any): this is readonly S[];
24
+ (predicate: (value: string, index: number, array: readonly string[]) => unknown, thisArg?: any): boolean;
25
+ };
26
+ some?: (predicate: (value: string, index: number, array: readonly string[]) => unknown, thisArg?: any) => boolean;
27
+ forEach?: (callbackfn: (value: string, index: number, array: readonly string[]) => void, thisArg?: any) => void;
28
+ map?: <U>(callbackfn: (value: string, index: number, array: readonly string[]) => U, thisArg?: any) => U[];
29
+ filter?: {
30
+ <S_1 extends string>(predicate: (value: string, index: number, array: readonly string[]) => value is S_1, thisArg?: any): S_1[];
31
+ (predicate: (value: string, index: number, array: readonly string[]) => unknown, thisArg?: any): string[];
32
+ };
33
+ reduce?: {
34
+ (callbackfn: (previousValue: string, currentValue: string, currentIndex: number, array: readonly string[]) => string): string;
35
+ (callbackfn: (previousValue: string, currentValue: string, currentIndex: number, array: readonly string[]) => string, initialValue: string): string;
36
+ <U_1>(callbackfn: (previousValue: U_1, currentValue: string, currentIndex: number, array: readonly string[]) => U_1, initialValue: U_1): U_1;
37
+ };
38
+ reduceRight?: {
39
+ (callbackfn: (previousValue: string, currentValue: string, currentIndex: number, array: readonly string[]) => string): string;
40
+ (callbackfn: (previousValue: string, currentValue: string, currentIndex: number, array: readonly string[]) => string, initialValue: string): string;
41
+ <U_2>(callbackfn: (previousValue: U_2, currentValue: string, currentIndex: number, array: readonly string[]) => U_2, initialValue: U_2): U_2;
42
+ };
43
+ find?: {
44
+ <S_2 extends string>(predicate: (this: void, value: string, index: number, obj: readonly string[]) => value is S_2, thisArg?: any): S_2;
45
+ (predicate: (value: string, index: number, obj: readonly string[]) => unknown, thisArg?: any): string;
46
+ };
47
+ findIndex?: (predicate: (value: string, index: number, obj: readonly string[]) => unknown, thisArg?: any) => number;
48
+ entries?: IterableIterator<[number, string]>;
49
+ keys?: IterableIterator<number>;
50
+ values?: IterableIterator<string>;
51
+ includes?: (searchElement: string, fromIndex?: number) => boolean;
52
+ flatMap?: <U_3, This = undefined>(callback: (this: This, value: string, index: number, array: string[]) => U_3 | readonly U_3[], thisArg?: This) => U_3[];
53
+ flat?: unknown[];
54
+ }) | ({
55
+ [x: string]: unknown;
56
+ } & {} & {
57
+ [x: string]: unknown;
58
+ })> & {}, {
59
+ [x: number]: string;
60
+ } | {}>;
61
+ export default _default;
package/lib/index.esm.js CHANGED
@@ -1,6 +1,6 @@
1
- // Version: 0.8.0 - April 26, 2022 13:18:38
1
+ // Version: 0.8.3 - May 16, 2022 14:42:27
2
2
  import 'es6-promise/auto';
3
- import { ref, reactive, readonly, defineComponent, openBlock, createElementBlock, normalizeStyle, createElementVNode, createCommentVNode, Fragment, renderList, createBlock, Transition, withCtx, renderSlot, createTextVNode, resolveComponent, toDisplayString, createVNode, TransitionGroup, createApp } from 'vue';
3
+ import { ref, reactive, readonly, defineComponent, openBlock, createElementBlock, normalizeStyle, createElementVNode, createCommentVNode, Fragment, renderList, createBlock, Transition, withCtx, renderSlot, createTextVNode, resolveComponent, toDisplayString, TransitionGroup, createVNode, createApp } from 'vue';
4
4
  import { createLogger, createStore } from 'vuex';
5
5
 
6
6
  function styleInject(css, ref) {
@@ -30,7 +30,7 @@ function styleInject(css, ref) {
30
30
  }
31
31
  }
32
32
 
33
- 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.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.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.list-item {\n display: inline-block;\n margin-right: 10px;\n}\n\n.list-enter-active,\n.list-leave-active {\n transition: all 0.3s ease;\n}\n\n/* .list-move {\n transition: transform 0.3s ease;\n} */\n\n.list-enter-from,\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,\n.notification-leave-active {\n transition: all 0.3s ease;\n}\n\n/* .notification-move {\n transition: transform 0.3s ease;\n} */\n\n.notification-enter-from,\n.notification-leave-to {\n opacity: 0;\n transform: translateY(-300px);\n}\n\n.fade-enter-active,\n.fade-leave-active {\n transition: opacity 0.3s ease;\n}\n\n.fade-enter-from,\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}\n\nselect {\n background-color: grey;\n}\n\nbutton {\n background-color: #72080f;\n color: white;\n border-radius: 30px;\n padding: 5px;\n font-weight: 800;\n font-size: 16px;\n margin: 5px;\n}\n\na {\n color: pink;\n text-decoration: underline;\n}\n\nth,\ntd {\n padding: 4px;\n border: 1px solid white;\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@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}\n";
33
+ 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.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.list-item {\n display: inline-block;\n margin-right: 10px;\n}\n\n.list-enter-active,\n.list-leave-active {\n transition: all 0.3s ease;\n}\n\n/* .list-move {\n transition: transform 0.3s ease;\n} */\n\n.list-enter-from,\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,\n.notification-leave-active {\n transition: all 0.3s ease;\n}\n\n/* .notification-move {\n transition: transform 0.3s ease;\n} */\n\n.notification-enter-from,\n.notification-leave-to {\n opacity: 0;\n transform: translateY(-300px);\n}\n\n.fade-enter-active,\n.fade-leave-active {\n transition: opacity 0.3s ease;\n}\n\n.fade-enter-from,\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}\n\nselect {\n background-color: grey;\n}\n\n.button {\n background-color: #72080f;\n color: white;\n border-radius: 15px;\n padding: 10px;\n font-weight: 800;\n font-size: 16px;\n margin: 10px;\n}\n\na {\n color: pink;\n text-decoration: underline;\n}\n\nth,\ntd {\n padding: 4px;\n border: 1px solid white;\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\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}\n";
34
34
  styleInject(css_248z);
35
35
 
36
36
  const f=ref([]),v=ref(null),m=ref(null),g=ref(null),h=reactive({current:""}),y=[],b=ref(!1),k=readonly(f),w=readonly(v),M=readonly(m),q=readonly(g),x=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;}};
@@ -360,7 +360,7 @@ function render$2(_ctx, _cache, $props, $setup, $data, $options) {
360
360
  renderSlot(_ctx.$slots, "footer", {}, () => [
361
361
  _hoisted_9,
362
362
  createElementVNode("button", {
363
- class: "modal-default-button",
363
+ class: "modal-default-button button",
364
364
  onClick: _cache[0] || (_cache[0] = $event => (_ctx.$emit('close')))
365
365
  }, " Close ")
366
366
  ])
@@ -475,26 +475,27 @@ var script$3 = defineComponent({
475
475
  });
476
476
 
477
477
  const _hoisted_1$3 = { class: "debug-menu" };
478
- const _hoisted_2$2 = /*#__PURE__*/createElementVNode("h3", null, "Error(s)", -1);
478
+ const _hoisted_2$2 = /*#__PURE__*/createElementVNode("h3", { class: "title" }, "Error(s)", -1);
479
479
  const _hoisted_3$2 = /*#__PURE__*/createTextVNode(" There are errors in your dialogue scripts. Open the developer console for more details. ");
480
480
  const _hoisted_4$2 = ["innerHTML"];
481
- const _hoisted_5$2 = /*#__PURE__*/createElementVNode("h3", null, "Debug Menu!", -1);
482
- const _hoisted_6$2 = /*#__PURE__*/createTextVNode(" Hello this is the debug menu. ");
483
- const _hoisted_7$2 = /*#__PURE__*/createElementVNode("option", {
481
+ const _hoisted_5$2 = /*#__PURE__*/createElementVNode("h3", { class: "title" }, "Debug Menu!", -1);
482
+ const _hoisted_6$2 = { class: "container" };
483
+ const _hoisted_7$2 = /*#__PURE__*/createTextVNode(" Hello this is the debug menu. ");
484
+ const _hoisted_8$1 = /*#__PURE__*/createElementVNode("option", {
484
485
  selected: "",
485
486
  disabled: ""
486
487
  }, "Jump to a label", -1);
487
- const _hoisted_8$1 = ["value"];
488
- const _hoisted_9$1 = { class: "grid grid-cols-3 gap-4" };
489
- const _hoisted_10 = /*#__PURE__*/createElementVNode("h2", null, "Skills", -1);
490
- const _hoisted_11 = { class: "table-auto" };
491
- const _hoisted_12 = /*#__PURE__*/createElementVNode("tr", null, [
488
+ const _hoisted_9$1 = ["value"];
489
+ const _hoisted_10 = { class: "grid grid-cols-3 gap-4" };
490
+ const _hoisted_11 = /*#__PURE__*/createElementVNode("h2", null, "Skills", -1);
491
+ const _hoisted_12 = { class: "table-auto" };
492
+ const _hoisted_13 = /*#__PURE__*/createElementVNode("tr", null, [
492
493
  /*#__PURE__*/createElementVNode("th", null, "Skill"),
493
494
  /*#__PURE__*/createElementVNode("th", null, "Level")
494
495
  ], -1);
495
- const _hoisted_13 = /*#__PURE__*/createElementVNode("h2", null, "Skill Checks", -1);
496
- const _hoisted_14 = { class: "table-auto" };
497
- const _hoisted_15 = /*#__PURE__*/createElementVNode("thead", null, [
496
+ const _hoisted_14 = /*#__PURE__*/createElementVNode("h2", null, "Skill Checks", -1);
497
+ const _hoisted_15 = { class: "table-auto" };
498
+ const _hoisted_16 = /*#__PURE__*/createElementVNode("thead", null, [
498
499
  /*#__PURE__*/createElementVNode("tr", null, [
499
500
  /*#__PURE__*/createElementVNode("th", null, "Skill Check"),
500
501
  /*#__PURE__*/createElementVNode("th", null, "Available"),
@@ -508,7 +509,7 @@ function render$3(_ctx, _cache, $props, $setup, $data, $options) {
508
509
  return (openBlock(), createElementBlock("div", _hoisted_1$3, [
509
510
  createElementVNode("button", {
510
511
  onClick: _cache[0] || (_cache[0] = (...args) => (_ctx.open && _ctx.open(...args))),
511
- class: "debug-button"
512
+ class: "button debug-button"
512
513
  }, "Debug Menu"),
513
514
  (_ctx.errors.length > 0)
514
515
  ? (openBlock(), createBlock(_component_modal, {
@@ -542,49 +543,53 @@ function render$3(_ctx, _cache, $props, $setup, $data, $options) {
542
543
  _hoisted_5$2
543
544
  ]),
544
545
  body: withCtx(() => [
545
- _hoisted_6$2,
546
- createElementVNode("select", {
547
- name: "label-selector",
548
- onChange: _cache[1] || (_cache[1] = $event => (_ctx.labelSelected($event)))
549
- }, [
546
+ createElementVNode("div", _hoisted_6$2, [
550
547
  _hoisted_7$2,
551
- (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.labels, (label) => {
552
- return (openBlock(), createElementBlock("option", {
553
- value: label,
554
- key: label
555
- }, toDisplayString(label), 9, _hoisted_8$1))
556
- }), 128))
557
- ], 32),
558
- createElementVNode("div", _hoisted_9$1, [
559
- createElementVNode("button", {
560
- onClick: _cache[2] || (_cache[2] = (...args) => (_ctx.wordCount && _ctx.wordCount(...args)))
561
- }, "Word Count"),
562
- createElementVNode("button", {
563
- onClick: _cache[3] || (_cache[3] = (...args) => (_ctx.save && _ctx.save(...args)))
564
- }, "Save Game")
565
- ]),
566
- createElementVNode("h3", null, "Play time: " + toDisplayString(_ctx.getPlayTimeString()), 1),
567
- _hoisted_10,
568
- createElementVNode("table", _hoisted_11, [
569
- _hoisted_12,
570
- (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.skills, (skill, key) => {
571
- return (openBlock(), createElementBlock("tr", { key: key }, [
572
- createElementVNode("td", null, toDisplayString(key), 1),
573
- createElementVNode("td", null, toDisplayString(skill.level), 1)
574
- ]))
575
- }), 128))
576
- ]),
577
- _hoisted_13,
578
- createElementVNode("table", _hoisted_14, [
579
- _hoisted_15,
580
- createElementVNode("tbody", null, [
581
- (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.skillChecks, (check, key) => {
548
+ createElementVNode("select", {
549
+ name: "label-selector",
550
+ onChange: _cache[1] || (_cache[1] = $event => (_ctx.labelSelected($event)))
551
+ }, [
552
+ _hoisted_8$1,
553
+ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.labels, (label) => {
554
+ return (openBlock(), createElementBlock("option", {
555
+ value: label,
556
+ key: label
557
+ }, toDisplayString(label), 9, _hoisted_9$1))
558
+ }), 128))
559
+ ], 32),
560
+ createElementVNode("div", _hoisted_10, [
561
+ createElementVNode("button", {
562
+ onClick: _cache[2] || (_cache[2] = (...args) => (_ctx.wordCount && _ctx.wordCount(...args))),
563
+ class: "button"
564
+ }, "Word Count"),
565
+ createElementVNode("button", {
566
+ onClick: _cache[3] || (_cache[3] = (...args) => (_ctx.save && _ctx.save(...args))),
567
+ class: "button"
568
+ }, "Save Game")
569
+ ]),
570
+ createElementVNode("h3", null, "Play time: " + toDisplayString(_ctx.getPlayTimeString()), 1),
571
+ _hoisted_11,
572
+ createElementVNode("table", _hoisted_12, [
573
+ _hoisted_13,
574
+ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.skills, (skill, key) => {
582
575
  return (openBlock(), createElementBlock("tr", { key: key }, [
583
576
  createElementVNode("td", null, toDisplayString(key), 1),
584
- createElementVNode("td", null, toDisplayString(check.available ? '✅' : '❌'), 1),
585
- createElementVNode("td", null, toDisplayString(check.passed ? '✅' : '❌'), 1)
577
+ createElementVNode("td", null, toDisplayString(skill.level), 1)
586
578
  ]))
587
579
  }), 128))
580
+ ]),
581
+ _hoisted_14,
582
+ createElementVNode("table", _hoisted_15, [
583
+ _hoisted_16,
584
+ createElementVNode("tbody", null, [
585
+ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.skillChecks, (check, key) => {
586
+ return (openBlock(), createElementBlock("tr", { key: key }, [
587
+ createElementVNode("td", null, toDisplayString(key), 1),
588
+ createElementVNode("td", null, toDisplayString(check.available ? '✅' : '❌'), 1),
589
+ createElementVNode("td", null, toDisplayString(check.passed ? '✅' : '❌'), 1)
590
+ ]))
591
+ }), 128))
592
+ ])
588
593
  ])
589
594
  ])
590
595
  ]),
@@ -594,7 +599,7 @@ function render$3(_ctx, _cache, $props, $setup, $data, $options) {
594
599
  ]))
595
600
  }
596
601
 
597
- var css_248z$4 = ".debug-menu {\n z-index: 9999;\n}\n\n.debug-button {\n background-color: #4fc08d;\n position: fixed;\n bottom: 10px;\n right: 10px;\n padding: 2px;\n}\n\n.error-message {\n color: orangered;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n\n.error-filename {\n color: grey;\n text-decoration: underline;\n}\n";
602
+ var css_248z$4 = ".debug-menu {\n z-index: 9999;\n}\n\n.debug-button {\n background-color: #4fc08d;\n position: fixed;\n bottom: 10px;\n right: 10px;\n padding: 5px;\n}\n\n.error-message {\n color: orangered;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n\n.error-filename {\n color: grey;\n text-decoration: underline;\n}\n";
598
603
  styleInject(css_248z$4);
599
604
 
600
605
  script$3.render = render$3;
@@ -3853,7 +3858,8 @@ var script$4 = defineComponent({
3853
3858
  };
3854
3859
  },
3855
3860
  mounted() {
3856
- howler.Howler.volume(0.5);
3861
+ const volume = howler.Howler.volume();
3862
+ this.$refs.slider.value = volume;
3857
3863
  },
3858
3864
  methods: {
3859
3865
  changeVolume(event) {
@@ -3876,12 +3882,16 @@ var script$4 = defineComponent({
3876
3882
  });
3877
3883
 
3878
3884
  const _hoisted_1$4 = { class: "volume-controls" };
3879
- const _hoisted_2$3 = /*#__PURE__*/createElementVNode("label", { for: "volume" }, "Volume", -1);
3885
+ const _hoisted_2$3 = /*#__PURE__*/createElementVNode("label", {
3886
+ for: "volume",
3887
+ class: "volume-label"
3888
+ }, "Volume:", -1);
3880
3889
 
3881
3890
  function render$4(_ctx, _cache, $props, $setup, $data, $options) {
3882
3891
  return (openBlock(), createElementBlock("div", _hoisted_1$4, [
3883
3892
  _hoisted_2$3,
3884
3893
  createElementVNode("input", {
3894
+ ref: "slider",
3885
3895
  class: "volume-slider",
3886
3896
  type: "range",
3887
3897
  id: "volume",
@@ -3891,11 +3901,11 @@ function render$4(_ctx, _cache, $props, $setup, $data, $options) {
3891
3901
  step: "0.1",
3892
3902
  value: "0.5",
3893
3903
  onChange: _cache[0] || (_cache[0] = (...args) => (_ctx.changeVolume && _ctx.changeVolume(...args)))
3894
- }, null, 32)
3904
+ }, null, 544)
3895
3905
  ]))
3896
3906
  }
3897
3907
 
3898
- var css_248z$5 = ".volume-controls {\n color: white;\n font-size: 18px;\n -webkit-text-stroke: 1px black;\n}\n\n.volume-slider {\n width: 50px;\n background-color: blue;\n}\n";
3908
+ var css_248z$5 = ".volume-label {\n margin: 5px 20px;\n}\n\n.volume-controls {\n color: white;\n font-size: 20px;\n display: flex;\n align-items: center;\n}\n\n.volume-slider {\n width: 200px;\n background-color: blue;\n}\n";
3899
3909
  styleInject(css_248z$5);
3900
3910
 
3901
3911
  script$4.render = render$4;
@@ -3930,13 +3940,10 @@ const _hoisted_2$4 = { class: "bold" };
3930
3940
  const _hoisted_3$3 = /*#__PURE__*/createTextVNode(": ");
3931
3941
 
3932
3942
  function render$5(_ctx, _cache, $props, $setup, $data, $options) {
3933
- const _component_VolumeControls = resolveComponent("VolumeControls");
3934
-
3935
3943
  return (openBlock(), createElementBlock("div", {
3936
3944
  class: "hud",
3937
3945
  style: normalizeStyle(_ctx.hudStyle)
3938
3946
  }, [
3939
- createVNode(_component_VolumeControls),
3940
3947
  (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.stats, (value, key) => {
3941
3948
  return (openBlock(), createElementBlock("div", {
3942
3949
  key: key,
@@ -4154,6 +4161,7 @@ function loadImage(key, path, resolver, rejecter) {
4154
4161
  }
4155
4162
 
4156
4163
  const audio = {};
4164
+ howler.Howler.volume(0.5);
4157
4165
  async function loadAudioAssets(config) {
4158
4166
  console.log(`Loading audio`);
4159
4167
  const loadingPromises = [];
@@ -4297,8 +4305,87 @@ function debounce(func, waitMilliseconds = 50, options = {}) {
4297
4305
  return debouncedFunction;
4298
4306
  }
4299
4307
 
4300
- console.log('hello app');
4301
4308
  var script$8 = defineComponent({
4309
+ components: {
4310
+ Modal: script$2,
4311
+ VolumeControls: script$4,
4312
+ },
4313
+ props: {},
4314
+ data() {
4315
+ return {
4316
+ menuActive: false,
4317
+ };
4318
+ },
4319
+ mounted() {
4320
+ document.addEventListener('keydown', (event) => {
4321
+ const key = event.key;
4322
+ if (key === 'Escape') {
4323
+ this.toggleMenu();
4324
+ }
4325
+ });
4326
+ },
4327
+ methods: {
4328
+ openMenu() {
4329
+ this.menuActive = true;
4330
+ },
4331
+ closeMenu() {
4332
+ this.menuActive = false;
4333
+ },
4334
+ toggleMenu() {
4335
+ this.menuActive = !this.menuActive;
4336
+ },
4337
+ quit() {
4338
+ window.close();
4339
+ // quit
4340
+ },
4341
+ },
4342
+ computed: {},
4343
+ });
4344
+
4345
+ const _hoisted_1$7 = { class: "menu-container" };
4346
+ const _hoisted_2$6 = /*#__PURE__*/createElementVNode("h3", { class: "title" }, "Menu", -1);
4347
+ const _hoisted_3$4 = { class: "menu-content" };
4348
+
4349
+ function render$8(_ctx, _cache, $props, $setup, $data, $options) {
4350
+ const _component_VolumeControls = resolveComponent("VolumeControls");
4351
+ const _component_modal = resolveComponent("modal");
4352
+
4353
+ return (openBlock(), createElementBlock("div", _hoisted_1$7, [
4354
+ createElementVNode("button", {
4355
+ class: "button menu-toggle-button",
4356
+ onClick: _cache[0] || (_cache[0] = (...args) => (_ctx.openMenu && _ctx.openMenu(...args)))
4357
+ }, "Menu"),
4358
+ (_ctx.menuActive)
4359
+ ? (openBlock(), createBlock(_component_modal, {
4360
+ key: 0,
4361
+ class: "menu",
4362
+ onClose: _ctx.closeMenu
4363
+ }, {
4364
+ header: withCtx(() => [
4365
+ _hoisted_2$6
4366
+ ]),
4367
+ body: withCtx(() => [
4368
+ createElementVNode("div", _hoisted_3$4, [
4369
+ createVNode(_component_VolumeControls),
4370
+ createElementVNode("button", {
4371
+ class: "button title quit-button",
4372
+ onClick: _cache[1] || (_cache[1] = (...args) => (_ctx.quit && _ctx.quit(...args)))
4373
+ }, "Quit")
4374
+ ])
4375
+ ]),
4376
+ _: 1
4377
+ }, 8, ["onClose"]))
4378
+ : createCommentVNode("", true)
4379
+ ]))
4380
+ }
4381
+
4382
+ var css_248z$9 = ".menu-content {\n margin: 50px;\n text-align: center;\n}\n\n.menu-toggle-button {\n margin: 0;\n padding: 2px;\n border-radius: 5px;\n}\n\n.quit-button {\n margin: 50px;\n text-align: center;\n}\n";
4383
+ styleInject(css_248z$9);
4384
+
4385
+ script$8.render = render$8;
4386
+
4387
+ console.log('hello app');
4388
+ var script$9 = defineComponent({
4302
4389
  $refs: {
4303
4390
  dialogContainer: HTMLInputElement,
4304
4391
  },
@@ -4310,6 +4397,7 @@ var script$8 = defineComponent({
4310
4397
  LoadingBar: script$6,
4311
4398
  NotificationToast: script$7,
4312
4399
  Hud: script$5,
4400
+ Menu: script$8,
4313
4401
  },
4314
4402
  data() {
4315
4403
  return {
@@ -4579,16 +4667,17 @@ var script$8 = defineComponent({
4579
4667
  },
4580
4668
  });
4581
4669
 
4582
- const _hoisted_1$7 = ["width", "height"];
4583
- const _hoisted_2$6 = /*#__PURE__*/createElementVNode("div", { class: "anchor" }, null, -1);
4584
- const _hoisted_3$4 = {
4670
+ const _hoisted_1$8 = ["width", "height"];
4671
+ const _hoisted_2$7 = /*#__PURE__*/createElementVNode("div", { class: "anchor" }, null, -1);
4672
+ const _hoisted_3$5 = {
4585
4673
  key: 1,
4586
4674
  class: "flex flex-col"
4587
4675
  };
4588
4676
  const _hoisted_4$3 = { key: 2 };
4589
4677
 
4590
- function render$8(_ctx, _cache, $props, $setup, $data, $options) {
4678
+ function render$9(_ctx, _cache, $props, $setup, $data, $options) {
4591
4679
  const _component_Hud = resolveComponent("Hud");
4680
+ const _component_Menu = resolveComponent("Menu");
4592
4681
  const _component_DialogPicture = resolveComponent("DialogPicture");
4593
4682
  const _component_DialogBox = resolveComponent("DialogBox");
4594
4683
  const _component_LoadingBar = resolveComponent("LoadingBar");
@@ -4606,6 +4695,7 @@ function render$8(_ctx, _cache, $props, $setup, $data, $options) {
4606
4695
  class: "game",
4607
4696
  style: normalizeStyle(_ctx.gameStyle)
4608
4697
  }, [
4698
+ createVNode(_component_Menu, { class: "menu-toggle" }),
4609
4699
  createVNode(Transition, { name: "fade" }, {
4610
4700
  default: withCtx(() => [
4611
4701
  (_ctx.picture)
@@ -4627,7 +4717,7 @@ function render$8(_ctx, _cache, $props, $setup, $data, $options) {
4627
4717
  width: _ctx.layoutWidth,
4628
4718
  height: _ctx.layoutHeight,
4629
4719
  id: "background-canvas"
4630
- }, null, 8, _hoisted_1$7)
4720
+ }, null, 8, _hoisted_1$8)
4631
4721
  ], 4))
4632
4722
  : createCommentVNode("", true),
4633
4723
  (_ctx.dialogPlaying)
@@ -4654,12 +4744,12 @@ function render$8(_ctx, _cache, $props, $setup, $data, $options) {
4654
4744
  ]),
4655
4745
  _: 1
4656
4746
  }, 8, ["style"]),
4657
- _hoisted_2$6
4747
+ _hoisted_2$7
4658
4748
  ], 4))
4659
4749
  : createCommentVNode("", true)
4660
4750
  ], 4))
4661
4751
  : (_ctx.gameLoaded)
4662
- ? (openBlock(), createElementBlock("div", _hoisted_3$4, [
4752
+ ? (openBlock(), createElementBlock("div", _hoisted_3$5, [
4663
4753
  createElementVNode("button", {
4664
4754
  class: "button menu-button start-button override",
4665
4755
  onClick: _cache[0] || (_cache[0] = (...args) => (_ctx.startGame && _ctx.startGame(...args)))
@@ -4685,10 +4775,10 @@ function render$8(_ctx, _cache, $props, $setup, $data, $options) {
4685
4775
  ], 4))
4686
4776
  }
4687
4777
 
4688
- var css_248z$9 = "#app {\n background-color: black;\n width: 100%;\n height: 100%;\n position: absolute;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n color: white;\n box-sizing: border-box;\n overflow: hidden;\n transform-origin: center center;\n}\n\n.game {\n background-color: black;\n position: relative;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n overflow: hidden;\n}\n\n.interact-button {\n height: 50px;\n background-color: #72080f;\n border: 1px solid black;\n font-weight: bold;\n font-size: 20px;\n text-align: center;\n flex-grow: 2;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n\n.interact-button:not(:last-child) {\n margin-right: 10px;\n}\n\n.dialog-container {\n flex-shrink: 2;\n /* padding: 20px; */\n min-height: 100%;\n width: 100%;\n background-color: #171717;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n align-items: center;\n overflow-x: hidden;\n}\n\n.dialog {\n overflow-y: auto;\n overflow-x: hidden;\n position: relative;\n}\n\n.dialog * {\n overflow-anchor: none;\n}\n\n.background {\n margin: 0;\n}\n\n#background-canvas {\n height: 100%;\n}\n\n.anchor {\n overflow-anchor: auto;\n height: 1px;\n}\n";
4689
- styleInject(css_248z$9);
4778
+ var css_248z$a = "#app {\n background-color: black;\n width: 100%;\n height: 100%;\n position: absolute;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n color: white;\n box-sizing: border-box;\n overflow: hidden;\n transform-origin: center center;\n}\n\n.game {\n background-color: black;\n position: relative;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n overflow: hidden;\n}\n\n.interact-button {\n height: 50px;\n background-color: #72080f;\n border: 1px solid black;\n font-weight: bold;\n font-size: 20px;\n text-align: center;\n flex-grow: 2;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n\n.interact-button:not(:last-child) {\n margin-right: 10px;\n}\n\n.dialog-container {\n flex-shrink: 2;\n /* padding: 20px; */\n min-height: 100%;\n width: 100%;\n background-color: #171717;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n align-items: center;\n overflow-x: hidden;\n}\n\n.dialog {\n overflow-y: auto;\n overflow-x: hidden;\n position: relative;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n}\n\n.dialog::-webkit-scrollbar {\n display: none; /* webkit */\n}\n\n.dialog * {\n overflow-anchor: none;\n}\n\n.background {\n margin: 0;\n}\n\n#background-canvas {\n height: 100%;\n}\n\n.anchor {\n overflow-anchor: auto;\n height: 1px;\n}\n\n.menu-toggle {\n position: fixed;\n bottom: 0px;\n right: 15%;\n z-index: 108398;\n}\n";
4779
+ styleInject(css_248z$a);
4690
4780
 
4691
- script$8.render = render$8;
4781
+ script$9.render = render$9;
4692
4782
 
4693
4783
  function timeout(durationMs) {
4694
4784
  return new Promise((resolve, reject) => {
@@ -4775,10 +4865,10 @@ function runCondition(ctx, condition) {
4775
4865
  function conditionFunction(ctx, condition) {
4776
4866
  const { state } = ctx;
4777
4867
  const context = {
4778
- DATA: state.machine.data,
4779
- SKILLS: state.skills,
4780
- SKILLCHECKS: state.skillChecks,
4781
- STATS: state.hudStats,
4868
+ data: state.machine.data,
4869
+ skills: state.skills,
4870
+ skillChecks: state.skillChecks,
4871
+ stats: state.hudStats,
4782
4872
  roll: (checkId, skill, value) => {
4783
4873
  const skillCheckState = getSkillCheckState(ctx, checkId);
4784
4874
  if (skillCheckState) {
@@ -4959,6 +5049,7 @@ async function runCommand(context, cmd, choices) {
4959
5049
  }
4960
5050
  catch (err) {
4961
5051
  console.log(state.machine.stack[state.machine.stack.length - 1].label);
5052
+ console.error(err);
4962
5053
  error(commit, `Narrat script runtime error at <span class="error-filename">${cmd.fileName}:${cmd.line + 1}</span>
4963
5054
  <b>${err}</b>
4964
5055
  Script: ${cmd.code}
@@ -5811,10 +5902,10 @@ async function startApp(config, options) {
5811
5902
  mousePos.x = e.clientX;
5812
5903
  mousePos.y = e.clientY;
5813
5904
  });
5814
- console.log('%c Narrat game engine – 0.8.0 - April 26, 2022 13:18:38', 'background: #222; color: #bada55');
5905
+ console.log('%c Narrat game engine – 0.8.3 - May 16, 2022 14:42:27', 'background: #222; color: #bada55');
5815
5906
  const storeSetup = setupStore(options);
5816
5907
  store$1 = storeSetup.store;
5817
- app = createApp(script$8, {
5908
+ app = createApp(script$9, {
5818
5909
  config,
5819
5910
  options,
5820
5911
  });
package/lib/index.js CHANGED
@@ -1,4 +1,4 @@
1
- // Version: 0.8.0 - April 26, 2022 13:18:38
1
+ // Version: 0.8.3 - May 16, 2022 14:42:27
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.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.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.list-item {\n display: inline-block;\n margin-right: 10px;\n}\n\n.list-enter-active,\n.list-leave-active {\n transition: all 0.3s ease;\n}\n\n/* .list-move {\n transition: transform 0.3s ease;\n} */\n\n.list-enter-from,\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,\n.notification-leave-active {\n transition: all 0.3s ease;\n}\n\n/* .notification-move {\n transition: transform 0.3s ease;\n} */\n\n.notification-enter-from,\n.notification-leave-to {\n opacity: 0;\n transform: translateY(-300px);\n}\n\n.fade-enter-active,\n.fade-leave-active {\n transition: opacity 0.3s ease;\n}\n\n.fade-enter-from,\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}\n\nselect {\n background-color: grey;\n}\n\nbutton {\n background-color: #72080f;\n color: white;\n border-radius: 30px;\n padding: 5px;\n font-weight: 800;\n font-size: 16px;\n margin: 5px;\n}\n\na {\n color: pink;\n text-decoration: underline;\n}\n\nth,\ntd {\n padding: 4px;\n border: 1px solid white;\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@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}\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.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.list-item {\n display: inline-block;\n margin-right: 10px;\n}\n\n.list-enter-active,\n.list-leave-active {\n transition: all 0.3s ease;\n}\n\n/* .list-move {\n transition: transform 0.3s ease;\n} */\n\n.list-enter-from,\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,\n.notification-leave-active {\n transition: all 0.3s ease;\n}\n\n/* .notification-move {\n transition: transform 0.3s ease;\n} */\n\n.notification-enter-from,\n.notification-leave-to {\n opacity: 0;\n transform: translateY(-300px);\n}\n\n.fade-enter-active,\n.fade-leave-active {\n transition: opacity 0.3s ease;\n}\n\n.fade-enter-from,\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}\n\nselect {\n background-color: grey;\n}\n\n.button {\n background-color: #72080f;\n color: white;\n border-radius: 15px;\n padding: 10px;\n font-weight: 800;\n font-size: 16px;\n margin: 10px;\n}\n\na {\n color: pink;\n text-decoration: underline;\n}\n\nth,\ntd {\n padding: 4px;\n border: 1px solid white;\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\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}\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;}};
@@ -364,7 +364,7 @@ function render$2(_ctx, _cache, $props, $setup, $data, $options) {
364
364
  vue.renderSlot(_ctx.$slots, "footer", {}, () => [
365
365
  _hoisted_9,
366
366
  vue.createElementVNode("button", {
367
- class: "modal-default-button",
367
+ class: "modal-default-button button",
368
368
  onClick: _cache[0] || (_cache[0] = $event => (_ctx.$emit('close')))
369
369
  }, " Close ")
370
370
  ])
@@ -479,26 +479,27 @@ var script$3 = vue.defineComponent({
479
479
  });
480
480
 
481
481
  const _hoisted_1$3 = { class: "debug-menu" };
482
- const _hoisted_2$2 = /*#__PURE__*/vue.createElementVNode("h3", null, "Error(s)", -1);
482
+ const _hoisted_2$2 = /*#__PURE__*/vue.createElementVNode("h3", { class: "title" }, "Error(s)", -1);
483
483
  const _hoisted_3$2 = /*#__PURE__*/vue.createTextVNode(" There are errors in your dialogue scripts. Open the developer console for more details. ");
484
484
  const _hoisted_4$2 = ["innerHTML"];
485
- const _hoisted_5$2 = /*#__PURE__*/vue.createElementVNode("h3", null, "Debug Menu!", -1);
486
- const _hoisted_6$2 = /*#__PURE__*/vue.createTextVNode(" Hello this is the debug menu. ");
487
- const _hoisted_7$2 = /*#__PURE__*/vue.createElementVNode("option", {
485
+ const _hoisted_5$2 = /*#__PURE__*/vue.createElementVNode("h3", { class: "title" }, "Debug Menu!", -1);
486
+ const _hoisted_6$2 = { class: "container" };
487
+ const _hoisted_7$2 = /*#__PURE__*/vue.createTextVNode(" Hello this is the debug menu. ");
488
+ const _hoisted_8$1 = /*#__PURE__*/vue.createElementVNode("option", {
488
489
  selected: "",
489
490
  disabled: ""
490
491
  }, "Jump to a label", -1);
491
- const _hoisted_8$1 = ["value"];
492
- const _hoisted_9$1 = { class: "grid grid-cols-3 gap-4" };
493
- const _hoisted_10 = /*#__PURE__*/vue.createElementVNode("h2", null, "Skills", -1);
494
- const _hoisted_11 = { class: "table-auto" };
495
- const _hoisted_12 = /*#__PURE__*/vue.createElementVNode("tr", null, [
492
+ const _hoisted_9$1 = ["value"];
493
+ const _hoisted_10 = { class: "grid grid-cols-3 gap-4" };
494
+ const _hoisted_11 = /*#__PURE__*/vue.createElementVNode("h2", null, "Skills", -1);
495
+ const _hoisted_12 = { class: "table-auto" };
496
+ const _hoisted_13 = /*#__PURE__*/vue.createElementVNode("tr", null, [
496
497
  /*#__PURE__*/vue.createElementVNode("th", null, "Skill"),
497
498
  /*#__PURE__*/vue.createElementVNode("th", null, "Level")
498
499
  ], -1);
499
- const _hoisted_13 = /*#__PURE__*/vue.createElementVNode("h2", null, "Skill Checks", -1);
500
- const _hoisted_14 = { class: "table-auto" };
501
- const _hoisted_15 = /*#__PURE__*/vue.createElementVNode("thead", null, [
500
+ const _hoisted_14 = /*#__PURE__*/vue.createElementVNode("h2", null, "Skill Checks", -1);
501
+ const _hoisted_15 = { class: "table-auto" };
502
+ const _hoisted_16 = /*#__PURE__*/vue.createElementVNode("thead", null, [
502
503
  /*#__PURE__*/vue.createElementVNode("tr", null, [
503
504
  /*#__PURE__*/vue.createElementVNode("th", null, "Skill Check"),
504
505
  /*#__PURE__*/vue.createElementVNode("th", null, "Available"),
@@ -512,7 +513,7 @@ function render$3(_ctx, _cache, $props, $setup, $data, $options) {
512
513
  return (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$3, [
513
514
  vue.createElementVNode("button", {
514
515
  onClick: _cache[0] || (_cache[0] = (...args) => (_ctx.open && _ctx.open(...args))),
515
- class: "debug-button"
516
+ class: "button debug-button"
516
517
  }, "Debug Menu"),
517
518
  (_ctx.errors.length > 0)
518
519
  ? (vue.openBlock(), vue.createBlock(_component_modal, {
@@ -546,49 +547,53 @@ function render$3(_ctx, _cache, $props, $setup, $data, $options) {
546
547
  _hoisted_5$2
547
548
  ]),
548
549
  body: vue.withCtx(() => [
549
- _hoisted_6$2,
550
- vue.createElementVNode("select", {
551
- name: "label-selector",
552
- onChange: _cache[1] || (_cache[1] = $event => (_ctx.labelSelected($event)))
553
- }, [
550
+ vue.createElementVNode("div", _hoisted_6$2, [
554
551
  _hoisted_7$2,
555
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.labels, (label) => {
556
- return (vue.openBlock(), vue.createElementBlock("option", {
557
- value: label,
558
- key: label
559
- }, vue.toDisplayString(label), 9, _hoisted_8$1))
560
- }), 128))
561
- ], 32),
562
- vue.createElementVNode("div", _hoisted_9$1, [
563
- vue.createElementVNode("button", {
564
- onClick: _cache[2] || (_cache[2] = (...args) => (_ctx.wordCount && _ctx.wordCount(...args)))
565
- }, "Word Count"),
566
- vue.createElementVNode("button", {
567
- onClick: _cache[3] || (_cache[3] = (...args) => (_ctx.save && _ctx.save(...args)))
568
- }, "Save Game")
569
- ]),
570
- vue.createElementVNode("h3", null, "Play time: " + vue.toDisplayString(_ctx.getPlayTimeString()), 1),
571
- _hoisted_10,
572
- vue.createElementVNode("table", _hoisted_11, [
573
- _hoisted_12,
574
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.skills, (skill, key) => {
575
- return (vue.openBlock(), vue.createElementBlock("tr", { key: key }, [
576
- vue.createElementVNode("td", null, vue.toDisplayString(key), 1),
577
- vue.createElementVNode("td", null, vue.toDisplayString(skill.level), 1)
578
- ]))
579
- }), 128))
580
- ]),
581
- _hoisted_13,
582
- vue.createElementVNode("table", _hoisted_14, [
583
- _hoisted_15,
584
- vue.createElementVNode("tbody", null, [
585
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.skillChecks, (check, key) => {
552
+ vue.createElementVNode("select", {
553
+ name: "label-selector",
554
+ onChange: _cache[1] || (_cache[1] = $event => (_ctx.labelSelected($event)))
555
+ }, [
556
+ _hoisted_8$1,
557
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.labels, (label) => {
558
+ return (vue.openBlock(), vue.createElementBlock("option", {
559
+ value: label,
560
+ key: label
561
+ }, vue.toDisplayString(label), 9, _hoisted_9$1))
562
+ }), 128))
563
+ ], 32),
564
+ vue.createElementVNode("div", _hoisted_10, [
565
+ vue.createElementVNode("button", {
566
+ onClick: _cache[2] || (_cache[2] = (...args) => (_ctx.wordCount && _ctx.wordCount(...args))),
567
+ class: "button"
568
+ }, "Word Count"),
569
+ vue.createElementVNode("button", {
570
+ onClick: _cache[3] || (_cache[3] = (...args) => (_ctx.save && _ctx.save(...args))),
571
+ class: "button"
572
+ }, "Save Game")
573
+ ]),
574
+ vue.createElementVNode("h3", null, "Play time: " + vue.toDisplayString(_ctx.getPlayTimeString()), 1),
575
+ _hoisted_11,
576
+ vue.createElementVNode("table", _hoisted_12, [
577
+ _hoisted_13,
578
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.skills, (skill, key) => {
586
579
  return (vue.openBlock(), vue.createElementBlock("tr", { key: key }, [
587
580
  vue.createElementVNode("td", null, vue.toDisplayString(key), 1),
588
- vue.createElementVNode("td", null, vue.toDisplayString(check.available ? '✅' : '❌'), 1),
589
- vue.createElementVNode("td", null, vue.toDisplayString(check.passed ? '✅' : '❌'), 1)
581
+ vue.createElementVNode("td", null, vue.toDisplayString(skill.level), 1)
590
582
  ]))
591
583
  }), 128))
584
+ ]),
585
+ _hoisted_14,
586
+ vue.createElementVNode("table", _hoisted_15, [
587
+ _hoisted_16,
588
+ vue.createElementVNode("tbody", null, [
589
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.skillChecks, (check, key) => {
590
+ return (vue.openBlock(), vue.createElementBlock("tr", { key: key }, [
591
+ vue.createElementVNode("td", null, vue.toDisplayString(key), 1),
592
+ vue.createElementVNode("td", null, vue.toDisplayString(check.available ? '✅' : '❌'), 1),
593
+ vue.createElementVNode("td", null, vue.toDisplayString(check.passed ? '✅' : '❌'), 1)
594
+ ]))
595
+ }), 128))
596
+ ])
592
597
  ])
593
598
  ])
594
599
  ]),
@@ -598,7 +603,7 @@ function render$3(_ctx, _cache, $props, $setup, $data, $options) {
598
603
  ]))
599
604
  }
600
605
 
601
- var css_248z$4 = ".debug-menu {\n z-index: 9999;\n}\n\n.debug-button {\n background-color: #4fc08d;\n position: fixed;\n bottom: 10px;\n right: 10px;\n padding: 2px;\n}\n\n.error-message {\n color: orangered;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n\n.error-filename {\n color: grey;\n text-decoration: underline;\n}\n";
606
+ var css_248z$4 = ".debug-menu {\n z-index: 9999;\n}\n\n.debug-button {\n background-color: #4fc08d;\n position: fixed;\n bottom: 10px;\n right: 10px;\n padding: 5px;\n}\n\n.error-message {\n color: orangered;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n\n.error-filename {\n color: grey;\n text-decoration: underline;\n}\n";
602
607
  styleInject(css_248z$4);
603
608
 
604
609
  script$3.render = render$3;
@@ -3857,7 +3862,8 @@ var script$4 = vue.defineComponent({
3857
3862
  };
3858
3863
  },
3859
3864
  mounted() {
3860
- howler.Howler.volume(0.5);
3865
+ const volume = howler.Howler.volume();
3866
+ this.$refs.slider.value = volume;
3861
3867
  },
3862
3868
  methods: {
3863
3869
  changeVolume(event) {
@@ -3880,12 +3886,16 @@ var script$4 = vue.defineComponent({
3880
3886
  });
3881
3887
 
3882
3888
  const _hoisted_1$4 = { class: "volume-controls" };
3883
- const _hoisted_2$3 = /*#__PURE__*/vue.createElementVNode("label", { for: "volume" }, "Volume", -1);
3889
+ const _hoisted_2$3 = /*#__PURE__*/vue.createElementVNode("label", {
3890
+ for: "volume",
3891
+ class: "volume-label"
3892
+ }, "Volume:", -1);
3884
3893
 
3885
3894
  function render$4(_ctx, _cache, $props, $setup, $data, $options) {
3886
3895
  return (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [
3887
3896
  _hoisted_2$3,
3888
3897
  vue.createElementVNode("input", {
3898
+ ref: "slider",
3889
3899
  class: "volume-slider",
3890
3900
  type: "range",
3891
3901
  id: "volume",
@@ -3895,11 +3905,11 @@ function render$4(_ctx, _cache, $props, $setup, $data, $options) {
3895
3905
  step: "0.1",
3896
3906
  value: "0.5",
3897
3907
  onChange: _cache[0] || (_cache[0] = (...args) => (_ctx.changeVolume && _ctx.changeVolume(...args)))
3898
- }, null, 32)
3908
+ }, null, 544)
3899
3909
  ]))
3900
3910
  }
3901
3911
 
3902
- var css_248z$5 = ".volume-controls {\n color: white;\n font-size: 18px;\n -webkit-text-stroke: 1px black;\n}\n\n.volume-slider {\n width: 50px;\n background-color: blue;\n}\n";
3912
+ var css_248z$5 = ".volume-label {\n margin: 5px 20px;\n}\n\n.volume-controls {\n color: white;\n font-size: 20px;\n display: flex;\n align-items: center;\n}\n\n.volume-slider {\n width: 200px;\n background-color: blue;\n}\n";
3903
3913
  styleInject(css_248z$5);
3904
3914
 
3905
3915
  script$4.render = render$4;
@@ -3934,13 +3944,10 @@ const _hoisted_2$4 = { class: "bold" };
3934
3944
  const _hoisted_3$3 = /*#__PURE__*/vue.createTextVNode(": ");
3935
3945
 
3936
3946
  function render$5(_ctx, _cache, $props, $setup, $data, $options) {
3937
- const _component_VolumeControls = vue.resolveComponent("VolumeControls");
3938
-
3939
3947
  return (vue.openBlock(), vue.createElementBlock("div", {
3940
3948
  class: "hud",
3941
3949
  style: vue.normalizeStyle(_ctx.hudStyle)
3942
3950
  }, [
3943
- vue.createVNode(_component_VolumeControls),
3944
3951
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.stats, (value, key) => {
3945
3952
  return (vue.openBlock(), vue.createElementBlock("div", {
3946
3953
  key: key,
@@ -4158,6 +4165,7 @@ function loadImage(key, path, resolver, rejecter) {
4158
4165
  }
4159
4166
 
4160
4167
  const audio = {};
4168
+ howler.Howler.volume(0.5);
4161
4169
  async function loadAudioAssets(config) {
4162
4170
  console.log(`Loading audio`);
4163
4171
  const loadingPromises = [];
@@ -4301,8 +4309,87 @@ function debounce(func, waitMilliseconds = 50, options = {}) {
4301
4309
  return debouncedFunction;
4302
4310
  }
4303
4311
 
4304
- console.log('hello app');
4305
4312
  var script$8 = vue.defineComponent({
4313
+ components: {
4314
+ Modal: script$2,
4315
+ VolumeControls: script$4,
4316
+ },
4317
+ props: {},
4318
+ data() {
4319
+ return {
4320
+ menuActive: false,
4321
+ };
4322
+ },
4323
+ mounted() {
4324
+ document.addEventListener('keydown', (event) => {
4325
+ const key = event.key;
4326
+ if (key === 'Escape') {
4327
+ this.toggleMenu();
4328
+ }
4329
+ });
4330
+ },
4331
+ methods: {
4332
+ openMenu() {
4333
+ this.menuActive = true;
4334
+ },
4335
+ closeMenu() {
4336
+ this.menuActive = false;
4337
+ },
4338
+ toggleMenu() {
4339
+ this.menuActive = !this.menuActive;
4340
+ },
4341
+ quit() {
4342
+ window.close();
4343
+ // quit
4344
+ },
4345
+ },
4346
+ computed: {},
4347
+ });
4348
+
4349
+ const _hoisted_1$7 = { class: "menu-container" };
4350
+ const _hoisted_2$6 = /*#__PURE__*/vue.createElementVNode("h3", { class: "title" }, "Menu", -1);
4351
+ const _hoisted_3$4 = { class: "menu-content" };
4352
+
4353
+ function render$8(_ctx, _cache, $props, $setup, $data, $options) {
4354
+ const _component_VolumeControls = vue.resolveComponent("VolumeControls");
4355
+ const _component_modal = vue.resolveComponent("modal");
4356
+
4357
+ return (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [
4358
+ vue.createElementVNode("button", {
4359
+ class: "button menu-toggle-button",
4360
+ onClick: _cache[0] || (_cache[0] = (...args) => (_ctx.openMenu && _ctx.openMenu(...args)))
4361
+ }, "Menu"),
4362
+ (_ctx.menuActive)
4363
+ ? (vue.openBlock(), vue.createBlock(_component_modal, {
4364
+ key: 0,
4365
+ class: "menu",
4366
+ onClose: _ctx.closeMenu
4367
+ }, {
4368
+ header: vue.withCtx(() => [
4369
+ _hoisted_2$6
4370
+ ]),
4371
+ body: vue.withCtx(() => [
4372
+ vue.createElementVNode("div", _hoisted_3$4, [
4373
+ vue.createVNode(_component_VolumeControls),
4374
+ vue.createElementVNode("button", {
4375
+ class: "button title quit-button",
4376
+ onClick: _cache[1] || (_cache[1] = (...args) => (_ctx.quit && _ctx.quit(...args)))
4377
+ }, "Quit")
4378
+ ])
4379
+ ]),
4380
+ _: 1
4381
+ }, 8, ["onClose"]))
4382
+ : vue.createCommentVNode("", true)
4383
+ ]))
4384
+ }
4385
+
4386
+ var css_248z$9 = ".menu-content {\n margin: 50px;\n text-align: center;\n}\n\n.menu-toggle-button {\n margin: 0;\n padding: 2px;\n border-radius: 5px;\n}\n\n.quit-button {\n margin: 50px;\n text-align: center;\n}\n";
4387
+ styleInject(css_248z$9);
4388
+
4389
+ script$8.render = render$8;
4390
+
4391
+ console.log('hello app');
4392
+ var script$9 = vue.defineComponent({
4306
4393
  $refs: {
4307
4394
  dialogContainer: HTMLInputElement,
4308
4395
  },
@@ -4314,6 +4401,7 @@ var script$8 = vue.defineComponent({
4314
4401
  LoadingBar: script$6,
4315
4402
  NotificationToast: script$7,
4316
4403
  Hud: script$5,
4404
+ Menu: script$8,
4317
4405
  },
4318
4406
  data() {
4319
4407
  return {
@@ -4583,16 +4671,17 @@ var script$8 = vue.defineComponent({
4583
4671
  },
4584
4672
  });
4585
4673
 
4586
- const _hoisted_1$7 = ["width", "height"];
4587
- const _hoisted_2$6 = /*#__PURE__*/vue.createElementVNode("div", { class: "anchor" }, null, -1);
4588
- const _hoisted_3$4 = {
4674
+ const _hoisted_1$8 = ["width", "height"];
4675
+ const _hoisted_2$7 = /*#__PURE__*/vue.createElementVNode("div", { class: "anchor" }, null, -1);
4676
+ const _hoisted_3$5 = {
4589
4677
  key: 1,
4590
4678
  class: "flex flex-col"
4591
4679
  };
4592
4680
  const _hoisted_4$3 = { key: 2 };
4593
4681
 
4594
- function render$8(_ctx, _cache, $props, $setup, $data, $options) {
4682
+ function render$9(_ctx, _cache, $props, $setup, $data, $options) {
4595
4683
  const _component_Hud = vue.resolveComponent("Hud");
4684
+ const _component_Menu = vue.resolveComponent("Menu");
4596
4685
  const _component_DialogPicture = vue.resolveComponent("DialogPicture");
4597
4686
  const _component_DialogBox = vue.resolveComponent("DialogBox");
4598
4687
  const _component_LoadingBar = vue.resolveComponent("LoadingBar");
@@ -4610,6 +4699,7 @@ function render$8(_ctx, _cache, $props, $setup, $data, $options) {
4610
4699
  class: "game",
4611
4700
  style: vue.normalizeStyle(_ctx.gameStyle)
4612
4701
  }, [
4702
+ vue.createVNode(_component_Menu, { class: "menu-toggle" }),
4613
4703
  vue.createVNode(vue.Transition, { name: "fade" }, {
4614
4704
  default: vue.withCtx(() => [
4615
4705
  (_ctx.picture)
@@ -4631,7 +4721,7 @@ function render$8(_ctx, _cache, $props, $setup, $data, $options) {
4631
4721
  width: _ctx.layoutWidth,
4632
4722
  height: _ctx.layoutHeight,
4633
4723
  id: "background-canvas"
4634
- }, null, 8, _hoisted_1$7)
4724
+ }, null, 8, _hoisted_1$8)
4635
4725
  ], 4))
4636
4726
  : vue.createCommentVNode("", true),
4637
4727
  (_ctx.dialogPlaying)
@@ -4658,12 +4748,12 @@ function render$8(_ctx, _cache, $props, $setup, $data, $options) {
4658
4748
  ]),
4659
4749
  _: 1
4660
4750
  }, 8, ["style"]),
4661
- _hoisted_2$6
4751
+ _hoisted_2$7
4662
4752
  ], 4))
4663
4753
  : vue.createCommentVNode("", true)
4664
4754
  ], 4))
4665
4755
  : (_ctx.gameLoaded)
4666
- ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$4, [
4756
+ ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$5, [
4667
4757
  vue.createElementVNode("button", {
4668
4758
  class: "button menu-button start-button override",
4669
4759
  onClick: _cache[0] || (_cache[0] = (...args) => (_ctx.startGame && _ctx.startGame(...args)))
@@ -4689,10 +4779,10 @@ function render$8(_ctx, _cache, $props, $setup, $data, $options) {
4689
4779
  ], 4))
4690
4780
  }
4691
4781
 
4692
- var css_248z$9 = "#app {\n background-color: black;\n width: 100%;\n height: 100%;\n position: absolute;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n color: white;\n box-sizing: border-box;\n overflow: hidden;\n transform-origin: center center;\n}\n\n.game {\n background-color: black;\n position: relative;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n overflow: hidden;\n}\n\n.interact-button {\n height: 50px;\n background-color: #72080f;\n border: 1px solid black;\n font-weight: bold;\n font-size: 20px;\n text-align: center;\n flex-grow: 2;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n\n.interact-button:not(:last-child) {\n margin-right: 10px;\n}\n\n.dialog-container {\n flex-shrink: 2;\n /* padding: 20px; */\n min-height: 100%;\n width: 100%;\n background-color: #171717;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n align-items: center;\n overflow-x: hidden;\n}\n\n.dialog {\n overflow-y: auto;\n overflow-x: hidden;\n position: relative;\n}\n\n.dialog * {\n overflow-anchor: none;\n}\n\n.background {\n margin: 0;\n}\n\n#background-canvas {\n height: 100%;\n}\n\n.anchor {\n overflow-anchor: auto;\n height: 1px;\n}\n";
4693
- styleInject(css_248z$9);
4782
+ var css_248z$a = "#app {\n background-color: black;\n width: 100%;\n height: 100%;\n position: absolute;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n color: white;\n box-sizing: border-box;\n overflow: hidden;\n transform-origin: center center;\n}\n\n.game {\n background-color: black;\n position: relative;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n overflow: hidden;\n}\n\n.interact-button {\n height: 50px;\n background-color: #72080f;\n border: 1px solid black;\n font-weight: bold;\n font-size: 20px;\n text-align: center;\n flex-grow: 2;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n}\n\n.interact-button:not(:last-child) {\n margin-right: 10px;\n}\n\n.dialog-container {\n flex-shrink: 2;\n /* padding: 20px; */\n min-height: 100%;\n width: 100%;\n background-color: #171717;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n align-items: center;\n overflow-x: hidden;\n}\n\n.dialog {\n overflow-y: auto;\n overflow-x: hidden;\n position: relative;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n}\n\n.dialog::-webkit-scrollbar {\n display: none; /* webkit */\n}\n\n.dialog * {\n overflow-anchor: none;\n}\n\n.background {\n margin: 0;\n}\n\n#background-canvas {\n height: 100%;\n}\n\n.anchor {\n overflow-anchor: auto;\n height: 1px;\n}\n\n.menu-toggle {\n position: fixed;\n bottom: 0px;\n right: 15%;\n z-index: 108398;\n}\n";
4783
+ styleInject(css_248z$a);
4694
4784
 
4695
- script$8.render = render$8;
4785
+ script$9.render = render$9;
4696
4786
 
4697
4787
  function timeout(durationMs) {
4698
4788
  return new Promise((resolve, reject) => {
@@ -4779,10 +4869,10 @@ function runCondition(ctx, condition) {
4779
4869
  function conditionFunction(ctx, condition) {
4780
4870
  const { state } = ctx;
4781
4871
  const context = {
4782
- DATA: state.machine.data,
4783
- SKILLS: state.skills,
4784
- SKILLCHECKS: state.skillChecks,
4785
- STATS: state.hudStats,
4872
+ data: state.machine.data,
4873
+ skills: state.skills,
4874
+ skillChecks: state.skillChecks,
4875
+ stats: state.hudStats,
4786
4876
  roll: (checkId, skill, value) => {
4787
4877
  const skillCheckState = getSkillCheckState(ctx, checkId);
4788
4878
  if (skillCheckState) {
@@ -4963,6 +5053,7 @@ async function runCommand(context, cmd, choices) {
4963
5053
  }
4964
5054
  catch (err) {
4965
5055
  console.log(state.machine.stack[state.machine.stack.length - 1].label);
5056
+ console.error(err);
4966
5057
  error(commit, `Narrat script runtime error at <span class="error-filename">${cmd.fileName}:${cmd.line + 1}</span>
4967
5058
  <b>${err}</b>
4968
5059
  Script: ${cmd.code}
@@ -5815,10 +5906,10 @@ async function startApp(config, options) {
5815
5906
  mousePos.x = e.clientX;
5816
5907
  mousePos.y = e.clientY;
5817
5908
  });
5818
- console.log('%c Narrat game engine – 0.8.0 - April 26, 2022 13:18:38', 'background: #222; color: #bada55');
5909
+ console.log('%c Narrat game engine – 0.8.3 - May 16, 2022 14:42:27', 'background: #222; color: #bada55');
5819
5910
  const storeSetup = setupStore(options);
5820
5911
  store$1 = storeSetup.store;
5821
- app = vue.createApp(script$8, {
5912
+ app = vue.createApp(script$9, {
5822
5913
  config,
5823
5914
  options,
5824
5915
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "narrat",
3
- "version": "0.8.0",
3
+ "version": "0.8.3",
4
4
  "description": "narrat narrative engine",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib/index.esm.js",