genshin-interface 4.2.0 → 4.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,3302 @@
1
+ import { ASCENSION_PHASE_COUNT, CHECK_MARK_PATH, CONSTELLATION_NODE_PLACES, COOKING_ARC_CENTRE_X, COOKING_ARC_CENTRE_Y, COOKING_ARC_RADIUS_X, COOKING_ARC_RADIUS_Y, FIXTURE_VARIANT_SEPARATOR, GAME_CANVAS_INSET, GAME_CANVAS_RECT, GAME_CANVAS_UNIT, GAME_CREAM, GAME_CURSOR, GAME_FONT_FAMILY, GAME_GOLD, GAME_INK, GAME_REPLY_HOVER, GAME_REPLY_HOVER_INK, GAME_REPLY_REST, GAME_ROW_HOVER, GAME_ROW_PRESS, GAME_SMOOTHSTEP_EASING, GAME_UNIT, GAME_WHITE, INTERACTION_HOVER_MS, INTERACTION_KEY_LABEL, INTERACTION_PILL_REST_MS, INTERACTION_PRESS_MS, INTERACTION_REST_MS, MOBILE_INTERFACE_SCALE, ORNAMENT_END_PATH, ORNAMENT_MIDDLE_PATH, SERVER_MARK_DIAMOND_PATH, SERVER_MARK_TICK_PATH, SETTINGS_RING_CENTRE, SETTINGS_RING_RADIUS, SETTINGS_RING_WIDTH } from "./constants.js";
2
+ import { i as ItemCategory, n as BannerKinds, r as ItemCategories, t as BannerKind } from "./save-B6F3omOa.js";
3
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeModels, nextTick, normalizeClass, normalizeStyle, openBlock, ref, renderList, renderSlot, toDisplayString, unref, useCssVars, useModel, useTemplateRef, vModelSelect, vModelText, watch, withCtx, withDirectives, withModifiers } from "vue";
4
+ //#region \0/plugin-vue/export-helper
5
+ var export_helper_default = (sfc, props) => {
6
+ const target = sfc.__vccOpts || sfc;
7
+ for (const [key, val] of props) target[key] = val;
8
+ return target;
9
+ };
10
+ //#endregion
11
+ //#region src/components/GameButton/Index.vue
12
+ const _hoisted_1$40 = ["data-kind"];
13
+ const _hoisted_2$32 = {
14
+ key: 0,
15
+ class: "tip"
16
+ };
17
+ var Index_default$16 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
18
+ __name: "Index",
19
+ props: {
20
+ kind: {},
21
+ tip: {}
22
+ },
23
+ setup(__props, { expose: __expose }) {
24
+ useCssVars((_ctx) => ({
25
+ "v8de8a9a0": restDuration,
26
+ "v4f7d0248": hoverDuration,
27
+ "v5ff883e5": unref(GAME_GOLD),
28
+ "c23e4506": unref(GAME_CREAM),
29
+ "v7defe8be": unref(GAME_INK),
30
+ "v78a9c41c": unref(GAME_ROW_HOVER),
31
+ "v77c60e0e": unref(GAME_ROW_PRESS),
32
+ "v7a0541ee": pillRestDuration,
33
+ "v307a3362": pressDuration,
34
+ "v0673242b": unref(GAME_SMOOTHSTEP_EASING),
35
+ "v40afb3ee": unref(GAME_REPLY_REST),
36
+ "v5683177c": unref(GAME_REPLY_HOVER),
37
+ "a79a636e": unref(GAME_REPLY_HOVER_INK)
38
+ }));
39
+ const button = useTemplateRef("button");
40
+ const hoverDuration = `50ms`;
41
+ const restDuration = `100ms`;
42
+ const pillRestDuration = `200ms`;
43
+ const pressDuration = `167ms`;
44
+ __expose({ focus: () => button.value?.focus() });
45
+ return (_ctx, _cache) => {
46
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" One of the game's buttons, placed by its parent, in its kind's look for each state: at rest, hovered (or focused\n From the keyboard, which the game draws as a hover), pressed and disabled. The look is the button's own, and its content\n Takes the colour it sets "), createElementVNode("button", {
47
+ ref_key: "button",
48
+ ref: button,
49
+ class: "game-button",
50
+ "data-kind": __props.kind,
51
+ type: "button"
52
+ }, [renderSlot(_ctx.$slots, "default"), __props.tip ? (openBlock(), createElementBlock("span", _hoisted_2$32, toDisplayString(__props.tip), 1)) : createCommentVNode("v-if", true)], 8, _hoisted_1$40)], 2112);
53
+ };
54
+ }
55
+ }), [["__scopeId", "data-v-cab29bfa"]]);
56
+ //#endregion
57
+ //#region src/components/PickerShell/Index.vue
58
+ const _hoisted_1$39 = ["aria-label"];
59
+ const _hoisted_2$31 = { class: "title" };
60
+ var Index_default$24 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
61
+ __name: "Index",
62
+ props: { title: {} },
63
+ setup(__props) {
64
+ return (_ctx, _cache) => {
65
+ return openBlock(), createElementBlock("div", {
66
+ class: "picker-shell",
67
+ role: "dialog",
68
+ "aria-modal": "true",
69
+ "aria-label": __props.title
70
+ }, [createElementVNode("p", _hoisted_2$31, toDisplayString(__props.title), 1), renderSlot(_ctx.$slots, "default", {}, void 0, true)], 8, _hoisted_1$39);
71
+ };
72
+ }
73
+ }), [["__scopeId", "data-v-6f193621"]]);
74
+ //#endregion
75
+ //#region src/models/GameButtonKind.ts
76
+ let GameButtonKind = /* @__PURE__ */ function(GameButtonKind) {
77
+ GameButtonKind["Disc"] = "Disc";
78
+ GameButtonKind["Pill"] = "Pill";
79
+ GameButtonKind["Plain"] = "Plain";
80
+ GameButtonKind["Reply"] = "Reply";
81
+ GameButtonKind["Row"] = "Row";
82
+ return GameButtonKind;
83
+ }({});
84
+ //#endregion
85
+ //#region src/components/ArtifactEnhancePicker/Index.vue
86
+ const _hoisted_1$38 = { class: "summary" };
87
+ const _hoisted_2$30 = { class: "level" };
88
+ const _hoisted_3$28 = { class: "mora" };
89
+ const _hoisted_4$24 = {
90
+ key: 0,
91
+ class: "notice"
92
+ };
93
+ const _hoisted_5$22 = { class: "fodders" };
94
+ const _hoisted_6$21 = [
95
+ "aria-pressed",
96
+ "data-rarity",
97
+ "onClick"
98
+ ];
99
+ const _hoisted_7$21 = { class: "name" };
100
+ const _hoisted_8$16 = { class: "caption" };
101
+ const _hoisted_9$14 = { class: "materials" };
102
+ const _hoisted_10$13 = { class: "name" };
103
+ const _hoisted_11$9 = { class: "count" };
104
+ const _hoisted_12$9 = { class: "actions" };
105
+ var Index_default = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
106
+ __name: "Index",
107
+ props: {
108
+ autoAddLabel: {},
109
+ cancelLabel: {},
110
+ confirmLabel: {},
111
+ fodders: {},
112
+ isConfirmDisabled: { type: Boolean },
113
+ levelLabel: {},
114
+ materials: {},
115
+ moraCost: {},
116
+ moraLabel: {},
117
+ notice: {},
118
+ title: {}
119
+ },
120
+ emits: [
121
+ "autoAdd",
122
+ "cancel",
123
+ "confirm",
124
+ "fodder",
125
+ "material"
126
+ ],
127
+ setup(__props, { emit: __emit }) {
128
+ const emit = __emit;
129
+ return (_ctx, _cache) => {
130
+ return openBlock(), createBlock(Index_default$24, {
131
+ class: "enhance-picker",
132
+ title: __props.title
133
+ }, {
134
+ default: withCtx(() => [
135
+ createElementVNode("p", _hoisted_1$38, [createElementVNode("span", _hoisted_2$30, toDisplayString(__props.levelLabel), 1), createElementVNode("span", _hoisted_3$28, toDisplayString(__props.moraLabel) + " " + toDisplayString(__props.moraCost), 1)]),
136
+ __props.notice ? (openBlock(), createElementBlock("p", _hoisted_4$24, toDisplayString(__props.notice), 1)) : createCommentVNode("v-if", true),
137
+ createElementVNode("ul", _hoisted_5$22, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.fodders, ({ caption, id, isSelected, name, rarity }) => {
138
+ return openBlock(), createElementBlock("li", { key: id }, [createElementVNode("button", {
139
+ class: "option",
140
+ "aria-pressed": isSelected,
141
+ "data-rarity": rarity,
142
+ type: "button",
143
+ onClick: ($event) => emit("fodder", id)
144
+ }, [createElementVNode("span", _hoisted_7$21, toDisplayString(name), 1), createElementVNode("span", _hoisted_8$16, toDisplayString(caption), 1)], 8, _hoisted_6$21)]);
145
+ }), 128))]),
146
+ createElementVNode("ul", _hoisted_9$14, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.materials, ({ count, id, name, selectedCount }) => {
147
+ return openBlock(), createElementBlock("li", {
148
+ key: id,
149
+ class: "material"
150
+ }, [
151
+ createElementVNode("span", _hoisted_10$13, toDisplayString(name), 1),
152
+ createElementVNode("span", _hoisted_11$9, toDisplayString(selectedCount) + "/" + toDisplayString(count), 1),
153
+ createVNode(Index_default$16, {
154
+ disabled: selectedCount <= 0,
155
+ kind: unref(GameButtonKind).Pill,
156
+ onClick: ($event) => emit("material", id, -1)
157
+ }, {
158
+ default: withCtx(() => [..._cache[3] || (_cache[3] = [createTextVNode(" - ", -1)])]),
159
+ _: 1
160
+ }, 8, [
161
+ "disabled",
162
+ "kind",
163
+ "onClick"
164
+ ]),
165
+ createVNode(Index_default$16, {
166
+ disabled: selectedCount >= count,
167
+ kind: unref(GameButtonKind).Pill,
168
+ onClick: ($event) => emit("material", id, 1)
169
+ }, {
170
+ default: withCtx(() => [..._cache[4] || (_cache[4] = [createTextVNode(" + ", -1)])]),
171
+ _: 1
172
+ }, 8, [
173
+ "disabled",
174
+ "kind",
175
+ "onClick"
176
+ ])
177
+ ]);
178
+ }), 128))]),
179
+ createElementVNode("div", _hoisted_12$9, [
180
+ createVNode(Index_default$16, {
181
+ kind: unref(GameButtonKind).Pill,
182
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("autoAdd"))
183
+ }, {
184
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.autoAddLabel), 1)]),
185
+ _: 1
186
+ }, 8, ["kind"]),
187
+ createVNode(Index_default$16, {
188
+ kind: unref(GameButtonKind).Pill,
189
+ onClick: _cache[1] || (_cache[1] = ($event) => emit("cancel"))
190
+ }, {
191
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.cancelLabel), 1)]),
192
+ _: 1
193
+ }, 8, ["kind"]),
194
+ createVNode(Index_default$16, {
195
+ disabled: __props.isConfirmDisabled,
196
+ kind: unref(GameButtonKind).Pill,
197
+ onClick: _cache[2] || (_cache[2] = ($event) => emit("confirm"))
198
+ }, {
199
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.confirmLabel), 1)]),
200
+ _: 1
201
+ }, 8, ["disabled", "kind"])
202
+ ])
203
+ ]),
204
+ _: 1
205
+ }, 8, ["title"]);
206
+ };
207
+ }
208
+ }), [["__scopeId", "data-v-7c672712"]]);
209
+ //#endregion
210
+ //#region src/components/ArtifactPicker/Index.vue
211
+ const _hoisted_1$37 = { class: "options" };
212
+ const _hoisted_2$29 = ["data-rarity", "onClick"];
213
+ const _hoisted_3$27 = { class: "name" };
214
+ const _hoisted_4$23 = { class: "caption" };
215
+ var Index_default$1 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
216
+ __name: "Index",
217
+ props: {
218
+ closeLabel: {},
219
+ options: {},
220
+ title: {}
221
+ },
222
+ emits: ["choose", "close"],
223
+ setup(__props, { emit: __emit }) {
224
+ const emit = __emit;
225
+ return (_ctx, _cache) => {
226
+ return openBlock(), createBlock(Index_default$24, {
227
+ class: "artifact-picker",
228
+ title: __props.title
229
+ }, {
230
+ default: withCtx(() => [createElementVNode("ul", _hoisted_1$37, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, ({ caption, id, name, rarity }) => {
231
+ return openBlock(), createElementBlock("li", { key: id }, [createElementVNode("button", {
232
+ class: "option",
233
+ "data-rarity": rarity,
234
+ type: "button",
235
+ onClick: ($event) => emit("choose", id)
236
+ }, [createElementVNode("span", _hoisted_3$27, toDisplayString(name), 1), createElementVNode("span", _hoisted_4$23, toDisplayString(caption), 1)], 8, _hoisted_2$29)]);
237
+ }), 128))]), createVNode(Index_default$16, {
238
+ class: "close",
239
+ kind: unref(GameButtonKind).Pill,
240
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
241
+ }, {
242
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.closeLabel), 1)]),
243
+ _: 1
244
+ }, 8, ["kind"])]),
245
+ _: 1
246
+ }, 8, ["title"]);
247
+ };
248
+ }
249
+ }), [["__scopeId", "data-v-bf242b3e"]]);
250
+ //#endregion
251
+ //#region src/components/BlessingScreen/Index.vue
252
+ const _hoisted_1$36 = { class: "blessing-screen" };
253
+ const _hoisted_2$28 = { class: "title" };
254
+ const _hoisted_3$26 = { class: "pool" };
255
+ const _hoisted_4$22 = { class: "members" };
256
+ const _hoisted_5$21 = ["onClick"];
257
+ const _hoisted_6$20 = { class: "name" };
258
+ const _hoisted_7$20 = { class: "health" };
259
+ var Index_default$2 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
260
+ __name: "Index",
261
+ props: {
262
+ members: {},
263
+ poolAmount: {},
264
+ poolMaximum: {},
265
+ title: {},
266
+ worshipTitle: {}
267
+ },
268
+ emits: [
269
+ "close",
270
+ "heal",
271
+ "worship"
272
+ ],
273
+ setup(__props, { emit: __emit }) {
274
+ const emit = __emit;
275
+ return (_ctx, _cache) => {
276
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The layout is provisional until the recording of the Blessing screen shows it "), createElementVNode("div", _hoisted_1$36, [
277
+ createElementVNode("h1", _hoisted_2$28, toDisplayString(__props.title), 1),
278
+ createElementVNode("button", {
279
+ class: "close",
280
+ type: "button",
281
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
282
+ }, "×"),
283
+ createElementVNode("button", {
284
+ class: "worship",
285
+ type: "button",
286
+ onClick: _cache[1] || (_cache[1] = ($event) => emit("worship"))
287
+ }, toDisplayString(__props.worshipTitle), 1),
288
+ createElementVNode("p", _hoisted_3$26, toDisplayString(Math.floor(__props.poolAmount)) + " / " + toDisplayString(__props.poolMaximum), 1),
289
+ createElementVNode("ul", _hoisted_4$22, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.members, ({ healthShare, id, name }) => {
290
+ return openBlock(), createElementBlock("li", { key: id }, [createElementVNode("button", {
291
+ type: "button",
292
+ onClick: ($event) => emit("heal", id)
293
+ }, [createElementVNode("span", _hoisted_6$20, toDisplayString(name), 1), createElementVNode("span", _hoisted_7$20, toDisplayString(Math.round(healthShare * 100)) + "%", 1)], 8, _hoisted_5$21)]);
294
+ }), 128))])
295
+ ])], 2112);
296
+ };
297
+ }
298
+ }), [["__scopeId", "data-v-4c1e529d"]]);
299
+ //#endregion
300
+ //#region src/models/CharacterMenuTab.ts
301
+ let CharacterMenuTab = /* @__PURE__ */ function(CharacterMenuTab) {
302
+ CharacterMenuTab["Artifacts"] = "Artifacts";
303
+ CharacterMenuTab["Attributes"] = "Attributes";
304
+ CharacterMenuTab["Constellation"] = "Constellation";
305
+ CharacterMenuTab["Profile"] = "Profile";
306
+ CharacterMenuTab["Talents"] = "Talents";
307
+ CharacterMenuTab["Weapons"] = "Weapons";
308
+ return CharacterMenuTab;
309
+ }({});
310
+ const CharacterMenuTabs = [
311
+ "Attributes",
312
+ "Weapons",
313
+ "Artifacts",
314
+ "Constellation",
315
+ "Talents",
316
+ "Profile"
317
+ ];
318
+ //#endregion
319
+ //#region src/components/CharacterMenu/Index.vue
320
+ const _hoisted_1$35 = ["data-tab"];
321
+ const _hoisted_2$27 = { class: "characters" };
322
+ const _hoisted_3$25 = ["aria-pressed", "onClick"];
323
+ const _hoisted_4$21 = { class: "breadcrumb" };
324
+ const _hoisted_5$20 = {
325
+ key: 0,
326
+ class: "element",
327
+ viewBox: "0 0 1600 1600",
328
+ "aria-hidden": "true"
329
+ };
330
+ const _hoisted_6$19 = ["d"];
331
+ const _hoisted_7$19 = { class: "tabs" };
332
+ const _hoisted_8$15 = ["aria-pressed", "onClick"];
333
+ const _hoisted_9$13 = ["aria-label"];
334
+ const _hoisted_10$12 = ["aria-label", "onClick"];
335
+ var Index_default$3 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
336
+ __name: "Index",
337
+ props: /*@__PURE__*/ mergeModels({
338
+ characters: {},
339
+ elementMarkPath: {},
340
+ tabLabels: {}
341
+ }, {
342
+ "characterId": { required: true },
343
+ "characterIdModifiers": {},
344
+ "tab": { required: true },
345
+ "tabModifiers": {}
346
+ }),
347
+ emits: ["update:characterId", "update:tab"],
348
+ setup(__props) {
349
+ const characterId = useModel(__props, "characterId");
350
+ const tab = useModel(__props, "tab");
351
+ const characterName = computed(() => __props.characters.find(({ id }) => id === characterId.value)?.name ?? "");
352
+ const steps = computed(() => {
353
+ const index = __props.characters.findIndex(({ id }) => id === characterId.value);
354
+ const getStep = (step) => __props.characters[(index + step + __props.characters.length) % __props.characters.length];
355
+ return [{
356
+ character: getStep(-1),
357
+ className: "previous"
358
+ }, {
359
+ character: getStep(1),
360
+ className: "next"
361
+ }];
362
+ });
363
+ return (_ctx, _cache) => {
364
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The character screen's frame: the characters across the top with one chosen, its name at the top left, the tabs\n down the left with the open one lit, and the open tab's panel down the right "), createElementVNode("div", {
365
+ class: "character-menu",
366
+ "data-tab": tab.value
367
+ }, [
368
+ _cache[1] || (_cache[1] = createElementVNode("div", { class: "head" }, null, -1)),
369
+ createElementVNode("ul", _hoisted_2$27, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.characters, ({ id, name }) => {
370
+ return openBlock(), createElementBlock("li", { key: id }, [createElementVNode("button", {
371
+ class: "character",
372
+ "aria-pressed": id === characterId.value,
373
+ type: "button",
374
+ onClick: ($event) => characterId.value = id
375
+ }, toDisplayString(name), 9, _hoisted_3$25)]);
376
+ }), 128))]),
377
+ createElementVNode("p", _hoisted_4$21, toDisplayString(characterName.value), 1),
378
+ __props.elementMarkPath ? (openBlock(), createElementBlock("svg", _hoisted_5$20, [createElementVNode("path", { d: __props.elementMarkPath }, null, 8, _hoisted_6$19)])) : createCommentVNode("v-if", true),
379
+ createCommentVNode(" The keys stepping through the tabs, W up and S down, beside the first "),
380
+ _cache[2] || (_cache[2] = createElementVNode("div", {
381
+ class: "tab-keys",
382
+ "aria-hidden": "true"
383
+ }, [createElementVNode("kbd", { class: "key" }, "W"), createElementVNode("kbd", { class: "key" }, "S")], -1)),
384
+ createElementVNode("ul", _hoisted_7$19, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(CharacterMenuTabs), (menuTab) => {
385
+ return openBlock(), createElementBlock("li", { key: menuTab }, [createElementVNode("button", {
386
+ class: "tab",
387
+ "aria-pressed": menuTab === tab.value,
388
+ type: "button",
389
+ onClick: ($event) => tab.value = menuTab
390
+ }, toDisplayString(__props.tabLabels[menuTab]), 9, _hoisted_8$15)]);
391
+ }), 128))]),
392
+ createElementVNode("section", {
393
+ class: "panel",
394
+ "aria-label": __props.tabLabels[tab.value]
395
+ }, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 8, _hoisted_9$13),
396
+ __props.characters.length > 1 ? (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(steps.value, ({ character, className }) => {
397
+ return openBlock(), createElementBlock("button", {
398
+ key: className,
399
+ class: normalizeClass(["step", className]),
400
+ "aria-label": character?.name,
401
+ type: "button",
402
+ onClick: ($event) => characterId.value = character?.id ?? characterId.value
403
+ }, [createCommentVNode(" The arrow's head and the diamond in its notch, in the reference's own pixels "), _cache[0] || (_cache[0] = createElementVNode("svg", {
404
+ viewBox: "0 0 43 55",
405
+ "aria-hidden": "true"
406
+ }, [
407
+ createElementVNode("path", {
408
+ class: "arrow",
409
+ d: "M31 0 L0 27.5 L31 55 L31 42 L16 27.5 L31 13 Z"
410
+ }),
411
+ createElementVNode("path", {
412
+ class: "mark",
413
+ d: "M31 16.5 L42 27.5 L31 38.5 L20 27.5 Z M31 22 L25.5 27.5 L31 33 L36.5 27.5 Z"
414
+ }),
415
+ createElementVNode("path", {
416
+ class: "mark",
417
+ d: "M31 25.5 L33 27.5 L31 29.5 L29 27.5 Z"
418
+ })
419
+ ], -1))], 10, _hoisted_10$12);
420
+ }), 128)) : createCommentVNode("v-if", true)
421
+ ], 8, _hoisted_1$35)], 2112);
422
+ };
423
+ }
424
+ }), [["__scopeId", "data-v-86092611"]]);
425
+ //#endregion
426
+ //#region src/components/CharacterMenuButtons/Index.vue
427
+ const _hoisted_1$34 = { class: "buttons" };
428
+ var Index_default$5 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
429
+ __name: "Index",
430
+ setup(__props) {
431
+ return (_ctx, _cache) => {
432
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The two buttons beneath a character menu's panel, the game's pills, each the panel's half less the gap between them "), createElementVNode("div", _hoisted_1$34, [renderSlot(_ctx.$slots, "default", {}, () => [_cache[0] || (_cache[0] = createElementVNode("span", { class: "button" }, null, -1)), _cache[1] || (_cache[1] = createElementVNode("span", { class: "button" }, null, -1))], true)])], 2112);
433
+ };
434
+ }
435
+ }), [["__scopeId", "data-v-359aa329"]]);
436
+ //#endregion
437
+ //#region src/components/ToastNotice/Index.vue
438
+ const _sfc_main$34 = {};
439
+ const _hoisted_1$33 = {
440
+ class: "toast-notice",
441
+ role: "status"
442
+ };
443
+ const _hoisted_2$26 = { class: "mark" };
444
+ const _hoisted_3$24 = { class: "text" };
445
+ function _sfc_render$1(_ctx, _cache) {
446
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The game's notice card, dropped at the top of a screen: white with rounded corners, 107 units high and at least\n 537 across, a round mark at its left and its words in the game's near black. Measured from a 1440 high\n Recording of the welcome the login screen shows "), createElementVNode("div", _hoisted_1$33, [createElementVNode("span", _hoisted_2$26, [renderSlot(_ctx.$slots, "mark", {}, void 0, true)]), createElementVNode("p", _hoisted_3$24, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])])], 2112);
447
+ }
448
+ var Index_default$33 = /*#__PURE__*/ export_helper_default(_sfc_main$34, [["render", _sfc_render$1], ["__scopeId", "data-v-a09dfb40"]]);
449
+ //#endregion
450
+ //#region src/components/CharacterMenuArtifacts/Index.vue
451
+ const _hoisted_1$32 = { class: "artifacts" };
452
+ const _hoisted_2$25 = { class: "slots" };
453
+ const _hoisted_3$23 = [
454
+ "aria-label",
455
+ "aria-pressed",
456
+ "onClick"
457
+ ];
458
+ const _hoisted_4$20 = { class: "details" };
459
+ const _hoisted_5$19 = {
460
+ key: 1,
461
+ class: "stats"
462
+ };
463
+ const _hoisted_6$18 = { class: "stat" };
464
+ const _hoisted_7$18 = { class: "set-bonus" };
465
+ const _hoisted_8$14 = { class: "set-bonus-heading" };
466
+ const _hoisted_9$12 = {
467
+ key: 0,
468
+ class: "set-bonus-lines"
469
+ };
470
+ const _hoisted_10$11 = {
471
+ key: 1,
472
+ class: "set-bonus-lines"
473
+ };
474
+ var Index_default$4 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
475
+ __name: "Index",
476
+ props: {
477
+ enhanceLabel: {},
478
+ equipDisabledSlots: {},
479
+ equipLabel: {},
480
+ lockLabel: {},
481
+ noSetBonusLabel: {},
482
+ notice: {},
483
+ setBonusHeading: {},
484
+ setBonusLines: {},
485
+ slotNames: {},
486
+ slotStats: {},
487
+ unequipLabel: {},
488
+ unlockLabel: {}
489
+ },
490
+ emits: [
491
+ "enhance",
492
+ "equip",
493
+ "lock",
494
+ "unequip"
495
+ ],
496
+ setup(__props, { emit: __emit }) {
497
+ const emit = __emit;
498
+ const selectedIndex = ref(0);
499
+ const selectedStats = computed(() => __props.slotStats[selectedIndex.value]);
500
+ const isSelectedWorn = computed(() => selectedStats.value !== void 0);
501
+ return (_ctx, _cache) => {
502
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The Artifacts tab's panel: the five slots down its top, each a disc lit where the character wears an artifact and\n picked by a click, the picked slot's name in the details pill, the picked artifact's main and sub stats under it,\n the set bonus block below them, and the Enhance and Equip or Unequip buttons at its foot. The stats' place is\n provisional "), createElementVNode("div", _hoisted_1$32, [
503
+ __props.notice ? (openBlock(), createBlock(Index_default$33, {
504
+ key: 0,
505
+ class: "notice"
506
+ }, {
507
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.notice), 1)]),
508
+ _: 1
509
+ })) : createCommentVNode("v-if", true),
510
+ createElementVNode("ul", _hoisted_2$25, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.slotStats, (stats, index) => {
511
+ return openBlock(), createElementBlock("li", { key: index }, [createElementVNode("button", {
512
+ class: normalizeClass(["slot", { worn: stats !== void 0 }]),
513
+ "aria-label": __props.slotNames[index],
514
+ "aria-pressed": index === selectedIndex.value,
515
+ type: "button",
516
+ onClick: ($event) => selectedIndex.value = index
517
+ }, null, 10, _hoisted_3$23)]);
518
+ }), 128))]),
519
+ createElementVNode("div", _hoisted_4$20, toDisplayString(__props.slotNames[selectedIndex.value]), 1),
520
+ selectedStats.value ? (openBlock(), createElementBlock("ul", _hoisted_5$19, [createElementVNode("li", _hoisted_6$18, [createElementVNode("span", null, toDisplayString(selectedStats.value.mainStat.label), 1), createElementVNode("span", null, toDisplayString(selectedStats.value.mainStat.value), 1)]), (openBlock(true), createElementBlock(Fragment, null, renderList(selectedStats.value.subStats, ({ label, value }, index) => {
521
+ return openBlock(), createElementBlock("li", {
522
+ key: index,
523
+ class: "stat"
524
+ }, [createElementVNode("span", null, toDisplayString(label), 1), createElementVNode("span", null, toDisplayString(value), 1)]);
525
+ }), 128))])) : createCommentVNode("v-if", true),
526
+ createElementVNode("div", _hoisted_7$18, [createElementVNode("p", _hoisted_8$14, toDisplayString(__props.setBonusHeading), 1), __props.setBonusLines.length > 0 ? (openBlock(), createElementBlock("ul", _hoisted_9$12, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.setBonusLines, (line) => {
527
+ return openBlock(), createElementBlock("li", { key: line }, toDisplayString(line), 1);
528
+ }), 128))])) : (openBlock(), createElementBlock("p", _hoisted_10$11, toDisplayString(__props.noSetBonusLabel), 1))]),
529
+ createVNode(Index_default$5, null, {
530
+ default: withCtx(() => [
531
+ createVNode(Index_default$16, {
532
+ class: "button",
533
+ disabled: !isSelectedWorn.value,
534
+ kind: unref(GameButtonKind).Pill,
535
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("enhance", selectedIndex.value))
536
+ }, {
537
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.enhanceLabel), 1)]),
538
+ _: 1
539
+ }, 8, ["disabled", "kind"]),
540
+ isSelectedWorn.value ? (openBlock(), createBlock(Index_default$16, {
541
+ key: 0,
542
+ class: "button",
543
+ kind: unref(GameButtonKind).Pill,
544
+ onClick: _cache[1] || (_cache[1] = ($event) => emit("unequip", selectedIndex.value))
545
+ }, {
546
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.unequipLabel), 1)]),
547
+ _: 1
548
+ }, 8, ["kind"])) : (openBlock(), createBlock(Index_default$16, {
549
+ key: 1,
550
+ class: "button",
551
+ disabled: __props.equipDisabledSlots[selectedIndex.value],
552
+ kind: unref(GameButtonKind).Pill,
553
+ onClick: _cache[2] || (_cache[2] = ($event) => emit("equip", selectedIndex.value))
554
+ }, {
555
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.equipLabel), 1)]),
556
+ _: 1
557
+ }, 8, ["disabled", "kind"])),
558
+ selectedStats.value ? (openBlock(), createBlock(Index_default$16, {
559
+ key: 2,
560
+ class: "button",
561
+ kind: unref(GameButtonKind).Pill,
562
+ onClick: _cache[3] || (_cache[3] = ($event) => emit("lock", selectedIndex.value))
563
+ }, {
564
+ default: withCtx(() => [createTextVNode(toDisplayString(selectedStats.value.isLocked ? __props.unlockLabel : __props.lockLabel), 1)]),
565
+ _: 1
566
+ }, 8, ["kind"])) : createCommentVNode("v-if", true)
567
+ ]),
568
+ _: 1
569
+ })
570
+ ])], 2112);
571
+ };
572
+ }
573
+ }), [["__scopeId", "data-v-525c0131"]]);
574
+ //#endregion
575
+ //#region src/components/CharacterMenuConstellation/Index.vue
576
+ const _hoisted_1$31 = { class: "constellations" };
577
+ const _hoisted_2$24 = { class: "nodes" };
578
+ const _hoisted_3$22 = ["disabled"];
579
+ var Index_default$6 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
580
+ __name: "Index",
581
+ props: {
582
+ activated: {},
583
+ activateLabel: {},
584
+ isActivateDisabled: { type: Boolean }
585
+ },
586
+ emits: ["activate"],
587
+ setup(__props, { emit: __emit }) {
588
+ const emit = __emit;
589
+ const nodeStyles = CONSTELLATION_NODE_PLACES.map(({ left, top }) => ({
590
+ left: `calc(var(--unit) * ${left})`,
591
+ top: `calc(var(--unit) * ${top})`
592
+ }));
593
+ return (_ctx, _cache) => {
594
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The Constellation tab's panel: the six constellations down its right, each a ring lit once activated, and the\n button that activates the next under them. The game's star map is its own art and its names are not decoded yet,\n so neither is drawn "), createElementVNode("div", _hoisted_1$31, [createElementVNode("ul", _hoisted_2$24, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.activated, (isActivated, index) => {
595
+ return openBlock(), createElementBlock("li", {
596
+ key: index,
597
+ class: normalizeClass(["node", { lit: isActivated }]),
598
+ style: normalizeStyle(unref(nodeStyles)[index])
599
+ }, null, 6);
600
+ }), 128))]), createElementVNode("button", {
601
+ class: "activate",
602
+ disabled: __props.isActivateDisabled,
603
+ type: "button",
604
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("activate"))
605
+ }, toDisplayString(__props.activateLabel), 9, _hoisted_3$22)])], 2112);
606
+ };
607
+ }
608
+ }), [["__scopeId", "data-v-4311eae1"]]);
609
+ //#endregion
610
+ //#region src/components/CharacterMenuProfile/Index.vue
611
+ const _hoisted_1$30 = { class: "profile" };
612
+ const _hoisted_2$23 = { class: "entries-column" };
613
+ const _hoisted_3$21 = { class: "entries" };
614
+ const _hoisted_4$19 = [
615
+ "aria-pressed",
616
+ "data-locked",
617
+ "onClick"
618
+ ];
619
+ const _hoisted_5$18 = {
620
+ key: 0,
621
+ class: "namecard"
622
+ };
623
+ const _hoisted_6$17 = {
624
+ key: 0,
625
+ class: "story"
626
+ };
627
+ const _hoisted_7$17 = { class: "title" };
628
+ const _hoisted_8$13 = { class: "text" };
629
+ var Index_default$7 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
630
+ __name: "Index",
631
+ props: {
632
+ entries: {},
633
+ namecardName: { default: "" }
634
+ },
635
+ setup(__props) {
636
+ const entryIndex = ref(0);
637
+ const selectedEntry = computed(() => __props.entries[entryIndex.value]);
638
+ return (_ctx, _cache) => {
639
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The Profile tab's panel: the stories down its left, each by its title, and the chosen one's title and text down its\n right. A locked story shows its unlock line in place of its text. The namecard the Friendship holds is a plate of its\n name under the stories, its art not drawn yet "), createElementVNode("div", _hoisted_1$30, [createElementVNode("div", _hoisted_2$23, [createElementVNode("ul", _hoisted_3$21, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.entries, (entry, index) => {
640
+ return openBlock(), createElementBlock("li", { key: index }, [createElementVNode("button", {
641
+ class: "entry",
642
+ "aria-pressed": index === entryIndex.value,
643
+ "data-locked": entry.isLocked,
644
+ type: "button",
645
+ onClick: ($event) => entryIndex.value = index
646
+ }, toDisplayString(entry.title), 9, _hoisted_4$19)]);
647
+ }), 128))]), __props.namecardName ? (openBlock(), createElementBlock("p", _hoisted_5$18, toDisplayString(__props.namecardName), 1)) : createCommentVNode("v-if", true)]), selectedEntry.value ? (openBlock(), createElementBlock("article", _hoisted_6$17, [createElementVNode("h2", _hoisted_7$17, toDisplayString(selectedEntry.value.title), 1), createElementVNode("p", _hoisted_8$13, toDisplayString(selectedEntry.value.text), 1)])) : createCommentVNode("v-if", true)])], 2112);
648
+ };
649
+ }
650
+ }), [["__scopeId", "data-v-d064a750"]]);
651
+ //#endregion
652
+ //#region src/components/CharacterMenuTalents/Index.vue
653
+ const _hoisted_1$29 = { class: "talents" };
654
+ const _hoisted_2$22 = { class: "talent-list" };
655
+ const _hoisted_3$20 = { class: "level" };
656
+ const _hoisted_4$18 = { class: "detail" };
657
+ const _hoisted_5$17 = { class: "phase" };
658
+ const _hoisted_6$16 = { class: "costs" };
659
+ const _hoisted_7$16 = {
660
+ key: 0,
661
+ class: "reason"
662
+ };
663
+ var Index_default$8 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
664
+ __name: "Index",
665
+ props: {
666
+ costs: {},
667
+ isUpgradeDisabled: {},
668
+ levels: {},
669
+ phases: {},
670
+ reasons: {},
671
+ upgradeLabel: {}
672
+ },
673
+ emits: ["upgrade"],
674
+ setup(__props, { emit: __emit }) {
675
+ const emit = __emit;
676
+ return (_ctx, _cache) => {
677
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The Talents tab's panel: the three combat talents down its right, each with its level, the phase and cost of its next\n level, why it cannot rise if it cannot, and its Upgrade. The talents' names and the passives under them are not drawn\n yet, since the game's text for them is not decoded "), createElementVNode("div", _hoisted_1$29, [createElementVNode("ul", _hoisted_2$22, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.levels, (level, index) => {
678
+ return openBlock(), createElementBlock("li", {
679
+ key: index,
680
+ class: "talent"
681
+ }, [
682
+ createElementVNode("span", _hoisted_3$20, toDisplayString(level), 1),
683
+ createElementVNode("div", _hoisted_4$18, [
684
+ createElementVNode("span", _hoisted_5$17, toDisplayString(__props.phases[index]), 1),
685
+ createElementVNode("ul", _hoisted_6$16, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.costs[index], (cost, costIndex) => {
686
+ return openBlock(), createElementBlock("li", { key: costIndex }, toDisplayString(cost), 1);
687
+ }), 128))]),
688
+ __props.reasons[index] ? (openBlock(), createElementBlock("span", _hoisted_7$16, toDisplayString(__props.reasons[index]), 1)) : createCommentVNode("v-if", true)
689
+ ]),
690
+ createVNode(Index_default$16, {
691
+ class: "upgrade",
692
+ disabled: __props.isUpgradeDisabled[index],
693
+ kind: unref(GameButtonKind).Reply,
694
+ onClick: ($event) => emit("upgrade", index)
695
+ }, {
696
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.upgradeLabel), 1)]),
697
+ _: 1
698
+ }, 8, [
699
+ "disabled",
700
+ "kind",
701
+ "onClick"
702
+ ]),
703
+ _cache[0] || (_cache[0] = createElementVNode("span", { class: "icon" }, null, -1))
704
+ ]);
705
+ }), 128))])])], 2112);
706
+ };
707
+ }
708
+ }), [["__scopeId", "data-v-65541162"]]);
709
+ //#endregion
710
+ //#region src/components/CharacterMenuWeapons/Index.vue
711
+ const _hoisted_1$28 = { class: "weapons" };
712
+ const _hoisted_2$21 = { class: "name" };
713
+ const _hoisted_3$19 = { class: "stars" };
714
+ const _hoisted_4$17 = { class: "stats" };
715
+ const _hoisted_5$16 = { class: "stat" };
716
+ const _hoisted_6$15 = { class: "stat" };
717
+ const _hoisted_7$15 = { class: "level" };
718
+ const _hoisted_8$12 = { class: "level-text" };
719
+ const _hoisted_9$11 = { class: "refinement" };
720
+ var Index_default$9 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
721
+ __name: "Index",
722
+ props: {
723
+ ascension: {},
724
+ baseAttack: {},
725
+ levelText: {},
726
+ name: {},
727
+ rarity: {},
728
+ refinement: {},
729
+ subStatValue: {}
730
+ },
731
+ setup(__props) {
732
+ return (_ctx, _cache) => {
733
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The Weapons tab's panel: the weapon's name and stars, its base ATK and secondary attribute, its level with the\n ascension phases reached, its refinement rank, and the two buttons beneath "), createElementVNode("div", _hoisted_1$28, [
734
+ createElementVNode("p", _hoisted_2$21, toDisplayString(__props.name), 1),
735
+ createElementVNode("p", _hoisted_3$19, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.rarity, (star) => {
736
+ return openBlock(), createElementBlock("span", {
737
+ key: star,
738
+ class: "star"
739
+ });
740
+ }), 128))]),
741
+ createElementVNode("ul", _hoisted_4$17, [createElementVNode("li", _hoisted_5$16, toDisplayString(__props.baseAttack), 1), createElementVNode("li", _hoisted_6$15, toDisplayString(__props.subStatValue), 1)]),
742
+ createElementVNode("p", _hoisted_7$15, [createElementVNode("span", _hoisted_8$12, toDisplayString(__props.levelText), 1), (openBlock(true), createElementBlock(Fragment, null, renderList(unref(6), (phase) => {
743
+ return openBlock(), createElementBlock("span", {
744
+ key: phase,
745
+ class: normalizeClass(["spark", { lit: phase <= __props.ascension }])
746
+ }, null, 2);
747
+ }), 128))]),
748
+ createElementVNode("p", _hoisted_9$11, toDisplayString(__props.refinement), 1),
749
+ createVNode(Index_default$5)
750
+ ])], 2112);
751
+ };
752
+ }
753
+ }), [["__scopeId", "data-v-77cff4ef"]]);
754
+ //#endregion
755
+ //#region src/components/CookingScreen/Index.vue
756
+ const _hoisted_1$27 = { class: "cooking-screen" };
757
+ const _hoisted_2$20 = { class: "title" };
758
+ const _hoisted_3$18 = { class: "dishes" };
759
+ const _hoisted_4$16 = ["aria-pressed", "onClick"];
760
+ const _hoisted_5$15 = {
761
+ "aria-hidden": "true",
762
+ class: "stage",
763
+ viewBox: "0 0 1920 1080"
764
+ };
765
+ const _hoisted_6$14 = ["d"];
766
+ const _hoisted_7$14 = ["d"];
767
+ const _hoisted_8$11 = ["d"];
768
+ const _hoisted_9$10 = ["cx", "cy"];
769
+ const _hoisted_10$10 = ["disabled"];
770
+ var Index_default$10 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
771
+ __name: "Index",
772
+ props: {
773
+ autoCookLabel: {},
774
+ canAutoCook: { type: Boolean },
775
+ dishes: {},
776
+ pointer: {},
777
+ selectedId: {},
778
+ stopLabel: {},
779
+ title: {},
780
+ zones: {}
781
+ },
782
+ emits: [
783
+ "autoCook",
784
+ "close",
785
+ "select",
786
+ "stop"
787
+ ],
788
+ setup(__props, { emit: __emit }) {
789
+ const emit = __emit;
790
+ const toArcPoint = (fraction) => {
791
+ const angle = Math.PI * (1 - Math.min(1, Math.max(0, fraction)));
792
+ return {
793
+ x: 960 + 435 * Math.cos(angle),
794
+ y: 832 - 120 * Math.sin(angle)
795
+ };
796
+ };
797
+ const toBarPath = ([start, end]) => {
798
+ const from = toArcPoint(start);
799
+ const to = toArcPoint(end);
800
+ return `M ${from.x} ${from.y} A 435 120 0 0 1 ${to.x} ${to.y}`;
801
+ };
802
+ return (_ctx, _cache) => {
803
+ return openBlock(), createElementBlock("div", _hoisted_1$27, [
804
+ createElementVNode("h1", _hoisted_2$20, toDisplayString(__props.title), 1),
805
+ createElementVNode("button", {
806
+ class: "close",
807
+ type: "button",
808
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
809
+ }, "×"),
810
+ createElementVNode("ul", _hoisted_3$18, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.dishes, (dish) => {
811
+ return openBlock(), createElementBlock("li", { key: dish.id }, [createElementVNode("button", {
812
+ "aria-pressed": dish.id === __props.selectedId,
813
+ class: normalizeClass({ selected: dish.id === __props.selectedId }),
814
+ type: "button",
815
+ onClick: ($event) => emit("select", dish.id)
816
+ }, toDisplayString(dish.name), 11, _hoisted_4$16)]);
817
+ }), 128))]),
818
+ (openBlock(), createElementBlock("svg", _hoisted_5$15, [
819
+ createCommentVNode(" A provisional pot until the game's own is traced from the recording "),
820
+ _cache[3] || (_cache[3] = createElementVNode("ellipse", {
821
+ class: "pot-rim",
822
+ cx: "960",
823
+ cy: "330",
824
+ rx: "150",
825
+ ry: "36"
826
+ }, null, -1)),
827
+ _cache[4] || (_cache[4] = createElementVNode("path", {
828
+ class: "pot",
829
+ d: "M810 330 Q830 470 960 480 Q1090 470 1110 330 Z"
830
+ }, null, -1)),
831
+ createElementVNode("path", {
832
+ class: "track",
833
+ d: toBarPath([0, 1])
834
+ }, null, 8, _hoisted_6$14),
835
+ createElementVNode("path", {
836
+ class: "regular",
837
+ d: toBarPath(__props.zones.regular)
838
+ }, null, 8, _hoisted_7$14),
839
+ createElementVNode("path", {
840
+ class: "delicious",
841
+ d: toBarPath(__props.zones.delicious)
842
+ }, null, 8, _hoisted_8$11),
843
+ createElementVNode("circle", {
844
+ class: "pointer",
845
+ cx: toArcPoint(__props.pointer).x,
846
+ cy: toArcPoint(__props.pointer).y,
847
+ r: "16"
848
+ }, null, 8, _hoisted_9$10)
849
+ ])),
850
+ createElementVNode("button", {
851
+ disabled: !__props.canAutoCook,
852
+ class: "auto-cook",
853
+ type: "button",
854
+ onClick: _cache[1] || (_cache[1] = ($event) => emit("autoCook"))
855
+ }, toDisplayString(__props.autoCookLabel), 9, _hoisted_10$10),
856
+ createElementVNode("button", {
857
+ class: "stop",
858
+ type: "button",
859
+ onClick: _cache[2] || (_cache[2] = ($event) => emit("stop"))
860
+ }, toDisplayString(__props.stopLabel), 1)
861
+ ]);
862
+ };
863
+ }
864
+ }), [["__scopeId", "data-v-4aee3a78"]]);
865
+ //#endregion
866
+ //#region src/components/DiscButton/Index.vue
867
+ const _hoisted_1$26 = ["aria-label"];
868
+ var Index_default$13 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
869
+ __name: "Index",
870
+ props: {
871
+ label: {},
872
+ size: {}
873
+ },
874
+ setup(__props) {
875
+ return (_ctx, _cache) => {
876
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" A white disc under a soft dark rim, its content centred on it as the game centres its icons "), createElementVNode("button", {
877
+ class: "disc-button",
878
+ "aria-label": __props.label,
879
+ type: "button",
880
+ style: normalizeStyle({ "--size": __props.size })
881
+ }, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 12, _hoisted_1$26)], 2112);
882
+ };
883
+ }
884
+ }), [["__scopeId", "data-v-f5c878ff"]]);
885
+ //#endregion
886
+ //#region src/components/ScreenTitle/Index.vue
887
+ const _hoisted_1$25 = { class: "title" };
888
+ var Index_default$30 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
889
+ __name: "Index",
890
+ setup(__props) {
891
+ return (_ctx, _cache) => {
892
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The title a screen draws across its head, at the game's place for it in its own pixels at 1080 high (`--unit` a pixel\n of that frame). Its parent's rules add what it differs by, such as its line height "), createElementVNode("p", _hoisted_1$25, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])], 2112);
893
+ };
894
+ }
895
+ }), [["__scopeId", "data-v-5c68ef69"]]);
896
+ //#endregion
897
+ //#region src/components/CraftingScreen/Index.vue
898
+ const _hoisted_1$24 = { class: "crafting-screen" };
899
+ const _hoisted_2$19 = { class: "head" };
900
+ const _hoisted_3$17 = { class: "coins" };
901
+ const _hoisted_4$15 = { class: "tabs" };
902
+ const _hoisted_5$14 = ["aria-pressed", "onClick"];
903
+ const _hoisted_6$13 = { class: "tab-name" };
904
+ const _hoisted_7$13 = { class: "list" };
905
+ const _hoisted_8$10 = { class: "recipes" };
906
+ const _hoisted_9$9 = ["aria-pressed", "onClick"];
907
+ const _hoisted_10$9 = { class: "recipe-name" };
908
+ const _hoisted_11$8 = {
909
+ key: 0,
910
+ class: "recipe-count"
911
+ };
912
+ const _hoisted_12$8 = { class: "detail" };
913
+ const _hoisted_13$8 = { class: "recipe-title" };
914
+ const _hoisted_14$8 = { class: "crafters" };
915
+ const _hoisted_15$7 = ["aria-pressed", "onClick"];
916
+ const _hoisted_16$7 = { class: "crafter-name" };
917
+ const _hoisted_17$7 = ["aria-label", "max"];
918
+ const _hoisted_18$6 = { class: "crafted" };
919
+ const _hoisted_19$6 = { class: "required" };
920
+ const _hoisted_20$6 = { class: "materials-label" };
921
+ const _hoisted_21$6 = { class: "materials" };
922
+ var Index_default$11 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
923
+ __name: "Index",
924
+ props: /*@__PURE__*/ mergeModels({
925
+ amountLabel: {},
926
+ amountMaximum: {},
927
+ closeLabel: {},
928
+ coins: {},
929
+ craftedLabel: {},
930
+ crafters: {},
931
+ craftingMaterialsLabel: {},
932
+ craftLabel: {},
933
+ materials: {},
934
+ recipes: {},
935
+ requiredCoins: {},
936
+ requiredLabel: {},
937
+ tabs: {},
938
+ title: {}
939
+ }, {
940
+ "amount": { default: 1 },
941
+ "amountModifiers": {},
942
+ "crafterId": { default: 0 },
943
+ "crafterIdModifiers": {},
944
+ "recipeId": { default: 0 },
945
+ "recipeIdModifiers": {},
946
+ "tabId": { default: 0 },
947
+ "tabIdModifiers": {}
948
+ }),
949
+ emits: /*@__PURE__*/ mergeModels(["close", "craft"], [
950
+ "update:amount",
951
+ "update:crafterId",
952
+ "update:recipeId",
953
+ "update:tabId"
954
+ ]),
955
+ setup(__props, { emit: __emit }) {
956
+ const amount = useModel(__props, "amount");
957
+ const crafterId = useModel(__props, "crafterId");
958
+ const recipeId = useModel(__props, "recipeId");
959
+ const tabId = useModel(__props, "tabId");
960
+ const emit = __emit;
961
+ return (_ctx, _cache) => {
962
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The Craft screen, its pieces placed in the game's own pixels at 1080 high (`--unit` a pixel of that frame): the title\n and the coins across the head, the way out at the head's right, and the recipe tabs under the title. The screen takes its\n place from the game's layout, not a two-column grid, since its recipe list is narrower than its detail "), createElementVNode("div", _hoisted_1$24, [
963
+ createElementVNode("header", _hoisted_2$19, [
964
+ createVNode(Index_default$30, {
965
+ class: "heading",
966
+ role: "heading",
967
+ "aria-level": "1"
968
+ }, {
969
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.title), 1)]),
970
+ _: 1
971
+ }),
972
+ createElementVNode("p", _hoisted_3$17, [_cache[3] || (_cache[3] = createElementVNode("span", {
973
+ class: "coin",
974
+ "aria-hidden": "true"
975
+ }, null, -1)), createTextVNode(" " + toDisplayString(__props.coins), 1)]),
976
+ createVNode(Index_default$13, {
977
+ class: "close",
978
+ label: __props.closeLabel,
979
+ size: 56,
980
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
981
+ }, {
982
+ default: withCtx(() => [..._cache[4] || (_cache[4] = [createElementVNode("svg", {
983
+ viewBox: "0 0 24 24",
984
+ "aria-hidden": "true"
985
+ }, [createElementVNode("path", { d: "M6 6 18 18M18 6 6 18" })], -1)])]),
986
+ _: 1
987
+ }, 8, ["label"])
988
+ ]),
989
+ createElementVNode("ul", _hoisted_4$15, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.tabs, (tab) => {
990
+ return openBlock(), createElementBlock("li", { key: tab.id }, [createElementVNode("button", {
991
+ class: "tab",
992
+ "aria-pressed": tab.id === tabId.value,
993
+ type: "button",
994
+ onClick: ($event) => tabId.value = tab.id
995
+ }, [createElementVNode("span", _hoisted_6$13, toDisplayString(tab.name), 1)], 8, _hoisted_5$14)]);
996
+ }), 128))]),
997
+ createElementVNode("div", _hoisted_7$13, [createElementVNode("ul", _hoisted_8$10, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.recipes, (recipe) => {
998
+ return openBlock(), createElementBlock("li", { key: recipe.id }, [createElementVNode("button", {
999
+ class: "recipe",
1000
+ "aria-pressed": recipe.id === recipeId.value,
1001
+ type: "button",
1002
+ onClick: ($event) => recipeId.value = recipe.id
1003
+ }, [createElementVNode("span", _hoisted_10$9, toDisplayString(recipe.name), 1), recipe.count !== void 0 ? (openBlock(), createElementBlock("span", _hoisted_11$8, toDisplayString(recipe.count), 1)) : createCommentVNode("v-if", true)], 8, _hoisted_9$9)]);
1004
+ }), 128))])]),
1005
+ createElementVNode("div", _hoisted_12$8, [
1006
+ _cache[5] || (_cache[5] = createElementVNode("div", {
1007
+ class: "materials-band",
1008
+ "aria-hidden": "true"
1009
+ }, null, -1)),
1010
+ createElementVNode("p", _hoisted_13$8, toDisplayString(__props.recipes.find((recipe) => recipe.id === recipeId.value)?.name), 1),
1011
+ createElementVNode("ul", _hoisted_14$8, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.crafters, (crafter) => {
1012
+ return openBlock(), createElementBlock("li", { key: crafter.id }, [createElementVNode("button", {
1013
+ class: "crafter",
1014
+ "aria-pressed": crafter.id === crafterId.value,
1015
+ type: "button",
1016
+ onClick: ($event) => crafterId.value = crafter.id
1017
+ }, [createElementVNode("span", _hoisted_16$7, toDisplayString(crafter.name), 1)], 8, _hoisted_15$7)]);
1018
+ }), 128))]),
1019
+ withDirectives(createElementVNode("input", {
1020
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => amount.value = $event),
1021
+ "aria-label": __props.amountLabel,
1022
+ class: "amount",
1023
+ max: __props.amountMaximum,
1024
+ min: "1",
1025
+ type: "range"
1026
+ }, null, 8, _hoisted_17$7), [[
1027
+ vModelText,
1028
+ amount.value,
1029
+ void 0,
1030
+ { number: true }
1031
+ ]]),
1032
+ createElementVNode("p", _hoisted_18$6, toDisplayString(__props.craftedLabel), 1),
1033
+ createElementVNode("p", _hoisted_19$6, toDisplayString(__props.requiredLabel) + " " + toDisplayString(__props.requiredCoins), 1),
1034
+ createElementVNode("p", _hoisted_20$6, toDisplayString(__props.craftingMaterialsLabel), 1),
1035
+ createElementVNode("ul", _hoisted_21$6, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.materials, (material) => {
1036
+ return openBlock(), createElementBlock("li", {
1037
+ key: material.id,
1038
+ class: "material"
1039
+ }, toDisplayString(material.owned) + " / " + toDisplayString(material.required), 1);
1040
+ }), 128))]),
1041
+ createElementVNode("button", {
1042
+ class: "craft",
1043
+ type: "button",
1044
+ onClick: _cache[2] || (_cache[2] = ($event) => emit("craft"))
1045
+ }, toDisplayString(__props.craftLabel), 1)
1046
+ ])
1047
+ ])], 2112);
1048
+ };
1049
+ }
1050
+ }), [["__scopeId", "data-v-bd114327"]]);
1051
+ //#endregion
1052
+ //#region src/models/DialogueChoiceIcon.ts
1053
+ let DialogueChoiceIcon = /* @__PURE__ */ function(DialogueChoiceIcon) {
1054
+ DialogueChoiceIcon["Quest"] = "Quest";
1055
+ DialogueChoiceIcon["StoryQuest"] = "StoryQuest";
1056
+ DialogueChoiceIcon["Talk"] = "Talk";
1057
+ return DialogueChoiceIcon;
1058
+ }({});
1059
+ //#endregion
1060
+ //#region src/services/DialogueChoiceIconPathMap.ts
1061
+ const DialogueChoiceIconPathMap = {
1062
+ ["Quest"]: {
1063
+ d: "m140.5 22h19l1 1h8l1 1h5l1 1 11 2 9 3 3 2h2l12 6 14 9 22.5 21.5 13 19 6 12v2l2 3 3 9v3l3 9v5l1 1v8l1 1v19l-1 1v8l-1 1v5l-1 1-2 11-3 9-2 3v2l-6 12-13 19-17.5 17.5-19 13-12 6h-2l-3 2-9 3h-3l-9 3h-5l-1 1h-8l-1 1h-19l-1-1h-8l-1-1h-5l-1-1-11-2-9-3-3-2h-2l-12-6-19-13-17.5-17.5-13-19-6-12v-2l-2-3-3-9v-3l-3-9v-5l-1-1v-8l-1-1v-19l1-1v-8l1-1v-5l1-1 2-11 3-9 2-3v-2l6-12 13-19 17.5-17.5 14-10 17-9h2l3-2 9-3h3l9-3q4.75 1.25 6-1h8l1-1z",
1064
+ viewBox: "0 0 300 300"
1065
+ },
1066
+ ["StoryQuest"]: {
1067
+ d: "m63.5 18h2l45.5 45.5v2l-45.5 45.5h-2l-45.5-45.5v-2l45.5-45.5z",
1068
+ viewBox: "0 0 128 128"
1069
+ },
1070
+ ["Talk"]: {
1071
+ d: "m65 0h46.5q.88.04.5 3h1.5l1 1 9 1 4 3 6 1 3 3h2l5 4 3 1 6.5 5.5q-.75 2.25 1.5 1.5 3 1.12 2.5 4l3 1.5 8 10q.35 5.15 4 7l1 7 1 2.5 2 .5v35.5q-2.67-1.12-2 1.5l-1 1-1 6q-3.18 2.32-4 7-6.72 9.78-15.5 17.5l-5 4h-1.5v2.5l3 5 8 9 1 3-1 3 1 2-2.5 3.5-2.5 1.5-.5 1.5h-29.5q1.13-2.67-1.5-2l-7-3-8-8-6-1-1 1h-23l-6-2-12-1-5-3-6-1-4-3-4-1-15-11-8.5-8.5-7-9-1-4-3-3-2-8.5q-2.96.38-3-.5v-35.5h3v-1.5l1-1 1-7q3.65-1.85 4-7l9.5-11.5q2.25.75 1.5-1.5 1.12-3 4-2.5l1.5-3 11-8 4-1 3-3 6-1 4-3 9-1 2.5-1v-3zm22 8-1 1h-13l-6 3-9 1-4 3-6 1-3 3-4 1-11 8-2 3-3 1v2l-8 9q0 5-4 7l-1 7-3 5v23l3 5 1 6 3 3 1 4 8 10 13 10q4 1 6 4l6 2 2 2 6 1 6 3 12 1q1 2 6 1l1 1h12q1-2 6-1l1-1h8l3 5 8 6 10 4h18v-2l-5-5-6-9-2-5v-4l14-11 10-12 1-4 3-3 1-6 3-5v-23l-3-5-1-7-3-3-1-4-8-9q1-3-1-2l-2-2-12-10-4-1-3-3-6-1-4-3-9-1-6-3h-13q-2-2-5-1zm-39.5 58h3l5.5 3.5 2 4v4l-4.5 6.5h-8l-4.5-4.5v-9l1.5-1.5 5-3zm39 0h4q1.85 2.85 5.5 3-.75 2.58 1 3.5v6l-2 4.5q-3 2-10.5 1l-2.5-1-2-5.5v-5q1.75-.92 1-3.5 3.65-.15 5.5-3zm40 0h3l6.5 4.5v9l-4.5 4.5h-8l-2.5-2.5-2-4v-4l3.5-5.5 4-2z",
1072
+ viewBox: "0 0 176 160"
1073
+ }
1074
+ };
1075
+ //#endregion
1076
+ //#region src/components/DialogueScreen/Index.vue
1077
+ const _hoisted_1$23 = {
1078
+ key: 0,
1079
+ class: "speaker"
1080
+ };
1081
+ const _hoisted_2$18 = {
1082
+ key: 1,
1083
+ class: "role"
1084
+ };
1085
+ const _hoisted_3$16 = { class: "line" };
1086
+ const _hoisted_4$14 = { "aria-hidden": "true" };
1087
+ const _hoisted_5$13 = {
1088
+ class: "unrevealed",
1089
+ "aria-hidden": "true"
1090
+ };
1091
+ const _hoisted_6$12 = { class: "spoken" };
1092
+ const _hoisted_7$12 = {
1093
+ key: 0,
1094
+ class: "choices"
1095
+ };
1096
+ const _hoisted_8$9 = ["data-interaction-state"];
1097
+ const _hoisted_9$8 = ["viewBox"];
1098
+ const _hoisted_10$8 = ["d"];
1099
+ var Index_default$12 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
1100
+ __name: "Index",
1101
+ props: {
1102
+ choices: {},
1103
+ line: {},
1104
+ revealedLength: {},
1105
+ selectedChoiceId: {},
1106
+ speakerName: {},
1107
+ speakerRole: {}
1108
+ },
1109
+ emits: ["advance", "choose"],
1110
+ setup(__props, { emit: __emit }) {
1111
+ const emit = __emit;
1112
+ const lineParts = computed(() => {
1113
+ const characters = [...__props.line];
1114
+ return {
1115
+ revealed: characters.slice(0, __props.revealedLength).join(""),
1116
+ unrevealed: characters.slice(__props.revealedLength).join("")
1117
+ };
1118
+ });
1119
+ return (_ctx, _cache) => {
1120
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The game's dialogue over the world: a click anywhere goes on, the speaker's name over the line at the foot of the\n Screen, and the replies down the right. Sized and placed off the English client's recording of its dialogue\n choices; the selected reply's look and a narration's place wait on recordings still owed "), createElementVNode("div", {
1121
+ class: "dialogue-screen",
1122
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("advance"))
1123
+ }, [createElementVNode("div", {
1124
+ class: normalizeClass(["band", { narration: !__props.speakerName }]),
1125
+ "aria-live": "polite"
1126
+ }, [
1127
+ __props.speakerName ? (openBlock(), createElementBlock("p", _hoisted_1$23, toDisplayString(__props.speakerName), 1)) : createCommentVNode("v-if", true),
1128
+ __props.speakerRole ? (openBlock(), createElementBlock("p", _hoisted_2$18, toDisplayString(__props.speakerRole), 1)) : createCommentVNode("v-if", true),
1129
+ createElementVNode("p", _hoisted_3$16, [
1130
+ createElementVNode("span", _hoisted_4$14, toDisplayString(lineParts.value.revealed), 1),
1131
+ createElementVNode("span", _hoisted_5$13, toDisplayString(lineParts.value.unrevealed), 1),
1132
+ createElementVNode("span", _hoisted_6$12, toDisplayString(__props.line), 1)
1133
+ ])
1134
+ ], 2), __props.choices.length > 0 ? (openBlock(), createElementBlock("ul", _hoisted_7$12, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.choices, ({ icon, id, text }) => {
1135
+ return openBlock(), createElementBlock("li", {
1136
+ key: id,
1137
+ "data-interaction-state": id === __props.selectedChoiceId ? "Hover" : void 0
1138
+ }, [createVNode(Index_default$16, {
1139
+ class: "choice",
1140
+ "data-icon": icon,
1141
+ kind: unref(GameButtonKind).Reply,
1142
+ onClick: withModifiers(($event) => emit("choose", id), ["stop"])
1143
+ }, {
1144
+ default: withCtx(() => [(openBlock(), createElementBlock("svg", {
1145
+ class: "icon",
1146
+ "aria-hidden": "true",
1147
+ viewBox: unref(DialogueChoiceIconPathMap)[icon].viewBox
1148
+ }, [createElementVNode("path", {
1149
+ d: unref(DialogueChoiceIconPathMap)[icon].d,
1150
+ fill: "currentColor"
1151
+ }, null, 8, _hoisted_10$8)], 8, _hoisted_9$8)), createTextVNode(" " + toDisplayString(text), 1)]),
1152
+ _: 2
1153
+ }, 1032, [
1154
+ "data-icon",
1155
+ "kind",
1156
+ "onClick"
1157
+ ])], 8, _hoisted_8$9);
1158
+ }), 128))])) : createCommentVNode("v-if", true)])], 2112);
1159
+ };
1160
+ }
1161
+ }), [["__scopeId", "data-v-da022ee0"]]);
1162
+ //#endregion
1163
+ //#region src/components/ItemTile/Index.vue
1164
+ const _hoisted_1$22 = ["data-rarity"];
1165
+ const _hoisted_2$17 = { class: "face" };
1166
+ const _hoisted_3$15 = {
1167
+ class: "count",
1168
+ "aria-hidden": "true"
1169
+ };
1170
+ var Index_default$20 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
1171
+ __name: "Index",
1172
+ props: {
1173
+ count: {},
1174
+ rarity: {}
1175
+ },
1176
+ setup(__props) {
1177
+ return (_ctx, _cache) => {
1178
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" An item's tile as the game's reward lists draw it, filling the box its parent gives it: the rarity's gradient lit\n from the foot, and the count in white on a darker strip across the bottom 24%, the corners rounded 7%. Measured on\n the wiki's Adventurer Handbook screenshot and the Reputation clip, which agree on the three, four and five star\n tiles and differ only in the count's size, which a screen sets as `--count-size` since it does not follow the\n tile's: the handbook's counts stand as high on its 188 tiles as on its 141. A one or two star tile is not measured\n yet and draws bare. The item's own art is the game's and does not ship "), createElementVNode("span", {
1179
+ class: "item-tile",
1180
+ "data-rarity": __props.rarity
1181
+ }, [createElementVNode("span", _hoisted_2$17, [createElementVNode("span", _hoisted_3$15, toDisplayString(__props.count), 1)])], 8, _hoisted_1$22)], 2112);
1182
+ };
1183
+ }
1184
+ }), [["__scopeId", "data-v-8cf70011"]]);
1185
+ //#endregion
1186
+ //#region src/models/ExpeditionActionKind.ts
1187
+ let ExpeditionActionKind = /* @__PURE__ */ function(ExpeditionActionKind) {
1188
+ ExpeditionActionKind["Claim"] = "claim";
1189
+ ExpeditionActionKind["Recall"] = "recall";
1190
+ ExpeditionActionKind["Send"] = "send";
1191
+ return ExpeditionActionKind;
1192
+ }({});
1193
+ //#endregion
1194
+ //#region src/components/ExpeditionScreen/Index.vue
1195
+ const _hoisted_1$21 = { class: "expedition-screen" };
1196
+ const _hoisted_2$16 = { class: "limit" };
1197
+ const _hoisted_3$14 = ["aria-label"];
1198
+ const _hoisted_4$13 = { class: "nations" };
1199
+ const _hoisted_5$12 = ["aria-pressed", "onClick"];
1200
+ const _hoisted_6$11 = {
1201
+ key: 0,
1202
+ class: "alert",
1203
+ "aria-hidden": "true"
1204
+ };
1205
+ const _hoisted_7$11 = { class: "pins" };
1206
+ const _hoisted_8$8 = [
1207
+ "aria-label",
1208
+ "aria-pressed",
1209
+ "onClick"
1210
+ ];
1211
+ const _hoisted_9$7 = {
1212
+ key: 0,
1213
+ class: "away"
1214
+ };
1215
+ const _hoisted_10$7 = {
1216
+ key: 0,
1217
+ class: "detail"
1218
+ };
1219
+ const _hoisted_11$7 = { class: "detail-name" };
1220
+ const _hoisted_12$7 = { class: "description" };
1221
+ const _hoisted_13$7 = { class: "rewards-label" };
1222
+ const _hoisted_14$7 = { class: "rewards" };
1223
+ const _hoisted_15$6 = {
1224
+ key: 0,
1225
+ class: "status"
1226
+ };
1227
+ const _hoisted_16$6 = {
1228
+ key: 1,
1229
+ class: "durations"
1230
+ };
1231
+ const _hoisted_17$6 = ["aria-pressed", "onClick"];
1232
+ const _hoisted_18$5 = {
1233
+ key: 1,
1234
+ class: "characters"
1235
+ };
1236
+ const _hoisted_19$5 = { class: "characters-title" };
1237
+ const _hoisted_20$5 = ["disabled", "onClick"];
1238
+ const _hoisted_21$5 = { class: "character-name" };
1239
+ const _hoisted_22$4 = { class: "character-bonus" };
1240
+ const _hoisted_23$3 = {
1241
+ key: 0,
1242
+ class: "character-status"
1243
+ };
1244
+ var Index_default$14 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
1245
+ __name: "Index",
1246
+ props: /*@__PURE__*/ mergeModels({
1247
+ characters: {},
1248
+ characterTitle: {},
1249
+ closeLabel: {},
1250
+ detail: {},
1251
+ limitLabel: {},
1252
+ nations: {},
1253
+ pins: {},
1254
+ rewardsLabel: {},
1255
+ title: {}
1256
+ }, {
1257
+ "nation": { required: true },
1258
+ "nationModifiers": {},
1259
+ "place": {},
1260
+ "placeModifiers": {},
1261
+ "hours": { default: 0 },
1262
+ "hoursModifiers": {},
1263
+ "picking": {
1264
+ type: Boolean,
1265
+ default: false
1266
+ },
1267
+ "pickingModifiers": {}
1268
+ }),
1269
+ emits: /*@__PURE__*/ mergeModels([
1270
+ "claim",
1271
+ "close",
1272
+ "recall",
1273
+ "send"
1274
+ ], [
1275
+ "update:nation",
1276
+ "update:place",
1277
+ "update:hours",
1278
+ "update:picking"
1279
+ ]),
1280
+ setup(__props, { emit: __emit }) {
1281
+ const nation = useModel(__props, "nation");
1282
+ const place = useModel(__props, "place");
1283
+ const hours = useModel(__props, "hours");
1284
+ const picking = useModel(__props, "picking");
1285
+ const emit = __emit;
1286
+ const act = () => {
1287
+ if (!__props.detail) return;
1288
+ if (__props.detail.actionKind === "send") picking.value = true;
1289
+ else if (__props.detail.actionKind === "claim") emit("claim", __props.detail.id);
1290
+ else emit("recall", __props.detail.id);
1291
+ };
1292
+ const pick = (characterId) => {
1293
+ if (!__props.detail) return;
1294
+ picking.value = false;
1295
+ emit("send", __props.detail.id, characterId, hours.value);
1296
+ };
1297
+ return (_ctx, _cache) => {
1298
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The Expedition screen as the public clip shows it at 1080 high (references/expedition-screen, 26 seconds): the title\n across the head with the expedition limit and the way out, the nations down the left, the places as pins over the\n map, and the picked place's panel on the right with its rewards, its durations and the button that acts on it. The\n map and the panel's picture are the game's art and do not ship, so they are drawn as plain sheets, and the pin's\n brackets as a square outline; the parity compares them against the frame "), createElementVNode("div", _hoisted_1$21, [
1299
+ _cache[6] || (_cache[6] = createElementVNode("div", {
1300
+ class: "map",
1301
+ "aria-hidden": "true"
1302
+ }, null, -1)),
1303
+ createVNode(Index_default$30, null, {
1304
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.title), 1)]),
1305
+ _: 1
1306
+ }),
1307
+ createElementVNode("p", _hoisted_2$16, toDisplayString(__props.limitLabel), 1),
1308
+ createElementVNode("button", {
1309
+ class: "close",
1310
+ "aria-label": __props.closeLabel,
1311
+ type: "button",
1312
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
1313
+ }, "×", 8, _hoisted_3$14),
1314
+ createElementVNode("ul", _hoisted_4$13, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.nations, ({ hasAlert, name }) => {
1315
+ return openBlock(), createElementBlock("li", { key: name }, [createElementVNode("button", {
1316
+ class: "nation",
1317
+ "aria-pressed": name === nation.value,
1318
+ type: "button",
1319
+ onClick: ($event) => nation.value = name
1320
+ }, [
1321
+ _cache[2] || (_cache[2] = createElementVNode("span", {
1322
+ class: "marker",
1323
+ "aria-hidden": "true"
1324
+ }, null, -1)),
1325
+ createElementVNode("span", null, toDisplayString(name), 1),
1326
+ hasAlert ? (openBlock(), createElementBlock("span", _hoisted_6$11, "!")) : createCommentVNode("v-if", true)
1327
+ ], 8, _hoisted_5$12)]);
1328
+ }), 128))]),
1329
+ createElementVNode("ul", _hoisted_7$11, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.pins, ({ awayLabel, id, label, x, y }) => {
1330
+ return openBlock(), createElementBlock("li", {
1331
+ key: id,
1332
+ style: normalizeStyle({
1333
+ "--x": x,
1334
+ "--y": y
1335
+ })
1336
+ }, [createElementVNode("button", {
1337
+ class: "pin",
1338
+ "aria-label": label,
1339
+ "aria-pressed": id === place.value,
1340
+ type: "button",
1341
+ onClick: ($event) => place.value = id
1342
+ }, [..._cache[3] || (_cache[3] = [createElementVNode("span", { "aria-hidden": "true" }, "+", -1)])], 8, _hoisted_8$8), awayLabel ? (openBlock(), createElementBlock("span", _hoisted_9$7, toDisplayString(awayLabel), 1)) : createCommentVNode("v-if", true)], 4);
1343
+ }), 128))]),
1344
+ __props.detail ? (openBlock(), createElementBlock("section", _hoisted_10$7, [
1345
+ createElementVNode("p", _hoisted_11$7, toDisplayString(__props.detail.name), 1),
1346
+ _cache[4] || (_cache[4] = createElementVNode("div", {
1347
+ class: "picture",
1348
+ "aria-hidden": "true"
1349
+ }, null, -1)),
1350
+ createElementVNode("p", _hoisted_12$7, toDisplayString(__props.detail.description), 1),
1351
+ createElementVNode("p", _hoisted_13$7, toDisplayString(__props.rewardsLabel), 1),
1352
+ createElementVNode("ul", _hoisted_14$7, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.detail.rewards, ({ countLabel, label, rarity }, index) => {
1353
+ return openBlock(), createElementBlock("li", { key: index }, [createVNode(Index_default$20, {
1354
+ class: "item",
1355
+ "aria-label": label,
1356
+ count: countLabel,
1357
+ rarity,
1358
+ role: "img"
1359
+ }, null, 8, [
1360
+ "aria-label",
1361
+ "count",
1362
+ "rarity"
1363
+ ])]);
1364
+ }), 128))]),
1365
+ __props.detail.statusLabel ? (openBlock(), createElementBlock("p", _hoisted_15$6, toDisplayString(__props.detail.statusLabel), 1)) : (openBlock(), createElementBlock("ul", _hoisted_16$6, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.detail.durations, (duration) => {
1366
+ return openBlock(), createElementBlock("li", { key: duration }, [createElementVNode("button", {
1367
+ "aria-pressed": duration === hours.value,
1368
+ type: "button",
1369
+ onClick: ($event) => hours.value = duration
1370
+ }, toDisplayString(duration) + "h", 9, _hoisted_17$6)]);
1371
+ }), 128))]))
1372
+ ])) : createCommentVNode("v-if", true),
1373
+ picking.value && __props.detail ? (openBlock(), createElementBlock("section", _hoisted_18$5, [createElementVNode("p", _hoisted_19$5, toDisplayString(__props.characterTitle), 1), createElementVNode("ul", null, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.characters, ({ bonusLabel, id, label, statusLabel }) => {
1374
+ return openBlock(), createElementBlock("li", { key: id }, [createElementVNode("button", {
1375
+ class: "character",
1376
+ disabled: statusLabel !== "",
1377
+ type: "button",
1378
+ onClick: ($event) => pick(id)
1379
+ }, [
1380
+ createElementVNode("span", _hoisted_21$5, toDisplayString(label), 1),
1381
+ createElementVNode("span", _hoisted_22$4, toDisplayString(bonusLabel), 1),
1382
+ statusLabel ? (openBlock(), createElementBlock("span", _hoisted_23$3, toDisplayString(statusLabel), 1)) : createCommentVNode("v-if", true)
1383
+ ], 8, _hoisted_20$5)]);
1384
+ }), 128))])])) : createCommentVNode("v-if", true),
1385
+ __props.detail ? (openBlock(), createElementBlock("button", {
1386
+ key: 2,
1387
+ class: "action",
1388
+ type: "button",
1389
+ onClick: _cache[1] || (_cache[1] = ($event) => act())
1390
+ }, [_cache[5] || (_cache[5] = createElementVNode("span", {
1391
+ class: "ring",
1392
+ "aria-hidden": "true"
1393
+ }, null, -1)), createElementVNode("span", null, toDisplayString(__props.detail.actionLabel), 1)])) : createCommentVNode("v-if", true)
1394
+ ])], 2112);
1395
+ };
1396
+ }
1397
+ }), [["__scopeId", "data-v-ee73652f"]]);
1398
+ //#endregion
1399
+ //#region src/components/TwoColumnScreen/Index.vue
1400
+ const _hoisted_1$20 = { class: "two-column-screen" };
1401
+ var Index_default$34 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
1402
+ __name: "Index",
1403
+ setup(__props) {
1404
+ return (_ctx, _cache) => {
1405
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" A screen drawn as two columns under a head row, its head spanning both. A screen of this shape takes its root from\n here, so a class on it names the screen and never restates the layout "), createElementVNode("div", _hoisted_1$20, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])], 2112);
1406
+ };
1407
+ }
1408
+ }), [["__scopeId", "data-v-d9df7bbc"]]);
1409
+ //#endregion
1410
+ //#region src/models/ForgeQueueState.ts
1411
+ let ForgeQueueState = /* @__PURE__ */ function(ForgeQueueState) {
1412
+ ForgeQueueState["Complete"] = "Complete";
1413
+ ForgeQueueState["Forging"] = "Forging";
1414
+ ForgeQueueState["Idle"] = "Idle";
1415
+ ForgeQueueState["Locked"] = "Locked";
1416
+ return ForgeQueueState;
1417
+ }({});
1418
+ //#endregion
1419
+ //#region src/models/ForgeTab.ts
1420
+ let ForgeTab = /* @__PURE__ */ function(ForgeTab) {
1421
+ ForgeTab["Materials"] = "Materials";
1422
+ ForgeTab["Queues"] = "Queues";
1423
+ return ForgeTab;
1424
+ }({});
1425
+ //#endregion
1426
+ //#region src/components/ForgeScreen/Index.vue
1427
+ const _hoisted_1$19 = { class: "head" };
1428
+ const _hoisted_2$15 = {
1429
+ class: "title",
1430
+ role: "heading",
1431
+ "aria-level": "1"
1432
+ };
1433
+ const _hoisted_3$13 = { class: "tabs" };
1434
+ const _hoisted_4$12 = ["aria-pressed"];
1435
+ const _hoisted_5$11 = ["aria-pressed"];
1436
+ const _hoisted_6$10 = { class: "coins" };
1437
+ const _hoisted_7$10 = ["aria-label"];
1438
+ const _hoisted_8$7 = { class: "recipes" };
1439
+ const _hoisted_9$6 = [
1440
+ "aria-pressed",
1441
+ "disabled",
1442
+ "onClick"
1443
+ ];
1444
+ const _hoisted_10$6 = { class: "recipe-name" };
1445
+ const _hoisted_11$6 = { class: "recipe-time" };
1446
+ const _hoisted_12$6 = { class: "detail" };
1447
+ const _hoisted_13$6 = ["aria-label", "max"];
1448
+ const _hoisted_14$6 = { class: "total-time" };
1449
+ const _hoisted_15$5 = { class: "item-icon" };
1450
+ const _hoisted_16$5 = { class: "item-count" };
1451
+ const _hoisted_17$5 = { class: "amount-label" };
1452
+ const _hoisted_18$4 = { class: "amount-end amount-max" };
1453
+ const _hoisted_19$4 = { class: "materials-box" };
1454
+ const _hoisted_20$4 = { class: "materials-head" };
1455
+ const _hoisted_21$4 = { class: "materials-title" };
1456
+ const _hoisted_22$3 = { class: "support-title" };
1457
+ const _hoisted_23$2 = { class: "required" };
1458
+ const _hoisted_24$1 = {
1459
+ key: 1,
1460
+ class: "refusal"
1461
+ };
1462
+ const _hoisted_25$1 = {
1463
+ key: 1,
1464
+ class: "queues"
1465
+ };
1466
+ const _hoisted_26$1 = ["data-state"];
1467
+ const _hoisted_27$1 = { class: "queue-name" };
1468
+ const _hoisted_28$1 = { class: "queue-progress" };
1469
+ const _hoisted_29$1 = { class: "queue-time" };
1470
+ const _hoisted_30$1 = ["onClick"];
1471
+ var Index_default$15 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
1472
+ __name: "Index",
1473
+ props: /*@__PURE__*/ mergeModels({
1474
+ amountLabel: {},
1475
+ amountMaximum: {},
1476
+ closeLabel: {},
1477
+ coins: {},
1478
+ materialsBoxLabel: {},
1479
+ materialsLabel: {},
1480
+ obtainLabel: {},
1481
+ queues: {},
1482
+ queuesLabel: {},
1483
+ recipes: {},
1484
+ refusalLabel: {},
1485
+ requiredCoins: {},
1486
+ startLabel: {},
1487
+ supportLabel: {},
1488
+ title: {},
1489
+ totalTimeLabel: {},
1490
+ yieldCount: {}
1491
+ }, {
1492
+ "amount": { default: 1 },
1493
+ "amountModifiers": {},
1494
+ "recipeId": { default: 0 },
1495
+ "recipeIdModifiers": {},
1496
+ "tab": { default: "Materials" },
1497
+ "tabModifiers": {}
1498
+ }),
1499
+ emits: /*@__PURE__*/ mergeModels([
1500
+ "close",
1501
+ "obtain",
1502
+ "start"
1503
+ ], [
1504
+ "update:amount",
1505
+ "update:recipeId",
1506
+ "update:tab"
1507
+ ]),
1508
+ setup(__props, { emit: __emit }) {
1509
+ const amount = useModel(__props, "amount");
1510
+ const recipeId = useModel(__props, "recipeId");
1511
+ const tab = useModel(__props, "tab");
1512
+ const emit = __emit;
1513
+ return (_ctx, _cache) => {
1514
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The forge, the blacksmith's screen: its two tabs across the head with the coins and the way out, the recipes on the\n left with the chosen one's amount and cost beside them, or the queues each holding an order that forges over real\n time and is obtained when it is done. Provisional: every place, size and colour here waits on the forge screen's\n passes against the public clip of the Wagner forge (references/forge-screen) and the owed order-queue recording "), createVNode(Index_default$34, { class: "forge-screen" }, {
1515
+ default: withCtx(() => [createElementVNode("header", _hoisted_1$19, [
1516
+ createElementVNode("p", _hoisted_2$15, toDisplayString(__props.title), 1),
1517
+ createElementVNode("div", _hoisted_3$13, [createElementVNode("button", {
1518
+ class: "tab",
1519
+ "aria-pressed": tab.value === unref(ForgeTab).Materials,
1520
+ type: "button",
1521
+ onClick: _cache[0] || (_cache[0] = ($event) => tab.value = unref(ForgeTab).Materials)
1522
+ }, toDisplayString(__props.materialsLabel), 9, _hoisted_4$12), createElementVNode("button", {
1523
+ class: "tab",
1524
+ "aria-pressed": tab.value === unref(ForgeTab).Queues,
1525
+ type: "button",
1526
+ onClick: _cache[1] || (_cache[1] = ($event) => tab.value = unref(ForgeTab).Queues)
1527
+ }, toDisplayString(__props.queuesLabel), 9, _hoisted_5$11)]),
1528
+ createElementVNode("p", _hoisted_6$10, toDisplayString(__props.coins), 1),
1529
+ createElementVNode("button", {
1530
+ class: "close",
1531
+ "aria-label": __props.closeLabel,
1532
+ type: "button",
1533
+ onClick: _cache[2] || (_cache[2] = ($event) => emit("close"))
1534
+ }, "×", 8, _hoisted_7$10)
1535
+ ]), tab.value === unref(ForgeTab).Materials ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createElementVNode("ul", _hoisted_8$7, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.recipes, (recipe) => {
1536
+ return openBlock(), createElementBlock("li", { key: recipe.id }, [createElementVNode("button", {
1537
+ class: "recipe",
1538
+ "aria-pressed": recipe.id === recipeId.value,
1539
+ disabled: !recipe.isOpen,
1540
+ type: "button",
1541
+ onClick: ($event) => recipeId.value = recipe.id
1542
+ }, [
1543
+ _cache[5] || (_cache[5] = createElementVNode("span", {
1544
+ class: "recipe-tile",
1545
+ "aria-hidden": "true"
1546
+ }, null, -1)),
1547
+ createElementVNode("span", _hoisted_10$6, toDisplayString(recipe.name), 1),
1548
+ createElementVNode("span", _hoisted_11$6, toDisplayString(recipe.forgeTimeLabel), 1)
1549
+ ], 8, _hoisted_9$6)]);
1550
+ }), 128))]), createElementVNode("div", _hoisted_12$6, [
1551
+ withDirectives(createElementVNode("input", {
1552
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => amount.value = $event),
1553
+ "aria-label": __props.amountLabel,
1554
+ class: "amount",
1555
+ max: __props.amountMaximum,
1556
+ min: "1",
1557
+ type: "range"
1558
+ }, null, 8, _hoisted_13$6), [[
1559
+ vModelText,
1560
+ amount.value,
1561
+ void 0,
1562
+ { number: true }
1563
+ ]]),
1564
+ createElementVNode("p", _hoisted_14$6, toDisplayString(__props.totalTimeLabel), 1),
1565
+ createElementVNode("div", _hoisted_15$5, [createElementVNode("span", _hoisted_16$5, toDisplayString(__props.yieldCount), 1)]),
1566
+ createElementVNode("p", _hoisted_17$5, toDisplayString(__props.amountLabel), 1),
1567
+ _cache[10] || (_cache[10] = createElementVNode("span", {
1568
+ "aria-hidden": "true",
1569
+ class: "amount-step amount-minus"
1570
+ }, "−", -1)),
1571
+ _cache[11] || (_cache[11] = createElementVNode("span", { class: "amount-end amount-min" }, "1", -1)),
1572
+ createElementVNode("span", _hoisted_18$4, toDisplayString(__props.amountMaximum), 1),
1573
+ _cache[12] || (_cache[12] = createElementVNode("span", {
1574
+ "aria-hidden": "true",
1575
+ class: "amount-step amount-plus"
1576
+ }, "+", -1)),
1577
+ createElementVNode("section", _hoisted_19$4, [
1578
+ createElementVNode("header", _hoisted_20$4, [createElementVNode("p", _hoisted_21$4, toDisplayString(__props.materialsBoxLabel), 1), createElementVNode("p", _hoisted_22$3, toDisplayString(__props.supportLabel), 1)]),
1579
+ _cache[6] || (_cache[6] = createElementVNode("span", { class: "slot slot-first" }, null, -1)),
1580
+ _cache[7] || (_cache[7] = createElementVNode("span", { class: "slot slot-second" }, null, -1)),
1581
+ _cache[8] || (_cache[8] = createElementVNode("span", { class: "slot slot-third" }, null, -1)),
1582
+ _cache[9] || (_cache[9] = createElementVNode("span", { class: "support-portrait" }, null, -1))
1583
+ ]),
1584
+ createElementVNode("p", _hoisted_23$2, toDisplayString(__props.requiredCoins), 1),
1585
+ !__props.refusalLabel ? (openBlock(), createElementBlock("button", {
1586
+ key: 0,
1587
+ class: "start",
1588
+ type: "button",
1589
+ onClick: _cache[4] || (_cache[4] = ($event) => emit("start"))
1590
+ }, toDisplayString(__props.startLabel), 1)) : (openBlock(), createElementBlock("p", _hoisted_24$1, toDisplayString(__props.refusalLabel), 1))
1591
+ ])], 64)) : (openBlock(), createElementBlock("ul", _hoisted_25$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.queues, (queue) => {
1592
+ return openBlock(), createElementBlock("li", {
1593
+ key: queue.id,
1594
+ class: "queue",
1595
+ "data-state": queue.state
1596
+ }, [
1597
+ createElementVNode("span", _hoisted_27$1, toDisplayString(queue.name), 1),
1598
+ createElementVNode("span", _hoisted_28$1, toDisplayString(queue.progressLabel), 1),
1599
+ createElementVNode("span", _hoisted_29$1, toDisplayString(queue.timeLabel), 1),
1600
+ queue.state === unref(ForgeQueueState).Complete ? (openBlock(), createElementBlock("button", {
1601
+ key: 0,
1602
+ class: "obtain",
1603
+ type: "button",
1604
+ onClick: ($event) => emit("obtain", queue.id)
1605
+ }, toDisplayString(__props.obtainLabel), 9, _hoisted_30$1)) : createCommentVNode("v-if", true)
1606
+ ], 8, _hoisted_26$1);
1607
+ }), 128))]))]),
1608
+ _: 1
1609
+ })], 2112);
1610
+ };
1611
+ }
1612
+ }), [["__scopeId", "data-v-4426e963"]]);
1613
+ //#endregion
1614
+ //#region src/services/toCanvasRect.ts
1615
+ const toPair = ([x = 0, y = 0]) => [x, y];
1616
+ const toCanvasRect = ({ anchorMax, anchorMin, pivot, position, size }) => ({
1617
+ anchorMax: toPair(anchorMax),
1618
+ anchorMin: toPair(anchorMin),
1619
+ pivot: toPair(pivot),
1620
+ position: toPair(position),
1621
+ size: toPair(size)
1622
+ });
1623
+ //#endregion
1624
+ //#region src/services/computeRectOffsets.ts
1625
+ const computeRectOffsets = ({ pivot, position, size }) => {
1626
+ const offsetMin = [position[0] - size[0] * pivot[0], position[1] - size[1] * pivot[1]];
1627
+ return {
1628
+ offsetMax: [offsetMin[0] + size[0], offsetMin[1] + size[1]],
1629
+ offsetMin
1630
+ };
1631
+ };
1632
+ //#endregion
1633
+ //#region src/services/toCanvasRectStyle.ts
1634
+ const toAxis = (anchorMin, anchorMax, offsetMin, size, span, start) => [`calc(${start} + ${anchorMin} * ${span} + ${offsetMin} * var(--canvas-unit))`, `calc(${anchorMax - anchorMin} * ${span} + ${size} * var(--canvas-unit))`];
1635
+ const toCanvasRectStyle = (rect, isOnCanvas = false) => {
1636
+ const { anchorMax, anchorMin, size } = rect;
1637
+ const { offsetMin } = computeRectOffsets(rect);
1638
+ const [left, width] = toAxis(anchorMin[0], anchorMax[0], offsetMin[0], size[0], isOnCanvas ? "(100% - 2 * var(--canvas-inset))" : "100%", isOnCanvas ? "var(--canvas-inset)" : "0px");
1639
+ const [bottom, height] = toAxis(anchorMin[1], anchorMax[1], offsetMin[1], size[1], "100%", "0px");
1640
+ return {
1641
+ bottom,
1642
+ height,
1643
+ left,
1644
+ position: "absolute",
1645
+ width
1646
+ };
1647
+ };
1648
+ //#endregion
1649
+ //#region src/components/GameRect/Index.vue
1650
+ const _sfc_main = /*@__PURE__*/ defineComponent({
1651
+ __name: "Index",
1652
+ props: {
1653
+ parent: { default: () => GAME_CANVAS_RECT },
1654
+ rect: {}
1655
+ },
1656
+ setup(__props) {
1657
+ const canvasRect = computed(() => toCanvasRect(__props.rect));
1658
+ const style = computed(() => {
1659
+ const [pivotX, pivotY] = canvasRect.value.pivot;
1660
+ return {
1661
+ ...toCanvasRectStyle(canvasRect.value, __props.parent === GAME_CANVAS_RECT),
1662
+ scale: __props.rect.scale?.join(" "),
1663
+ transformOrigin: `${pivotX * 100}% ${(1 - pivotY) * 100}%`
1664
+ };
1665
+ });
1666
+ return (_ctx, _cache) => {
1667
+ return openBlock(), createElementBlock("div", { style: normalizeStyle(style.value) }, [renderSlot(_ctx.$slots, "default", { rect: canvasRect.value })], 4);
1668
+ };
1669
+ }
1670
+ });
1671
+ //#endregion
1672
+ //#region src/components/GameScreen/Index.vue
1673
+ const _hoisted_1$18 = ["data-interaction-state"];
1674
+ var Index_default$17 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
1675
+ __name: "Index",
1676
+ props: {
1677
+ interactionState: {},
1678
+ isTouch: { type: Boolean }
1679
+ },
1680
+ setup(__props) {
1681
+ useCssVars((_ctx) => ({
1682
+ "b3ebfd60": unref(GAME_CANVAS_INSET),
1683
+ "v687962d1": unref(GAME_CANVAS_UNIT),
1684
+ "v440f997e": unref(GAME_UNIT),
1685
+ "v3dfd0b4f": unref(GAME_WHITE),
1686
+ "v603eb8d0": unref(GAME_CURSOR),
1687
+ "v62ea67cc": unref(GAME_FONT_FAMILY),
1688
+ "v7e9afa3a": unref(MOBILE_INTERFACE_SCALE)
1689
+ }));
1690
+ const style = computed(() => __props.isTouch === void 0 ? void 0 : { "--interface-scale": __props.isTouch ? MOBILE_INTERFACE_SCALE : 1 });
1691
+ return (_ctx, _cache) => {
1692
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The root every screen of the game's is drawn in: the window's own container, whose `--unit` is a pixel of the\n Game's 1920 by 1080 screen, `--canvas-unit` a unit of its interface's 1600 by 900 canvas, both times\n `--interface-scale`, the mobile client's on a touch screen, `--canvas-inset` how far the canvas stands in from\n Each side and `--white` the white its opening is drawn on, in the game's face and pointer. Each resolves where a\n Child uses it, against this container "), createElementVNode("div", {
1693
+ class: "game-screen",
1694
+ "data-interaction-state": __props.interactionState,
1695
+ style: normalizeStyle(style.value)
1696
+ }, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 12, _hoisted_1$18)], 2112);
1697
+ };
1698
+ }
1699
+ }), [["__scopeId", "data-v-b0f87b0b"]]);
1700
+ //#endregion
1701
+ //#region src/components/InteractionPrompts/Index.vue
1702
+ const _hoisted_1$17 = ["aria-current", "data-kind"];
1703
+ const _hoisted_2$14 = {
1704
+ key: 0,
1705
+ class: "key",
1706
+ "aria-hidden": "true"
1707
+ };
1708
+ const _hoisted_3$12 = ["onClick"];
1709
+ const _hoisted_4$11 = { class: "name" };
1710
+ var Index_default$18 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
1711
+ __name: "Index",
1712
+ props: {
1713
+ isTouch: {
1714
+ type: Boolean,
1715
+ default: false
1716
+ },
1717
+ prompts: {},
1718
+ selectedId: {}
1719
+ },
1720
+ emits: ["press"],
1721
+ setup(__props, { emit: __emit }) {
1722
+ useCssVars((_ctx) => ({ "v0b0e8f3c": selectionDuration }));
1723
+ const emit = __emit;
1724
+ const selectionDuration = `50ms`;
1725
+ return (_ctx, _cache) => {
1726
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The prompts beside the character: a row for each thing in reach, its kind's icon before its name in a pill, and the\n Key's cap before the row F acts on, with the pointer that leads from it into the pill. Measured off the English\n PC client's three-row pickup at 1080 high: each pill 63 high on a 72 pitch, its left edge 59 past the cap's, the\n cap 40 wide and 33 high, the icon 34 across. Each pill is a button of its own, as the game lets a row be pressed\n without the key "), createElementVNode("ul", { class: normalizeClass(["interaction-prompts", { touch: __props.isTouch }]) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.prompts, ({ id, kind, name }) => {
1727
+ return openBlock(), createElementBlock("li", {
1728
+ key: id,
1729
+ class: "prompt",
1730
+ "aria-current": !__props.isTouch && id === __props.selectedId || void 0,
1731
+ "data-kind": kind
1732
+ }, [!__props.isTouch ? (openBlock(), createElementBlock("kbd", _hoisted_2$14, toDisplayString(id === __props.selectedId ? unref("F") : ""), 1)) : createCommentVNode("v-if", true), createElementVNode("button", {
1733
+ class: "pill",
1734
+ type: "button",
1735
+ onClick: ($event) => emit("press", id)
1736
+ }, [_cache[0] || (_cache[0] = createElementVNode("span", {
1737
+ class: "icon",
1738
+ "aria-hidden": "true"
1739
+ }, null, -1)), createElementVNode("span", _hoisted_4$11, toDisplayString(name), 1)], 8, _hoisted_3$12)], 8, _hoisted_1$17);
1740
+ }), 128))], 2)], 2112);
1741
+ };
1742
+ }
1743
+ }), [["__scopeId", "data-v-49059f1b"]]);
1744
+ //#endregion
1745
+ //#region src/models/InventorySort.ts
1746
+ let InventorySort = /* @__PURE__ */ function(InventorySort) {
1747
+ InventorySort["Level"] = "Level";
1748
+ InventorySort["Quality"] = "Quality";
1749
+ return InventorySort;
1750
+ }({});
1751
+ const InventorySorts = Object.values(InventorySort);
1752
+ //#endregion
1753
+ //#region src/components/InventoryScreen/Index.vue
1754
+ const _hoisted_1$16 = { class: "inventory-screen" };
1755
+ const _hoisted_2$13 = ["inert"];
1756
+ const _hoisted_3$11 = {
1757
+ class: "title",
1758
+ role: "heading",
1759
+ "aria-level": "1"
1760
+ };
1761
+ const _hoisted_4$10 = { class: "tabs" };
1762
+ const _hoisted_5$10 = [
1763
+ "aria-label",
1764
+ "aria-pressed",
1765
+ "data-category",
1766
+ "onClick"
1767
+ ];
1768
+ const _hoisted_6$9 = { class: "capacity" };
1769
+ const _hoisted_7$9 = ["aria-label"];
1770
+ const _hoisted_8$6 = { class: "grid" };
1771
+ const _hoisted_9$5 = [
1772
+ "aria-label",
1773
+ "aria-pressed",
1774
+ "data-rarity",
1775
+ "data-selected",
1776
+ "onClick"
1777
+ ];
1778
+ const _hoisted_10$5 = { class: "caption" };
1779
+ const _hoisted_11$5 = ["data-rarity"];
1780
+ const _hoisted_12$5 = { class: "detail-name" };
1781
+ const _hoisted_13$5 = { class: "detail-caption" };
1782
+ const _hoisted_14$5 = ["aria-label", "aria-pressed"];
1783
+ const _hoisted_15$4 = {
1784
+ key: 1,
1785
+ class: "destroy"
1786
+ };
1787
+ const _hoisted_16$4 = { class: "destroy-tip" };
1788
+ const _hoisted_17$4 = {
1789
+ key: 0,
1790
+ class: "destroy-cannot"
1791
+ };
1792
+ const _hoisted_18$3 = { class: "quick-selects" };
1793
+ const _hoisted_19$3 = ["data-rarity", "onClick"];
1794
+ const _hoisted_20$3 = { class: "destroy-count" };
1795
+ const _hoisted_21$3 = ["disabled"];
1796
+ const _hoisted_22$2 = { class: "sort" };
1797
+ const _hoisted_23$1 = ["value"];
1798
+ const _hoisted_24 = ["aria-label", "data-descending"];
1799
+ const _hoisted_25 = {
1800
+ key: 3,
1801
+ class: "currencies"
1802
+ };
1803
+ const _hoisted_26 = ["data-currency"];
1804
+ const _hoisted_27 = { class: "currency-name" };
1805
+ const _hoisted_28 = {
1806
+ key: 0,
1807
+ class: "top-up"
1808
+ };
1809
+ const _hoisted_29 = ["aria-label"];
1810
+ const _hoisted_30 = { class: "confirm-title" };
1811
+ const _hoisted_31 = { class: "confirm-list-label" };
1812
+ const _hoisted_32 = { class: "confirm-names" };
1813
+ const _hoisted_33 = { class: "confirm-warning" };
1814
+ const _hoisted_34 = {
1815
+ key: 0,
1816
+ class: "confirm-warning"
1817
+ };
1818
+ const _hoisted_35 = { class: "confirm-list-label" };
1819
+ const _hoisted_36 = { class: "confirm-names" };
1820
+ const _hoisted_37 = { class: "confirm-buttons" };
1821
+ const _hoisted_38 = ["disabled"];
1822
+ var Index_default$19 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
1823
+ __name: "Index",
1824
+ props: /*@__PURE__*/ mergeModels({
1825
+ backLabel: {},
1826
+ cancelLabel: {},
1827
+ capacity: {},
1828
+ cells: {},
1829
+ currencies: {},
1830
+ destroyButtonLabel: {},
1831
+ destroyCannotLabel: {},
1832
+ destroyConfirmButtonLabel: {},
1833
+ destroyConfirmListLabel: {},
1834
+ destroyConfirmTitle: {},
1835
+ destroyConfirmWarningLabel: {},
1836
+ destroyFullLabel: {},
1837
+ destroyLabel: {},
1838
+ destroyNames: {},
1839
+ destroyRecoveredLabel: {},
1840
+ destroyRecoveredNames: {},
1841
+ destroySelectedLabel: {},
1842
+ destroyTipLabel: {},
1843
+ isConfirming: { type: Boolean },
1844
+ isDestroyFull: { type: Boolean },
1845
+ isDestroying: { type: Boolean },
1846
+ isSortable: { type: Boolean },
1847
+ lockLabel: {},
1848
+ orderLabel: {},
1849
+ quickSelects: {},
1850
+ quickUseLabel: {},
1851
+ sortLabels: {},
1852
+ tabLabels: {},
1853
+ title: {},
1854
+ unlockLabel: {},
1855
+ useLabel: {}
1856
+ }, {
1857
+ "category": { required: true },
1858
+ "categoryModifiers": {},
1859
+ "sort": { required: true },
1860
+ "sortModifiers": {},
1861
+ "isDescending": {
1862
+ type: Boolean,
1863
+ required: true
1864
+ },
1865
+ "isDescendingModifiers": {},
1866
+ "selectedId": { required: true },
1867
+ "selectedIdModifiers": {}
1868
+ }),
1869
+ emits: /*@__PURE__*/ mergeModels([
1870
+ "cancelDestroy",
1871
+ "choose",
1872
+ "close",
1873
+ "confirmDestroy",
1874
+ "destroy",
1875
+ "lock",
1876
+ "quickSelect",
1877
+ "quickUse",
1878
+ "toggleDestroy",
1879
+ "use"
1880
+ ], [
1881
+ "update:category",
1882
+ "update:sort",
1883
+ "update:isDescending",
1884
+ "update:selectedId"
1885
+ ]),
1886
+ setup(__props, { emit: __emit }) {
1887
+ const category = useModel(__props, "category");
1888
+ const sort = useModel(__props, "sort");
1889
+ const isDescending = useModel(__props, "isDescending");
1890
+ const selectedId = useModel(__props, "selectedId");
1891
+ const emit = __emit;
1892
+ const selectedCell = computed(() => __props.cells.find(({ id }) => id === selectedId.value) ?? __props.cells[0]);
1893
+ const cancelButton = useTemplateRef("cancelButton");
1894
+ const trashButton = useTemplateRef("trashButton");
1895
+ let returnFocus;
1896
+ watch(() => __props.isConfirming, async (isOpen) => {
1897
+ if (isOpen) returnFocus = window.document.activeElement instanceof HTMLElement ? window.document.activeElement : void 0;
1898
+ await nextTick();
1899
+ if (isOpen) cancelButton.value?.focus();
1900
+ else (returnFocus?.isConnected ? returnFocus : trashButton.value)?.focus();
1901
+ });
1902
+ return (_ctx, _cache) => {
1903
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The bag, the B key's: its nine tabs across the head in the game's order, the open tab's room beside the way back,\n Its grid of four columns, the entry chosen with its detail panel, and the sort along the foot. Provisional: the\n Tabs' icons and the grid's entries' icons wait on the glyph pass, and the sort, the wallet's place and the\n Panel's stats and footer wait on the bag's other recordings "), createElementVNode("div", _hoisted_1$16, [
1904
+ createElementVNode("div", {
1905
+ class: "bag",
1906
+ inert: __props.isConfirming
1907
+ }, [
1908
+ createElementVNode("p", _hoisted_3$11, toDisplayString(__props.title), 1),
1909
+ createElementVNode("ul", _hoisted_4$10, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(ItemCategories), (itemCategory) => {
1910
+ return openBlock(), createElementBlock("li", { key: itemCategory }, [createElementVNode("button", {
1911
+ class: "tab",
1912
+ "aria-label": __props.tabLabels[itemCategory],
1913
+ "aria-pressed": itemCategory === category.value,
1914
+ "data-category": itemCategory,
1915
+ type: "button",
1916
+ onClick: ($event) => category.value = itemCategory
1917
+ }, null, 8, _hoisted_5$10)]);
1918
+ }), 128))]),
1919
+ createElementVNode("p", _hoisted_6$9, toDisplayString(__props.capacity), 1),
1920
+ createElementVNode("button", {
1921
+ class: "back",
1922
+ "aria-label": __props.backLabel,
1923
+ type: "button",
1924
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
1925
+ }, null, 8, _hoisted_7$9),
1926
+ createElementVNode("ul", _hoisted_8$6, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.cells, (cell) => {
1927
+ return openBlock(), createElementBlock("li", { key: cell.id }, [createElementVNode("button", {
1928
+ class: "cell",
1929
+ "aria-label": cell.name,
1930
+ "aria-pressed": __props.isDestroying ? Boolean(cell.isSelected) : cell.id === selectedCell.value?.id,
1931
+ "data-rarity": cell.rarity,
1932
+ "data-selected": cell.isSelected,
1933
+ type: "button",
1934
+ onClick: ($event) => __props.isDestroying && cell.isDestroyable ? emit("choose", cell.id) : selectedId.value = cell.id
1935
+ }, [createElementVNode("span", _hoisted_10$5, toDisplayString(cell.caption), 1)], 8, _hoisted_9$5)]);
1936
+ }), 128))]),
1937
+ selectedCell.value ? (openBlock(), createElementBlock("section", {
1938
+ key: 0,
1939
+ class: "detail",
1940
+ "data-rarity": selectedCell.value.rarity
1941
+ }, [
1942
+ createElementVNode("p", _hoisted_12$5, toDisplayString(selectedCell.value.name), 1),
1943
+ createElementVNode("p", _hoisted_13$5, toDisplayString(selectedCell.value.caption), 1),
1944
+ selectedCell.value.isUsable && !__props.isDestroying ? (openBlock(), createElementBlock("button", {
1945
+ key: 0,
1946
+ class: "use",
1947
+ type: "button",
1948
+ onClick: _cache[1] || (_cache[1] = ($event) => emit("use", selectedCell.value.id))
1949
+ }, toDisplayString(__props.useLabel), 1)) : createCommentVNode("v-if", true),
1950
+ selectedCell.value.isLockable && !__props.isDestroying ? (openBlock(), createElementBlock("button", {
1951
+ key: 1,
1952
+ class: "lock",
1953
+ type: "button",
1954
+ onClick: _cache[2] || (_cache[2] = ($event) => emit("lock", selectedCell.value.id))
1955
+ }, toDisplayString(selectedCell.value.isLocked ? __props.unlockLabel : __props.lockLabel), 1)) : createCommentVNode("v-if", true)
1956
+ ], 8, _hoisted_11$5)) : createCommentVNode("v-if", true),
1957
+ createElementVNode("button", {
1958
+ ref_key: "trashButton",
1959
+ ref: trashButton,
1960
+ class: "trash",
1961
+ "aria-label": __props.destroyLabel,
1962
+ "aria-pressed": __props.isDestroying,
1963
+ type: "button",
1964
+ onClick: _cache[3] || (_cache[3] = ($event) => emit("toggleDestroy"))
1965
+ }, null, 8, _hoisted_14$5),
1966
+ createCommentVNode(" The destroy mode's foot, in place of the sort or the currencies: its opening line, the quick selects by rarity,\n the count of the chosen entries and the Destroy button that opens the dialog. Provisional until the mode is recorded "),
1967
+ __props.isDestroying ? (openBlock(), createElementBlock("section", _hoisted_15$4, [
1968
+ createElementVNode("p", _hoisted_16$4, toDisplayString(__props.destroyTipLabel), 1),
1969
+ selectedCell.value && !selectedCell.value.isDestroyable ? (openBlock(), createElementBlock("p", _hoisted_17$4, toDisplayString(__props.destroyCannotLabel), 1)) : createCommentVNode("v-if", true),
1970
+ createElementVNode("ul", _hoisted_18$3, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.quickSelects, ({ label, rarity }) => {
1971
+ return openBlock(), createElementBlock("li", { key: rarity }, [createElementVNode("button", {
1972
+ class: "quick-select",
1973
+ "data-rarity": rarity,
1974
+ type: "button",
1975
+ onClick: ($event) => emit("quickSelect", rarity)
1976
+ }, toDisplayString(label), 9, _hoisted_19$3)]);
1977
+ }), 128))]),
1978
+ createElementVNode("p", _hoisted_20$3, toDisplayString(__props.destroySelectedLabel), 1),
1979
+ createElementVNode("button", {
1980
+ class: "destroy-button",
1981
+ disabled: !__props.destroyNames.length,
1982
+ type: "button",
1983
+ onClick: _cache[4] || (_cache[4] = ($event) => emit("destroy"))
1984
+ }, toDisplayString(__props.destroyButtonLabel), 9, _hoisted_21$3)
1985
+ ])) : __props.isSortable ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [
1986
+ _cache[10] || (_cache[10] = createElementVNode("span", { class: "filter" }, null, -1)),
1987
+ createElementVNode("div", _hoisted_22$2, [createCommentVNode(" eslint-disable-next-line vuejs-accessibility/form-control-has-label -- the sort's caption is no game text key yet, so no name in the reader's language exists until the bag's sort recording keys it; its options name it meanwhile "), withDirectives(createElementVNode("select", {
1988
+ "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => sort.value = $event),
1989
+ class: "sort-select"
1990
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(InventorySorts), (inventorySort) => {
1991
+ return openBlock(), createElementBlock("option", {
1992
+ key: inventorySort,
1993
+ value: inventorySort
1994
+ }, toDisplayString(__props.sortLabels[inventorySort]), 9, _hoisted_23$1);
1995
+ }), 128))], 512), [[vModelSelect, sort.value]])]),
1996
+ createElementVNode("button", {
1997
+ class: "order",
1998
+ "aria-label": __props.orderLabel,
1999
+ "data-descending": isDescending.value,
2000
+ type: "button",
2001
+ onClick: _cache[6] || (_cache[6] = ($event) => isDescending.value = !isDescending.value)
2002
+ }, null, 8, _hoisted_24)
2003
+ ], 64)) : (openBlock(), createElementBlock("ul", _hoisted_25, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.currencies, ({ id, isTopUp, name, quantity }) => {
2004
+ return openBlock(), createElementBlock("li", {
2005
+ key: id,
2006
+ class: "currency",
2007
+ "data-currency": id
2008
+ }, [
2009
+ createElementVNode("span", _hoisted_27, toDisplayString(name), 1),
2010
+ _cache[11] || (_cache[11] = createElementVNode("span", { class: "currency-icon" }, null, -1)),
2011
+ createTextVNode(" " + toDisplayString(quantity) + " ", 1),
2012
+ isTopUp ? (openBlock(), createElementBlock("span", _hoisted_28)) : createCommentVNode("v-if", true)
2013
+ ], 8, _hoisted_26);
2014
+ }), 128))])),
2015
+ createCommentVNode(" The gadget's action under the detail panel, which equips the gadget to the quick-use slot. Provisional: its place\n is where the controller recording shows a gadget's action, the bottom bar's X, until the keyboard's is read "),
2016
+ selectedCell.value?.isEquipable && !__props.isDestroying ? (openBlock(), createElementBlock("button", {
2017
+ key: 4,
2018
+ class: "quick-use",
2019
+ type: "button",
2020
+ onClick: _cache[7] || (_cache[7] = ($event) => emit("quickUse", selectedCell.value.id))
2021
+ }, toDisplayString(__props.quickUseLabel), 1)) : createCommentVNode("v-if", true)
2022
+ ], 8, _hoisted_2$13),
2023
+ createCommentVNode(" The dialog the Destroy button opens over the bag: the entries to be destroyed, and the warning that it cannot be\n undone, in the game's own wording. Provisional until the dialog is recorded "),
2024
+ __props.isConfirming ? (openBlock(), createElementBlock("section", {
2025
+ key: 0,
2026
+ class: "confirm",
2027
+ role: "dialog",
2028
+ "aria-modal": "true",
2029
+ "aria-label": __props.destroyConfirmTitle
2030
+ }, [
2031
+ createElementVNode("p", _hoisted_30, toDisplayString(__props.destroyConfirmTitle), 1),
2032
+ createElementVNode("p", _hoisted_31, toDisplayString(__props.destroyConfirmListLabel), 1),
2033
+ createElementVNode("ul", _hoisted_32, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.destroyNames, (name, index) => {
2034
+ return openBlock(), createElementBlock("li", { key: index }, toDisplayString(name), 1);
2035
+ }), 128))]),
2036
+ createElementVNode("p", _hoisted_33, toDisplayString(__props.destroyConfirmWarningLabel), 1),
2037
+ __props.isDestroyFull ? (openBlock(), createElementBlock("p", _hoisted_34, toDisplayString(__props.destroyFullLabel), 1)) : createCommentVNode("v-if", true),
2038
+ __props.destroyRecoveredNames.length ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createElementVNode("p", _hoisted_35, toDisplayString(__props.destroyRecoveredLabel), 1), createElementVNode("ul", _hoisted_36, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.destroyRecoveredNames, (name, index) => {
2039
+ return openBlock(), createElementBlock("li", { key: index }, toDisplayString(name), 1);
2040
+ }), 128))])], 64)) : createCommentVNode("v-if", true),
2041
+ createElementVNode("div", _hoisted_37, [createElementVNode("button", {
2042
+ ref_key: "cancelButton",
2043
+ ref: cancelButton,
2044
+ class: "confirm-button",
2045
+ type: "button",
2046
+ onClick: _cache[8] || (_cache[8] = ($event) => emit("cancelDestroy"))
2047
+ }, toDisplayString(__props.cancelLabel), 513), createElementVNode("button", {
2048
+ disabled: __props.isDestroyFull,
2049
+ class: "confirm-button",
2050
+ type: "button",
2051
+ onClick: _cache[9] || (_cache[9] = ($event) => emit("confirmDestroy"))
2052
+ }, toDisplayString(__props.destroyConfirmButtonLabel), 9, _hoisted_38)])
2053
+ ], 8, _hoisted_29)) : createCommentVNode("v-if", true)
2054
+ ])], 2112);
2055
+ };
2056
+ }
2057
+ }), [["__scopeId", "data-v-cf391b68"]]);
2058
+ //#endregion
2059
+ //#region src/components/LoadingSpinner/Index.vue
2060
+ const _hoisted_1$15 = ["aria-label"];
2061
+ var Index_default$21 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
2062
+ __name: "Index",
2063
+ props: { label: {} },
2064
+ setup(__props) {
2065
+ return (_ctx, _cache) => {
2066
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The game's wait mark: a dark glass square 120 units across with rounded corners, and in it a white ring 40 units\n Across that fades out from its round head round to its tail, turning. Measured from a 1440 high recording "), createElementVNode("div", {
2067
+ class: "loading-spinner",
2068
+ role: "status",
2069
+ "aria-label": __props.label
2070
+ }, [..._cache[0] || (_cache[0] = [createElementVNode("span", { class: "ring" }, null, -1)])], 8, _hoisted_1$15)], 2112);
2071
+ };
2072
+ }
2073
+ }), [["__scopeId", "data-v-69cb5a34"]]);
2074
+ //#endregion
2075
+ //#region src/components/OrnamentDivider/Index.vue
2076
+ const _hoisted_1$14 = {
2077
+ class: "ornament-divider",
2078
+ "aria-hidden": "true"
2079
+ };
2080
+ const _hoisted_2$12 = {
2081
+ class: "end",
2082
+ viewBox: "0 0 320 224"
2083
+ };
2084
+ const _hoisted_3$10 = ["d"];
2085
+ const _hoisted_4$9 = {
2086
+ class: "middle",
2087
+ viewBox: "0 0 480 320"
2088
+ };
2089
+ const _hoisted_5$9 = ["d"];
2090
+ const _hoisted_6$8 = {
2091
+ class: "end right",
2092
+ viewBox: "0 0 320 224"
2093
+ };
2094
+ const _hoisted_7$8 = ["d"];
2095
+ var Index_default$22 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
2096
+ __name: "Index",
2097
+ setup(__props) {
2098
+ return (_ctx, _cache) => {
2099
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The game's divider: a hairline as wide as its parent, a tapered diamond at each end and an interlocked double\n Diamond at its middle, in the game's units from the parent's `--unit` "), createElementVNode("div", _hoisted_1$14, [
2100
+ (openBlock(), createElementBlock("svg", _hoisted_2$12, [createElementVNode("path", { d: unref(ORNAMENT_END_PATH) }, null, 8, _hoisted_3$10)])),
2101
+ (openBlock(), createElementBlock("svg", _hoisted_4$9, [createElementVNode("path", { d: unref(ORNAMENT_MIDDLE_PATH) }, null, 8, _hoisted_5$9)])),
2102
+ (openBlock(), createElementBlock("svg", _hoisted_6$8, [createElementVNode("path", { d: unref(ORNAMENT_END_PATH) }, null, 8, _hoisted_7$8)]))
2103
+ ])], 2112);
2104
+ };
2105
+ }
2106
+ }), [["__scopeId", "data-v-335021af"]]);
2107
+ //#endregion
2108
+ //#region src/components/PartySetupScreen/Index.vue
2109
+ const _hoisted_1$13 = { class: "party-setup-screen" };
2110
+ const _hoisted_2$11 = { class: "head" };
2111
+ const _hoisted_3$9 = { class: "title" };
2112
+ const _hoisted_4$8 = ["aria-label"];
2113
+ const _hoisted_5$8 = { class: "team" };
2114
+ const _hoisted_6$7 = { class: "slots" };
2115
+ const _hoisted_7$7 = ["data-empty"];
2116
+ const _hoisted_8$5 = {
2117
+ key: 0,
2118
+ class: "plate"
2119
+ };
2120
+ const _hoisted_9$4 = { class: "name" };
2121
+ const _hoisted_10$4 = {
2122
+ key: 0,
2123
+ class: "element",
2124
+ viewBox: "0 0 1600 1600",
2125
+ "aria-hidden": "true"
2126
+ };
2127
+ const _hoisted_11$4 = ["d"];
2128
+ const _hoisted_12$4 = { class: "level" };
2129
+ const _hoisted_13$4 = {
2130
+ key: 1,
2131
+ class: "plus",
2132
+ "aria-hidden": "true"
2133
+ };
2134
+ const _hoisted_14$4 = { class: "foot" };
2135
+ const _hoisted_15$3 = { class: "team-bar" };
2136
+ const _hoisted_16$3 = { class: "team-name" };
2137
+ const _hoisted_17$3 = { class: "deploy-bar" };
2138
+ var Index_default$23 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
2139
+ __name: "Index",
2140
+ props: {
2141
+ backLabel: {},
2142
+ configureTeamLabel: {},
2143
+ deployLabel: {},
2144
+ quickSetupLabel: {},
2145
+ slots: {},
2146
+ teamName: {},
2147
+ title: {}
2148
+ },
2149
+ emits: [
2150
+ "close",
2151
+ "configureTeam",
2152
+ "deploy",
2153
+ "next",
2154
+ "previous",
2155
+ "quickSetup"
2156
+ ],
2157
+ setup(__props, { emit: __emit }) {
2158
+ const emit = __emit;
2159
+ return (_ctx, _cache) => {
2160
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" Party Setup, the team the player is looking at, fitted to the public clip's frame at 1080 high: the team's name and\n Configure Team at the foot's left, its four members standing across the middle with a name plate over each (its\n name, its element's mark and its level), an empty slot a plus, the arrows at either edge to step to the other teams,\n and Quick Setup and Deploy at the foot's right. The parity pass measures it against that frame "), createElementVNode("div", _hoisted_1$13, [
2161
+ createElementVNode("header", _hoisted_2$11, [createElementVNode("h1", _hoisted_3$9, toDisplayString(__props.title), 1), createElementVNode("button", {
2162
+ class: "back",
2163
+ "aria-label": __props.backLabel,
2164
+ type: "button",
2165
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
2166
+ }, "↶", 8, _hoisted_4$8)]),
2167
+ createElementVNode("section", _hoisted_5$8, [
2168
+ createElementVNode("button", {
2169
+ class: "step previous",
2170
+ type: "button",
2171
+ onClick: _cache[1] || (_cache[1] = ($event) => emit("previous"))
2172
+ }, "‹"),
2173
+ createElementVNode("ol", _hoisted_6$7, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.slots, (slot, index) => {
2174
+ return openBlock(), createElementBlock("li", {
2175
+ key: index,
2176
+ class: "slot",
2177
+ "data-empty": !slot.levelText || void 0
2178
+ }, [slot.levelText ? (openBlock(), createElementBlock("div", _hoisted_8$5, [createElementVNode("span", _hoisted_9$4, [slot.elementMarkPath ? (openBlock(), createElementBlock("svg", _hoisted_10$4, [createElementVNode("path", { d: slot.elementMarkPath }, null, 8, _hoisted_11$4)])) : createCommentVNode("v-if", true), createTextVNode(" " + toDisplayString(slot.name), 1)]), createElementVNode("span", _hoisted_12$4, toDisplayString(slot.levelText), 1)])) : (openBlock(), createElementBlock("span", _hoisted_13$4, "+"))], 8, _hoisted_7$7);
2179
+ }), 128))]),
2180
+ createElementVNode("button", {
2181
+ class: "step next",
2182
+ type: "button",
2183
+ onClick: _cache[2] || (_cache[2] = ($event) => emit("next"))
2184
+ }, "›")
2185
+ ]),
2186
+ createElementVNode("footer", _hoisted_14$4, [createElementVNode("div", _hoisted_15$3, [createElementVNode("p", _hoisted_16$3, toDisplayString(__props.teamName), 1), createElementVNode("button", {
2187
+ class: "action",
2188
+ type: "button",
2189
+ onClick: _cache[3] || (_cache[3] = ($event) => emit("configureTeam"))
2190
+ }, toDisplayString(__props.configureTeamLabel), 1)]), createElementVNode("div", _hoisted_17$3, [createElementVNode("button", {
2191
+ class: "action",
2192
+ type: "button",
2193
+ onClick: _cache[4] || (_cache[4] = ($event) => emit("quickSetup"))
2194
+ }, toDisplayString(__props.quickSetupLabel), 1), createElementVNode("button", {
2195
+ class: "action",
2196
+ type: "button",
2197
+ onClick: _cache[5] || (_cache[5] = ($event) => emit("deploy"))
2198
+ }, toDisplayString(__props.deployLabel), 1)])])
2199
+ ])], 2112);
2200
+ };
2201
+ }
2202
+ }), [["__scopeId", "data-v-876761d0"]]);
2203
+ //#endregion
2204
+ //#region src/components/ProgressBar/Index.vue
2205
+ const _hoisted_1$12 = ["aria-valuenow"];
2206
+ const _hoisted_2$10 = { class: "track" };
2207
+ var Index_default$25 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
2208
+ __name: "Index",
2209
+ props: {
2210
+ isFolded: { type: Boolean },
2211
+ progress: {}
2212
+ },
2213
+ setup(__props) {
2214
+ return (_ctx, _cache) => {
2215
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The game's progress bar, 394 units from diamond to diamond: a dark track 10 units high with pointed ends between\n Two small white diamonds, filled white from its left, measured from the English client's login screen. It opens\n Out of its middle over 250 ms as it mounts and folds back into it, so its diamonds meet as one: the English\n Recording's login screen at 60 frames "), createElementVNode("div", {
2216
+ class: normalizeClass(["progress-bar", { folded: __props.isFolded }]),
2217
+ role: "progressbar",
2218
+ "aria-valuemin": "0",
2219
+ "aria-valuemax": "100",
2220
+ "aria-valuenow": Math.round(__props.progress * 100)
2221
+ }, [
2222
+ _cache[0] || (_cache[0] = createElementVNode("span", { class: "diamond" }, null, -1)),
2223
+ createElementVNode("span", _hoisted_2$10, [createElementVNode("span", {
2224
+ class: "fill",
2225
+ style: normalizeStyle({ width: `${__props.progress * 100}%` })
2226
+ }, null, 4)]),
2227
+ _cache[1] || (_cache[1] = createElementVNode("span", { class: "diamond" }, null, -1))
2228
+ ], 10, _hoisted_1$12)], 2112);
2229
+ };
2230
+ }
2231
+ }), [["__scopeId", "data-v-bea8e745"]]);
2232
+ //#endregion
2233
+ //#region src/components/PromptBand/Index.vue
2234
+ const _sfc_main$12 = {};
2235
+ const _hoisted_1$11 = { class: "prompt-band" };
2236
+ const _hoisted_2$9 = { class: "text" };
2237
+ function _sfc_render(_ctx, _cache) {
2238
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The band a prompt is set in across the foot of a screen: a navy glass strip 44 units high, fading in over its\n Ends, its words centred in a light grey. Its glass and fade are solved from the scene the English recording\n Shows through it at the door "), createElementVNode("div", _hoisted_1$11, [createElementVNode("p", _hoisted_2$9, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])])], 2112);
2239
+ }
2240
+ var Index_default$26 = /*#__PURE__*/ export_helper_default(_sfc_main$12, [["render", _sfc_render], ["__scopeId", "data-v-8c88bb3d"]]);
2241
+ //#endregion
2242
+ //#region src/components/RarityStars/Index.vue
2243
+ const _hoisted_1$10 = { class: "stars" };
2244
+ var Index_default$27 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
2245
+ __name: "Index",
2246
+ props: { rarity: {} },
2247
+ setup(__props) {
2248
+ return (_ctx, _cache) => {
2249
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The game's rarity stars: one star for each rarity, in the game's gold "), createElementVNode("span", _hoisted_1$10, toDisplayString("★".repeat(__props.rarity)), 1)], 2112);
2250
+ };
2251
+ }
2252
+ }), [["__scopeId", "data-v-a4c4ddf9"]]);
2253
+ //#endregion
2254
+ //#region src/components/ReputationScreen/Index.vue
2255
+ const _hoisted_1$9 = { class: "reputation-screen" };
2256
+ const _hoisted_2$8 = { class: "head" };
2257
+ const _hoisted_3$8 = {
2258
+ class: "title",
2259
+ role: "heading",
2260
+ "aria-level": "1"
2261
+ };
2262
+ const _hoisted_4$7 = ["aria-label"];
2263
+ const _hoisted_5$7 = { class: "detail" };
2264
+ const _hoisted_6$6 = { class: "headline" };
2265
+ const _hoisted_7$6 = { class: "requirement" };
2266
+ const _hoisted_8$4 = {
2267
+ key: 0,
2268
+ class: "offer"
2269
+ };
2270
+ const _hoisted_9$3 = { class: "offer-title" };
2271
+ const _hoisted_10$3 = { class: "levels" };
2272
+ const _hoisted_11$3 = [
2273
+ "aria-pressed",
2274
+ "data-achieved",
2275
+ "onClick"
2276
+ ];
2277
+ const _hoisted_12$3 = { class: "badge" };
2278
+ const _hoisted_13$3 = { class: "badge-face" };
2279
+ const _hoisted_14$3 = { class: "badge-word" };
2280
+ const _hoisted_15$2 = { class: "badge-number" };
2281
+ const _hoisted_16$2 = { class: "items" };
2282
+ const _hoisted_17$2 = {
2283
+ key: 0,
2284
+ class: "unlock"
2285
+ };
2286
+ const _hoisted_18$2 = {
2287
+ key: 1,
2288
+ class: "achieved"
2289
+ };
2290
+ const _hoisted_19$2 = {
2291
+ class: "check",
2292
+ viewBox: "0 0 252 228",
2293
+ "aria-hidden": "true"
2294
+ };
2295
+ const _hoisted_20$2 = ["d"];
2296
+ const _hoisted_21$2 = { class: "hidden-label" };
2297
+ const _hoisted_22$1 = {
2298
+ key: 2,
2299
+ class: "status"
2300
+ };
2301
+ var Index_default$28 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
2302
+ __name: "Index",
2303
+ props: /*@__PURE__*/ mergeModels({
2304
+ achievedLabel: {},
2305
+ backLabel: {},
2306
+ headline: {},
2307
+ levelLabel: {},
2308
+ levels: {},
2309
+ notAchievedLabel: {},
2310
+ offer: {},
2311
+ requirement: {},
2312
+ title: {}
2313
+ }, {
2314
+ "level": { default: 0 },
2315
+ "levelModifiers": {}
2316
+ }),
2317
+ emits: /*@__PURE__*/ mergeModels(["accept", "close"], ["update:level"]),
2318
+ setup(__props, { emit: __emit }) {
2319
+ const level = useModel(__props, "level");
2320
+ const emit = __emit;
2321
+ return (_ctx, _cache) => {
2322
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The Reputation reward page, the nation's keeper opens: its title across the head with the way back, the picked\n level's reward and requirement on the left, and the levels down the right. Each row is the public clip's at 1080\n high (references/reputation-screen): its level on a pentagon badge, its items in slots coloured by rarity with\n their count beneath, its unlock line behind an info mark, and the tick or the not achieved block at its end. The\n head and the left column are still provisional: the reference frames only the level list "), createElementVNode("div", _hoisted_1$9, [
2323
+ createElementVNode("header", _hoisted_2$8, [createElementVNode("p", _hoisted_3$8, toDisplayString(__props.title), 1), createElementVNode("button", {
2324
+ class: "back",
2325
+ "aria-label": __props.backLabel,
2326
+ type: "button",
2327
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
2328
+ }, "↶", 8, _hoisted_4$7)]),
2329
+ createElementVNode("section", _hoisted_5$7, [createElementVNode("p", _hoisted_6$6, toDisplayString(__props.headline), 1), createElementVNode("p", _hoisted_7$6, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.requirement, ({ color, text }, index) => {
2330
+ return openBlock(), createElementBlock("span", {
2331
+ key: index,
2332
+ style: normalizeStyle({ color })
2333
+ }, toDisplayString(text), 5);
2334
+ }), 128))])]),
2335
+ __props.offer ? (openBlock(), createElementBlock("section", _hoisted_8$4, [createElementVNode("p", _hoisted_9$3, toDisplayString(__props.offer.title), 1), createElementVNode("button", {
2336
+ class: "accept",
2337
+ type: "button",
2338
+ onClick: _cache[1] || (_cache[1] = ($event) => emit("accept"))
2339
+ }, toDisplayString(__props.offer.acceptLabel), 1)])) : createCommentVNode("v-if", true),
2340
+ createElementVNode("ul", _hoisted_10$3, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.levels, (cell) => {
2341
+ return openBlock(), createElementBlock("li", { key: cell.level }, [createElementVNode("button", {
2342
+ class: "level",
2343
+ "aria-pressed": cell.level === level.value,
2344
+ "data-achieved": cell.isAchieved || void 0,
2345
+ type: "button",
2346
+ onClick: ($event) => level.value = cell.level
2347
+ }, [
2348
+ createElementVNode("span", _hoisted_12$3, [createElementVNode("span", _hoisted_13$3, [createElementVNode("span", _hoisted_14$3, toDisplayString(__props.levelLabel), 1), createElementVNode("span", _hoisted_15$2, toDisplayString(cell.level), 1)])]),
2349
+ createElementVNode("span", _hoisted_16$2, [(openBlock(true), createElementBlock(Fragment, null, renderList(cell.items, ({ count, label, rarity }, index) => {
2350
+ return openBlock(), createBlock(Index_default$20, {
2351
+ key: index,
2352
+ class: "item",
2353
+ "aria-label": label,
2354
+ count,
2355
+ rarity,
2356
+ role: "img"
2357
+ }, null, 8, [
2358
+ "aria-label",
2359
+ "count",
2360
+ "rarity"
2361
+ ]);
2362
+ }), 128))]),
2363
+ cell.unlockLabel ? (openBlock(), createElementBlock("span", _hoisted_17$2, toDisplayString(cell.unlockLabel), 1)) : createCommentVNode("v-if", true),
2364
+ cell.isAchieved ? (openBlock(), createElementBlock("span", _hoisted_18$2, [(openBlock(), createElementBlock("svg", _hoisted_19$2, [createElementVNode("path", { d: unref(CHECK_MARK_PATH) }, null, 8, _hoisted_20$2)])), createElementVNode("span", _hoisted_21$2, toDisplayString(__props.achievedLabel), 1)])) : (openBlock(), createElementBlock("span", _hoisted_22$1, toDisplayString(__props.notAchievedLabel), 1))
2365
+ ], 8, _hoisted_11$3)]);
2366
+ }), 128))])
2367
+ ])], 2112);
2368
+ };
2369
+ }
2370
+ }), [["__scopeId", "data-v-9468271c"]]);
2371
+ //#endregion
2372
+ //#region src/models/InterfaceIcon.ts
2373
+ let InterfaceIcon = /* @__PURE__ */ function(InterfaceIcon) {
2374
+ InterfaceIcon["Exit"] = "Exit";
2375
+ InterfaceIcon["Notice"] = "Notice";
2376
+ InterfaceIcon["Power"] = "Power";
2377
+ InterfaceIcon["Repair"] = "Repair";
2378
+ InterfaceIcon["Settings"] = "Settings";
2379
+ return InterfaceIcon;
2380
+ }({});
2381
+ const InterfaceIcons = Object.values(InterfaceIcon);
2382
+ //#endregion
2383
+ //#region src/services/InterfaceIconCentreMap.ts
2384
+ const InterfaceIconCentreMap = {
2385
+ ["Exit"]: [26.6, 24.75],
2386
+ ["Notice"]: [24, 25.8],
2387
+ ["Power"]: [25.5, 23.75],
2388
+ ["Repair"]: [24, 26],
2389
+ ["Settings"]: [23.95, 25]
2390
+ };
2391
+ //#endregion
2392
+ //#region src/services/InterfaceIconPathMap.ts
2393
+ const InterfaceIconPathMap = {
2394
+ ["Exit"]: "m14.3 8.16h17.06l.09.09.66.09.56.28.89.8.66 1.5v.56l.09.1v2.25q-.16.07-.09.37l-.42.71-.57.18h-2.06l-.09-.09-.56-.09-.33-.33q.07-.31-.1-.38v-1.12l-.42-.52-.65-.47h-11.72l-.61.33-.38.75v23.25l.19.47.33.42.47.19h11.72l.98-.8.09-.18v-1.22l.1-.28.33-.33q.17-.16.56-.1l.09-.09h2.06q.07.16.38.09l.33.24.37.84v2.44l-.09.09v.47l-.28.56v.19l-.38.75-.23.24-.66.56-.56.28-.66.09-.09.1h-17.06l-1.13-.38q-.33-.5-.89-.65-.2-.82-.75-1.36l-.09-.28v-.47l-.1-.1v-26.81q.21-.12.1-.56l.18-.38.38-.47.19-.56.42-.42.56-.47 1.13-.37zm19.03 9h.47l.75.28 2.25 2.15 2.2 1.93.14.23q.43.08.61.42l.33.42 1.17.99.42.51.24.14.09.29v.56l-.09.28-.33.33q-.21-.07-.14.14l-.94.84-.14.24-.52.32-.42.52-.42.33-.23.33q-.46.15-.71.51.07.21-.14.14l-1.69 1.6-.56.46h-.14l-.14.29-1.12.93q-.31-.07-.38.1h-.56l-.71-.52-.28-.75v-3.75l-.23-.33h-7.59l-.47-.18-.52-.52-.19-.47v-2.15l.28-.66.52-.52.28-.09h7.13l.18.09q.07-.16.38-.09l.23-.23v-3.85l.1-.09q-.07-.39.09-.56l.42-.43.38-.18z",
2395
+ ["Notice"]: "m14.67 11.16h1.41q.63.21.98.7l.28.84v3.1q-.21.11-.09.56l-.19.37-.42.43-.56.28h-1.41l-.65-.28-.33-.33-.28-.56v-3.85l.18-.56.43-.42.65-.28zm18 0h1.41q.63.21.98.7l.19.37q-.12.45.09.57v3.18l-.09.1-.09.56-.52.52-.56.28h-1.41l-.89-.38-.37-.89v-3.75l.28-.65.33-.33.65-.28zm-4.03 2.9.38.1.23.23.09.28v2.44l.89 1.64.52.33.33.42 1.31.56q.45-.11.56.1h.85q.11-.21.56-.1l1.55-.65v-.14l.32-.43q.37-.05.52-.32l.66-1.97v-1.97l.32-.33.29-.09.09.09h.37l.47.19 1.08.98.47.75.09.66.1.09v20.53l-.1.1-.09.65-.28.57-.8.89-.56.18-.84.57h-.85l-.09.09h-26.16l-.09-.09h-.66l-.28-.1q-.45-.49-1.22-.65l-.33-.33-.56-.75-.37-1.13v-20.62l.37-1.03.99-1.08.37-.28.56-.19q.38.09.47-.09h.85l.23.23.09.28v2.44l.19.47.28.28.28.56v.19l.24.23.75.66 1.03.47.28.09h.47l.09.1h1.03l.1-.1.56-.09.66-.38h.18l.43-.18v-.14l.61-.61q.21.07.14-.14l.65-1.5q-.11-.45.1-.57v-1.87l.23-.33.19-.09h8.72l.09-.1zm-14.48 10.03-.28.1-.66.56-.38.37-.09.29v1.31l.09.19.85.75.56.18h19.69l.56-.18.75-.75.09-.29v-1.12l-.18-.47-.28-.28-.38-.28v-.19l-.38-.19h-19.96zm-.19 7.97-.56.28-.47.47-.19.47v1.13l.19.47.47.37.56.28h.65l.1.09h.56l.1-.09h18.84l.66-.37.37-.47.09-.28v-1.13l-.28-.56-.84-.66h-20.25z",
2396
+ ["Power"]: "m24.98 6.19h1.13l.84.56.43.42.37.66v.65l.09.1v10.87l-.09.1v.56l-.19.47-.7.7-.75.47h-1.13l-.56-.28-.89-.89-.19-.47v-.47l-.09-.09v-11.07l.09-.09v-.56l.19-.38.61-.7.84-.56zm-6 3q.36-.07.43.14l.09.19v4.5l-.42.51-.47.38-.28.09-1.08.98-.42.52-.33.23-1.22 1.5-.37.75v.19l-.47.75-.38 1.5-.37.56q.07.31-.1.38v.84l-.09.1v3l.09.09v.84q.17.07.1.38l.47.84v.28l.09.1v.28l.19.56.28.38.56 1.31 1.45 1.73.52.43.23.32.75.66.29.09.46.47.57.28h.18l.94.57 1.5.37.56.38q.31-.07.38.09h.84l.1.09h3l.09-.09h.84q.07-.16.38-.09l.56-.38 1.5-.37.38-.29 1.31-.56 1.73-1.45.43-.52.32-.23.66-.75.09-.28.47-.47.28-.56v-.19l.57-.94.37-1.5.38-.56q-.07-.31.09-.38v-.84l.09-.09v-3l-.09-.1v-.84q-.16-.07-.09-.38l-.38-.56-.19-.94-.09-.09v-.28l-.37-.56-.57-1.32-1.45-1.73-.52-.42-.23-.33-1.92-1.55-.1-.18v-4.5l.24-.33h.28l.47.47.84.28.47.47.56.18q.62.64 1.46.94-.05.27.23.38l.61.42.33.42.42.23q.08.44.42.61l.33.24.19.37.56.57q.2.6.66.93l.18.57.57.65.18.66.57.75.09.28.09.75.28.56.19.56.1.75.09.1v.75l.09.09v1.03l.1.1v3.09l-.1.09v1.04l-.09.09v.66q-.19.09-.09.46l-.1.1v.28l-.19.56-.28.56-.18 1.04-.47.56-.28.84-.57.66-.18.56-.38.38-.47.89q-.27-.05-.37.23l-.42.61-.43.33-.23.42q-.43.08-.61.42l-.23.33-.38.19-.56.56-.28.09-.85.66-.56.19-.47.47-.65.18-.75.57-.29.09h-.37l-1.59.56-.75.1-.1.09h-.47l-.09.09h-1.03l-.1.1h-3.37l-.09-.1h-1.04l-.09-.09h-.47l-.09-.09-.85-.1-1.12-.47-1.03-.18-.56-.47-.66-.19-.66-.56-.56-.19q-.45-.49-1.12-.75l-.57-.56-.61-.42-.32-.43-.43-.23q-.08-.43-.42-.61l-.42-.33q-.06-.36-.33-.51-.21.07-.14-.14l-.47-.75-.37-.38-.38-.84-.37-.38-.28-.84-.38-.38-.28-.84v-.38l-.47-1.12-.09-.75-.1-.09v-.75l-.09-.1v-.94l-.09-.09v-3.28l.09-.09v-.94l.09-.1v-.65q.19-.1.1-.47l.09-.09v-.29l.19-.56.19-.28v-.28l.18-.38.1-.65.47-.56.28-.85.56-.65.19-.57 1.64-2.11.42-.32.23-.43q.44-.08.61-.42l.24-.33q.61-.23.94-.75l.46-.18.38-.38.56-.28h.19l.56-.56.85-.28.46-.47z",
2397
+ ["Repair"]: "m29.02 9.28q.37-.09.46.1h1.22q.1.18.47.09l.1.09 1.4.28.24.24.09.56q-.16.07-.09.38l-.33.32-.33.24-.33.42-.42.33-.33.42-.33.23-.23.43-.52.32-.18.43q-.47.11-.75.51l-.24.33-.23.14-.42.61-.33.23-.28.66q.07.31-.1.38v.56l-.09.09v2.81l.09.1v.28l.28.84.8.8.56.19h.28l.1.09h3.28l.09-.09.75-.1.47-.28 2.58-2.39 1.08-1.26.33-.24.23-.33.84-.75h.66l.42.33.28.75v.75l.1.1v3.09l-.1.09v.57l-.09.09v.47l-.19.47v.28l-.47.94-.18.75-.47.46-.19.47q-.56.43-.84 1.13l-.99 1.08-.61.42q.07.21-.14.14-.35.4-.94.56l-.28.28-.84.38h-.19l-.65.47-1.41.28-.28.19-.85.28h-1.4q-.12.21-.56.09l-.1-.09h-1.12q-.07-.17-.38-.1l-.65-.37h-.29l-.46-.19h-.38l-.94-.47-.84-.19q-.49-.17-.75-.56l-.47-.19-1.17-1.07q.07-.22-.14-.14l-1.17-1.27q-.1-.47-.47-.66l-.57-1.22v-.28l-.28-.65-.18-1.03-.38-.66-.09-.28v-.47l-.1-.09v-3l.1-.1v-.56l.09-.28.47-.94.09-.75.66-1.22v-.19l.28-.56.38-.37q.11-.54.51-.8l.33-.23q.06-.37.33-.52l1.59-1.31.66-.28.47-.47.65-.19.94-.56.66-.1.09-.09h.47l.84-.28 1.22-.09.1-.1zm-12.29 17.72q.52-.09.61.23.13.58.57.85l.47.98h.14l.32.33.43.61.32.23.33.43.33.23q.06.36.33.52l.37.09.57.56 1.03.47.61.52.09.37q-.64.96-1.5 1.69v.14h-.14l-1.27 1.17-.42.52-.23.14-.94 1.03v.14h-.14l-1.27 1.17-.32.42-.33.24-1.27 1.36-.42.33q.07.21-.14.14l-.19.18h-.19l-.37.29-.84.37h-.75l-.1.09h-1.12l-.1-.09h-.56l-.66-.28-.18-.19-.66-.28-.8-.7-.65-.94-.1-.56-.09-.1q.09-.37-.09-.47v-2.06l.09-.09.09-.66.29-.56.89-1.17.42-.33.42-.52.42-.32.14-.24.61-.51.14-.24.42-.33.43-.51.42-.33.42-.52.33-.23.33-.42.42-.33.23-.33.42-.33.43-.51.42-.33.42-.52.42-.32.14-.24.56-.28zm-5.57 9.94-.47.18v.19l-.66.85v.84l.19.38.75.65.65.28.38-.09.47-.28.56-.56.19-.47v-.85l-.56-.75-.38-.37h-1.12z",
2398
+ ["Settings"]: "m17.95 8.25h.94q.07.16.38.09l.37.19.66.56.28.1.47.47q.76.22 1.22.75l.56.18h.37l.1.1h1.4q.12-.21.57-.1l.65-.28.28-.28.85-.37.47-.47.28-.1.65-.56.38-.19q.37.1.47-.09h.84l.09.09h.47l.28.1.66.47.84.37.66.56.38.1.56.56q.43.08.61.42l.56.66.09.56.1.09v.38l.09.09v.75l-.09.1v.56l-.1.09v2.35q.17.07.1.37.44.5.65 1.22l.89.89.75.56.38.1.56.47h.19l.84.37.89.8.66 1.22v.75l.09.09v3.84l-.09.1v.56l-.19.38-.79.89q-.81.27-1.41.75l-.84.28-1.18.98-.65.75-.85 1.6v2.53l.1.09v.66q.16.07.09.37l-.09.1-.1.84-.28.56-.33.33-.32.23-.24.33-.56.28h-.19l-.33.33-.14.24q-.7.18-1.03.75l-.84.37-.56.19h-.38l-.09.09h-.66q-.07-.16-.37-.09l-.66-.38h-.19l-.65-.65-.29-.1-.84-.75-.66-.18-.65-.38q-.45.12-.56-.09h-.94l-.1.09-.65.1-1.22.56-.47.47-.56.28-.33.33-.14.23q-.64.11-1.03.47-.31-.07-.38.09h-.65l-.1-.09-.65-.1-.28-.18-.85-.28-.56-.57-.61-.32-.23-.33q-1.18-.42-1.83-1.36l-.28-.85v-.46l-.1-.29.1-.09v-.66l.09-.09v-1.5l.09-.28-.09-.09v-.75l-.09-.29q-.52-.51-.75-1.31l-1.08-1.17q-.49-.17-.75-.56l-.66-.19-1.59-.84-.33-.33-.47-.56-.19-.38q.12-.44-.09-.56v-4.13l.09-.09v-.56l.1-.28.56-.94.33-.33.56-.47.84-.28.75-.56.57-.19 1.45-1.36.75-1.5v-2.44l-.09-.09v-.56l-.1-.1v-.84l.1-.09.18-.94.89-.99.61-.32.24-.33.65-.28.38-.38 1.03-.47.19-.19.56-.28q.45.12.56-.09zm5.11 9.94-1.97.65-.84.66-.28.09-.47.57-.19.09-.37.37-.94 1.41-.09.47-.57 1.03v.75l-.09.1v1.31l.09.09v.66q.19 0 .1.37l.47.66.28.94.56.56.09.28q.75.84 1.78 1.5l.76.19.84.56q.28-.09.47.09h2.62q.1-.18.57-.09l1.21-.66.57-.18.75-.57.84-.84.09-.28.66-.66.09-.56.66-1.13v-.74l.09-.1v-1.5l-.09-.09v-.66q-.19-.09-.09-.37l-.57-.94-.18-.56-.66-.75-.09-.29-.28-.28-.29-.28-1.12-1.03-.85-.37h-.28l-.75-.38q-.47.1-.47-.09h-2.06z"
2399
+ };
2400
+ //#endregion
2401
+ //#region src/components/RoundButton/Index.vue
2402
+ const _hoisted_1$8 = ["viewBox"];
2403
+ const _hoisted_2$7 = ["d"];
2404
+ const _hoisted_3$7 = [
2405
+ "cx",
2406
+ "cy",
2407
+ "r",
2408
+ "stroke-width"
2409
+ ];
2410
+ var Index_default$29 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
2411
+ __name: "Index",
2412
+ props: {
2413
+ icon: {},
2414
+ label: {}
2415
+ },
2416
+ setup(__props) {
2417
+ return (_ctx, _cache) => {
2418
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The game's round button: a white disc 52 units across under a soft dark rim, its glyph in the game's near black\n Centred on its ink, as the game centres each icon's sprite "), createVNode(Index_default$13, {
2419
+ label: __props.label,
2420
+ size: 52
2421
+ }, {
2422
+ default: withCtx(() => [(openBlock(), createElementBlock("svg", {
2423
+ class: "glyph",
2424
+ viewBox: `${unref(InterfaceIconCentreMap)[__props.icon][0] - 24} ${unref(InterfaceIconCentreMap)[__props.icon][1] - 24} 48 48`,
2425
+ "aria-hidden": "true"
2426
+ }, [createElementVNode("path", {
2427
+ d: unref(InterfaceIconPathMap)[__props.icon],
2428
+ "fill-rule": "evenodd"
2429
+ }, null, 8, _hoisted_2$7), __props.icon === unref(InterfaceIcon).Settings ? (openBlock(), createElementBlock("circle", {
2430
+ key: 0,
2431
+ cx: unref(SETTINGS_RING_CENTRE)[0],
2432
+ cy: unref(SETTINGS_RING_CENTRE)[1],
2433
+ r: unref(SETTINGS_RING_RADIUS),
2434
+ class: "ring",
2435
+ "stroke-width": unref(SETTINGS_RING_WIDTH)
2436
+ }, null, 8, _hoisted_3$7)) : createCommentVNode("v-if", true)], 8, _hoisted_1$8))]),
2437
+ _: 1
2438
+ }, 8, ["label"])], 2112);
2439
+ };
2440
+ }
2441
+ }), [["__scopeId", "data-v-4f52a820"]]);
2442
+ //#endregion
2443
+ //#region src/components/ServerBar/Index.vue
2444
+ const _hoisted_1$7 = { class: "server-bar" };
2445
+ const _hoisted_2$6 = {
2446
+ class: "mark",
2447
+ viewBox: "0 0 46 46",
2448
+ "aria-hidden": "true"
2449
+ };
2450
+ const _hoisted_3$6 = ["d"];
2451
+ const _hoisted_4$6 = ["d"];
2452
+ const _hoisted_5$6 = { class: "name" };
2453
+ var Index_default$31 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
2454
+ __name: "Index",
2455
+ props: { name: {} },
2456
+ setup(__props) {
2457
+ return (_ctx, _cache) => {
2458
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The bar naming the chosen server, 456 by 75 units: a dark glass slab with a faint rim, the ticked diamond at its\n Left and the server's name at its middle, measured from the English client's login screen at 1080 high "), createElementVNode("div", _hoisted_1$7, [(openBlock(), createElementBlock("svg", _hoisted_2$6, [createElementVNode("path", {
2459
+ class: "diamond",
2460
+ d: unref(SERVER_MARK_DIAMOND_PATH)
2461
+ }, null, 8, _hoisted_3$6), createElementVNode("path", {
2462
+ class: "tick",
2463
+ d: unref(SERVER_MARK_TICK_PATH)
2464
+ }, null, 8, _hoisted_4$6)])), createElementVNode("p", _hoisted_5$6, toDisplayString(__props.name), 1)])], 2112);
2465
+ };
2466
+ }
2467
+ }), [["__scopeId", "data-v-6b68b3eb"]]);
2468
+ //#endregion
2469
+ //#region src/components/ShopScreen/Index.vue
2470
+ const _hoisted_1$6 = { class: "shop-screen" };
2471
+ const _hoisted_2$5 = { class: "balances" };
2472
+ const _hoisted_3$5 = ["aria-label"];
2473
+ const _hoisted_4$5 = {
2474
+ key: 0,
2475
+ class: "top-up",
2476
+ "aria-hidden": "true"
2477
+ };
2478
+ const _hoisted_5$5 = {
2479
+ key: 0,
2480
+ class: "tabs"
2481
+ };
2482
+ const _hoisted_6$5 = ["aria-pressed", "onClick"];
2483
+ const _hoisted_7$5 = { class: "goods" };
2484
+ const _hoisted_8$3 = ["aria-pressed", "onClick"];
2485
+ const _hoisted_9$2 = { class: "good-name" };
2486
+ const _hoisted_10$2 = {
2487
+ key: 0,
2488
+ class: "good-limit"
2489
+ };
2490
+ const _hoisted_11$2 = ["aria-label"];
2491
+ const _hoisted_12$2 = ["aria-label"];
2492
+ const _hoisted_13$2 = { class: "detail-good" };
2493
+ const _hoisted_14$2 = { class: "detail-name" };
2494
+ const _hoisted_15$1 = ["aria-label"];
2495
+ const _hoisted_16$1 = {
2496
+ key: 0,
2497
+ class: "detail-line"
2498
+ };
2499
+ const _hoisted_17$1 = {
2500
+ key: 1,
2501
+ class: "detail-line"
2502
+ };
2503
+ const _hoisted_18$1 = [
2504
+ "aria-label",
2505
+ "max",
2506
+ "value"
2507
+ ];
2508
+ const _hoisted_19$1 = { class: "amount-value" };
2509
+ const _hoisted_20$1 = ["aria-label"];
2510
+ const _hoisted_21$1 = ["disabled"];
2511
+ var Index_default$32 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
2512
+ __name: "Index",
2513
+ props: /*@__PURE__*/ mergeModels({
2514
+ balances: {},
2515
+ buyLabel: {},
2516
+ closeLabel: {},
2517
+ countLabel: {},
2518
+ countMaximum: {},
2519
+ goods: {},
2520
+ tabs: {},
2521
+ title: {}
2522
+ }, {
2523
+ "count": { default: 1 },
2524
+ "countModifiers": {},
2525
+ "goodId": { default: 0 },
2526
+ "goodIdModifiers": {},
2527
+ "tabId": { default: 0 },
2528
+ "tabIdModifiers": {}
2529
+ }),
2530
+ emits: /*@__PURE__*/ mergeModels(["buy", "close"], [
2531
+ "update:count",
2532
+ "update:goodId",
2533
+ "update:tabId"
2534
+ ]),
2535
+ setup(__props, { emit: __emit }) {
2536
+ const count = useModel(__props, "count");
2537
+ const goodId = useModel(__props, "goodId");
2538
+ const tabId = useModel(__props, "tabId");
2539
+ const emit = __emit;
2540
+ const pickedGood = computed(() => __props.goods.find((good) => good.id === goodId.value));
2541
+ const pickedCount = computed(() => Math.min(Math.max(count.value, 1), Math.max(__props.countMaximum, 1)));
2542
+ const setCount = (event) => {
2543
+ count.value = Number(event.target.value);
2544
+ };
2545
+ const buy = () => {
2546
+ if (pickedGood.value && __props.countMaximum >= 1) emit("buy", pickedGood.value, pickedCount.value);
2547
+ };
2548
+ return (_ctx, _cache) => {
2549
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The Shop screen, its pieces placed in the game's own pixels at 1080 high (`--unit` a pixel of that frame): the title\n and the balances across the head, the way out at the head's right, the tabs under them and the goods grid below. A\n picked good opens its detail over the grid, with its costs, limit and refresh, the count picker and the Buy button.\n The pixels are measured from the public Paimon's Bargains purchase clip aJq1MnTPtZ4 at 12 seconds (the frame is kept\n outside the repo): the panel at 505 by 250, the grid's four columns of 310 with gaps of 32, the Buy button at 1135 to\n 1345 by 728 to 790 "), createElementVNode("div", _hoisted_1$6, [
2550
+ createVNode(Index_default$30, {
2551
+ class: "heading",
2552
+ role: "heading",
2553
+ "aria-level": "1"
2554
+ }, {
2555
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.title), 1)]),
2556
+ _: 1
2557
+ }),
2558
+ createElementVNode("ul", _hoisted_2$5, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.balances, (balance) => {
2559
+ return openBlock(), createElementBlock("li", {
2560
+ key: balance.id,
2561
+ class: "balance"
2562
+ }, [
2563
+ createElementVNode("span", {
2564
+ class: "balance-icon",
2565
+ role: "img",
2566
+ "aria-label": balance.name
2567
+ }, null, 8, _hoisted_3$5),
2568
+ createTextVNode(" " + toDisplayString(balance.quantity) + " ", 1),
2569
+ balance.isTopUp ? (openBlock(), createElementBlock("span", _hoisted_4$5, "+")) : createCommentVNode("v-if", true)
2570
+ ]);
2571
+ }), 128))]),
2572
+ createVNode(Index_default$13, {
2573
+ class: "close",
2574
+ label: __props.closeLabel,
2575
+ size: 56,
2576
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
2577
+ }, {
2578
+ default: withCtx(() => [..._cache[4] || (_cache[4] = [createElementVNode("svg", {
2579
+ viewBox: "0 0 24 24",
2580
+ "aria-hidden": "true"
2581
+ }, [createElementVNode("path", { d: "M6 6 18 18M18 6 6 18" })], -1)])]),
2582
+ _: 1
2583
+ }, 8, ["label"]),
2584
+ __props.tabs.length > 0 ? (openBlock(), createElementBlock("ul", _hoisted_5$5, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.tabs, (tab) => {
2585
+ return openBlock(), createElementBlock("li", { key: tab.id }, [createElementVNode("button", {
2586
+ class: "tab",
2587
+ "aria-pressed": tab.id === tabId.value,
2588
+ type: "button",
2589
+ onClick: ($event) => tabId.value = tab.id
2590
+ }, toDisplayString(tab.name), 9, _hoisted_6$5)]);
2591
+ }), 128))])) : createCommentVNode("v-if", true),
2592
+ createElementVNode("ul", _hoisted_7$5, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.goods, (good) => {
2593
+ return openBlock(), createElementBlock("li", { key: good.id }, [createElementVNode("button", {
2594
+ class: "good",
2595
+ "aria-pressed": good.id === goodId.value,
2596
+ type: "button",
2597
+ onClick: ($event) => goodId.value = good.id
2598
+ }, [
2599
+ createElementVNode("span", _hoisted_9$2, toDisplayString(good.name), 1),
2600
+ good.limitLabel ? (openBlock(), createElementBlock("span", _hoisted_10$2, toDisplayString(good.limitLabel), 1)) : createCommentVNode("v-if", true),
2601
+ (openBlock(true), createElementBlock(Fragment, null, renderList(good.costs, (cost) => {
2602
+ return openBlock(), createElementBlock("span", {
2603
+ key: cost.name,
2604
+ class: "good-price"
2605
+ }, [createElementVNode("span", {
2606
+ class: "price-icon",
2607
+ role: "img",
2608
+ "aria-label": cost.name
2609
+ }, null, 8, _hoisted_11$2), createTextVNode(" " + toDisplayString(cost.count), 1)]);
2610
+ }), 128))
2611
+ ], 8, _hoisted_8$3)]);
2612
+ }), 128))]),
2613
+ pickedGood.value ? (openBlock(), createElementBlock("div", {
2614
+ key: 1,
2615
+ class: "detail",
2616
+ role: "dialog",
2617
+ "aria-modal": "true",
2618
+ "aria-label": pickedGood.value.name
2619
+ }, [
2620
+ createElementVNode("div", _hoisted_13$2, [
2621
+ createElementVNode("p", _hoisted_14$2, toDisplayString(pickedGood.value.name), 1),
2622
+ (openBlock(true), createElementBlock(Fragment, null, renderList(pickedGood.value.costs, (cost) => {
2623
+ return openBlock(), createElementBlock("p", {
2624
+ key: cost.name,
2625
+ class: "detail-price"
2626
+ }, [createElementVNode("span", {
2627
+ class: "price-icon",
2628
+ role: "img",
2629
+ "aria-label": cost.name
2630
+ }, null, 8, _hoisted_15$1), createTextVNode(" " + toDisplayString(cost.count * pickedCount.value), 1)]);
2631
+ }), 128)),
2632
+ pickedGood.value.limitLabel ? (openBlock(), createElementBlock("p", _hoisted_16$1, toDisplayString(pickedGood.value.limitLabel), 1)) : createCommentVNode("v-if", true),
2633
+ pickedGood.value.refreshLabel ? (openBlock(), createElementBlock("p", _hoisted_17$1, toDisplayString(pickedGood.value.refreshLabel), 1)) : createCommentVNode("v-if", true)
2634
+ ]),
2635
+ createElementVNode("input", {
2636
+ "aria-label": __props.countLabel,
2637
+ class: "amount",
2638
+ max: __props.countMaximum,
2639
+ min: "1",
2640
+ type: "range",
2641
+ value: pickedCount.value,
2642
+ onInput: _cache[1] || (_cache[1] = (event) => setCount(event))
2643
+ }, null, 40, _hoisted_18$1),
2644
+ createElementVNode("p", _hoisted_19$1, toDisplayString(pickedCount.value), 1),
2645
+ createElementVNode("button", {
2646
+ class: "cancel",
2647
+ "aria-label": __props.closeLabel,
2648
+ type: "button",
2649
+ onClick: _cache[2] || (_cache[2] = ($event) => goodId.value = 0)
2650
+ }, [..._cache[5] || (_cache[5] = [createElementVNode("svg", {
2651
+ viewBox: "0 0 24 24",
2652
+ "aria-hidden": "true"
2653
+ }, [createElementVNode("path", { d: "M6 6 18 18M18 6 6 18" })], -1)])], 8, _hoisted_20$1),
2654
+ createElementVNode("button", {
2655
+ class: "buy",
2656
+ disabled: __props.countMaximum < 1,
2657
+ type: "button",
2658
+ onClick: _cache[3] || (_cache[3] = ($event) => buy())
2659
+ }, toDisplayString(__props.buyLabel), 9, _hoisted_21$1)
2660
+ ], 8, _hoisted_12$2)) : createCommentVNode("v-if", true)
2661
+ ])], 2112);
2662
+ };
2663
+ }
2664
+ }), [["__scopeId", "data-v-af7ce84f"]]);
2665
+ //#endregion
2666
+ //#region src/components/WeaponMenu/Index.vue
2667
+ const _hoisted_1$5 = ["data-tab"];
2668
+ const _hoisted_2$4 = { class: "breadcrumb" };
2669
+ const _hoisted_3$4 = { class: "tabs" };
2670
+ const _hoisted_4$4 = ["aria-pressed", "onClick"];
2671
+ const _hoisted_5$4 = ["aria-label"];
2672
+ const _hoisted_6$4 = { class: "refinement" };
2673
+ const _hoisted_7$4 = { class: "level" };
2674
+ const _hoisted_8$2 = { class: "level-text" };
2675
+ const _hoisted_9$1 = { class: "sparks" };
2676
+ const _hoisted_10$1 = { class: "experience-text" };
2677
+ const _hoisted_11$1 = { class: "experience" };
2678
+ const _hoisted_12$1 = ["aria-label"];
2679
+ const _hoisted_13$1 = ["disabled"];
2680
+ const _hoisted_14$1 = ["aria-label"];
2681
+ var Index_default$35 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
2682
+ __name: "Index",
2683
+ props: /*@__PURE__*/ mergeModels({
2684
+ actionLabel: {},
2685
+ ascension: {},
2686
+ closeLabel: {},
2687
+ experienceRatio: {},
2688
+ experienceText: {},
2689
+ isActionDisabled: { type: Boolean },
2690
+ levelText: {},
2691
+ name: {},
2692
+ rarity: {},
2693
+ refinement: {},
2694
+ tabs: {}
2695
+ }, {
2696
+ "tab": { required: true },
2697
+ "tabModifiers": {}
2698
+ }),
2699
+ emits: /*@__PURE__*/ mergeModels(["action", "close"], ["update:tab"]),
2700
+ setup(__props, { emit: __emit }) {
2701
+ const tab = useModel(__props, "tab");
2702
+ const emit = __emit;
2703
+ return (_ctx, _cache) => {
2704
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The weapon screen's frame: the weapon's name at the top left, the tabs down the left with the open one lit, and the\n open tab's panel down the right with its level, EXP, phase and refinement above it and its action beneath "), createElementVNode("div", {
2705
+ class: "weapon-menu",
2706
+ "data-tab": tab.value
2707
+ }, [
2708
+ createElementVNode("p", _hoisted_2$4, toDisplayString(__props.name), 1),
2709
+ createElementVNode("ul", _hoisted_3$4, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.tabs, (menuTab) => {
2710
+ return openBlock(), createElementBlock("li", { key: menuTab.tab }, [createElementVNode("button", {
2711
+ class: "tab",
2712
+ "aria-pressed": menuTab.tab === tab.value,
2713
+ type: "button",
2714
+ onClick: ($event) => tab.value = menuTab.tab
2715
+ }, toDisplayString(menuTab.label), 9, _hoisted_4$4)]);
2716
+ }), 128))]),
2717
+ createElementVNode("p", {
2718
+ class: "stars",
2719
+ "aria-label": `${__props.rarity}`
2720
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.rarity, (star) => {
2721
+ return openBlock(), createElementBlock("span", {
2722
+ key: star,
2723
+ class: "star"
2724
+ });
2725
+ }), 128))], 8, _hoisted_5$4),
2726
+ createElementVNode("p", _hoisted_6$4, toDisplayString(__props.refinement), 1),
2727
+ createElementVNode("p", _hoisted_7$4, [createElementVNode("span", _hoisted_8$2, toDisplayString(__props.levelText), 1), createElementVNode("span", _hoisted_9$1, [createCommentVNode(" The ascension phases, each a small star the phases reached light "), (openBlock(true), createElementBlock(Fragment, null, renderList(unref(6), (phase) => {
2728
+ return openBlock(), createElementBlock("span", {
2729
+ key: phase,
2730
+ class: normalizeClass(["spark", { lit: phase <= __props.ascension }])
2731
+ }, null, 2);
2732
+ }), 128))])]),
2733
+ createElementVNode("p", _hoisted_10$1, toDisplayString(__props.experienceText), 1),
2734
+ createElementVNode("span", _hoisted_11$1, [createElementVNode("span", {
2735
+ class: "fill",
2736
+ style: normalizeStyle({ "--experience-ratio": __props.experienceRatio })
2737
+ }, null, 4)]),
2738
+ createElementVNode("section", {
2739
+ class: "panel",
2740
+ "aria-label": __props.actionLabel
2741
+ }, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 8, _hoisted_12$1),
2742
+ createElementVNode("button", {
2743
+ class: "action",
2744
+ disabled: __props.isActionDisabled,
2745
+ type: "button",
2746
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("action"))
2747
+ }, toDisplayString(__props.actionLabel), 9, _hoisted_13$1),
2748
+ createElementVNode("button", {
2749
+ class: "close",
2750
+ "aria-label": __props.closeLabel,
2751
+ type: "button",
2752
+ onClick: _cache[1] || (_cache[1] = ($event) => emit("close"))
2753
+ }, "↶", 8, _hoisted_14$1)
2754
+ ], 8, _hoisted_1$5)], 2112);
2755
+ };
2756
+ }
2757
+ }), [["__scopeId", "data-v-f3f59f0e"]]);
2758
+ //#endregion
2759
+ //#region src/components/WishPath/Index.vue
2760
+ const _hoisted_1$4 = { class: "fate-points" };
2761
+ var Index_default$38 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
2762
+ __name: "Index",
2763
+ props: {
2764
+ fatePoints: {},
2765
+ pathLabel: {}
2766
+ },
2767
+ setup(__props) {
2768
+ return (_ctx, _cache) => {
2769
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The Epitomized Path the weapon wish's banner holds, its name and its Fate Points as the game words and colours them "), createElementVNode("p", null, [createTextVNode(toDisplayString(__props.pathLabel) + " ", 1), createElementVNode("span", _hoisted_1$4, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.fatePoints, ({ color, text }, index) => {
2770
+ return openBlock(), createElementBlock("span", {
2771
+ key: index,
2772
+ style: normalizeStyle({ color })
2773
+ }, toDisplayString(text), 5);
2774
+ }), 128))])])], 2112);
2775
+ };
2776
+ }
2777
+ }), [["__scopeId", "data-v-2456390c"]]);
2778
+ //#endregion
2779
+ //#region src/components/WishDetails/Index.vue
2780
+ const _hoisted_1$3 = ["aria-label"];
2781
+ const _hoisted_2$3 = { class: "panel" };
2782
+ const _hoisted_3$3 = { class: "title" };
2783
+ const _hoisted_4$3 = ["aria-label"];
2784
+ const _hoisted_5$3 = { class: "pool" };
2785
+ const _hoisted_6$3 = { class: "pool-items" };
2786
+ const _hoisted_7$3 = ["data-featured"];
2787
+ var Index_default$36 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
2788
+ __name: "Index",
2789
+ props: {
2790
+ closeLabel: {},
2791
+ fatePoints: {},
2792
+ pathLabel: {},
2793
+ pool: {},
2794
+ title: {}
2795
+ },
2796
+ emits: ["close"],
2797
+ setup(__props, { emit: __emit }) {
2798
+ const emit = __emit;
2799
+ const poolRarityCellsMap = computed(() => Map.groupBy(__props.pool, ({ rarity }) => rarity));
2800
+ return (_ctx, _cache) => {
2801
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The Details popup the wish screen's Details opens: the open banner's Pool by rarity, its Epitomized Path on the weapon\n Wish, over the wish screen until its close is clicked. Provisional: its place and size wait on a recording of the\n English Client's popup at 1080 high "), createElementVNode("div", {
2802
+ class: "wish-details",
2803
+ role: "dialog",
2804
+ "aria-label": __props.title
2805
+ }, [createElementVNode("div", _hoisted_2$3, [
2806
+ createElementVNode("p", _hoisted_3$3, toDisplayString(__props.title), 1),
2807
+ createElementVNode("button", {
2808
+ class: "close",
2809
+ type: "button",
2810
+ "aria-label": __props.closeLabel,
2811
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
2812
+ }, "✕", 8, _hoisted_4$3),
2813
+ createElementVNode("ul", _hoisted_5$3, [(openBlock(true), createElementBlock(Fragment, null, renderList(poolRarityCellsMap.value, ([rarity, cells]) => {
2814
+ return openBlock(), createElementBlock("li", {
2815
+ key: rarity,
2816
+ class: "pool-rarity"
2817
+ }, [createVNode(Index_default$27, { rarity }, null, 8, ["rarity"]), createElementVNode("ul", _hoisted_6$3, [(openBlock(true), createElementBlock(Fragment, null, renderList(cells, ({ id, isFeatured, name }) => {
2818
+ return openBlock(), createElementBlock("li", {
2819
+ key: id,
2820
+ class: "pool-item",
2821
+ "data-featured": isFeatured
2822
+ }, toDisplayString(name), 9, _hoisted_7$3);
2823
+ }), 128))])]);
2824
+ }), 128))]),
2825
+ __props.pathLabel ? (openBlock(), createBlock(Index_default$38, {
2826
+ key: 0,
2827
+ "path-label": __props.pathLabel,
2828
+ "fate-points": __props.fatePoints
2829
+ }, null, 8, ["path-label", "fate-points"])) : createCommentVNode("v-if", true)
2830
+ ])], 8, _hoisted_1$3)], 2112);
2831
+ };
2832
+ }
2833
+ }), [["__scopeId", "data-v-abdcc945"]]);
2834
+ //#endregion
2835
+ //#region src/components/WishHistory/Index.vue
2836
+ const _hoisted_1$2 = ["aria-label"];
2837
+ const _hoisted_2$2 = { class: "panel" };
2838
+ const _hoisted_3$2 = { class: "title" };
2839
+ const _hoisted_4$2 = ["aria-label"];
2840
+ const _hoisted_5$2 = { class: "draws" };
2841
+ const _hoisted_6$2 = { class: "time" };
2842
+ const _hoisted_7$2 = { class: "banner" };
2843
+ const _hoisted_8$1 = { class: "name" };
2844
+ var Index_default$37 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
2845
+ __name: "Index",
2846
+ props: {
2847
+ closeLabel: {},
2848
+ history: {},
2849
+ title: {}
2850
+ },
2851
+ emits: ["close"],
2852
+ setup(__props, { emit: __emit }) {
2853
+ const emit = __emit;
2854
+ return (_ctx, _cache) => {
2855
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The History popup the wish screen's History opens: the draws of the last year, newest first, over the wish screen\n until its close is clicked. Provisional: its columns, their order and the time's format wait on a recording of the\n English Client's History at 1080 high "), createElementVNode("div", {
2856
+ class: "wish-history",
2857
+ role: "dialog",
2858
+ "aria-label": __props.title
2859
+ }, [createElementVNode("div", _hoisted_2$2, [
2860
+ createElementVNode("p", _hoisted_3$2, toDisplayString(__props.title), 1),
2861
+ createElementVNode("button", {
2862
+ class: "close",
2863
+ type: "button",
2864
+ "aria-label": __props.closeLabel,
2865
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
2866
+ }, "✕", 8, _hoisted_4$2),
2867
+ createElementVNode("ul", _hoisted_5$2, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.history, ({ bannerLabel, name, rarity, time }, index) => {
2868
+ return openBlock(), createElementBlock("li", {
2869
+ key: index,
2870
+ class: "draw"
2871
+ }, [
2872
+ createElementVNode("span", _hoisted_6$2, toDisplayString(time), 1),
2873
+ createElementVNode("span", _hoisted_7$2, toDisplayString(bannerLabel), 1),
2874
+ createElementVNode("span", _hoisted_8$1, toDisplayString(name), 1),
2875
+ createVNode(Index_default$27, { rarity }, null, 8, ["rarity"])
2876
+ ]);
2877
+ }), 128))])
2878
+ ])], 8, _hoisted_1$2)], 2112);
2879
+ };
2880
+ }
2881
+ }), [["__scopeId", "data-v-86f92bab"]]);
2882
+ //#endregion
2883
+ //#region src/components/WishScreen/Index.vue
2884
+ const _hoisted_1$1 = { class: "wish-screen" };
2885
+ const _hoisted_2$1 = { class: "banners" };
2886
+ const _hoisted_3$1 = { class: "currencies" };
2887
+ const _hoisted_4$1 = { class: "currency-name" };
2888
+ const _hoisted_5$1 = {
2889
+ key: 0,
2890
+ class: "card"
2891
+ };
2892
+ const _hoisted_6$1 = { class: "tag" };
2893
+ const _hoisted_7$1 = { class: "card-title" };
2894
+ const _hoisted_8 = { class: "probability" };
2895
+ const _hoisted_9 = { class: "rate-up" };
2896
+ const _hoisted_10 = {
2897
+ key: 0,
2898
+ class: "featured"
2899
+ };
2900
+ const _hoisted_11 = { class: "featured-name" };
2901
+ const _hoisted_12 = { class: "featured-title" };
2902
+ const _hoisted_13 = { class: "links" };
2903
+ const _hoisted_14 = {
2904
+ key: 2,
2905
+ class: "sets"
2906
+ };
2907
+ const _hoisted_15 = { class: "set-label" };
2908
+ const _hoisted_16 = { class: "cost" };
2909
+ const _hoisted_17 = { class: "set-label" };
2910
+ const _hoisted_18 = { class: "cost" };
2911
+ const _hoisted_19 = { class: "result-list" };
2912
+ const _hoisted_20 = ["data-capturing-radiance", "data-rarity"];
2913
+ const _hoisted_21 = { class: "result-name" };
2914
+ const _hoisted_22 = {
2915
+ key: 0,
2916
+ class: "result-stella-fortuna"
2917
+ };
2918
+ const _hoisted_23 = { class: "result-return" };
2919
+ var Index_default$39 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
2920
+ __name: "Index",
2921
+ props: /*@__PURE__*/ mergeModels({
2922
+ backLabel: {},
2923
+ bannerCard: {},
2924
+ banners: {},
2925
+ currencies: {},
2926
+ detailsLabel: {},
2927
+ fatePoints: {},
2928
+ history: {},
2929
+ historyLabel: {},
2930
+ pathLabel: {},
2931
+ pool: {},
2932
+ probabilityLabel: {},
2933
+ purchases: {},
2934
+ results: {},
2935
+ sets: {},
2936
+ shopLabel: {},
2937
+ title: {},
2938
+ trialLabel: {}
2939
+ }, {
2940
+ "bannerId": {},
2941
+ "bannerIdModifiers": {}
2942
+ }),
2943
+ emits: /*@__PURE__*/ mergeModels([
2944
+ "buy",
2945
+ "close",
2946
+ "dismiss",
2947
+ "trial",
2948
+ "wish"
2949
+ ], ["update:bannerId"]),
2950
+ setup(__props, { emit: __emit }) {
2951
+ const bannerId = useModel(__props, "bannerId");
2952
+ const emit = __emit;
2953
+ const isDetailsOpen = ref(false);
2954
+ const isHistoryOpen = ref(false);
2955
+ const featuredCell = computed(() => __props.pool.find(({ isFeatured, rarity }) => isFeatured && rarity === 5));
2956
+ const getLabelText = (label) => label.map(({ text }) => text).join("");
2957
+ const bannerLabelText = computed(() => {
2958
+ const openBanner = __props.banners.find(({ id }) => id === bannerId.value);
2959
+ return openBanner && getLabelText(openBanner.label);
2960
+ });
2961
+ return (_ctx, _cache) => {
2962
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The wish, the F3 key's: the banners across the head with the counts and the way back beside them, the open banner's\n card over the screen with its promoted five-star, its ×1 and ×10 with their costs, and the Shop, Details and History\n Row under the card. Details opens the banner's pool over the screen, and over it all what the Last wishes drew, a card\n Each with its stars, until a click goes on. Provisional: every place, size and colour here waits on the wish's passes\n Against a recording of the English Client at 1080 high, and the banner card's art and the banners' tabs' portraits\n Are the plate's, which cannot ship "), createElementVNode("div", _hoisted_1$1, [
2963
+ createVNode(Index_default$30, {
2964
+ role: "heading",
2965
+ "aria-level": "1"
2966
+ }, {
2967
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.title), 1)]),
2968
+ _: 1
2969
+ }),
2970
+ createElementVNode("ul", _hoisted_2$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.banners, (banner) => {
2971
+ return openBlock(), createElementBlock("li", { key: banner.id }, [createVNode(Index_default$16, {
2972
+ class: "banner",
2973
+ "aria-label": getLabelText(banner.label),
2974
+ "aria-pressed": banner.id === bannerId.value,
2975
+ kind: unref(GameButtonKind).Row,
2976
+ onClick: ($event) => bannerId.value = banner.id
2977
+ }, null, 8, [
2978
+ "aria-label",
2979
+ "aria-pressed",
2980
+ "kind",
2981
+ "onClick"
2982
+ ])]);
2983
+ }), 128))]),
2984
+ createElementVNode("ul", _hoisted_3$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.currencies, ({ id, name, quantity }) => {
2985
+ return openBlock(), createElementBlock("li", {
2986
+ key: id,
2987
+ class: "currency"
2988
+ }, [createElementVNode("span", _hoisted_4$1, toDisplayString(name), 1), createTextVNode(" " + toDisplayString(quantity), 1)]);
2989
+ }), 128))]),
2990
+ createVNode(Index_default$16, {
2991
+ class: "back",
2992
+ "aria-label": __props.backLabel,
2993
+ kind: unref(GameButtonKind).Plain,
2994
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
2995
+ }, {
2996
+ default: withCtx(() => [..._cache[8] || (_cache[8] = [createTextVNode("✕", -1)])]),
2997
+ _: 1
2998
+ }, 8, ["aria-label", "kind"]),
2999
+ __props.bannerCard && bannerLabelText.value ? (openBlock(), createElementBlock("section", _hoisted_5$1, [
3000
+ createElementVNode("p", _hoisted_6$1, toDisplayString(bannerLabelText.value), 1),
3001
+ createElementVNode("p", _hoisted_7$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.bannerCard.title, ({ color, text }, index) => {
3002
+ return openBlock(), createElementBlock("span", {
3003
+ key: index,
3004
+ style: normalizeStyle({ color })
3005
+ }, toDisplayString(text), 5);
3006
+ }), 128))]),
3007
+ createElementVNode("p", _hoisted_8, toDisplayString(__props.probabilityLabel), 1),
3008
+ createElementVNode("p", _hoisted_9, toDisplayString(__props.bannerCard.rateUp), 1),
3009
+ featuredCell.value ? (openBlock(), createElementBlock("div", _hoisted_10, [
3010
+ createElementVNode("p", _hoisted_11, toDisplayString(featuredCell.value.name), 1),
3011
+ createElementVNode("p", null, [createVNode(Index_default$27, { rarity: featuredCell.value.rarity }, null, 8, ["rarity"])]),
3012
+ createElementVNode("p", _hoisted_12, toDisplayString(__props.bannerCard.featuredTitle), 1)
3013
+ ])) : createCommentVNode("v-if", true)
3014
+ ])) : createCommentVNode("v-if", true),
3015
+ createElementVNode("div", _hoisted_13, [
3016
+ createVNode(Index_default$16, {
3017
+ class: "link",
3018
+ kind: unref(GameButtonKind).Reply
3019
+ }, {
3020
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.shopLabel), 1)]),
3021
+ _: 1
3022
+ }, 8, ["kind"]),
3023
+ __props.trialLabel ? (openBlock(), createBlock(Index_default$16, {
3024
+ key: 0,
3025
+ class: "link trial",
3026
+ kind: unref(GameButtonKind).Reply,
3027
+ onClick: _cache[1] || (_cache[1] = ($event) => emit("trial"))
3028
+ }, {
3029
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.trialLabel), 1)]),
3030
+ _: 1
3031
+ }, 8, ["kind"])) : createCommentVNode("v-if", true),
3032
+ createVNode(Index_default$16, {
3033
+ class: "link",
3034
+ kind: unref(GameButtonKind).Reply,
3035
+ onClick: _cache[2] || (_cache[2] = ($event) => isDetailsOpen.value = true)
3036
+ }, {
3037
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.detailsLabel), 1)]),
3038
+ _: 1
3039
+ }, 8, ["kind"]),
3040
+ createVNode(Index_default$16, {
3041
+ class: "link",
3042
+ kind: unref(GameButtonKind).Reply,
3043
+ onClick: _cache[3] || (_cache[3] = ($event) => isHistoryOpen.value = true)
3044
+ }, {
3045
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.historyLabel), 1)]),
3046
+ _: 1
3047
+ }, 8, ["kind"])
3048
+ ]),
3049
+ __props.pathLabel ? (openBlock(), createBlock(Index_default$38, {
3050
+ key: 1,
3051
+ class: "path",
3052
+ "path-label": __props.pathLabel,
3053
+ "fate-points": __props.fatePoints
3054
+ }, null, 8, ["path-label", "fate-points"])) : createCommentVNode("v-if", true),
3055
+ bannerId.value ? (openBlock(), createElementBlock("div", _hoisted_14, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.sets, ({ cost, count, isAffordable, label }) => {
3056
+ return openBlock(), createBlock(Index_default$16, {
3057
+ key: count,
3058
+ class: "set",
3059
+ disabled: !isAffordable,
3060
+ kind: unref(GameButtonKind).Pill,
3061
+ onClick: ($event) => emit("wish", count)
3062
+ }, {
3063
+ default: withCtx(() => [createElementVNode("span", _hoisted_15, toDisplayString(label), 1), createElementVNode("span", _hoisted_16, toDisplayString(cost), 1)]),
3064
+ _: 2
3065
+ }, 1032, [
3066
+ "disabled",
3067
+ "kind",
3068
+ "onClick"
3069
+ ]);
3070
+ }), 128)), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.purchases, ({ cost, isAffordable, label }) => {
3071
+ return openBlock(), createBlock(Index_default$16, {
3072
+ key: label,
3073
+ class: "set",
3074
+ disabled: !isAffordable,
3075
+ kind: unref(GameButtonKind).Pill,
3076
+ onClick: _cache[4] || (_cache[4] = ($event) => emit("buy"))
3077
+ }, {
3078
+ default: withCtx(() => [createElementVNode("span", _hoisted_17, toDisplayString(label), 1), createElementVNode("span", _hoisted_18, toDisplayString(cost), 1)]),
3079
+ _: 2
3080
+ }, 1032, ["disabled", "kind"]);
3081
+ }), 128))])) : createCommentVNode("v-if", true),
3082
+ isDetailsOpen.value ? (openBlock(), createBlock(Index_default$36, {
3083
+ key: 3,
3084
+ "close-label": __props.backLabel,
3085
+ "fate-points": __props.fatePoints,
3086
+ "path-label": __props.pathLabel,
3087
+ pool: __props.pool,
3088
+ title: __props.detailsLabel,
3089
+ onClose: _cache[5] || (_cache[5] = ($event) => isDetailsOpen.value = false)
3090
+ }, null, 8, [
3091
+ "close-label",
3092
+ "fate-points",
3093
+ "path-label",
3094
+ "pool",
3095
+ "title"
3096
+ ])) : createCommentVNode("v-if", true),
3097
+ isHistoryOpen.value ? (openBlock(), createBlock(Index_default$37, {
3098
+ key: 4,
3099
+ "close-label": __props.backLabel,
3100
+ history: __props.history,
3101
+ title: __props.historyLabel,
3102
+ onClose: _cache[6] || (_cache[6] = ($event) => isHistoryOpen.value = false)
3103
+ }, null, 8, [
3104
+ "close-label",
3105
+ "history",
3106
+ "title"
3107
+ ])) : createCommentVNode("v-if", true),
3108
+ __props.results.length > 0 ? (openBlock(), createElementBlock("div", {
3109
+ key: 5,
3110
+ class: "results",
3111
+ onClick: _cache[7] || (_cache[7] = ($event) => emit("dismiss"))
3112
+ }, [createElementVNode("ul", _hoisted_19, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.results, ({ isCapturingRadiance, name, rarity, stellaFortuna, wishReturn }, index) => {
3113
+ return openBlock(), createElementBlock("li", {
3114
+ key: index,
3115
+ class: "result",
3116
+ "data-capturing-radiance": isCapturingRadiance,
3117
+ "data-rarity": rarity
3118
+ }, [
3119
+ createElementVNode("span", _hoisted_21, toDisplayString(name), 1),
3120
+ createVNode(Index_default$27, { rarity }, null, 8, ["rarity"]),
3121
+ stellaFortuna ? (openBlock(), createElementBlock("span", _hoisted_22, toDisplayString(stellaFortuna), 1)) : createCommentVNode("v-if", true),
3122
+ createElementVNode("span", _hoisted_23, toDisplayString(wishReturn), 1)
3123
+ ], 8, _hoisted_20);
3124
+ }), 128))])])) : createCommentVNode("v-if", true)
3125
+ ])], 2112);
3126
+ };
3127
+ }
3128
+ }), [["__scopeId", "data-v-669dc4ab"]]);
3129
+ //#endregion
3130
+ //#region src/models/WorshipLevelState.ts
3131
+ let WorshipLevelState = /* @__PURE__ */ function(WorshipLevelState) {
3132
+ WorshipLevelState["Claimable"] = "claimable";
3133
+ WorshipLevelState["Claimed"] = "claimed";
3134
+ WorshipLevelState["Locked"] = "locked";
3135
+ return WorshipLevelState;
3136
+ }({});
3137
+ //#endregion
3138
+ //#region src/components/WorshipScreen/Index.vue
3139
+ const _hoisted_1 = { class: "worship-screen" };
3140
+ const _hoisted_2 = { class: "title" };
3141
+ const _hoisted_3 = { class: "levels" };
3142
+ const _hoisted_4 = ["disabled"];
3143
+ const _hoisted_5 = { class: "level" };
3144
+ const _hoisted_6 = { class: "oculi" };
3145
+ const _hoisted_7 = { class: "rewards" };
3146
+ var Index_default$40 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
3147
+ __name: "Index",
3148
+ props: {
3149
+ blessingTitle: {},
3150
+ heldCount: {},
3151
+ levels: {},
3152
+ title: {}
3153
+ },
3154
+ emits: [
3155
+ "blessing",
3156
+ "claim",
3157
+ "close",
3158
+ "offer"
3159
+ ],
3160
+ setup(__props, { emit: __emit }) {
3161
+ const emit = __emit;
3162
+ const nextClaimableLevel = computed(() => __props.levels.find(({ state }) => state === "claimable")?.level);
3163
+ return (_ctx, _cache) => {
3164
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The layout is provisional until the recording of the Worship screen shows it "), createElementVNode("div", _hoisted_1, [
3165
+ createElementVNode("h1", _hoisted_2, toDisplayString(__props.title), 1),
3166
+ createElementVNode("button", {
3167
+ class: "close",
3168
+ type: "button",
3169
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
3170
+ }, "×"),
3171
+ createElementVNode("button", {
3172
+ class: "blessing",
3173
+ type: "button",
3174
+ onClick: _cache[1] || (_cache[1] = ($event) => emit("blessing"))
3175
+ }, toDisplayString(__props.blessingTitle), 1),
3176
+ createElementVNode("button", {
3177
+ class: "held",
3178
+ type: "button",
3179
+ onClick: _cache[2] || (_cache[2] = ($event) => emit("offer"))
3180
+ }, toDisplayString(__props.heldCount), 1),
3181
+ createElementVNode("ol", _hoisted_3, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.levels, ({ level, oculusCount, rewards, state }) => {
3182
+ return openBlock(), createElementBlock("li", {
3183
+ key: level,
3184
+ class: normalizeClass(state)
3185
+ }, [createElementVNode("button", {
3186
+ type: "button",
3187
+ disabled: level !== nextClaimableLevel.value,
3188
+ onClick: _cache[3] || (_cache[3] = ($event) => emit("claim"))
3189
+ }, [
3190
+ createElementVNode("span", _hoisted_5, toDisplayString(level), 1),
3191
+ createElementVNode("span", _hoisted_6, toDisplayString(oculusCount), 1),
3192
+ createElementVNode("span", _hoisted_7, [(openBlock(true), createElementBlock(Fragment, null, renderList(rewards, ({ count, name }) => {
3193
+ return openBlock(), createElementBlock("span", { key: name }, toDisplayString(name) + " × " + toDisplayString(count), 1);
3194
+ }), 128))])
3195
+ ], 8, _hoisted_4)], 2);
3196
+ }), 128))])
3197
+ ])], 2112);
3198
+ };
3199
+ }
3200
+ }), [["__scopeId", "data-v-529b74f5"]]);
3201
+ //#endregion
3202
+ //#region src/models/InteractionKind.ts
3203
+ let InteractionKind = /* @__PURE__ */ function(InteractionKind) {
3204
+ InteractionKind["Activate"] = "Activate";
3205
+ InteractionKind["Claim"] = "Claim";
3206
+ InteractionKind["Dig"] = "Dig";
3207
+ InteractionKind["Open"] = "Open";
3208
+ InteractionKind["PickUp"] = "PickUp";
3209
+ InteractionKind["Read"] = "Read";
3210
+ InteractionKind["Talk"] = "Talk";
3211
+ InteractionKind["Use"] = "Use";
3212
+ return InteractionKind;
3213
+ }({});
3214
+ //#endregion
3215
+ //#region src/models/InteractionState.ts
3216
+ let InteractionState = /* @__PURE__ */ function(InteractionState) {
3217
+ InteractionState["Hover"] = "Hover";
3218
+ InteractionState["Pressed"] = "Pressed";
3219
+ return InteractionState;
3220
+ }({});
3221
+ //#endregion
3222
+ //#region src/models/InterfaceClipProperty.ts
3223
+ let InterfaceClipProperty = /* @__PURE__ */ function(InterfaceClipProperty) {
3224
+ InterfaceClipProperty["Opacity"] = "opacity";
3225
+ InterfaceClipProperty["Scale"] = "scale";
3226
+ InterfaceClipProperty["X"] = "x";
3227
+ InterfaceClipProperty["Y"] = "y";
3228
+ return InterfaceClipProperty;
3229
+ }({});
3230
+ const InterfaceClipProperties = Object.values(InterfaceClipProperty);
3231
+ //#endregion
3232
+ //#region src/models/WeaponMenuTab.ts
3233
+ let WeaponMenuTab = /* @__PURE__ */ function(WeaponMenuTab) {
3234
+ WeaponMenuTab["Ascend"] = "Ascend";
3235
+ WeaponMenuTab["Enhance"] = "Enhance";
3236
+ WeaponMenuTab["Refine"] = "Refine";
3237
+ return WeaponMenuTab;
3238
+ }({});
3239
+ //#endregion
3240
+ //#region src/models/reference/GameSourceKind.ts
3241
+ let GameSourceKind = /* @__PURE__ */ function(GameSourceKind) {
3242
+ GameSourceKind["AnimationClip"] = "AnimationClip";
3243
+ GameSourceKind["Avatar"] = "Avatar";
3244
+ GameSourceKind["BinaryData"] = "MiHoYoBinData";
3245
+ GameSourceKind["Capture"] = "Capture";
3246
+ GameSourceKind["DataTable"] = "DataTable";
3247
+ GameSourceKind["GameObject"] = "GameObject";
3248
+ GameSourceKind["Material"] = "Material";
3249
+ GameSourceKind["Mesh"] = "Mesh";
3250
+ GameSourceKind["MonoBehaviour"] = "MonoBehaviour";
3251
+ GameSourceKind["RectTransform"] = "RectTransform";
3252
+ GameSourceKind["Shader"] = "Shader";
3253
+ GameSourceKind["Sound"] = "Sound";
3254
+ GameSourceKind["TerrainData"] = "TerrainData";
3255
+ GameSourceKind["Texture"] = "Texture";
3256
+ GameSourceKind["Transform"] = "Transform";
3257
+ return GameSourceKind;
3258
+ }({});
3259
+ //#endregion
3260
+ //#region src/models/reference/InvestigationOutcome.ts
3261
+ let InvestigationOutcome = /* @__PURE__ */ function(InvestigationOutcome) {
3262
+ InvestigationOutcome["Adopted"] = "Adopted";
3263
+ InvestigationOutcome["DeadEnd"] = "DeadEnd";
3264
+ InvestigationOutcome["Found"] = "Found";
3265
+ InvestigationOutcome["Rejected"] = "Rejected";
3266
+ InvestigationOutcome["Superseded"] = "Superseded";
3267
+ return InvestigationOutcome;
3268
+ }({});
3269
+ //#endregion
3270
+ //#region src/services/playInterfaceClip.ts
3271
+ const InterfaceClipPropertyKeyframeMap = {
3272
+ ["opacity"]: (value) => ({ opacity: value }),
3273
+ ["scale"]: (value) => ({ scale: String(value) }),
3274
+ ["x"]: (value) => ({ translate: `calc(var(--canvas-unit) * ${value}) 0` }),
3275
+ ["y"]: (value) => ({ translate: `0 calc(var(--canvas-unit) * ${-value})` })
3276
+ };
3277
+ const playInterfaceClip = (root, { durationMs, tracks }) => tracks.flatMap(({ keyframes, property, target }) => {
3278
+ const element = target ? root.querySelector(`[data-clip-target="${target}"]`) : root;
3279
+ if (!element) return [];
3280
+ return [element.animate(keyframes.map(([offset, value]) => ({
3281
+ ...InterfaceClipPropertyKeyframeMap[property](value),
3282
+ offset
3283
+ })), {
3284
+ composite: property === "x" || property === "y" ? "add" : "replace",
3285
+ duration: durationMs,
3286
+ fill: "forwards"
3287
+ })];
3288
+ });
3289
+ //#endregion
3290
+ //#region src/services/toInterfaceClip.ts
3291
+ const INTERFACE_CLIP_PROPERTY_NAMES = InterfaceClipProperties;
3292
+ const checkIsProperty = (property) => INTERFACE_CLIP_PROPERTY_NAMES.includes(property);
3293
+ const toInterfaceClip = ({ durationMs, tracks }) => ({
3294
+ durationMs,
3295
+ tracks: tracks.flatMap(({ keyframes, property, target }) => checkIsProperty(property) ? [{
3296
+ keyframes: keyframes.map(([offset = 0, value = 0]) => [offset, value]),
3297
+ property,
3298
+ target
3299
+ }] : [])
3300
+ });
3301
+ //#endregion
3302
+ export { ASCENSION_PHASE_COUNT, Index_default as ArtifactEnhancePicker, Index_default$1 as ArtifactPicker, BannerKind, BannerKinds, Index_default$2 as BlessingScreen, CHECK_MARK_PATH, CONSTELLATION_NODE_PLACES, COOKING_ARC_CENTRE_X, COOKING_ARC_CENTRE_Y, COOKING_ARC_RADIUS_X, COOKING_ARC_RADIUS_Y, Index_default$3 as CharacterMenu, Index_default$4 as CharacterMenuArtifacts, Index_default$5 as CharacterMenuButtons, Index_default$6 as CharacterMenuConstellation, Index_default$7 as CharacterMenuProfile, CharacterMenuTab, CharacterMenuTabs, Index_default$8 as CharacterMenuTalents, Index_default$9 as CharacterMenuWeapons, Index_default$10 as CookingScreen, Index_default$11 as CraftingScreen, DialogueChoiceIcon, DialogueChoiceIconPathMap, Index_default$12 as DialogueScreen, Index_default$13 as DiscButton, ExpeditionActionKind, Index_default$14 as ExpeditionScreen, FIXTURE_VARIANT_SEPARATOR, ForgeQueueState, Index_default$15 as ForgeScreen, ForgeTab, GAME_CANVAS_INSET, GAME_CANVAS_RECT, GAME_CANVAS_UNIT, GAME_CREAM, GAME_CURSOR, GAME_FONT_FAMILY, GAME_GOLD, GAME_INK, GAME_REPLY_HOVER, GAME_REPLY_HOVER_INK, GAME_REPLY_REST, GAME_ROW_HOVER, GAME_ROW_PRESS, GAME_SMOOTHSTEP_EASING, GAME_UNIT, GAME_WHITE, Index_default$16 as GameButton, GameButtonKind, _sfc_main as GameRect, Index_default$17 as GameScreen, GameSourceKind, INTERACTION_HOVER_MS, INTERACTION_KEY_LABEL, INTERACTION_PILL_REST_MS, INTERACTION_PRESS_MS, INTERACTION_REST_MS, InteractionKind, Index_default$18 as InteractionPrompts, InteractionState, InterfaceClipProperties, InterfaceClipProperty, InterfaceIcon, InterfaceIconCentreMap, InterfaceIconPathMap, InterfaceIcons, Index_default$19 as InventoryScreen, InventorySort, InventorySorts, InvestigationOutcome, ItemCategories, ItemCategory, Index_default$20 as ItemTile, Index_default$21 as LoadingSpinner, MOBILE_INTERFACE_SCALE, ORNAMENT_END_PATH, ORNAMENT_MIDDLE_PATH, Index_default$22 as OrnamentDivider, Index_default$23 as PartySetupScreen, Index_default$24 as PickerShell, Index_default$25 as ProgressBar, Index_default$26 as PromptBand, Index_default$27 as RarityStars, Index_default$28 as ReputationScreen, Index_default$29 as RoundButton, SERVER_MARK_DIAMOND_PATH, SERVER_MARK_TICK_PATH, SETTINGS_RING_CENTRE, SETTINGS_RING_RADIUS, SETTINGS_RING_WIDTH, Index_default$30 as ScreenTitle, Index_default$31 as ServerBar, Index_default$32 as ShopScreen, Index_default$33 as ToastNotice, Index_default$34 as TwoColumnScreen, Index_default$35 as WeaponMenu, WeaponMenuTab, Index_default$36 as WishDetails, Index_default$37 as WishHistory, Index_default$38 as WishPath, Index_default$39 as WishScreen, WorshipLevelState, Index_default$40 as WorshipScreen, computeRectOffsets, playInterfaceClip, toCanvasRect, toCanvasRectStyle, toInterfaceClip };