genshin-interface 3.9.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,108 +1,1371 @@
1
- import { Fragment, createCommentVNode, createElementBlock, createElementVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, renderSlot, toDisplayString, unref, useCssVars } from "vue";
1
+ import { i as ItemCategory, n as BannerKinds, r as ItemCategories, t as BannerKind } from "./save-B6F3omOa.js";
2
+ 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";
3
+ //#region src/models/CharacterMenuTab.ts
4
+ let CharacterMenuTab = /* @__PURE__ */ function(CharacterMenuTab) {
5
+ CharacterMenuTab["Artifacts"] = "Artifacts";
6
+ CharacterMenuTab["Attributes"] = "Attributes";
7
+ CharacterMenuTab["Constellation"] = "Constellation";
8
+ CharacterMenuTab["Profile"] = "Profile";
9
+ CharacterMenuTab["Talents"] = "Talents";
10
+ CharacterMenuTab["Weapons"] = "Weapons";
11
+ return CharacterMenuTab;
12
+ }({});
13
+ const CharacterMenuTabs = [
14
+ "Attributes",
15
+ "Weapons",
16
+ "Artifacts",
17
+ "Constellation",
18
+ "Talents",
19
+ "Profile"
20
+ ];
21
+ //#endregion
22
+ //#region \0/plugin-vue/export-helper
23
+ var export_helper_default = (sfc, props) => {
24
+ const target = sfc.__vccOpts || sfc;
25
+ for (const [key, val] of props) target[key] = val;
26
+ return target;
27
+ };
28
+ //#endregion
29
+ //#region src/components/CharacterMenu/Index.vue
30
+ const _hoisted_1$25 = ["data-tab"];
31
+ const _hoisted_2$21 = { class: "characters" };
32
+ const _hoisted_3$16 = ["aria-pressed", "onClick"];
33
+ const _hoisted_4$13 = { class: "breadcrumb" };
34
+ const _hoisted_5$11 = { class: "tabs" };
35
+ const _hoisted_6$10 = ["aria-pressed", "onClick"];
36
+ const _hoisted_7$10 = ["aria-label"];
37
+ const _hoisted_8$9 = ["aria-label", "onClick"];
38
+ var Index_default = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
39
+ __name: "Index",
40
+ props: /*@__PURE__*/ mergeModels({
41
+ characters: {},
42
+ tabLabels: {}
43
+ }, {
44
+ "characterId": { required: true },
45
+ "characterIdModifiers": {},
46
+ "tab": { required: true },
47
+ "tabModifiers": {}
48
+ }),
49
+ emits: ["update:characterId", "update:tab"],
50
+ setup(__props) {
51
+ const characterId = useModel(__props, "characterId");
52
+ const tab = useModel(__props, "tab");
53
+ const characterName = computed(() => __props.characters.find(({ id }) => id === characterId.value)?.name ?? "");
54
+ const steps = computed(() => {
55
+ const index = __props.characters.findIndex(({ id }) => id === characterId.value);
56
+ const getStep = (step) => __props.characters[(index + step + __props.characters.length) % __props.characters.length];
57
+ return [{
58
+ character: getStep(-1),
59
+ className: "previous"
60
+ }, {
61
+ character: getStep(1),
62
+ className: "next"
63
+ }];
64
+ });
65
+ return (_ctx, _cache) => {
66
+ 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", {
67
+ class: "character-menu",
68
+ "data-tab": tab.value
69
+ }, [
70
+ _cache[1] || (_cache[1] = createElementVNode("div", { class: "head" }, null, -1)),
71
+ createElementVNode("ul", _hoisted_2$21, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.characters, ({ id, name }) => {
72
+ return openBlock(), createElementBlock("li", { key: id }, [createElementVNode("button", {
73
+ class: "character",
74
+ "aria-pressed": id === characterId.value,
75
+ type: "button",
76
+ onClick: ($event) => characterId.value = id
77
+ }, toDisplayString(name), 9, _hoisted_3$16)]);
78
+ }), 128))]),
79
+ createElementVNode("p", _hoisted_4$13, toDisplayString(characterName.value), 1),
80
+ createCommentVNode(" The keys stepping through the tabs, W up and S down, beside the first "),
81
+ _cache[2] || (_cache[2] = createElementVNode("div", {
82
+ class: "tab-keys",
83
+ "aria-hidden": "true"
84
+ }, [createElementVNode("kbd", { class: "key" }, "W"), createElementVNode("kbd", { class: "key" }, "S")], -1)),
85
+ createElementVNode("ul", _hoisted_5$11, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(CharacterMenuTabs), (menuTab) => {
86
+ return openBlock(), createElementBlock("li", { key: menuTab }, [createElementVNode("button", {
87
+ class: "tab",
88
+ "aria-pressed": menuTab === tab.value,
89
+ type: "button",
90
+ onClick: ($event) => tab.value = menuTab
91
+ }, toDisplayString(__props.tabLabels[menuTab]), 9, _hoisted_6$10)]);
92
+ }), 128))]),
93
+ createElementVNode("section", {
94
+ class: "panel",
95
+ "aria-label": __props.tabLabels[tab.value]
96
+ }, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 8, _hoisted_7$10),
97
+ __props.characters.length > 1 ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(steps.value, ({ character, className }) => {
98
+ return openBlock(), createElementBlock("button", {
99
+ key: className,
100
+ class: normalizeClass(["step", className]),
101
+ "aria-label": character?.name,
102
+ type: "button",
103
+ onClick: ($event) => characterId.value = character?.id ?? characterId.value
104
+ }, [createCommentVNode(" The arrow's head and the diamond in its notch, in the reference's own pixels "), _cache[0] || (_cache[0] = createElementVNode("svg", {
105
+ viewBox: "0 0 43 55",
106
+ "aria-hidden": "true"
107
+ }, [
108
+ createElementVNode("path", {
109
+ class: "arrow",
110
+ d: "M31 0 L0 27.5 L31 55 L31 42 L16 27.5 L31 13 Z"
111
+ }),
112
+ createElementVNode("path", {
113
+ class: "mark",
114
+ 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"
115
+ }),
116
+ createElementVNode("path", {
117
+ class: "mark",
118
+ d: "M31 25.5 L33 27.5 L31 29.5 L29 27.5 Z"
119
+ })
120
+ ], -1))], 10, _hoisted_8$9);
121
+ }), 128)) : createCommentVNode("v-if", true)
122
+ ], 8, _hoisted_1$25)], 2112);
123
+ };
124
+ }
125
+ }), [["__scopeId", "data-v-6efaddd5"]]);
126
+ //#endregion
127
+ //#region src/components/CharacterMenuButtons/Index.vue
128
+ const _sfc_main$25 = {};
129
+ const _hoisted_1$24 = { class: "buttons" };
130
+ function _sfc_render$2(_ctx, _cache) {
131
+ 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$24, [..._cache[0] || (_cache[0] = [createElementVNode("span", { class: "button" }, null, -1), createElementVNode("span", { class: "button" }, null, -1)])])], 2112);
132
+ }
133
+ var Index_default$2 = /*#__PURE__*/ export_helper_default(_sfc_main$25, [["render", _sfc_render$2], ["__scopeId", "data-v-d4278b8b"]]);
134
+ //#endregion
135
+ //#region src/components/CharacterMenuArtifacts/Index.vue
136
+ const _hoisted_1$23 = { class: "artifacts" };
137
+ const _hoisted_2$20 = { class: "slots" };
138
+ var Index_default$1 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
139
+ __name: "Index",
140
+ props: { equipped: {} },
141
+ setup(__props) {
142
+ return (_ctx, _cache) => {
143
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The Artifacts tab's panel: the five artifact slots, each a disc lit where the character wears one, then the set\n bonus block and the two buttons beneath. Its words and the set's text are not drawn yet "), createElementVNode("div", _hoisted_1$23, [
144
+ createElementVNode("ul", _hoisted_2$20, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.equipped, (isEquipped, index) => {
145
+ return openBlock(), createElementBlock("li", {
146
+ key: index,
147
+ class: normalizeClass(["slot", { worn: isEquipped }])
148
+ }, null, 2);
149
+ }), 128))]),
150
+ _cache[0] || (_cache[0] = createElementVNode("div", { class: "details" }, null, -1)),
151
+ _cache[1] || (_cache[1] = createElementVNode("div", { class: "set-bonus" }, null, -1)),
152
+ createVNode(Index_default$2)
153
+ ])], 2112);
154
+ };
155
+ }
156
+ }), [["__scopeId", "data-v-d9a02adc"]]);
157
+ //#endregion
2
158
  //#region src/services/constants.ts
159
+ const ASCENSION_PHASE_COUNT = 6;
3
160
  const GAME_FONT_FAMILY = "\"HYWenHei 85W\", \"HYWenHei-85W\", Signika, ui-sans-serif, sans-serif";
4
- const GAME_UNIT = "min(100cqh / 1080, 100cqw / 1920)";
5
- const GAME_CANVAS_UNIT = "min(100cqh / 900, 100cqw / 1600)";
6
- const GAME_CANVAS_INSET = "min(var(--unit) * 71, (100cqw - var(--unit) * 1920) / 2)";
161
+ const GAME_UNIT = "calc(min(100cqh / 1080, 100cqw / 1920) * var(--interface-scale))";
162
+ const GAME_CANVAS_UNIT = "calc(min(100cqh / 900, 100cqw / 1600) * var(--interface-scale))";
163
+ const GAME_CANVAS_INSET = "min(var(--unit) * 71, (100cqw - min(100cqh * 16 / 9, 100cqw)) / 2)";
164
+ const MOBILE_INTERFACE_SCALE = 1.25;
165
+ const GAME_CANVAS_RECT = {
166
+ anchorMax: [1, 1],
167
+ anchorMin: [0, 0],
168
+ pivot: [0, 0],
169
+ position: [0, 0],
170
+ size: [0, 0]
171
+ };
172
+ const GAME_WHITE = "#fdfdfd";
173
+ const GAME_CREAM = "#ece5d8";
174
+ const GAME_INK = "#3b4354";
175
+ const GAME_GOLD = "#d3bc8e";
7
176
  const GAME_CURSOR_SIZE = 26;
8
- const GAME_CURSOR = `url("data:image/svg+xml,${encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" width="${GAME_CURSOR_SIZE}" height="${GAME_CURSOR_SIZE}" viewBox="-2 -2 66 66"><defs><radialGradient id="g" cx="28" cy="28" r="34" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffea00"/><stop offset="0.45" stop-color="#ffc800"/><stop offset="1" stop-color="#ffc100"/></radialGradient></defs><path d="M0 0Q30.1 11.4 62 15Q47.5 36.1 59 59Q36.1 47.5 15 62Q11.4 30.1 0 0Z" fill="none" stroke="#2c3a4e" stroke-opacity="0.75" stroke-width="3" stroke-linejoin="round"/><path d="M0 0Q30.1 11.4 62 15Q47.5 36.1 59 59Z" fill="#fff"/><path d="M0 0L59 59Q36.1 47.5 15 62Q11.4 30.1 0 0Z" fill="#f4f5e0"/><path d="M26 26Q47.5 32 62 15Q47.5 36.1 59 59Q36.1 47.5 15 62Q32 47.5 26 26Z" fill="url(#g)"/></svg>`)}") 1 1, auto`;
177
+ const GAME_CURSOR = `url("data:image/svg+xml,${encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" width="${GAME_CURSOR_SIZE}" height="${GAME_CURSOR_SIZE}" viewBox="-2 -2 66 66"><defs><radialGradient id="g" cx="28" cy="28" r="34" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffea00"/><stop offset="0.45" stop-color="#ffc800"/><stop offset="1" stop-color="#ffc100"/></radialGradient></defs><path d="M0 0q30.1 11.4 62 15-14.5 21.1-3 44-22.9-11.5-44 3-3.6-31.9-15-62z" fill="none" stroke="#2c3a4e" stroke-opacity="0.75" stroke-width="3" stroke-linejoin="round"/><path d="M0 0q30.1 11.4 62 15-14.5 21.1-3 44z" fill="#fff"/><path d="M0 0L59 59Q36.1 47.5 15 62Q11.4 30.1 0 0Z" fill="#f4f5e0"/><path d="M26 26q21.5 6 36-11-14.5 21.1-3 44-22.9-11.5-44 3 17-14.5 11-36z" fill="url(#g)"/></svg>`)}") 1 1, auto`;
178
+ const ORNAMENT_MIDDLE_PATH = "M179.5 39h6l5.5 4.5 2 5 10 12 2 5 10 10 4 8v5l-4.5 5.5-13 7-4 1-3.5-2.5-3.5-4.5-2-1h-10l-7.5 5.5-15.5 17.5-2.5 1.5-6.5 7.5-10 9-3 2h-2l-21 15q-6.27 1.73-10 6l-9 2-4.5 3.5q-.5 4 2.5 4.5l9 4 4 4 17 8 8 6 9 4 14.5 12.5 6.5 7.5q2.25-.75 1.5 1.5l6.5 7.5 4.5 3.5q.63 3.87 3.5 5.5l5 3h9q1-2.5 3.5-2 .71-4.89 4.5-8l3-1 26.5-24.5 2.5-4.5 5-2 9-7 5-2 13.5-9.5 1.5-2.5q5.5-2 8.5-6.5v-3l-5-5v-3l3.5-4.5q2.25.75 1.5-1.5l5.5-6.5 6-3h11l26 14 5 5h3l6 2 3.5 3.5-1 4.5-4.5 2-5 1-7 6-4 1-12 7-5 5-10 3-8 7-4 1-5 4h-1.5l-1.5 3-24 16-5.5 5.5q.75 2.25-1.5 1.5l-20.5 18.5-2 4-13 14-9 13-3 6.5-2.5 1h-3l-1 1h-3l-6.5-3.5-4-11q-8.37-6.84-13-16.5l-3-1.5-4-5v-1.5h-2q1.13-2.67-1.5-2l-13-15-3.5-1v-1.5l-6.5-6.5-3-1-11-9-13-6-6-5-4-2-11-2-5-4-15-5-6-4-18-6h-30.5v-31h31.5l4-2h9l4.5-2q-1.13-2.67 1.5-2l7-4 8-1 9-3 7-6 12-4 3-3 16-8 4.5-3.5 3.5-4.5 4-2 12.5-12.5 5.5-7.5 3.5-2.5q4.3-7.7 11-13l7-12 13.5-16.5 2-1zm115 1h9q1.25 3.5 4.5 3l5 10.5 16 18 9.5 13.5q2.25-.75 1.5 1.5l6.5 7.5 5.5 4.5 2 4.5q9.2 2.9 14.5 11l6 3h2l9 7 12 4 10 7h2l3 2 10 2 2 2 6 3h2l2 2q3.25-.75 4 1h7l6 2h28.5v31h-13.5l-1-1h-6l-9 3h-5l-4 2h-4l-8 6-3 1h-7l-6 3h-2l-13 8-10 2-7 6-10 4-4.5 4.5-1.5 2.5-9 4-4.5 4.5-4.5 5.5-2.5 1.5-10.5 12.5-2.5 1.5q.75 2.25-1.5 1.5l-4 5-2.5 1.5-5 9-7 9v2l-7.5 9.5h-10l-5.5-5.5-1-3-8-10-1-3-12-13-3-8v-5l1-3 3.5-3.5 4.5-3.5 2.5-3.5 3-1h7.5q.65 5.4 5.5 8l3 1h7q5.5-2 8.5-6.5l2-4.5h1.5l12-12h1.5v-1.5l8.5-8.5 11-9 10-3 7-7 12-5 7-5 7-2 4.5-4.5v-3l-3.5-3.5-11-3-6-6-14-6-11-8-3-1-13.5-12.5-5.5-6.5-3.5-2.5-16.5-18.5-4-2-6-1q-.75 1.75-4 1l-4.5 4.5q-.25 4.75-3.5 6.5-6.5 2.5-10 8h-1.5q1.13 2.67-1.5 2l-11 12-10 9-9.5 5.5-1.5 2.5h-1.5q1.13 2.67-1.5 2-4.41 4.09-11 6l-13.5 11.5-1 3 1 1v7l-5.5 7.5-9 8-9 1-18-10-3-3-6-2-4-4-9-3-3.5-3.5 2.5-4.5 11-5 8-5h2l8-4 5-5 12-5 9-8 9-3 3.5-2.5 4.5-5.5 5-3 9-8 4-2 4.5-4.5 4.5-5.5 3-1 5.5-4.5 2-4.5 3-1.5 7-10 20-22 5-10.5 2.5-1z";
179
+ const ORNAMENT_END_PATH = "M210.5 53h6l7.5 6.5 3.5 5.5 10.5 8.5 4.5 5.5 7 3q3.17 4.83 9 7h4l1 1 6 1 15 7h10l1 1h8l1 1h7l1 1h7.5v30.5q-.12 1.13-5.5.5l-1 1h-6l-1 1h-17q-1 2-5 1l-15 7-3 1h-6q-6.5 2.5-10 8l-15 9-9.5 9.5-4.5 7.5-7 3h-6l-3-1-12.5-10.5q.75-2.25-1.5-1.5l-6-5q-8.22-1.78-13-7l-13-4-3-3-8-3-17-3-6-4-9-1-6-3-9-1-11-4h-7l-4-2h-4l-1-1-14-2-5-2h-11q-1.25-2.25-6-1l-6.5-3.5 1-3.5 5.5-2h3l1-1h12l1-1h4l6-2 9-1 1-1h3l4-2h4l9-3h8l16-6h4l7-4q4 1 5-1h7l1-1h4l6-2 10-7 9-2 16-11 3-1 7-7 12-6z";
180
+ const CHECK_MARK_PATH = "M237.5 26q5.25-1.75 3.5 3.5l-6 11-5 5-4 7-4 4-9 14-3 3-1 3-4 4-1 3-12 17-7 12-9 11-5 9-14 19-1 3-4 4-7 12-8 10-1 3-4 4-2 5-3 3v2l-3.5 4.5-6 2-11-6-2.5-2.5-3.5-4.5-16-11-13.5-12.5q-1.25-5.75-5.5-8.5l-7-2-5-3-13-12-8-3h-6l-3-1-2.5-2.5v-2l3-6 26.5-36.5 5-3h5l5.5 4.5q-.75 2.25 1.5 1.5l16.5 17.5 1 3 13 13 5.5 9.5 7 1 18-13 12-12 21-18 10-10 8-6 19.5-18.5 2.5-3.5 12-9q10.85-12.15 24-22z";
181
+ const SERVER_MARK_DIAMOND_PATH = "M23.44 6.62l1 .63 1.44 1.31.43.56 1.69 1.44.56.69.32.19.56.68.81.69q-.09.28.19.19l1.75 2 .5.38h.19v.18l.62.75 2.94 2.94.68.56 1.32 1.44.44.31.56.69.44.31.68.82q.28-.1.19.18.54.28.37 1.25l-1.18 1.31-1.06.94-.82.94-2.18 2.06-4.32 4.56-.68.44-3.07 3.19-.93.81-2.44 2.56-.5.26h-.88l-.37-.13-.44-.44-.56-.69q-.28.1-.19-.18l-2.38-2.25-.18-.31-.69-.57-.56-.69-.31-.18-.19-.32-.94-.68-.69-.82q-.28.1-.18-.18l-2.32-2.44-2.81-2.56-1.44-1.56-.69-.57-2-2.12-.37-.5v-.5l.25-.5 1.69-1.69q.28.09.19-.19.43-.15.37-.56h.19l.5-.37 2.06-2.07.12-.43h.19l.81-.69.69-.81.31-.19 1.19-1.31.81-.69.19-.31.81-.69.32-.57.56-.24v-.19l.56-.57.56-.43.32-.44.68-.56.44-.57.56-.43.26-.57h.18l2.13-2 .75-.5z";
182
+ const SERVER_MARK_TICK_PATH = "M30.12 16.88l-.24.12-.38.62-2.5 2.63-1.75 1.63-1.25 1.37-.25.5h-.13l-.87.87q.13.26-.13.13l-.74.87-1.26 1-.37-.12-.63-.5-.5-.5-.5-.5-.5-.5-1.37-1.25-.75-.25h-.38l-.62.25q-.75.37-1 1.25v1.12l.25.63.5.63.37.12 2.63 3 .5.75 1.63 1.25h1l1-.75.37-.5.63-.5.37-.5.63-.5.5-.63.37-.24.63-.76.5-.37.37-.5.63-.5.24-.37.88-.76.38-.62.5-.38.37-.5.37-.24q.38-.38.63-.88l.75-.5.12-.25.76-.63 1.12-1.12q.25-.25.12-.75l.13-.13-.13-.74-.5-.63-.74-.75q-.63.12-.63-.12h-1.13z";
9
183
  const SETTINGS_RING_CENTRE = [24.05, 24.9];
10
184
  const SETTINGS_RING_RADIUS = 9.85;
11
185
  const SETTINGS_RING_WIDTH = 1.9;
12
186
  const FIXTURE_VARIANT_SEPARATOR = "-";
187
+ const INTERACTION_KEY_LABEL = "F";
188
+ const CONSTELLATION_NODE_PLACES = [
189
+ {
190
+ left: 15.25,
191
+ top: 116
192
+ },
193
+ {
194
+ left: 69.25,
195
+ top: 227
196
+ },
197
+ {
198
+ left: 105.25,
199
+ top: 338.75
200
+ },
201
+ {
202
+ left: 105.25,
203
+ top: 449.75
204
+ },
205
+ {
206
+ left: 69.25,
207
+ top: 560.75
208
+ },
209
+ {
210
+ left: -2.75,
211
+ top: 671.75
212
+ }
213
+ ];
214
+ const INTERACTION_HOVER_MS = 50;
215
+ const INTERACTION_REST_MS = 100;
216
+ const INTERACTION_PILL_REST_MS = 200;
217
+ const INTERACTION_PRESS_MS = 167;
218
+ const GAME_SMOOTHSTEP_EASING = "cubic-bezier(0.333, 0, 0.667, 1)";
219
+ const GAME_ROW_HOVER = "rgb(255 255 255 / 0.2)";
220
+ const GAME_ROW_PRESS = "rgb(255 255 255 / 0.3)";
221
+ const GAME_REPLY_REST = "rgb(0 0 0 / 0.22)";
222
+ const GAME_REPLY_HOVER = "rgb(255 255 255 / 0.85)";
223
+ const GAME_REPLY_HOVER_INK = "#3b4255";
13
224
  //#endregion
14
- //#region \0/plugin-vue/export-helper
15
- var export_helper_default = (sfc, props) => {
16
- const target = sfc.__vccOpts || sfc;
17
- for (const [key, val] of props) target[key] = val;
18
- return target;
225
+ //#region src/components/CharacterMenuConstellation/Index.vue
226
+ const _hoisted_1$22 = { class: "constellations" };
227
+ const _hoisted_2$19 = { class: "nodes" };
228
+ var Index_default$3 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
229
+ __name: "Index",
230
+ props: { activated: {} },
231
+ setup(__props) {
232
+ const nodeStyles = CONSTELLATION_NODE_PLACES.map(({ left, top }) => ({
233
+ left: `calc(var(--unit) * ${left})`,
234
+ top: `calc(var(--unit) * ${top})`
235
+ }));
236
+ return (_ctx, _cache) => {
237
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The Constellation tab's panel: the six constellations down its right, each a ring lit once activated. The\n game's star map is its own art and its names are not decoded yet, so neither is drawn "), createElementVNode("div", _hoisted_1$22, [createElementVNode("ul", _hoisted_2$19, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.activated, (isActivated, index) => {
238
+ return openBlock(), createElementBlock("li", {
239
+ key: index,
240
+ class: normalizeClass(["node", { lit: isActivated }]),
241
+ style: normalizeStyle(unref(nodeStyles)[index])
242
+ }, null, 6);
243
+ }), 128))])])], 2112);
244
+ };
245
+ }
246
+ }), [["__scopeId", "data-v-59aca725"]]);
247
+ //#endregion
248
+ //#region src/components/CharacterMenuProfile/Index.vue
249
+ const _hoisted_1$21 = { class: "profile" };
250
+ const _hoisted_2$18 = { class: "entries-column" };
251
+ const _hoisted_3$15 = { class: "entries" };
252
+ const _hoisted_4$12 = [
253
+ "aria-pressed",
254
+ "data-locked",
255
+ "onClick"
256
+ ];
257
+ const _hoisted_5$10 = {
258
+ key: 0,
259
+ class: "namecard"
260
+ };
261
+ const _hoisted_6$9 = {
262
+ key: 0,
263
+ class: "story"
264
+ };
265
+ const _hoisted_7$9 = { class: "title" };
266
+ const _hoisted_8$8 = { class: "text" };
267
+ var Index_default$4 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
268
+ __name: "Index",
269
+ props: {
270
+ entries: {},
271
+ namecardName: { default: "" }
272
+ },
273
+ setup(__props) {
274
+ const entryIndex = ref(0);
275
+ const selectedEntry = computed(() => __props.entries[entryIndex.value]);
276
+ return (_ctx, _cache) => {
277
+ 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$21, [createElementVNode("div", _hoisted_2$18, [createElementVNode("ul", _hoisted_3$15, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.entries, (entry, index) => {
278
+ return openBlock(), createElementBlock("li", { key: index }, [createElementVNode("button", {
279
+ class: "entry",
280
+ "aria-pressed": index === entryIndex.value,
281
+ "data-locked": entry.isLocked,
282
+ type: "button",
283
+ onClick: ($event) => entryIndex.value = index
284
+ }, toDisplayString(entry.title), 9, _hoisted_4$12)]);
285
+ }), 128))]), __props.namecardName ? (openBlock(), createElementBlock("p", _hoisted_5$10, toDisplayString(__props.namecardName), 1)) : createCommentVNode("v-if", true)]), selectedEntry.value ? (openBlock(), createElementBlock("article", _hoisted_6$9, [createElementVNode("h2", _hoisted_7$9, toDisplayString(selectedEntry.value.title), 1), createElementVNode("p", _hoisted_8$8, toDisplayString(selectedEntry.value.text), 1)])) : createCommentVNode("v-if", true)])], 2112);
286
+ };
287
+ }
288
+ }), [["__scopeId", "data-v-d064a750"]]);
289
+ //#endregion
290
+ //#region src/components/CharacterMenuTalents/Index.vue
291
+ const _hoisted_1$20 = { class: "talents" };
292
+ const _hoisted_2$17 = { class: "talent-list" };
293
+ const _hoisted_3$14 = { class: "level" };
294
+ var Index_default$5 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
295
+ __name: "Index",
296
+ props: { levels: {} },
297
+ setup(__props) {
298
+ return (_ctx, _cache) => {
299
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" The Talents tab's panel: the three combat talents down its right, each with its level. The passives under them\n and the talents' names are not drawn yet, since the game's text for them is not decoded "), createElementVNode("div", _hoisted_1$20, [createElementVNode("ul", _hoisted_2$17, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.levels, (level, index) => {
300
+ return openBlock(), createElementBlock("li", {
301
+ key: index,
302
+ class: "talent"
303
+ }, [createElementVNode("span", _hoisted_3$14, toDisplayString(level), 1), _cache[0] || (_cache[0] = createElementVNode("span", { class: "icon" }, null, -1))]);
304
+ }), 128))])])], 2112);
305
+ };
306
+ }
307
+ }), [["__scopeId", "data-v-c095bfc3"]]);
308
+ //#endregion
309
+ //#region src/components/CharacterMenuWeapons/Index.vue
310
+ const _hoisted_1$19 = { class: "weapons" };
311
+ const _hoisted_2$16 = { class: "name" };
312
+ const _hoisted_3$13 = { class: "stars" };
313
+ const _hoisted_4$11 = { class: "stats" };
314
+ const _hoisted_5$9 = { class: "stat" };
315
+ const _hoisted_6$8 = { class: "stat" };
316
+ const _hoisted_7$8 = { class: "level" };
317
+ const _hoisted_8$7 = { class: "level-text" };
318
+ const _hoisted_9$7 = { class: "refinement" };
319
+ var Index_default$6 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
320
+ __name: "Index",
321
+ props: {
322
+ ascension: {},
323
+ baseAttack: {},
324
+ levelText: {},
325
+ name: {},
326
+ rarity: {},
327
+ refinement: {},
328
+ subStatValue: {}
329
+ },
330
+ setup(__props) {
331
+ return (_ctx, _cache) => {
332
+ 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$19, [
333
+ createElementVNode("p", _hoisted_2$16, toDisplayString(__props.name), 1),
334
+ createElementVNode("p", _hoisted_3$13, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.rarity, (star) => {
335
+ return openBlock(), createElementBlock("span", {
336
+ key: star,
337
+ class: "star"
338
+ });
339
+ }), 128))]),
340
+ createElementVNode("ul", _hoisted_4$11, [createElementVNode("li", _hoisted_5$9, toDisplayString(__props.baseAttack), 1), createElementVNode("li", _hoisted_6$8, toDisplayString(__props.subStatValue), 1)]),
341
+ createElementVNode("p", _hoisted_7$8, [createElementVNode("span", _hoisted_8$7, toDisplayString(__props.levelText), 1), (openBlock(true), createElementBlock(Fragment, null, renderList(unref(6), (phase) => {
342
+ return openBlock(), createElementBlock("span", {
343
+ key: phase,
344
+ class: normalizeClass(["spark", { lit: phase <= __props.ascension }])
345
+ }, null, 2);
346
+ }), 128))]),
347
+ createElementVNode("p", _hoisted_9$7, toDisplayString(__props.refinement), 1),
348
+ createVNode(Index_default$2)
349
+ ])], 2112);
350
+ };
351
+ }
352
+ }), [["__scopeId", "data-v-bf484c68"]]);
353
+ //#endregion
354
+ //#region src/components/CraftingScreen/Index.vue
355
+ const _hoisted_1$18 = { class: "crafting-screen" };
356
+ const _hoisted_2$15 = { class: "head" };
357
+ const _hoisted_3$12 = {
358
+ class: "title",
359
+ role: "heading",
360
+ "aria-level": "1"
361
+ };
362
+ const _hoisted_4$10 = { class: "coins" };
363
+ const _hoisted_5$8 = ["aria-label"];
364
+ const _hoisted_6$7 = { class: "tabs" };
365
+ const _hoisted_7$7 = ["aria-pressed", "onClick"];
366
+ const _hoisted_8$6 = { class: "tab-name" };
367
+ const _hoisted_9$6 = { class: "list" };
368
+ const _hoisted_10$6 = { class: "recipes" };
369
+ const _hoisted_11$4 = ["aria-pressed", "onClick"];
370
+ const _hoisted_12$4 = { class: "recipe-name" };
371
+ const _hoisted_13$4 = { class: "detail" };
372
+ const _hoisted_14$4 = { class: "recipe-title" };
373
+ const _hoisted_15$4 = { class: "crafters" };
374
+ const _hoisted_16$4 = ["aria-pressed", "onClick"];
375
+ const _hoisted_17$4 = { class: "crafter-name" };
376
+ const _hoisted_18$4 = ["aria-label", "max"];
377
+ const _hoisted_19$4 = { class: "crafted" };
378
+ const _hoisted_20$4 = { class: "required" };
379
+ const _hoisted_21$3 = { class: "materials-label" };
380
+ const _hoisted_22$3 = { class: "materials" };
381
+ var Index_default$7 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
382
+ __name: "Index",
383
+ props: /*@__PURE__*/ mergeModels({
384
+ amountLabel: {},
385
+ amountMaximum: {},
386
+ closeLabel: {},
387
+ coins: {},
388
+ craftedLabel: {},
389
+ crafters: {},
390
+ craftingMaterialsLabel: {},
391
+ craftLabel: {},
392
+ materials: {},
393
+ recipes: {},
394
+ requiredCoins: {},
395
+ requiredLabel: {},
396
+ tabs: {},
397
+ title: {}
398
+ }, {
399
+ "amount": { default: 1 },
400
+ "amountModifiers": {},
401
+ "crafterId": { default: 0 },
402
+ "crafterIdModifiers": {},
403
+ "recipeId": { default: 0 },
404
+ "recipeIdModifiers": {},
405
+ "tabId": { default: 0 },
406
+ "tabIdModifiers": {}
407
+ }),
408
+ emits: /*@__PURE__*/ mergeModels(["close", "craft"], [
409
+ "update:amount",
410
+ "update:crafterId",
411
+ "update:recipeId",
412
+ "update:tabId"
413
+ ]),
414
+ setup(__props, { emit: __emit }) {
415
+ const amount = useModel(__props, "amount");
416
+ const crafterId = useModel(__props, "crafterId");
417
+ const recipeId = useModel(__props, "recipeId");
418
+ const tabId = useModel(__props, "tabId");
419
+ const emit = __emit;
420
+ return (_ctx, _cache) => {
421
+ 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$18, [
422
+ createElementVNode("header", _hoisted_2$15, [
423
+ createElementVNode("p", _hoisted_3$12, toDisplayString(__props.title), 1),
424
+ createElementVNode("p", _hoisted_4$10, [_cache[3] || (_cache[3] = createElementVNode("span", {
425
+ class: "coin",
426
+ "aria-hidden": "true"
427
+ }, null, -1)), createTextVNode(" " + toDisplayString(__props.coins), 1)]),
428
+ createElementVNode("button", {
429
+ class: "close",
430
+ "aria-label": __props.closeLabel,
431
+ type: "button",
432
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
433
+ }, [..._cache[4] || (_cache[4] = [createElementVNode("svg", {
434
+ viewBox: "0 0 24 24",
435
+ "aria-hidden": "true"
436
+ }, [createElementVNode("path", { d: "M6 6 18 18M18 6 6 18" })], -1)])], 8, _hoisted_5$8)
437
+ ]),
438
+ createElementVNode("ul", _hoisted_6$7, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.tabs, (tab) => {
439
+ return openBlock(), createElementBlock("li", { key: tab.id }, [createElementVNode("button", {
440
+ class: "tab",
441
+ "aria-pressed": tab.id === tabId.value,
442
+ type: "button",
443
+ onClick: ($event) => tabId.value = tab.id
444
+ }, [createElementVNode("span", _hoisted_8$6, toDisplayString(tab.name), 1)], 8, _hoisted_7$7)]);
445
+ }), 128))]),
446
+ createElementVNode("div", _hoisted_9$6, [createElementVNode("ul", _hoisted_10$6, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.recipes, (recipe) => {
447
+ return openBlock(), createElementBlock("li", { key: recipe.id }, [createElementVNode("button", {
448
+ class: "recipe",
449
+ "aria-pressed": recipe.id === recipeId.value,
450
+ type: "button",
451
+ onClick: ($event) => recipeId.value = recipe.id
452
+ }, [createElementVNode("span", _hoisted_12$4, toDisplayString(recipe.name), 1)], 8, _hoisted_11$4)]);
453
+ }), 128))])]),
454
+ createElementVNode("div", _hoisted_13$4, [
455
+ _cache[5] || (_cache[5] = createElementVNode("div", {
456
+ class: "materials-band",
457
+ "aria-hidden": "true"
458
+ }, null, -1)),
459
+ createElementVNode("p", _hoisted_14$4, toDisplayString(__props.recipes.find((recipe) => recipe.id === recipeId.value)?.name), 1),
460
+ createElementVNode("ul", _hoisted_15$4, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.crafters, (crafter) => {
461
+ return openBlock(), createElementBlock("li", { key: crafter.id }, [createElementVNode("button", {
462
+ class: "crafter",
463
+ "aria-pressed": crafter.id === crafterId.value,
464
+ type: "button",
465
+ onClick: ($event) => crafterId.value = crafter.id
466
+ }, [createElementVNode("span", _hoisted_17$4, toDisplayString(crafter.name), 1)], 8, _hoisted_16$4)]);
467
+ }), 128))]),
468
+ withDirectives(createElementVNode("input", {
469
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => amount.value = $event),
470
+ "aria-label": __props.amountLabel,
471
+ class: "amount",
472
+ max: __props.amountMaximum,
473
+ min: "1",
474
+ type: "range"
475
+ }, null, 8, _hoisted_18$4), [[
476
+ vModelText,
477
+ amount.value,
478
+ void 0,
479
+ { number: true }
480
+ ]]),
481
+ createElementVNode("p", _hoisted_19$4, toDisplayString(__props.craftedLabel), 1),
482
+ createElementVNode("p", _hoisted_20$4, toDisplayString(__props.requiredLabel) + " " + toDisplayString(__props.requiredCoins), 1),
483
+ createElementVNode("p", _hoisted_21$3, toDisplayString(__props.craftingMaterialsLabel), 1),
484
+ createElementVNode("ul", _hoisted_22$3, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.materials, (material) => {
485
+ return openBlock(), createElementBlock("li", {
486
+ key: material.id,
487
+ class: "material"
488
+ }, toDisplayString(material.owned) + " / " + toDisplayString(material.required), 1);
489
+ }), 128))]),
490
+ createElementVNode("button", {
491
+ class: "craft",
492
+ type: "button",
493
+ onClick: _cache[2] || (_cache[2] = ($event) => emit("craft"))
494
+ }, toDisplayString(__props.craftLabel), 1)
495
+ ])
496
+ ])], 2112);
497
+ };
498
+ }
499
+ }), [["__scopeId", "data-v-501eda08"]]);
500
+ //#endregion
501
+ //#region src/components/GameButton/Index.vue
502
+ const _hoisted_1$17 = ["data-kind"];
503
+ const _hoisted_2$14 = {
504
+ key: 0,
505
+ class: "tip"
19
506
  };
507
+ var Index_default$10 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
508
+ __name: "Index",
509
+ props: {
510
+ kind: {},
511
+ tip: {}
512
+ },
513
+ setup(__props, { expose: __expose }) {
514
+ useCssVars((_ctx) => ({
515
+ "v8de8a9a0": restDuration,
516
+ "v4f7d0248": hoverDuration,
517
+ "v5ff883e5": unref(GAME_GOLD),
518
+ "c23e4506": unref(GAME_CREAM),
519
+ "v7defe8be": unref(GAME_INK),
520
+ "v78a9c41c": unref(GAME_ROW_HOVER),
521
+ "v77c60e0e": unref(GAME_ROW_PRESS),
522
+ "v7a0541ee": pillRestDuration,
523
+ "v307a3362": pressDuration,
524
+ "v0673242b": unref(GAME_SMOOTHSTEP_EASING),
525
+ "v40afb3ee": unref(GAME_REPLY_REST),
526
+ "v5683177c": unref(GAME_REPLY_HOVER),
527
+ "a79a636e": unref(GAME_REPLY_HOVER_INK)
528
+ }));
529
+ const button = useTemplateRef("button");
530
+ const hoverDuration = `50ms`;
531
+ const restDuration = `100ms`;
532
+ const pillRestDuration = `200ms`;
533
+ const pressDuration = `167ms`;
534
+ __expose({ focus: () => button.value?.focus() });
535
+ return (_ctx, _cache) => {
536
+ 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", {
537
+ ref_key: "button",
538
+ ref: button,
539
+ class: "game-button",
540
+ "data-kind": __props.kind,
541
+ type: "button"
542
+ }, [renderSlot(_ctx.$slots, "default"), __props.tip ? (openBlock(), createElementBlock("span", _hoisted_2$14, toDisplayString(__props.tip), 1)) : createCommentVNode("v-if", true)], 8, _hoisted_1$17)], 2112);
543
+ };
544
+ }
545
+ }), [["__scopeId", "data-v-cab29bfa"]]);
546
+ //#endregion
547
+ //#region src/models/GameButtonKind.ts
548
+ let GameButtonKind = /* @__PURE__ */ function(GameButtonKind) {
549
+ GameButtonKind["Disc"] = "Disc";
550
+ GameButtonKind["Pill"] = "Pill";
551
+ GameButtonKind["Plain"] = "Plain";
552
+ GameButtonKind["Reply"] = "Reply";
553
+ GameButtonKind["Row"] = "Row";
554
+ return GameButtonKind;
555
+ }({});
556
+ //#endregion
557
+ //#region src/models/DialogueChoiceIcon.ts
558
+ let DialogueChoiceIcon = /* @__PURE__ */ function(DialogueChoiceIcon) {
559
+ DialogueChoiceIcon["Quest"] = "Quest";
560
+ DialogueChoiceIcon["StoryQuest"] = "StoryQuest";
561
+ DialogueChoiceIcon["Talk"] = "Talk";
562
+ return DialogueChoiceIcon;
563
+ }({});
564
+ //#endregion
565
+ //#region src/services/DialogueChoiceIconPathMap.ts
566
+ const DialogueChoiceIconPathMap = {
567
+ ["Quest"]: {
568
+ 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",
569
+ viewBox: "0 0 300 300"
570
+ },
571
+ ["StoryQuest"]: {
572
+ d: "m63.5 18h2l45.5 45.5v2l-45.5 45.5h-2l-45.5-45.5v-2l45.5-45.5z",
573
+ viewBox: "0 0 128 128"
574
+ },
575
+ ["Talk"]: {
576
+ 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",
577
+ viewBox: "0 0 176 160"
578
+ }
579
+ };
580
+ //#endregion
581
+ //#region src/components/DialogueScreen/Index.vue
582
+ const _hoisted_1$16 = {
583
+ key: 0,
584
+ class: "speaker"
585
+ };
586
+ const _hoisted_2$13 = {
587
+ key: 1,
588
+ class: "role"
589
+ };
590
+ const _hoisted_3$11 = { class: "line" };
591
+ const _hoisted_4$9 = { "aria-hidden": "true" };
592
+ const _hoisted_5$7 = {
593
+ class: "unrevealed",
594
+ "aria-hidden": "true"
595
+ };
596
+ const _hoisted_6$6 = { class: "spoken" };
597
+ const _hoisted_7$6 = {
598
+ key: 0,
599
+ class: "choices"
600
+ };
601
+ const _hoisted_8$5 = ["data-interaction-state"];
602
+ const _hoisted_9$5 = ["viewBox"];
603
+ const _hoisted_10$5 = ["d"];
604
+ var Index_default$8 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
605
+ __name: "Index",
606
+ props: {
607
+ choices: {},
608
+ line: {},
609
+ revealedLength: {},
610
+ selectedChoiceId: {},
611
+ speakerName: {},
612
+ speakerRole: {}
613
+ },
614
+ emits: ["advance", "choose"],
615
+ setup(__props, { emit: __emit }) {
616
+ const emit = __emit;
617
+ const lineParts = computed(() => {
618
+ const characters = [...__props.line];
619
+ return {
620
+ revealed: characters.slice(0, __props.revealedLength).join(""),
621
+ unrevealed: characters.slice(__props.revealedLength).join("")
622
+ };
623
+ });
624
+ return (_ctx, _cache) => {
625
+ 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", {
626
+ class: "dialogue-screen",
627
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("advance"))
628
+ }, [createElementVNode("div", {
629
+ class: normalizeClass(["band", { narration: !__props.speakerName }]),
630
+ "aria-live": "polite"
631
+ }, [
632
+ __props.speakerName ? (openBlock(), createElementBlock("p", _hoisted_1$16, toDisplayString(__props.speakerName), 1)) : createCommentVNode("v-if", true),
633
+ __props.speakerRole ? (openBlock(), createElementBlock("p", _hoisted_2$13, toDisplayString(__props.speakerRole), 1)) : createCommentVNode("v-if", true),
634
+ createElementVNode("p", _hoisted_3$11, [
635
+ createElementVNode("span", _hoisted_4$9, toDisplayString(lineParts.value.revealed), 1),
636
+ createElementVNode("span", _hoisted_5$7, toDisplayString(lineParts.value.unrevealed), 1),
637
+ createElementVNode("span", _hoisted_6$6, toDisplayString(__props.line), 1)
638
+ ])
639
+ ], 2), __props.choices.length > 0 ? (openBlock(), createElementBlock("ul", _hoisted_7$6, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.choices, ({ icon, id, text }) => {
640
+ return openBlock(), createElementBlock("li", {
641
+ key: id,
642
+ "data-interaction-state": id === __props.selectedChoiceId ? "Hover" : void 0
643
+ }, [createVNode(Index_default$10, {
644
+ class: "choice",
645
+ "data-icon": icon,
646
+ kind: unref(GameButtonKind).Reply,
647
+ onClick: withModifiers(($event) => emit("choose", id), ["stop"])
648
+ }, {
649
+ default: withCtx(() => [(openBlock(), createElementBlock("svg", {
650
+ class: "icon",
651
+ "aria-hidden": "true",
652
+ viewBox: unref(DialogueChoiceIconPathMap)[icon].viewBox
653
+ }, [createElementVNode("path", {
654
+ d: unref(DialogueChoiceIconPathMap)[icon].d,
655
+ fill: "currentColor"
656
+ }, null, 8, _hoisted_10$5)], 8, _hoisted_9$5)), createTextVNode(" " + toDisplayString(text), 1)]),
657
+ _: 2
658
+ }, 1032, [
659
+ "data-icon",
660
+ "kind",
661
+ "onClick"
662
+ ])], 8, _hoisted_8$5);
663
+ }), 128))])) : createCommentVNode("v-if", true)])], 2112);
664
+ };
665
+ }
666
+ }), [["__scopeId", "data-v-da022ee0"]]);
667
+ //#endregion
668
+ //#region src/components/TwoColumnScreen/Index.vue
669
+ const _hoisted_1$15 = { class: "two-column-screen" };
670
+ var Index_default$23 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
671
+ __name: "Index",
672
+ setup(__props) {
673
+ return (_ctx, _cache) => {
674
+ 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$15, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])], 2112);
675
+ };
676
+ }
677
+ }), [["__scopeId", "data-v-d9df7bbc"]]);
678
+ //#endregion
679
+ //#region src/models/ForgeQueueState.ts
680
+ let ForgeQueueState = /* @__PURE__ */ function(ForgeQueueState) {
681
+ ForgeQueueState["Complete"] = "Complete";
682
+ ForgeQueueState["Forging"] = "Forging";
683
+ ForgeQueueState["Idle"] = "Idle";
684
+ ForgeQueueState["Locked"] = "Locked";
685
+ return ForgeQueueState;
686
+ }({});
687
+ //#endregion
688
+ //#region src/models/ForgeTab.ts
689
+ let ForgeTab = /* @__PURE__ */ function(ForgeTab) {
690
+ ForgeTab["Materials"] = "Materials";
691
+ ForgeTab["Queues"] = "Queues";
692
+ return ForgeTab;
693
+ }({});
694
+ //#endregion
695
+ //#region src/components/ForgeScreen/Index.vue
696
+ const _hoisted_1$14 = { class: "head" };
697
+ const _hoisted_2$12 = {
698
+ class: "title",
699
+ role: "heading",
700
+ "aria-level": "1"
701
+ };
702
+ const _hoisted_3$10 = { class: "tabs" };
703
+ const _hoisted_4$8 = ["aria-pressed"];
704
+ const _hoisted_5$6 = ["aria-pressed"];
705
+ const _hoisted_6$5 = { class: "coins" };
706
+ const _hoisted_7$5 = ["aria-label"];
707
+ const _hoisted_8$4 = { class: "recipes" };
708
+ const _hoisted_9$4 = [
709
+ "aria-pressed",
710
+ "disabled",
711
+ "onClick"
712
+ ];
713
+ const _hoisted_10$4 = { class: "recipe-name" };
714
+ const _hoisted_11$3 = { class: "recipe-time" };
715
+ const _hoisted_12$3 = { class: "detail" };
716
+ const _hoisted_13$3 = ["aria-label", "max"];
717
+ const _hoisted_14$3 = { class: "total-time" };
718
+ const _hoisted_15$3 = { class: "item-icon" };
719
+ const _hoisted_16$3 = { class: "item-count" };
720
+ const _hoisted_17$3 = { class: "amount-label" };
721
+ const _hoisted_18$3 = { class: "amount-end amount-max" };
722
+ const _hoisted_19$3 = { class: "materials-box" };
723
+ const _hoisted_20$3 = { class: "materials-head" };
724
+ const _hoisted_21$2 = { class: "materials-title" };
725
+ const _hoisted_22$2 = { class: "support-title" };
726
+ const _hoisted_23$2 = { class: "required" };
727
+ const _hoisted_24$2 = {
728
+ key: 1,
729
+ class: "queues"
730
+ };
731
+ const _hoisted_25$2 = ["data-state"];
732
+ const _hoisted_26$2 = { class: "queue-name" };
733
+ const _hoisted_27$2 = { class: "queue-progress" };
734
+ const _hoisted_28$1 = { class: "queue-time" };
735
+ const _hoisted_29$1 = ["onClick"];
736
+ var Index_default$9 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
737
+ __name: "Index",
738
+ props: /*@__PURE__*/ mergeModels({
739
+ amountLabel: {},
740
+ amountMaximum: {},
741
+ closeLabel: {},
742
+ coins: {},
743
+ materialsBoxLabel: {},
744
+ materialsLabel: {},
745
+ obtainLabel: {},
746
+ queues: {},
747
+ queuesLabel: {},
748
+ recipes: {},
749
+ requiredCoins: {},
750
+ startLabel: {},
751
+ supportLabel: {},
752
+ title: {},
753
+ totalTimeLabel: {},
754
+ yieldCount: {}
755
+ }, {
756
+ "amount": { default: 1 },
757
+ "amountModifiers": {},
758
+ "recipeId": { default: 0 },
759
+ "recipeIdModifiers": {},
760
+ "tab": { default: "Materials" },
761
+ "tabModifiers": {}
762
+ }),
763
+ emits: /*@__PURE__*/ mergeModels([
764
+ "close",
765
+ "obtain",
766
+ "start"
767
+ ], [
768
+ "update:amount",
769
+ "update:recipeId",
770
+ "update:tab"
771
+ ]),
772
+ setup(__props, { emit: __emit }) {
773
+ const amount = useModel(__props, "amount");
774
+ const recipeId = useModel(__props, "recipeId");
775
+ const tab = useModel(__props, "tab");
776
+ const emit = __emit;
777
+ return (_ctx, _cache) => {
778
+ 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$23, { class: "forge-screen" }, {
779
+ default: withCtx(() => [createElementVNode("header", _hoisted_1$14, [
780
+ createElementVNode("p", _hoisted_2$12, toDisplayString(__props.title), 1),
781
+ createElementVNode("div", _hoisted_3$10, [createElementVNode("button", {
782
+ class: "tab",
783
+ "aria-pressed": tab.value === unref(ForgeTab).Materials,
784
+ type: "button",
785
+ onClick: _cache[0] || (_cache[0] = ($event) => tab.value = unref(ForgeTab).Materials)
786
+ }, toDisplayString(__props.materialsLabel), 9, _hoisted_4$8), createElementVNode("button", {
787
+ class: "tab",
788
+ "aria-pressed": tab.value === unref(ForgeTab).Queues,
789
+ type: "button",
790
+ onClick: _cache[1] || (_cache[1] = ($event) => tab.value = unref(ForgeTab).Queues)
791
+ }, toDisplayString(__props.queuesLabel), 9, _hoisted_5$6)]),
792
+ createElementVNode("p", _hoisted_6$5, toDisplayString(__props.coins), 1),
793
+ createElementVNode("button", {
794
+ class: "close",
795
+ "aria-label": __props.closeLabel,
796
+ type: "button",
797
+ onClick: _cache[2] || (_cache[2] = ($event) => emit("close"))
798
+ }, "×", 8, _hoisted_7$5)
799
+ ]), tab.value === unref(ForgeTab).Materials ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createElementVNode("ul", _hoisted_8$4, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.recipes, (recipe) => {
800
+ return openBlock(), createElementBlock("li", { key: recipe.id }, [createElementVNode("button", {
801
+ class: "recipe",
802
+ "aria-pressed": recipe.id === recipeId.value,
803
+ disabled: !recipe.isLearned,
804
+ type: "button",
805
+ onClick: ($event) => recipeId.value = recipe.id
806
+ }, [
807
+ _cache[5] || (_cache[5] = createElementVNode("span", {
808
+ class: "recipe-tile",
809
+ "aria-hidden": "true"
810
+ }, null, -1)),
811
+ createElementVNode("span", _hoisted_10$4, toDisplayString(recipe.name), 1),
812
+ createElementVNode("span", _hoisted_11$3, toDisplayString(recipe.forgeTimeLabel), 1)
813
+ ], 8, _hoisted_9$4)]);
814
+ }), 128))]), createElementVNode("div", _hoisted_12$3, [
815
+ withDirectives(createElementVNode("input", {
816
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => amount.value = $event),
817
+ "aria-label": __props.amountLabel,
818
+ class: "amount",
819
+ max: __props.amountMaximum,
820
+ min: "1",
821
+ type: "range"
822
+ }, null, 8, _hoisted_13$3), [[
823
+ vModelText,
824
+ amount.value,
825
+ void 0,
826
+ { number: true }
827
+ ]]),
828
+ createElementVNode("p", _hoisted_14$3, toDisplayString(__props.totalTimeLabel), 1),
829
+ createElementVNode("div", _hoisted_15$3, [createElementVNode("span", _hoisted_16$3, toDisplayString(__props.yieldCount), 1)]),
830
+ createElementVNode("p", _hoisted_17$3, toDisplayString(__props.amountLabel), 1),
831
+ _cache[10] || (_cache[10] = createElementVNode("span", {
832
+ "aria-hidden": "true",
833
+ class: "amount-step amount-minus"
834
+ }, "−", -1)),
835
+ _cache[11] || (_cache[11] = createElementVNode("span", { class: "amount-end amount-min" }, "1", -1)),
836
+ createElementVNode("span", _hoisted_18$3, toDisplayString(__props.amountMaximum), 1),
837
+ _cache[12] || (_cache[12] = createElementVNode("span", {
838
+ "aria-hidden": "true",
839
+ class: "amount-step amount-plus"
840
+ }, "+", -1)),
841
+ createElementVNode("section", _hoisted_19$3, [
842
+ createElementVNode("header", _hoisted_20$3, [createElementVNode("p", _hoisted_21$2, toDisplayString(__props.materialsBoxLabel), 1), createElementVNode("p", _hoisted_22$2, toDisplayString(__props.supportLabel), 1)]),
843
+ _cache[6] || (_cache[6] = createElementVNode("span", { class: "slot slot-first" }, null, -1)),
844
+ _cache[7] || (_cache[7] = createElementVNode("span", { class: "slot slot-second" }, null, -1)),
845
+ _cache[8] || (_cache[8] = createElementVNode("span", { class: "slot slot-third" }, null, -1)),
846
+ _cache[9] || (_cache[9] = createElementVNode("span", { class: "support-portrait" }, null, -1))
847
+ ]),
848
+ createElementVNode("p", _hoisted_23$2, toDisplayString(__props.requiredCoins), 1),
849
+ createElementVNode("button", {
850
+ class: "start",
851
+ type: "button",
852
+ onClick: _cache[4] || (_cache[4] = ($event) => emit("start"))
853
+ }, toDisplayString(__props.startLabel), 1)
854
+ ])], 64)) : (openBlock(), createElementBlock("ul", _hoisted_24$2, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.queues, (queue) => {
855
+ return openBlock(), createElementBlock("li", {
856
+ key: queue.id,
857
+ class: "queue",
858
+ "data-state": queue.state
859
+ }, [
860
+ createElementVNode("span", _hoisted_26$2, toDisplayString(queue.name), 1),
861
+ createElementVNode("span", _hoisted_27$2, toDisplayString(queue.progressLabel), 1),
862
+ createElementVNode("span", _hoisted_28$1, toDisplayString(queue.timeLabel), 1),
863
+ queue.state === unref(ForgeQueueState).Complete ? (openBlock(), createElementBlock("button", {
864
+ key: 0,
865
+ class: "obtain",
866
+ type: "button",
867
+ onClick: ($event) => emit("obtain", queue.id)
868
+ }, toDisplayString(__props.obtainLabel), 9, _hoisted_29$1)) : createCommentVNode("v-if", true)
869
+ ], 8, _hoisted_25$2);
870
+ }), 128))]))]),
871
+ _: 1
872
+ })], 2112);
873
+ };
874
+ }
875
+ }), [["__scopeId", "data-v-c1d8f7f3"]]);
876
+ //#endregion
877
+ //#region src/services/toCanvasRect.ts
878
+ const toPair = ([x = 0, y = 0]) => [x, y];
879
+ const toCanvasRect = ({ anchorMax, anchorMin, pivot, position, size }) => ({
880
+ anchorMax: toPair(anchorMax),
881
+ anchorMin: toPair(anchorMin),
882
+ pivot: toPair(pivot),
883
+ position: toPair(position),
884
+ size: toPair(size)
885
+ });
886
+ //#endregion
887
+ //#region src/services/computeRectOffsets.ts
888
+ const computeRectOffsets = ({ pivot, position, size }) => {
889
+ const offsetMin = [position[0] - size[0] * pivot[0], position[1] - size[1] * pivot[1]];
890
+ return {
891
+ offsetMax: [offsetMin[0] + size[0], offsetMin[1] + size[1]],
892
+ offsetMin
893
+ };
894
+ };
895
+ //#endregion
896
+ //#region src/services/toCanvasRectStyle.ts
897
+ const toAxis = (anchorMin, anchorMax, offsetMin, size, span, start) => [`calc(${start} + ${anchorMin} * ${span} + ${offsetMin} * var(--canvas-unit))`, `calc(${anchorMax - anchorMin} * ${span} + ${size} * var(--canvas-unit))`];
898
+ const toCanvasRectStyle = (rect, isOnCanvas = false) => {
899
+ const { anchorMax, anchorMin, size } = rect;
900
+ const { offsetMin } = computeRectOffsets(rect);
901
+ const [left, width] = toAxis(anchorMin[0], anchorMax[0], offsetMin[0], size[0], isOnCanvas ? "(100% - 2 * var(--canvas-inset))" : "100%", isOnCanvas ? "var(--canvas-inset)" : "0px");
902
+ const [bottom, height] = toAxis(anchorMin[1], anchorMax[1], offsetMin[1], size[1], "100%", "0px");
903
+ return {
904
+ bottom,
905
+ height,
906
+ left,
907
+ position: "absolute",
908
+ width
909
+ };
910
+ };
911
+ //#endregion
912
+ //#region src/components/GameRect/Index.vue
913
+ const _sfc_main = /*@__PURE__*/ defineComponent({
914
+ __name: "Index",
915
+ props: {
916
+ parent: { default: () => GAME_CANVAS_RECT },
917
+ rect: {}
918
+ },
919
+ setup(__props) {
920
+ const canvasRect = computed(() => toCanvasRect(__props.rect));
921
+ const style = computed(() => {
922
+ const [pivotX, pivotY] = canvasRect.value.pivot;
923
+ return {
924
+ ...toCanvasRectStyle(canvasRect.value, __props.parent === GAME_CANVAS_RECT),
925
+ scale: __props.rect.scale?.join(" "),
926
+ transformOrigin: `${pivotX * 100}% ${(1 - pivotY) * 100}%`
927
+ };
928
+ });
929
+ return (_ctx, _cache) => {
930
+ return openBlock(), createElementBlock("div", { style: normalizeStyle(style.value) }, [renderSlot(_ctx.$slots, "default", { rect: canvasRect.value })], 4);
931
+ };
932
+ }
933
+ });
20
934
  //#endregion
21
935
  //#region src/components/GameScreen/Index.vue
22
- const _hoisted_1$7 = { class: "game-screen" };
23
- var Index_default = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
936
+ const _hoisted_1$13 = ["data-interaction-state"];
937
+ var Index_default$11 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
24
938
  __name: "Index",
939
+ props: {
940
+ interactionState: {},
941
+ isTouch: { type: Boolean }
942
+ },
25
943
  setup(__props) {
26
944
  useCssVars((_ctx) => ({
27
- "v3519c02b": unref(GAME_CANVAS_INSET),
28
- "v7558dc96": unref(GAME_CANVAS_UNIT),
29
- "v2325394e": unref(GAME_UNIT),
30
- "v2b5d102a": unref(GAME_CURSOR),
31
- "v492b7442": unref(GAME_FONT_FAMILY)
945
+ "b3ebfd60": unref(GAME_CANVAS_INSET),
946
+ "v687962d1": unref(GAME_CANVAS_UNIT),
947
+ "v440f997e": unref(GAME_UNIT),
948
+ "v3dfd0b4f": unref(GAME_WHITE),
949
+ "v603eb8d0": unref(GAME_CURSOR),
950
+ "v62ea67cc": unref(GAME_FONT_FAMILY),
951
+ "v7e9afa3a": unref(MOBILE_INTERFACE_SCALE)
32
952
  }));
953
+ const style = computed(() => __props.isTouch === void 0 ? void 0 : { "--interface-scale": __props.isTouch ? MOBILE_INTERFACE_SCALE : 1 });
33
954
  return (_ctx, _cache) => {
34
- return openBlock(), createElementBlock(Fragment, null, [
35
- createCommentVNode(" The root every screen of the game's is drawn in: the window's own container, whose `--unit` is a pixel of the "),
36
- createCommentVNode(" Game's 1920 by 1080 screen, `--canvas-unit` a unit of its interface's 1600 by 900 canvas and `--canvas-inset` how "),
37
- createCommentVNode(" Far the canvas stands in from each side, in the game's face and pointer. Each resolves where a child uses it, "),
38
- createCommentVNode(" Against this container "),
39
- createElementVNode("div", _hoisted_1$7, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])
40
- ], 2112);
955
+ 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", {
956
+ class: "game-screen",
957
+ "data-interaction-state": __props.interactionState,
958
+ style: normalizeStyle(style.value)
959
+ }, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 12, _hoisted_1$13)], 2112);
41
960
  };
42
961
  }
43
- }), [["__scopeId", "data-v-950f02f4"]]);
962
+ }), [["__scopeId", "data-v-b0f87b0b"]]);
44
963
  //#endregion
45
- //#region src/components/LoadingSpinner/Index.vue
46
- const _sfc_main$6 = {};
47
- const _hoisted_1$6 = {
48
- class: "loading-spinner",
49
- role: "status",
50
- "aria-label": "Loading"
964
+ //#region src/components/InteractionPrompts/Index.vue
965
+ const _hoisted_1$12 = ["aria-current", "data-kind"];
966
+ const _hoisted_2$11 = {
967
+ key: 0,
968
+ class: "key",
969
+ "aria-hidden": "true"
51
970
  };
52
- function _sfc_render$2(_ctx, _cache) {
53
- return openBlock(), createElementBlock(Fragment, null, [
54
- createCommentVNode(" The game's wait mark: a dark glass square 120 units across with rounded corners, and in it a white ring 40 units "),
55
- createCommentVNode(" Across that fades out from its round head round to its tail, turning. Measured from a 1440 high recording "),
56
- createElementVNode("div", _hoisted_1$6, [..._cache[0] || (_cache[0] = [createElementVNode("span", { class: "ring" }, null, -1)])])
57
- ], 2112);
58
- }
59
- var Index_default$1 = /*#__PURE__*/ export_helper_default(_sfc_main$6, [["render", _sfc_render$2], ["__scopeId", "data-v-2b93853d"]]);
971
+ const _hoisted_3$9 = ["onClick"];
972
+ const _hoisted_4$7 = { class: "name" };
973
+ var Index_default$12 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
974
+ __name: "Index",
975
+ props: {
976
+ isTouch: {
977
+ type: Boolean,
978
+ default: false
979
+ },
980
+ prompts: {},
981
+ selectedId: {}
982
+ },
983
+ emits: ["press"],
984
+ setup(__props, { emit: __emit }) {
985
+ useCssVars((_ctx) => ({ "v0b0e8f3c": selectionDuration }));
986
+ const emit = __emit;
987
+ const selectionDuration = `50ms`;
988
+ return (_ctx, _cache) => {
989
+ 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 }) => {
990
+ return openBlock(), createElementBlock("li", {
991
+ key: id,
992
+ class: "prompt",
993
+ "aria-current": !__props.isTouch && id === __props.selectedId || void 0,
994
+ "data-kind": kind
995
+ }, [!__props.isTouch ? (openBlock(), createElementBlock("kbd", _hoisted_2$11, toDisplayString(id === __props.selectedId ? unref("F") : ""), 1)) : createCommentVNode("v-if", true), createElementVNode("button", {
996
+ class: "pill",
997
+ type: "button",
998
+ onClick: ($event) => emit("press", id)
999
+ }, [_cache[0] || (_cache[0] = createElementVNode("span", {
1000
+ class: "icon",
1001
+ "aria-hidden": "true"
1002
+ }, null, -1)), createElementVNode("span", _hoisted_4$7, toDisplayString(name), 1)], 8, _hoisted_3$9)], 8, _hoisted_1$12);
1003
+ }), 128))], 2)], 2112);
1004
+ };
1005
+ }
1006
+ }), [["__scopeId", "data-v-49059f1b"]]);
60
1007
  //#endregion
61
- //#region src/services/OrnamentPath.ts
62
- const ORNAMENT_MIDDLE_PATH = "M 179.5 39 L 185.5 39 L 191 43.5 L 193 48.5 L 203 60.5 L 205 65.5 L 215 75.5 L 219 83.5 L 219 88.5 L 214.5 94 L 201.5 101 L 197.5 102 L 194 99.5 L 190.5 95 L 188.5 94 L 178.5 94 L 171 99.5 L 155.5 117 L 153 118.5 L 146.5 126 L 136.5 135 L 133.5 137 L 131.5 137 L 110.5 152 Q 104.23 153.73 100.5 158 L 91.5 160 L 87 163.5 Q 86.5 167.5 89.5 168 L 98.5 172 L 102.5 176 L 119.5 184 L 127.5 190 L 136.5 194 L 151 206.5 L 157.5 214 Q 159.75 213.25 159 215.5 L 165.5 223 L 170 226.5 Q 170.63 230.37 173.5 232 L 178.5 235 L 187.5 235 Q 188.5 232.5 191 233 Q 191.71 228.11 195.5 225 L 198.5 224 L 225 199.5 L 227.5 195 L 232.5 193 L 241.5 186 L 246.5 184 L 260 174.5 L 261.5 172 Q 267 170 270 165.5 L 270 162.5 L 265 157.5 L 265 154.5 L 268.5 150 Q 270.75 150.75 270 148.5 L 275.5 142 L 281.5 139 L 292.5 139 L 318.5 153 L 323.5 158 L 326.5 158 L 332.5 160 L 336 163.5 L 335 168 L 330.5 170 L 325.5 171 L 318.5 177 L 314.5 178 L 302.5 185 L 297.5 190 L 287.5 193 L 279.5 200 L 275.5 201 L 270.5 205 L 269 205 L 267.5 208 L 243.5 224 L 238 229.5 Q 238.75 231.75 236.5 231 L 216 249.5 L 214 253.5 L 201 267.5 L 192 280.5 L 189 287 L 186.5 288 L 183.5 288 L 182.5 289 L 179.5 289 L 173 285.5 L 169 274.5 Q 160.63 267.66 156 258 L 153 256.5 L 149 251.5 L 149 250 L 147 250 Q 148.13 247.33 145.5 248 L 132.5 233 L 129 232 L 129 230.5 L 122.5 224 L 119.5 223 L 108.5 214 L 95.5 208 L 89.5 203 L 85.5 201 L 74.5 199 L 69.5 195 L 54.5 190 L 48.5 186 L 30.5 180 L 0 180 L 0 149 L 31.5 149 L 35.5 147 L 44.5 147 L 49 145 Q 47.87 142.33 50.5 143 L 57.5 139 L 65.5 138 L 74.5 135 L 81.5 129 L 93.5 125 L 96.5 122 L 112.5 114 L 117 110.5 L 120.5 106 L 124.5 104 L 137 91.5 L 142.5 84 L 146 81.5 Q 150.3 73.8 157 68.5 L 164 56.5 L 177.5 40 L 179.5 39 Z M 294.5 40 L 303.5 40 Q 304.75 43.5 308 43 L 313 53.5 L 329 71.5 L 338.5 85 Q 340.75 84.25 340 86.5 L 346.5 94 L 352 98.5 L 354 103 Q 363.2 105.9 368.5 114 L 374.5 117 L 376.5 117 L 385.5 124 L 397.5 128 L 407.5 135 L 409.5 135 L 412.5 137 L 422.5 139 L 424.5 141 L 430.5 144 L 432.5 144 L 434.5 146 Q 437.75 145.25 438.5 147 L 445.5 147 L 451.5 149 L 480 149 L 480 180 L 466.5 180 L 465.5 179 L 459.5 179 L 450.5 182 L 445.5 182 L 441.5 184 L 437.5 184 L 429.5 190 L 426.5 191 L 419.5 191 L 413.5 194 L 411.5 194 L 398.5 202 L 388.5 204 L 381.5 210 L 371.5 214 L 367 218.5 L 365.5 221 L 356.5 225 L 352 229.5 L 347.5 235 L 345 236.5 L 334.5 249 L 332 250.5 Q 332.75 252.75 330.5 252 L 326.5 257 L 324 258.5 L 319 267.5 L 312 276.5 L 312 278.5 L 304.5 288 L 294.5 288 L 289 282.5 L 288 279.5 L 280 269.5 L 279 266.5 L 267 253.5 L 264 245.5 L 264 240.5 L 265 237.5 L 268.5 234 L 273 230.5 L 275.5 227 L 278.5 226 L 286 226 Q 286.65 231.4 291.5 234 L 294.5 235 L 301.5 235 Q 307 233 310 228.5 L 312 224 L 313.5 224 L 325.5 212 L 327 212 L 327 210.5 L 335.5 202 L 346.5 193 L 356.5 190 L 363.5 183 L 375.5 178 L 382.5 173 L 389.5 171 L 394 166.5 L 394 163.5 L 390.5 160 L 379.5 157 L 373.5 151 L 359.5 145 L 348.5 137 L 345.5 136 L 332 123.5 L 326.5 117 L 323 114.5 L 306.5 96 L 302.5 94 L 296.5 93 Q 295.75 94.75 292.5 94 L 288 98.5 Q 287.75 103.25 284.5 105 Q 278 107.5 274.5 113 L 273 113 Q 274.13 115.67 271.5 115 L 260.5 127 L 250.5 136 L 241 141.5 L 239.5 144 L 238 144 Q 239.13 146.67 236.5 146 Q 232.09 150.09 225.5 152 L 212 163.5 L 211 166.5 L 212 167.5 L 212 174.5 L 206.5 182 L 197.5 190 L 188.5 191 L 170.5 181 L 167.5 178 L 161.5 176 L 157.5 172 L 148.5 169 L 145 165.5 L 147.5 161 L 158.5 156 L 166.5 151 L 168.5 151 L 176.5 147 L 181.5 142 L 193.5 137 L 202.5 129 L 211.5 126 L 215 123.5 L 219.5 118 L 224.5 115 L 233.5 107 L 237.5 105 L 242 100.5 L 246.5 95 L 249.5 94 L 255 89.5 L 257 85 L 260 83.5 L 267 73.5 L 287 51.5 L 292 41 L 294.5 40 Z ";
63
- const ORNAMENT_END_PATH = "M 210.5 53 L 216.5 53 L 224 59.5 L 227.5 65 L 238 73.5 L 242.5 79 L 249.5 82 Q 252.67 86.83 258.5 89 L 262.5 89 L 263.5 90 L 269.5 91 L 284.5 98 L 294.5 98 L 295.5 99 L 303.5 99 L 304.5 100 L 311.5 100 L 312.5 101 L 320 101 L 320 131.5 Q 319.88 132.63 314.5 132 L 313.5 133 L 307.5 133 L 306.5 134 L 289.5 134 Q 288.5 136 284.5 135 L 269.5 142 L 266.5 143 L 260.5 143 Q 254 145.5 250.5 151 L 235.5 160 L 226 169.5 L 221.5 177 L 214.5 180 L 208.5 180 L 205.5 179 L 193 168.5 Q 193.75 166.25 191.5 167 L 185.5 162 Q 177.28 160.22 172.5 155 L 159.5 151 L 156.5 148 L 148.5 145 L 131.5 142 L 125.5 138 L 116.5 137 L 110.5 134 L 101.5 133 L 90.5 129 L 83.5 129 L 79.5 127 L 75.5 127 L 74.5 126 L 60.5 124 L 55.5 122 L 44.5 122 Q 43.25 119.75 38.5 121 L 32 117.5 L 33 114 L 38.5 112 L 41.5 112 L 42.5 111 L 54.5 111 L 55.5 110 L 59.5 110 L 65.5 108 L 74.5 107 L 75.5 106 L 78.5 106 L 82.5 104 L 86.5 104 L 95.5 101 L 103.5 101 L 119.5 95 L 123.5 95 L 130.5 91 Q 134.5 92 135.5 90 L 142.5 90 L 143.5 89 L 147.5 89 L 153.5 87 L 163.5 80 L 172.5 78 L 188.5 67 L 191.5 66 L 198.5 59 L 210.5 53 Z ";
1008
+ //#region src/models/InventorySort.ts
1009
+ let InventorySort = /* @__PURE__ */ function(InventorySort) {
1010
+ InventorySort["Level"] = "Level";
1011
+ InventorySort["Quality"] = "Quality";
1012
+ return InventorySort;
1013
+ }({});
1014
+ const InventorySorts = Object.values(InventorySort);
1015
+ //#endregion
1016
+ //#region src/components/InventoryScreen/Index.vue
1017
+ const _hoisted_1$11 = { class: "inventory-screen" };
1018
+ const _hoisted_2$10 = ["inert"];
1019
+ const _hoisted_3$8 = {
1020
+ class: "title",
1021
+ role: "heading",
1022
+ "aria-level": "1"
1023
+ };
1024
+ const _hoisted_4$6 = { class: "tabs" };
1025
+ const _hoisted_5$5 = [
1026
+ "aria-label",
1027
+ "aria-pressed",
1028
+ "data-category",
1029
+ "onClick"
1030
+ ];
1031
+ const _hoisted_6$4 = { class: "capacity" };
1032
+ const _hoisted_7$4 = ["aria-label"];
1033
+ const _hoisted_8$3 = { class: "grid" };
1034
+ const _hoisted_9$3 = [
1035
+ "aria-label",
1036
+ "aria-pressed",
1037
+ "data-rarity",
1038
+ "data-selected",
1039
+ "onClick"
1040
+ ];
1041
+ const _hoisted_10$3 = { class: "caption" };
1042
+ const _hoisted_11$2 = ["data-rarity"];
1043
+ const _hoisted_12$2 = { class: "detail-name" };
1044
+ const _hoisted_13$2 = { class: "detail-caption" };
1045
+ const _hoisted_14$2 = ["aria-label", "aria-pressed"];
1046
+ const _hoisted_15$2 = {
1047
+ key: 1,
1048
+ class: "destroy"
1049
+ };
1050
+ const _hoisted_16$2 = { class: "destroy-tip" };
1051
+ const _hoisted_17$2 = {
1052
+ key: 0,
1053
+ class: "destroy-cannot"
1054
+ };
1055
+ const _hoisted_18$2 = { class: "quick-selects" };
1056
+ const _hoisted_19$2 = ["data-rarity", "onClick"];
1057
+ const _hoisted_20$2 = { class: "destroy-count" };
1058
+ const _hoisted_21$1 = ["disabled"];
1059
+ const _hoisted_22$1 = { class: "sort" };
1060
+ const _hoisted_23$1 = ["value"];
1061
+ const _hoisted_24$1 = ["aria-label", "data-descending"];
1062
+ const _hoisted_25$1 = {
1063
+ key: 3,
1064
+ class: "currencies"
1065
+ };
1066
+ const _hoisted_26$1 = ["data-currency"];
1067
+ const _hoisted_27$1 = { class: "currency-name" };
1068
+ const _hoisted_28 = {
1069
+ key: 0,
1070
+ class: "top-up"
1071
+ };
1072
+ const _hoisted_29 = ["aria-label"];
1073
+ const _hoisted_30 = { class: "confirm-title" };
1074
+ const _hoisted_31 = { class: "confirm-list-label" };
1075
+ const _hoisted_32 = { class: "confirm-names" };
1076
+ const _hoisted_33 = { class: "confirm-warning" };
1077
+ const _hoisted_34 = {
1078
+ key: 0,
1079
+ class: "confirm-warning"
1080
+ };
1081
+ const _hoisted_35 = { class: "confirm-list-label" };
1082
+ const _hoisted_36 = { class: "confirm-names" };
1083
+ const _hoisted_37 = { class: "confirm-buttons" };
1084
+ const _hoisted_38 = ["disabled"];
1085
+ var Index_default$13 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
1086
+ __name: "Index",
1087
+ props: /*@__PURE__*/ mergeModels({
1088
+ backLabel: {},
1089
+ cancelLabel: {},
1090
+ capacity: {},
1091
+ cells: {},
1092
+ currencies: {},
1093
+ destroyButtonLabel: {},
1094
+ destroyCannotLabel: {},
1095
+ destroyConfirmButtonLabel: {},
1096
+ destroyConfirmListLabel: {},
1097
+ destroyConfirmTitle: {},
1098
+ destroyConfirmWarningLabel: {},
1099
+ destroyFullLabel: {},
1100
+ destroyLabel: {},
1101
+ destroyNames: {},
1102
+ destroyRecoveredLabel: {},
1103
+ destroyRecoveredNames: {},
1104
+ destroySelectedLabel: {},
1105
+ destroyTipLabel: {},
1106
+ isConfirming: { type: Boolean },
1107
+ isDestroyFull: { type: Boolean },
1108
+ isDestroying: { type: Boolean },
1109
+ isSortable: { type: Boolean },
1110
+ orderLabel: {},
1111
+ quickSelects: {},
1112
+ sortLabels: {},
1113
+ tabLabels: {},
1114
+ title: {}
1115
+ }, {
1116
+ "category": { required: true },
1117
+ "categoryModifiers": {},
1118
+ "sort": { required: true },
1119
+ "sortModifiers": {},
1120
+ "isDescending": {
1121
+ type: Boolean,
1122
+ required: true
1123
+ },
1124
+ "isDescendingModifiers": {},
1125
+ "selectedId": { required: true },
1126
+ "selectedIdModifiers": {}
1127
+ }),
1128
+ emits: /*@__PURE__*/ mergeModels([
1129
+ "cancelDestroy",
1130
+ "choose",
1131
+ "close",
1132
+ "confirmDestroy",
1133
+ "destroy",
1134
+ "quickSelect",
1135
+ "toggleDestroy"
1136
+ ], [
1137
+ "update:category",
1138
+ "update:sort",
1139
+ "update:isDescending",
1140
+ "update:selectedId"
1141
+ ]),
1142
+ setup(__props, { emit: __emit }) {
1143
+ const category = useModel(__props, "category");
1144
+ const sort = useModel(__props, "sort");
1145
+ const isDescending = useModel(__props, "isDescending");
1146
+ const selectedId = useModel(__props, "selectedId");
1147
+ const emit = __emit;
1148
+ const selectedCell = computed(() => __props.cells.find(({ id }) => id === selectedId.value) ?? __props.cells[0]);
1149
+ const cancelButton = useTemplateRef("cancelButton");
1150
+ const trashButton = useTemplateRef("trashButton");
1151
+ let returnFocus;
1152
+ watch(() => __props.isConfirming, async (isOpen) => {
1153
+ if (isOpen) returnFocus = window.document.activeElement instanceof HTMLElement ? window.document.activeElement : void 0;
1154
+ await nextTick();
1155
+ if (isOpen) cancelButton.value?.focus();
1156
+ else (returnFocus?.isConnected ? returnFocus : trashButton.value)?.focus();
1157
+ });
1158
+ return (_ctx, _cache) => {
1159
+ 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$11, [
1160
+ createElementVNode("div", {
1161
+ class: "bag",
1162
+ inert: __props.isConfirming
1163
+ }, [
1164
+ createElementVNode("p", _hoisted_3$8, toDisplayString(__props.title), 1),
1165
+ createElementVNode("ul", _hoisted_4$6, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(ItemCategories), (itemCategory) => {
1166
+ return openBlock(), createElementBlock("li", { key: itemCategory }, [createElementVNode("button", {
1167
+ class: "tab",
1168
+ "aria-label": __props.tabLabels[itemCategory],
1169
+ "aria-pressed": itemCategory === category.value,
1170
+ "data-category": itemCategory,
1171
+ type: "button",
1172
+ onClick: ($event) => category.value = itemCategory
1173
+ }, null, 8, _hoisted_5$5)]);
1174
+ }), 128))]),
1175
+ createElementVNode("p", _hoisted_6$4, toDisplayString(__props.capacity), 1),
1176
+ createElementVNode("button", {
1177
+ class: "back",
1178
+ "aria-label": __props.backLabel,
1179
+ type: "button",
1180
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
1181
+ }, null, 8, _hoisted_7$4),
1182
+ createElementVNode("ul", _hoisted_8$3, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.cells, (cell) => {
1183
+ return openBlock(), createElementBlock("li", { key: cell.id }, [createElementVNode("button", {
1184
+ class: "cell",
1185
+ "aria-label": cell.name,
1186
+ "aria-pressed": __props.isDestroying ? Boolean(cell.isSelected) : cell.id === selectedCell.value?.id,
1187
+ "data-rarity": cell.rarity,
1188
+ "data-selected": cell.isSelected,
1189
+ type: "button",
1190
+ onClick: ($event) => __props.isDestroying && cell.isDestroyable ? emit("choose", cell.id) : selectedId.value = cell.id
1191
+ }, [createElementVNode("span", _hoisted_10$3, toDisplayString(cell.caption), 1)], 8, _hoisted_9$3)]);
1192
+ }), 128))]),
1193
+ selectedCell.value ? (openBlock(), createElementBlock("section", {
1194
+ key: 0,
1195
+ class: "detail",
1196
+ "data-rarity": selectedCell.value.rarity
1197
+ }, [createElementVNode("p", _hoisted_12$2, toDisplayString(selectedCell.value.name), 1), createElementVNode("p", _hoisted_13$2, toDisplayString(selectedCell.value.caption), 1)], 8, _hoisted_11$2)) : createCommentVNode("v-if", true),
1198
+ createElementVNode("button", {
1199
+ ref_key: "trashButton",
1200
+ ref: trashButton,
1201
+ class: "trash",
1202
+ "aria-label": __props.destroyLabel,
1203
+ "aria-pressed": __props.isDestroying,
1204
+ type: "button",
1205
+ onClick: _cache[1] || (_cache[1] = ($event) => emit("toggleDestroy"))
1206
+ }, null, 8, _hoisted_14$2),
1207
+ 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 "),
1208
+ __props.isDestroying ? (openBlock(), createElementBlock("section", _hoisted_15$2, [
1209
+ createElementVNode("p", _hoisted_16$2, toDisplayString(__props.destroyTipLabel), 1),
1210
+ selectedCell.value && !selectedCell.value.isDestroyable ? (openBlock(), createElementBlock("p", _hoisted_17$2, toDisplayString(__props.destroyCannotLabel), 1)) : createCommentVNode("v-if", true),
1211
+ createElementVNode("ul", _hoisted_18$2, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.quickSelects, ({ label, rarity }) => {
1212
+ return openBlock(), createElementBlock("li", { key: rarity }, [createElementVNode("button", {
1213
+ class: "quick-select",
1214
+ "data-rarity": rarity,
1215
+ type: "button",
1216
+ onClick: ($event) => emit("quickSelect", rarity)
1217
+ }, toDisplayString(label), 9, _hoisted_19$2)]);
1218
+ }), 128))]),
1219
+ createElementVNode("p", _hoisted_20$2, toDisplayString(__props.destroySelectedLabel), 1),
1220
+ createElementVNode("button", {
1221
+ class: "destroy-button",
1222
+ disabled: !__props.destroyNames.length,
1223
+ type: "button",
1224
+ onClick: _cache[2] || (_cache[2] = ($event) => emit("destroy"))
1225
+ }, toDisplayString(__props.destroyButtonLabel), 9, _hoisted_21$1)
1226
+ ])) : __props.isSortable ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [
1227
+ _cache[7] || (_cache[7] = createElementVNode("span", { class: "filter" }, null, -1)),
1228
+ createElementVNode("div", _hoisted_22$1, [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", {
1229
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => sort.value = $event),
1230
+ class: "sort-select"
1231
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(InventorySorts), (inventorySort) => {
1232
+ return openBlock(), createElementBlock("option", {
1233
+ key: inventorySort,
1234
+ value: inventorySort
1235
+ }, toDisplayString(__props.sortLabels[inventorySort]), 9, _hoisted_23$1);
1236
+ }), 128))], 512), [[vModelSelect, sort.value]])]),
1237
+ createElementVNode("button", {
1238
+ class: "order",
1239
+ "aria-label": __props.orderLabel,
1240
+ "data-descending": isDescending.value,
1241
+ type: "button",
1242
+ onClick: _cache[4] || (_cache[4] = ($event) => isDescending.value = !isDescending.value)
1243
+ }, null, 8, _hoisted_24$1)
1244
+ ], 64)) : (openBlock(), createElementBlock("ul", _hoisted_25$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.currencies, ({ id, isTopUp, name, quantity }) => {
1245
+ return openBlock(), createElementBlock("li", {
1246
+ key: id,
1247
+ class: "currency",
1248
+ "data-currency": id
1249
+ }, [
1250
+ createElementVNode("span", _hoisted_27$1, toDisplayString(name), 1),
1251
+ _cache[8] || (_cache[8] = createElementVNode("span", { class: "currency-icon" }, null, -1)),
1252
+ createTextVNode(" " + toDisplayString(quantity) + " ", 1),
1253
+ isTopUp ? (openBlock(), createElementBlock("span", _hoisted_28)) : createCommentVNode("v-if", true)
1254
+ ], 8, _hoisted_26$1);
1255
+ }), 128))]))
1256
+ ], 8, _hoisted_2$10),
1257
+ 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 "),
1258
+ __props.isConfirming ? (openBlock(), createElementBlock("section", {
1259
+ key: 0,
1260
+ class: "confirm",
1261
+ role: "dialog",
1262
+ "aria-modal": "true",
1263
+ "aria-label": __props.destroyConfirmTitle
1264
+ }, [
1265
+ createElementVNode("p", _hoisted_30, toDisplayString(__props.destroyConfirmTitle), 1),
1266
+ createElementVNode("p", _hoisted_31, toDisplayString(__props.destroyConfirmListLabel), 1),
1267
+ createElementVNode("ul", _hoisted_32, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.destroyNames, (name, index) => {
1268
+ return openBlock(), createElementBlock("li", { key: index }, toDisplayString(name), 1);
1269
+ }), 128))]),
1270
+ createElementVNode("p", _hoisted_33, toDisplayString(__props.destroyConfirmWarningLabel), 1),
1271
+ __props.isDestroyFull ? (openBlock(), createElementBlock("p", _hoisted_34, toDisplayString(__props.destroyFullLabel), 1)) : createCommentVNode("v-if", true),
1272
+ __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) => {
1273
+ return openBlock(), createElementBlock("li", { key: index }, toDisplayString(name), 1);
1274
+ }), 128))])], 64)) : createCommentVNode("v-if", true),
1275
+ createElementVNode("div", _hoisted_37, [createElementVNode("button", {
1276
+ ref_key: "cancelButton",
1277
+ ref: cancelButton,
1278
+ class: "confirm-button",
1279
+ type: "button",
1280
+ onClick: _cache[5] || (_cache[5] = ($event) => emit("cancelDestroy"))
1281
+ }, toDisplayString(__props.cancelLabel), 513), createElementVNode("button", {
1282
+ disabled: __props.isDestroyFull,
1283
+ class: "confirm-button",
1284
+ type: "button",
1285
+ onClick: _cache[6] || (_cache[6] = ($event) => emit("confirmDestroy"))
1286
+ }, toDisplayString(__props.destroyConfirmButtonLabel), 9, _hoisted_38)])
1287
+ ], 8, _hoisted_29)) : createCommentVNode("v-if", true)
1288
+ ])], 2112);
1289
+ };
1290
+ }
1291
+ }), [["__scopeId", "data-v-f5de1664"]]);
1292
+ //#endregion
1293
+ //#region src/components/ItemTile/Index.vue
1294
+ const _hoisted_1$10 = ["data-rarity"];
1295
+ const _hoisted_2$9 = { class: "face" };
1296
+ const _hoisted_3$7 = {
1297
+ class: "count",
1298
+ "aria-hidden": "true"
1299
+ };
1300
+ var Index_default$14 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
1301
+ __name: "Index",
1302
+ props: {
1303
+ count: {},
1304
+ rarity: {}
1305
+ },
1306
+ setup(__props) {
1307
+ return (_ctx, _cache) => {
1308
+ 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", {
1309
+ class: "item-tile",
1310
+ "data-rarity": __props.rarity
1311
+ }, [createElementVNode("span", _hoisted_2$9, [createElementVNode("span", _hoisted_3$7, toDisplayString(__props.count), 1)])], 8, _hoisted_1$10)], 2112);
1312
+ };
1313
+ }
1314
+ }), [["__scopeId", "data-v-5f64ed92"]]);
1315
+ //#endregion
1316
+ //#region src/components/LoadingSpinner/Index.vue
1317
+ const _hoisted_1$9 = ["aria-label"];
1318
+ var Index_default$15 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
1319
+ __name: "Index",
1320
+ props: { label: {} },
1321
+ setup(__props) {
1322
+ return (_ctx, _cache) => {
1323
+ 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", {
1324
+ class: "loading-spinner",
1325
+ role: "status",
1326
+ "aria-label": __props.label
1327
+ }, [..._cache[0] || (_cache[0] = [createElementVNode("span", { class: "ring" }, null, -1)])], 8, _hoisted_1$9)], 2112);
1328
+ };
1329
+ }
1330
+ }), [["__scopeId", "data-v-69cb5a34"]]);
64
1331
  //#endregion
65
1332
  //#region src/components/OrnamentDivider/Index.vue
66
- const _hoisted_1$5 = {
1333
+ const _hoisted_1$8 = {
67
1334
  class: "ornament-divider",
68
1335
  "aria-hidden": "true"
69
1336
  };
70
- const _hoisted_2$5 = {
1337
+ const _hoisted_2$8 = {
71
1338
  class: "end",
72
1339
  viewBox: "0 0 320 224"
73
1340
  };
74
- const _hoisted_3$3 = ["d"];
75
- const _hoisted_4$2 = {
1341
+ const _hoisted_3$6 = ["d"];
1342
+ const _hoisted_4$5 = {
76
1343
  class: "middle",
77
1344
  viewBox: "0 0 480 320"
78
1345
  };
79
- const _hoisted_5$1 = ["d"];
80
- const _hoisted_6 = {
1346
+ const _hoisted_5$4 = ["d"];
1347
+ const _hoisted_6$3 = {
81
1348
  class: "end right",
82
1349
  viewBox: "0 0 320 224"
83
1350
  };
84
- const _hoisted_7 = ["d"];
85
- var Index_default$2 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
1351
+ const _hoisted_7$3 = ["d"];
1352
+ var Index_default$16 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
86
1353
  __name: "Index",
87
1354
  setup(__props) {
88
1355
  return (_ctx, _cache) => {
89
- return openBlock(), createElementBlock(Fragment, null, [
90
- createCommentVNode(" The game's divider: a hairline as wide as its parent, a tapered diamond at each end and an interlocked double "),
91
- createCommentVNode(" Diamond at its middle, in the game's units from the parent's `--unit` "),
92
- createElementVNode("div", _hoisted_1$5, [
93
- (openBlock(), createElementBlock("svg", _hoisted_2$5, [createElementVNode("path", { d: unref(ORNAMENT_END_PATH) }, null, 8, _hoisted_3$3)])),
94
- (openBlock(), createElementBlock("svg", _hoisted_4$2, [createElementVNode("path", { d: unref(ORNAMENT_MIDDLE_PATH) }, null, 8, _hoisted_5$1)])),
95
- (openBlock(), createElementBlock("svg", _hoisted_6, [createElementVNode("path", { d: unref(ORNAMENT_END_PATH) }, null, 8, _hoisted_7)]))
96
- ])
97
- ], 2112);
1356
+ 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$8, [
1357
+ (openBlock(), createElementBlock("svg", _hoisted_2$8, [createElementVNode("path", { d: unref(ORNAMENT_END_PATH) }, null, 8, _hoisted_3$6)])),
1358
+ (openBlock(), createElementBlock("svg", _hoisted_4$5, [createElementVNode("path", { d: unref(ORNAMENT_MIDDLE_PATH) }, null, 8, _hoisted_5$4)])),
1359
+ (openBlock(), createElementBlock("svg", _hoisted_6$3, [createElementVNode("path", { d: unref(ORNAMENT_END_PATH) }, null, 8, _hoisted_7$3)]))
1360
+ ])], 2112);
98
1361
  };
99
1362
  }
100
- }), [["__scopeId", "data-v-d85b7a4e"]]);
1363
+ }), [["__scopeId", "data-v-335021af"]]);
101
1364
  //#endregion
102
1365
  //#region src/components/ProgressBar/Index.vue
103
- const _hoisted_1$4 = ["aria-valuenow"];
104
- const _hoisted_2$4 = { class: "track" };
105
- var Index_default$3 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
1366
+ const _hoisted_1$7 = ["aria-valuenow"];
1367
+ const _hoisted_2$7 = { class: "track" };
1368
+ var Index_default$17 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
106
1369
  __name: "Index",
107
1370
  props: {
108
1371
  isFolded: { type: Boolean },
@@ -110,43 +1373,139 @@ var Index_default$3 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ define
110
1373
  },
111
1374
  setup(__props) {
112
1375
  return (_ctx, _cache) => {
113
- return openBlock(), createElementBlock(Fragment, null, [
114
- createCommentVNode(" The game's progress bar, 394 units from diamond to diamond: a dark track 10 units high with pointed ends between "),
115
- createCommentVNode(" Two small white diamonds, filled white from its left, measured from the English client's login screen. It opens "),
116
- createCommentVNode(" Out of its middle over 250 ms as it mounts and folds back into it, so its diamonds meet as one: the English "),
117
- createCommentVNode(" Recording's login screen at 60 frames "),
118
- createElementVNode("div", {
119
- class: normalizeClass(["progress-bar", { folded: __props.isFolded }]),
120
- role: "progressbar",
121
- "aria-valuemin": "0",
122
- "aria-valuemax": "100",
123
- "aria-valuenow": Math.round(__props.progress * 100)
124
- }, [
125
- _cache[0] || (_cache[0] = createElementVNode("span", { class: "diamond" }, null, -1)),
126
- createElementVNode("span", _hoisted_2$4, [createElementVNode("span", {
127
- class: "fill",
128
- style: normalizeStyle({ width: `${__props.progress * 100}%` })
129
- }, null, 4)]),
130
- _cache[1] || (_cache[1] = createElementVNode("span", { class: "diamond" }, null, -1))
131
- ], 10, _hoisted_1$4)
132
- ], 2112);
1376
+ 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", {
1377
+ class: normalizeClass(["progress-bar", { folded: __props.isFolded }]),
1378
+ role: "progressbar",
1379
+ "aria-valuemin": "0",
1380
+ "aria-valuemax": "100",
1381
+ "aria-valuenow": Math.round(__props.progress * 100)
1382
+ }, [
1383
+ _cache[0] || (_cache[0] = createElementVNode("span", { class: "diamond" }, null, -1)),
1384
+ createElementVNode("span", _hoisted_2$7, [createElementVNode("span", {
1385
+ class: "fill",
1386
+ style: normalizeStyle({ width: `${__props.progress * 100}%` })
1387
+ }, null, 4)]),
1388
+ _cache[1] || (_cache[1] = createElementVNode("span", { class: "diamond" }, null, -1))
1389
+ ], 10, _hoisted_1$7)], 2112);
133
1390
  };
134
1391
  }
135
- }), [["__scopeId", "data-v-de59534b"]]);
1392
+ }), [["__scopeId", "data-v-bea8e745"]]);
136
1393
  //#endregion
137
1394
  //#region src/components/PromptBand/Index.vue
138
- const _sfc_main$3 = {};
139
- const _hoisted_1$3 = { class: "prompt-band" };
140
- const _hoisted_2$3 = { class: "text" };
1395
+ const _sfc_main$7 = {};
1396
+ const _hoisted_1$6 = { class: "prompt-band" };
1397
+ const _hoisted_2$6 = { class: "text" };
141
1398
  function _sfc_render$1(_ctx, _cache) {
142
- return openBlock(), createElementBlock(Fragment, null, [
143
- 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 "),
144
- createCommentVNode(" Ends, its words centred in a light grey. Its glass and fade are solved from the scene the English recording "),
145
- createCommentVNode(" Shows through it at the door "),
146
- createElementVNode("div", _hoisted_1$3, [createElementVNode("p", _hoisted_2$3, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])])
147
- ], 2112);
1399
+ 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$6, [createElementVNode("p", _hoisted_2$6, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])])], 2112);
148
1400
  }
149
- var Index_default$4 = /*#__PURE__*/ export_helper_default(_sfc_main$3, [["render", _sfc_render$1], ["__scopeId", "data-v-3fd65c8e"]]);
1401
+ var Index_default$18 = /*#__PURE__*/ export_helper_default(_sfc_main$7, [["render", _sfc_render$1], ["__scopeId", "data-v-8c88bb3d"]]);
1402
+ //#endregion
1403
+ //#region src/components/ReputationScreen/Index.vue
1404
+ const _hoisted_1$5 = { class: "reputation-screen" };
1405
+ const _hoisted_2$5 = { class: "head" };
1406
+ const _hoisted_3$5 = {
1407
+ class: "title",
1408
+ role: "heading",
1409
+ "aria-level": "1"
1410
+ };
1411
+ const _hoisted_4$4 = ["aria-label"];
1412
+ const _hoisted_5$3 = { class: "detail" };
1413
+ const _hoisted_6$2 = { class: "headline" };
1414
+ const _hoisted_7$2 = { class: "requirement" };
1415
+ const _hoisted_8$2 = { class: "levels" };
1416
+ const _hoisted_9$2 = [
1417
+ "aria-pressed",
1418
+ "data-achieved",
1419
+ "onClick"
1420
+ ];
1421
+ const _hoisted_10$2 = { class: "badge" };
1422
+ const _hoisted_11$1 = { class: "badge-face" };
1423
+ const _hoisted_12$1 = { class: "badge-word" };
1424
+ const _hoisted_13$1 = { class: "badge-number" };
1425
+ const _hoisted_14$1 = { class: "items" };
1426
+ const _hoisted_15$1 = {
1427
+ key: 0,
1428
+ class: "unlock"
1429
+ };
1430
+ const _hoisted_16$1 = {
1431
+ key: 1,
1432
+ class: "achieved"
1433
+ };
1434
+ const _hoisted_17$1 = {
1435
+ class: "check",
1436
+ viewBox: "0 0 252 228",
1437
+ "aria-hidden": "true"
1438
+ };
1439
+ const _hoisted_18$1 = ["d"];
1440
+ const _hoisted_19$1 = { class: "hidden-label" };
1441
+ const _hoisted_20$1 = {
1442
+ key: 2,
1443
+ class: "status"
1444
+ };
1445
+ var Index_default$19 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
1446
+ __name: "Index",
1447
+ props: /*@__PURE__*/ mergeModels({
1448
+ achievedLabel: {},
1449
+ backLabel: {},
1450
+ headline: {},
1451
+ levelLabel: {},
1452
+ levels: {},
1453
+ notAchievedLabel: {},
1454
+ requirement: {},
1455
+ title: {}
1456
+ }, {
1457
+ "level": { default: 0 },
1458
+ "levelModifiers": {}
1459
+ }),
1460
+ emits: /*@__PURE__*/ mergeModels(["close"], ["update:level"]),
1461
+ setup(__props, { emit: __emit }) {
1462
+ const level = useModel(__props, "level");
1463
+ const emit = __emit;
1464
+ return (_ctx, _cache) => {
1465
+ 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$5, [
1466
+ createElementVNode("header", _hoisted_2$5, [createElementVNode("p", _hoisted_3$5, toDisplayString(__props.title), 1), createElementVNode("button", {
1467
+ class: "back",
1468
+ "aria-label": __props.backLabel,
1469
+ type: "button",
1470
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
1471
+ }, "↶", 8, _hoisted_4$4)]),
1472
+ createElementVNode("section", _hoisted_5$3, [createElementVNode("p", _hoisted_6$2, toDisplayString(__props.headline), 1), createElementVNode("p", _hoisted_7$2, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.requirement, ({ color, text }, index) => {
1473
+ return openBlock(), createElementBlock("span", {
1474
+ key: index,
1475
+ style: normalizeStyle({ color })
1476
+ }, toDisplayString(text), 5);
1477
+ }), 128))])]),
1478
+ createElementVNode("ul", _hoisted_8$2, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.levels, (cell) => {
1479
+ return openBlock(), createElementBlock("li", { key: cell.level }, [createElementVNode("button", {
1480
+ class: "level",
1481
+ "aria-pressed": cell.level === level.value,
1482
+ "data-achieved": cell.isAchieved || void 0,
1483
+ type: "button",
1484
+ onClick: ($event) => level.value = cell.level
1485
+ }, [
1486
+ createElementVNode("span", _hoisted_10$2, [createElementVNode("span", _hoisted_11$1, [createElementVNode("span", _hoisted_12$1, toDisplayString(__props.levelLabel), 1), createElementVNode("span", _hoisted_13$1, toDisplayString(cell.level), 1)])]),
1487
+ createElementVNode("span", _hoisted_14$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(cell.items, ({ count, label, rarity }, index) => {
1488
+ return openBlock(), createBlock(Index_default$14, {
1489
+ key: index,
1490
+ class: "item",
1491
+ "aria-label": label,
1492
+ count,
1493
+ rarity,
1494
+ role: "img"
1495
+ }, null, 8, [
1496
+ "aria-label",
1497
+ "count",
1498
+ "rarity"
1499
+ ]);
1500
+ }), 128))]),
1501
+ cell.unlockLabel ? (openBlock(), createElementBlock("span", _hoisted_15$1, toDisplayString(cell.unlockLabel), 1)) : createCommentVNode("v-if", true),
1502
+ cell.isAchieved ? (openBlock(), createElementBlock("span", _hoisted_16$1, [(openBlock(), createElementBlock("svg", _hoisted_17$1, [createElementVNode("path", { d: unref(CHECK_MARK_PATH) }, null, 8, _hoisted_18$1)])), createElementVNode("span", _hoisted_19$1, toDisplayString(__props.achievedLabel), 1)])) : (openBlock(), createElementBlock("span", _hoisted_20$1, toDisplayString(__props.notAchievedLabel), 1))
1503
+ ], 8, _hoisted_9$2)]);
1504
+ }), 128))])
1505
+ ])], 2112);
1506
+ };
1507
+ }
1508
+ }), [["__scopeId", "data-v-1a7ee007"]]);
150
1509
  //#endregion
151
1510
  //#region src/models/InterfaceIcon.ts
152
1511
  let InterfaceIcon = /* @__PURE__ */ function(InterfaceIcon) {
@@ -157,6 +1516,7 @@ let InterfaceIcon = /* @__PURE__ */ function(InterfaceIcon) {
157
1516
  InterfaceIcon["Settings"] = "Settings";
158
1517
  return InterfaceIcon;
159
1518
  }({});
1519
+ const InterfaceIcons = Object.values(InterfaceIcon);
160
1520
  //#endregion
161
1521
  //#region src/services/InterfaceIconCentreMap.ts
162
1522
  const InterfaceIconCentreMap = {
@@ -169,24 +1529,24 @@ const InterfaceIconCentreMap = {
169
1529
  //#endregion
170
1530
  //#region src/services/InterfaceIconPathMap.ts
171
1531
  const InterfaceIconPathMap = {
172
- ["Exit"]: "M 14.3 8.16 L 31.36 8.16 L 31.45 8.25 L 32.11 8.34 L 32.67 8.62 L 33.56 9.42 L 34.22 10.92 L 34.22 11.48 L 34.31 11.58 L 34.31 13.83 Q 34.15 13.9 34.22 14.2 L 33.8 14.91 L 33.23 15.09 L 31.17 15.09 L 31.08 15 L 30.52 14.91 L 30.19 14.58 Q 30.26 14.27 30.09 14.2 L 30.09 13.08 L 29.67 12.56 L 29.02 12.09 L 17.3 12.09 L 16.69 12.42 L 16.31 13.17 L 16.31 36.42 L 16.5 36.89 L 16.83 37.31 L 17.3 37.5 L 29.02 37.5 L 30 36.7 L 30.09 36.52 L 30.09 35.3 L 30.19 35.02 L 30.52 34.69 Q 30.69 34.53 31.08 34.59 L 31.17 34.5 L 33.23 34.5 Q 33.3 34.66 33.61 34.59 L 33.94 34.83 L 34.31 35.67 L 34.31 38.11 L 34.22 38.2 L 34.22 38.67 L 33.94 39.23 L 33.94 39.42 L 33.56 40.17 L 33.33 40.41 L 32.67 40.97 L 32.11 41.25 L 31.45 41.34 L 31.36 41.44 L 14.3 41.44 L 13.17 41.06 Q 12.84 40.56 12.28 40.41 Q 12.08 39.59 11.53 39.05 L 11.44 38.77 L 11.44 38.3 L 11.34 38.2 L 11.34 11.39 Q 11.55 11.27 11.44 10.83 L 11.62 10.45 L 12 9.98 L 12.19 9.42 L 12.61 9 L 13.17 8.53 L 14.3 8.16 Z M 33.33 17.16 L 33.8 17.16 L 34.55 17.44 L 36.8 19.59 L 39 21.52 L 39.14 21.75 Q 39.57 21.83 39.75 22.17 L 40.08 22.59 L 41.25 23.58 L 41.67 24.09 L 41.91 24.23 L 42 24.52 L 42 25.08 L 41.91 25.36 L 41.58 25.69 Q 41.37 25.62 41.44 25.83 L 40.5 26.67 L 40.36 26.91 L 39.84 27.23 L 39.42 27.75 L 39 28.08 L 38.77 28.41 Q 38.31 28.56 38.06 28.92 Q 38.13 29.13 37.92 29.06 L 36.23 30.66 L 35.67 31.12 L 35.53 31.12 L 35.39 31.41 L 34.27 32.34 Q 33.96 32.27 33.89 32.44 L 33.33 32.44 L 32.62 31.92 L 32.34 31.17 L 32.34 27.42 L 32.11 27.09 L 24.52 27.09 L 24.05 26.91 L 23.53 26.39 L 23.34 25.92 L 23.34 23.77 L 23.62 23.11 L 24.14 22.59 L 24.42 22.5 L 31.55 22.5 L 31.73 22.59 Q 31.8 22.43 32.11 22.5 L 32.34 22.27 L 32.34 18.42 L 32.44 18.33 Q 32.37 17.94 32.53 17.77 L 32.95 17.34 L 33.33 17.16 Z",
173
- ["Notice"]: "M 14.67 11.16 L 16.08 11.16 Q 16.71 11.37 17.06 11.86 L 17.34 12.7 L 17.34 15.8 Q 17.13 15.91 17.25 16.36 L 17.06 16.73 L 16.64 17.16 L 16.08 17.44 L 14.67 17.44 L 14.02 17.16 L 13.69 16.83 L 13.41 16.27 L 13.41 12.42 L 13.59 11.86 L 14.02 11.44 L 14.67 11.16 Z M 32.67 11.16 L 34.08 11.16 Q 34.71 11.37 35.06 11.86 L 35.25 12.23 Q 35.13 12.68 35.34 12.8 L 35.34 15.98 L 35.25 16.08 L 35.16 16.64 L 34.64 17.16 L 34.08 17.44 L 32.67 17.44 L 31.78 17.06 L 31.41 16.17 L 31.41 12.42 L 31.69 11.77 L 32.02 11.44 L 32.67 11.16 Z M 28.64 14.06 L 29.02 14.16 L 29.25 14.39 L 29.34 14.67 L 29.34 17.11 L 30.23 18.75 L 30.75 19.08 L 31.08 19.5 L 32.39 20.06 Q 32.84 19.95 32.95 20.16 L 33.8 20.16 Q 33.91 19.95 34.36 20.06 L 35.91 19.41 L 35.91 19.27 L 36.23 18.84 Q 36.6 18.79 36.75 18.52 L 37.41 16.55 L 37.41 14.58 L 37.73 14.25 L 38.02 14.16 L 38.11 14.25 L 38.48 14.25 L 38.95 14.44 L 40.03 15.42 L 40.5 16.17 L 40.59 16.83 L 40.69 16.92 L 40.69 37.45 L 40.59 37.55 L 40.5 38.2 L 40.22 38.77 L 39.42 39.66 L 38.86 39.84 L 38.02 40.41 L 37.17 40.41 L 37.08 40.5 L 10.92 40.5 L 10.83 40.41 L 10.17 40.41 L 9.89 40.31 Q 9.44 39.82 8.67 39.66 L 8.34 39.33 L 7.78 38.58 L 7.41 37.45 L 7.41 16.83 L 7.78 15.8 L 8.77 14.72 L 9.14 14.44 L 9.7 14.25 Q 10.08 14.34 10.17 14.16 L 11.02 14.16 L 11.25 14.39 L 11.34 14.67 L 11.34 17.11 L 11.53 17.58 L 11.81 17.86 L 12.09 18.42 L 12.09 18.61 L 12.33 18.84 L 13.08 19.5 L 14.11 19.97 L 14.39 20.06 L 14.86 20.06 L 14.95 20.16 L 15.98 20.16 L 16.08 20.06 L 16.64 19.97 L 17.3 19.59 L 17.48 19.59 L 17.91 19.41 L 17.91 19.27 L 18.52 18.66 Q 18.73 18.73 18.66 18.52 L 19.31 17.02 Q 19.2 16.57 19.41 16.45 L 19.41 14.58 L 19.64 14.25 L 19.83 14.16 L 28.55 14.16 L 28.64 14.06 Z M 14.16 24.09 L 13.88 24.19 L 13.22 24.75 L 12.84 25.12 L 12.75 25.41 L 12.75 26.72 L 12.84 26.91 L 13.69 27.66 L 14.25 27.84 L 33.94 27.84 L 34.5 27.66 L 35.25 26.91 L 35.34 26.62 L 35.34 25.5 L 35.16 25.03 L 34.88 24.75 L 34.5 24.47 L 34.5 24.28 L 34.12 24.09 L 14.16 24.09 Z M 13.97 32.06 L 13.41 32.34 L 12.94 32.81 L 12.75 33.28 L 12.75 34.41 L 12.94 34.88 L 13.41 35.25 L 13.97 35.53 L 14.62 35.53 L 14.72 35.62 L 15.28 35.62 L 15.38 35.53 L 34.22 35.53 L 34.88 35.16 L 35.25 34.69 L 35.34 34.41 L 35.34 33.28 L 35.06 32.72 L 34.22 32.06 L 13.97 32.06 Z",
174
- ["Power"]: "M 24.98 6.19 L 26.11 6.19 L 26.95 6.75 L 27.38 7.17 L 27.75 7.83 L 27.75 8.48 L 27.84 8.58 L 27.84 19.45 L 27.75 19.55 L 27.75 20.11 L 27.56 20.58 L 26.86 21.28 L 26.11 21.75 L 24.98 21.75 L 24.42 21.47 L 23.53 20.58 L 23.34 20.11 L 23.34 19.64 L 23.25 19.55 L 23.25 8.48 L 23.34 8.39 L 23.34 7.83 L 23.53 7.45 L 24.14 6.75 L 24.98 6.19 Z M 18.98 9.19 Q 19.34 9.12 19.41 9.33 L 19.5 9.52 L 19.5 14.02 L 19.08 14.53 L 18.61 14.91 L 18.33 15 L 17.25 15.98 L 16.83 16.5 L 16.5 16.73 L 15.28 18.23 L 14.91 18.98 L 14.91 19.17 L 14.44 19.92 L 14.06 21.42 L 13.69 21.98 Q 13.76 22.29 13.59 22.36 L 13.59 23.2 L 13.5 23.3 L 13.5 26.3 L 13.59 26.39 L 13.59 27.23 Q 13.76 27.3 13.69 27.61 L 14.16 28.45 L 14.16 28.73 L 14.25 28.83 L 14.25 29.11 L 14.44 29.67 L 14.72 30.05 L 15.28 31.36 L 16.73 33.09 L 17.25 33.52 L 17.48 33.84 L 18.23 34.5 L 18.52 34.59 L 18.98 35.06 L 19.55 35.34 L 19.73 35.34 L 20.67 35.91 L 22.17 36.28 L 22.73 36.66 Q 23.04 36.59 23.11 36.75 L 23.95 36.75 L 24.05 36.84 L 27.05 36.84 L 27.14 36.75 L 27.98 36.75 Q 28.05 36.59 28.36 36.66 L 28.92 36.28 L 30.42 35.91 L 30.8 35.62 L 32.11 35.06 L 33.84 33.61 L 34.27 33.09 L 34.59 32.86 L 35.25 32.11 L 35.34 31.83 L 35.81 31.36 L 36.09 30.8 L 36.09 30.61 L 36.66 29.67 L 37.03 28.17 L 37.41 27.61 Q 37.34 27.3 37.5 27.23 L 37.5 26.39 L 37.59 26.3 L 37.59 23.3 L 37.5 23.2 L 37.5 22.36 Q 37.34 22.29 37.41 21.98 L 37.03 21.42 L 36.84 20.48 L 36.75 20.39 L 36.75 20.11 L 36.38 19.55 L 35.81 18.23 L 34.36 16.5 L 33.84 16.08 L 33.61 15.75 L 31.69 14.2 L 31.59 14.02 L 31.59 9.52 L 31.83 9.19 L 32.11 9.19 L 32.58 9.66 L 33.42 9.94 L 33.89 10.41 L 34.45 10.59 Q 35.07 11.23 35.91 11.53 Q 35.86 11.8 36.14 11.91 L 36.75 12.33 L 37.08 12.75 L 37.5 12.98 Q 37.58 13.42 37.92 13.59 L 38.25 13.83 L 38.44 14.2 L 39 14.77 Q 39.2 15.37 39.66 15.7 L 39.84 16.27 L 40.41 16.92 L 40.59 17.58 L 41.16 18.33 L 41.25 18.61 L 41.34 19.36 L 41.62 19.92 L 41.81 20.48 L 41.91 21.23 L 42 21.33 L 42 22.08 L 42.09 22.17 L 42.09 23.2 L 42.19 23.3 L 42.19 26.39 L 42.09 26.48 L 42.09 27.52 L 42 27.61 L 42 28.27 Q 41.81 28.36 41.91 28.73 L 41.81 28.83 L 41.81 29.11 L 41.62 29.67 L 41.34 30.23 L 41.16 31.27 L 40.69 31.83 L 40.41 32.67 L 39.84 33.33 L 39.66 33.89 L 39.28 34.27 L 38.81 35.16 Q 38.54 35.11 38.44 35.39 L 38.02 36 L 37.59 36.33 L 37.36 36.75 Q 36.93 36.83 36.75 37.17 L 36.52 37.5 L 36.14 37.69 L 35.58 38.25 L 35.3 38.34 L 34.45 39 L 33.89 39.19 L 33.42 39.66 L 32.77 39.84 L 32.02 40.41 L 31.73 40.5 L 31.36 40.5 L 29.77 41.06 L 29.02 41.16 L 28.92 41.25 L 28.45 41.25 L 28.36 41.34 L 27.33 41.34 L 27.23 41.44 L 23.86 41.44 L 23.77 41.34 L 22.73 41.34 L 22.64 41.25 L 22.17 41.25 L 22.08 41.16 L 21.23 41.06 L 20.11 40.59 L 19.08 40.41 L 18.52 39.94 L 17.86 39.75 L 17.2 39.19 L 16.64 39 Q 16.19 38.51 15.52 38.25 L 14.95 37.69 L 14.34 37.27 L 14.02 36.84 L 13.59 36.61 Q 13.51 36.18 13.17 36 L 12.75 35.67 Q 12.69 35.31 12.42 35.16 Q 12.21 35.23 12.28 35.02 L 11.81 34.27 L 11.44 33.89 L 11.06 33.05 L 10.69 32.67 L 10.41 31.83 L 10.03 31.45 L 9.75 30.61 L 9.75 30.23 L 9.28 29.11 L 9.19 28.36 L 9.09 28.27 L 9.09 27.52 L 9 27.42 L 9 26.48 L 8.91 26.39 L 8.91 23.11 L 9 23.02 L 9 22.08 L 9.09 21.98 L 9.09 21.33 Q 9.28 21.23 9.19 20.86 L 9.28 20.77 L 9.28 20.48 L 9.47 19.92 L 9.66 19.64 L 9.66 19.36 L 9.84 18.98 L 9.94 18.33 L 10.41 17.77 L 10.69 16.92 L 11.25 16.27 L 11.44 15.7 L 13.08 13.59 L 13.5 13.27 L 13.73 12.84 Q 14.17 12.76 14.34 12.42 L 14.58 12.09 Q 15.19 11.86 15.52 11.34 L 15.98 11.16 L 16.36 10.78 L 16.92 10.5 L 17.11 10.5 L 17.67 9.94 L 18.52 9.66 L 18.98 9.19 Z",
175
- ["Repair"]: "M 29.02 9.28 Q 29.39 9.19 29.48 9.38 L 30.7 9.38 Q 30.8 9.56 31.17 9.47 L 31.27 9.56 L 32.67 9.84 L 32.91 10.08 L 33 10.64 Q 32.84 10.71 32.91 11.02 L 32.58 11.34 L 32.25 11.58 L 31.92 12 L 31.5 12.33 L 31.17 12.75 L 30.84 12.98 L 30.61 13.41 L 30.09 13.73 L 29.91 14.16 Q 29.44 14.27 29.16 14.67 L 28.92 15 L 28.69 15.14 L 28.27 15.75 L 27.94 15.98 L 27.66 16.64 Q 27.73 16.95 27.56 17.02 L 27.56 17.58 L 27.47 17.67 L 27.47 20.48 L 27.56 20.58 L 27.56 20.86 L 27.84 21.7 L 28.64 22.5 L 29.2 22.69 L 29.48 22.69 L 29.58 22.78 L 32.86 22.78 L 32.95 22.69 L 33.7 22.59 L 34.17 22.31 L 36.75 19.92 L 37.83 18.66 L 38.16 18.42 L 38.39 18.09 L 39.23 17.34 L 39.89 17.34 L 40.31 17.67 L 40.59 18.42 L 40.59 19.17 L 40.69 19.27 L 40.69 22.36 L 40.59 22.45 L 40.59 23.02 L 40.5 23.11 L 40.5 23.58 L 40.31 24.05 L 40.31 24.33 L 39.84 25.27 L 39.66 26.02 L 39.19 26.48 L 39 26.95 Q 38.44 27.38 38.16 28.08 L 37.17 29.16 L 36.56 29.58 Q 36.63 29.79 36.42 29.72 Q 36.07 30.12 35.48 30.28 L 35.2 30.56 L 34.36 30.94 L 34.17 30.94 L 33.52 31.41 L 32.11 31.69 L 31.83 31.88 L 30.98 32.16 L 29.58 32.16 Q 29.46 32.37 29.02 32.25 L 28.92 32.16 L 27.8 32.16 Q 27.73 31.99 27.42 32.06 L 26.77 31.69 L 26.48 31.69 L 26.02 31.5 L 25.64 31.5 L 24.7 31.03 L 23.86 30.84 Q 23.37 30.67 23.11 30.28 L 22.64 30.09 L 21.47 29.02 Q 21.54 28.8 21.33 28.88 L 20.16 27.61 Q 20.06 27.14 19.69 26.95 L 19.12 25.73 L 19.12 25.45 L 18.84 24.8 L 18.66 23.77 L 18.28 23.11 L 18.19 22.83 L 18.19 22.36 L 18.09 22.27 L 18.09 19.27 L 18.19 19.17 L 18.19 18.61 L 18.28 18.33 L 18.75 17.39 L 18.84 16.64 L 19.5 15.42 L 19.5 15.23 L 19.78 14.67 L 20.16 14.3 Q 20.27 13.76 20.67 13.5 L 21 13.27 Q 21.06 12.9 21.33 12.75 L 22.92 11.44 L 23.58 11.16 L 24.05 10.69 L 24.7 10.5 L 25.64 9.94 L 26.3 9.84 L 26.39 9.75 L 26.86 9.75 L 27.7 9.47 L 28.92 9.38 L 29.02 9.28 Z M 16.73 27 Q 17.25 26.91 17.34 27.23 Q 17.47 27.81 17.91 28.08 L 18.38 29.06 L 18.52 29.06 L 18.84 29.39 L 19.27 30 L 19.59 30.23 L 19.92 30.66 L 20.25 30.89 Q 20.31 31.25 20.58 31.41 L 20.95 31.5 L 21.52 32.06 L 22.55 32.53 L 23.16 33.05 L 23.25 33.42 Q 22.61 34.38 21.75 35.11 L 21.75 35.25 L 21.61 35.25 L 20.34 36.42 L 19.92 36.94 L 19.69 37.08 L 18.75 38.11 L 18.75 38.25 L 18.61 38.25 L 17.34 39.42 L 17.02 39.84 L 16.69 40.08 L 15.42 41.44 L 15 41.77 Q 15.07 41.98 14.86 41.91 L 14.67 42.09 L 14.48 42.09 L 14.11 42.38 L 13.27 42.75 L 12.52 42.75 L 12.42 42.84 L 11.3 42.84 L 11.2 42.75 L 10.64 42.75 L 9.98 42.47 L 9.8 42.28 L 9.14 42 L 8.34 41.3 L 7.69 40.36 L 7.59 39.8 L 7.5 39.7 Q 7.59 39.33 7.41 39.23 L 7.41 37.17 L 7.5 37.08 L 7.59 36.42 L 7.88 35.86 L 8.77 34.69 L 9.19 34.36 L 9.61 33.84 L 10.03 33.52 L 10.17 33.28 L 10.78 32.77 L 10.92 32.53 L 11.34 32.2 L 11.77 31.69 L 12.19 31.36 L 12.61 30.84 L 12.94 30.61 L 13.27 30.19 L 13.69 29.86 L 13.92 29.53 L 14.34 29.2 L 14.77 28.69 L 15.19 28.36 L 15.61 27.84 L 16.03 27.52 L 16.17 27.28 L 16.73 27 Z M 11.16 36.94 L 10.69 37.12 L 10.69 37.31 L 10.03 38.16 L 10.03 39 L 10.22 39.38 L 10.97 40.03 L 11.62 40.31 L 12 40.22 L 12.47 39.94 L 13.03 39.38 L 13.22 38.91 L 13.22 38.06 L 12.66 37.31 L 12.28 36.94 L 11.16 36.94 Z",
176
- ["Settings"]: "M 17.95 8.25 L 18.89 8.25 Q 18.96 8.41 19.27 8.34 L 19.64 8.53 L 20.3 9.09 L 20.58 9.19 L 21.05 9.66 Q 21.81 9.88 22.27 10.41 L 22.83 10.59 L 23.2 10.59 L 23.3 10.69 L 24.7 10.69 Q 24.82 10.48 25.27 10.59 L 25.92 10.31 L 26.2 10.03 L 27.05 9.66 L 27.52 9.19 L 27.8 9.09 L 28.45 8.53 L 28.83 8.34 Q 29.2 8.44 29.3 8.25 L 30.14 8.25 L 30.23 8.34 L 30.7 8.34 L 30.98 8.44 L 31.64 8.91 L 32.48 9.28 L 33.14 9.84 L 33.52 9.94 L 34.08 10.5 Q 34.51 10.58 34.69 10.92 L 35.25 11.58 L 35.34 12.14 L 35.44 12.23 L 35.44 12.61 L 35.53 12.7 L 35.53 13.45 L 35.44 13.55 L 35.44 14.11 L 35.34 14.2 L 35.34 16.55 Q 35.51 16.62 35.44 16.92 Q 35.88 17.42 36.09 18.14 L 36.98 19.03 L 37.73 19.59 L 38.11 19.69 L 38.67 20.16 L 38.86 20.16 L 39.7 20.53 L 40.59 21.33 L 41.25 22.55 L 41.25 23.3 L 41.34 23.39 L 41.34 27.23 L 41.25 27.33 L 41.25 27.89 L 41.06 28.27 L 40.27 29.16 Q 39.46 29.43 38.86 29.91 L 38.02 30.19 L 36.84 31.17 L 36.19 31.92 L 35.34 33.52 L 35.34 36.05 L 35.44 36.14 L 35.44 36.8 Q 35.6 36.87 35.53 37.17 L 35.44 37.27 L 35.34 38.11 L 35.06 38.67 L 34.73 39 L 34.41 39.23 L 34.17 39.56 L 33.61 39.84 L 33.42 39.84 L 33.09 40.17 L 32.95 40.41 Q 32.25 40.59 31.92 41.16 L 31.08 41.53 L 30.52 41.72 L 30.14 41.72 L 30.05 41.81 L 29.39 41.81 Q 29.32 41.65 29.02 41.72 L 28.36 41.34 L 28.17 41.34 L 27.52 40.69 L 27.23 40.59 L 26.39 39.84 L 25.73 39.66 L 25.08 39.28 Q 24.63 39.4 24.52 39.19 L 23.58 39.19 L 23.48 39.28 L 22.83 39.38 L 21.61 39.94 L 21.14 40.41 L 20.58 40.69 L 20.25 41.02 L 20.11 41.25 Q 19.47 41.36 19.08 41.72 Q 18.77 41.65 18.7 41.81 L 18.05 41.81 L 17.95 41.72 L 17.3 41.62 L 17.02 41.44 L 16.17 41.16 L 15.61 40.59 L 15 40.27 L 14.77 39.94 Q 13.59 39.52 12.94 38.58 L 12.66 37.73 L 12.66 37.27 L 12.56 36.98 L 12.66 36.89 L 12.66 36.23 L 12.75 36.14 L 12.75 34.64 L 12.84 34.36 L 12.75 34.27 L 12.75 33.52 L 12.66 33.23 Q 12.14 32.72 11.91 31.92 L 10.83 30.75 Q 10.34 30.58 10.08 30.19 L 9.42 30 L 7.83 29.16 L 7.5 28.83 L 7.03 28.27 L 6.84 27.89 Q 6.96 27.45 6.75 27.33 L 6.75 23.2 L 6.84 23.11 L 6.84 22.55 L 6.94 22.27 L 7.5 21.33 L 7.83 21 L 8.39 20.53 L 9.23 20.25 L 9.98 19.69 L 10.55 19.5 L 12 18.14 L 12.75 16.64 L 12.75 14.2 L 12.66 14.11 L 12.66 13.55 L 12.56 13.45 L 12.56 12.61 L 12.66 12.52 L 12.84 11.58 L 13.73 10.59 L 14.34 10.27 L 14.58 9.94 L 15.23 9.66 L 15.61 9.28 L 16.64 8.81 L 16.83 8.62 L 17.39 8.34 Q 17.84 8.46 17.95 8.25 Z M 23.06 18.19 L 21.09 18.84 L 20.25 19.5 L 19.97 19.59 L 19.5 20.16 L 19.31 20.25 L 18.94 20.62 L 18 22.03 L 17.91 22.5 L 17.34 23.53 L 17.34 24.28 L 17.25 24.38 L 17.25 25.69 L 17.34 25.78 L 17.34 26.44 Q 17.53 26.44 17.44 26.81 L 17.91 27.47 L 18.19 28.41 L 18.75 28.97 L 18.84 29.25 Q 19.59 30.09 20.62 30.75 L 21.38 30.94 L 22.22 31.5 Q 22.5 31.41 22.69 31.59 L 25.31 31.59 Q 25.41 31.41 25.88 31.5 L 27.09 30.84 L 27.66 30.66 L 28.41 30.09 L 29.25 29.25 L 29.34 28.97 L 30 28.31 L 30.09 27.75 L 30.75 26.62 L 30.75 25.88 L 30.84 25.78 L 30.84 24.28 L 30.75 24.19 L 30.75 23.53 Q 30.56 23.44 30.66 23.16 L 30.09 22.22 L 29.91 21.66 L 29.25 20.91 L 29.16 20.62 L 28.88 20.34 L 28.59 20.06 L 27.47 19.03 L 26.62 18.66 L 26.34 18.66 L 25.59 18.28 Q 25.12 18.38 25.12 18.19 L 23.06 18.19 Z"
1532
+ ["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",
1533
+ ["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",
1534
+ ["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",
1535
+ ["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",
1536
+ ["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"
177
1537
  };
178
1538
  //#endregion
179
1539
  //#region src/components/RoundButton/Index.vue
180
- const _hoisted_1$2 = ["aria-label"];
181
- const _hoisted_2$2 = ["viewBox"];
182
- const _hoisted_3$2 = ["d"];
183
- const _hoisted_4$1 = [
1540
+ const _hoisted_1$4 = ["aria-label"];
1541
+ const _hoisted_2$4 = ["viewBox"];
1542
+ const _hoisted_3$4 = ["d"];
1543
+ const _hoisted_4$3 = [
184
1544
  "cx",
185
1545
  "cy",
186
1546
  "r",
187
1547
  "stroke-width"
188
1548
  ];
189
- var Index_default$5 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
1549
+ var Index_default$20 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
190
1550
  __name: "Index",
191
1551
  props: {
192
1552
  icon: {},
@@ -194,84 +1554,368 @@ var Index_default$5 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ define
194
1554
  },
195
1555
  setup(__props) {
196
1556
  return (_ctx, _cache) => {
197
- return openBlock(), createElementBlock(Fragment, null, [
198
- 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 "),
199
- createCommentVNode(" Centred on its ink, as the game centres each icon's sprite "),
200
- createElementVNode("button", {
201
- class: "round-button",
202
- "aria-label": __props.label,
203
- type: "button"
204
- }, [(openBlock(), createElementBlock("svg", {
205
- class: "glyph",
206
- viewBox: `${unref(InterfaceIconCentreMap)[__props.icon][0] - 24} ${unref(InterfaceIconCentreMap)[__props.icon][1] - 24} 48 48`,
207
- "aria-hidden": "true"
208
- }, [createElementVNode("path", {
209
- d: unref(InterfaceIconPathMap)[__props.icon],
210
- "fill-rule": "evenodd"
211
- }, null, 8, _hoisted_3$2), __props.icon === unref(InterfaceIcon).Settings ? (openBlock(), createElementBlock("circle", {
212
- key: 0,
213
- cx: unref(SETTINGS_RING_CENTRE)[0],
214
- cy: unref(SETTINGS_RING_CENTRE)[1],
215
- r: unref(SETTINGS_RING_RADIUS),
216
- class: "ring",
217
- "stroke-width": unref(SETTINGS_RING_WIDTH)
218
- }, null, 8, _hoisted_4$1)) : createCommentVNode("v-if", true)], 8, _hoisted_2$2))], 8, _hoisted_1$2)
219
- ], 2112);
1557
+ 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 "), createElementVNode("button", {
1558
+ class: "round-button",
1559
+ "aria-label": __props.label,
1560
+ type: "button"
1561
+ }, [(openBlock(), createElementBlock("svg", {
1562
+ class: "glyph",
1563
+ viewBox: `${unref(InterfaceIconCentreMap)[__props.icon][0] - 24} ${unref(InterfaceIconCentreMap)[__props.icon][1] - 24} 48 48`,
1564
+ "aria-hidden": "true"
1565
+ }, [createElementVNode("path", {
1566
+ d: unref(InterfaceIconPathMap)[__props.icon],
1567
+ "fill-rule": "evenodd"
1568
+ }, null, 8, _hoisted_3$4), __props.icon === unref(InterfaceIcon).Settings ? (openBlock(), createElementBlock("circle", {
1569
+ key: 0,
1570
+ cx: unref(SETTINGS_RING_CENTRE)[0],
1571
+ cy: unref(SETTINGS_RING_CENTRE)[1],
1572
+ r: unref(SETTINGS_RING_RADIUS),
1573
+ class: "ring",
1574
+ "stroke-width": unref(SETTINGS_RING_WIDTH)
1575
+ }, null, 8, _hoisted_4$3)) : createCommentVNode("v-if", true)], 8, _hoisted_2$4))], 8, _hoisted_1$4)], 2112);
220
1576
  };
221
1577
  }
222
- }), [["__scopeId", "data-v-01b33b3e"]]);
223
- //#endregion
224
- //#region src/services/ServerMarkPath.ts
225
- const SERVER_MARK_DIAMOND_PATH = "M 23.44 6.62 L 24.44 7.25 L 25.88 8.56 L 26.31 9.12 L 28 10.56 L 28.56 11.25 L 28.88 11.44 L 29.44 12.12 L 30.25 12.81 Q 30.16 13.09 30.44 13 L 32.19 15 L 32.69 15.38 L 32.88 15.38 L 32.88 15.56 L 33.5 16.31 L 36.44 19.25 L 37.12 19.81 L 38.44 21.25 L 38.88 21.56 L 39.44 22.25 L 39.88 22.56 L 40.56 23.38 Q 40.84 23.28 40.75 23.56 Q 41.29 23.84 41.12 24.81 L 39.94 26.12 L 38.88 27.06 L 38.06 28 L 35.88 30.06 L 31.56 34.62 L 30.88 35.06 L 27.81 38.25 L 26.88 39.06 L 24.44 41.62 L 23.94 41.88 L 23.06 41.88 L 22.69 41.75 L 22.25 41.31 L 21.69 40.62 Q 21.41 40.72 21.5 40.44 L 19.12 38.19 L 18.94 37.88 L 18.25 37.31 L 17.69 36.62 L 17.38 36.44 L 17.19 36.12 L 16.25 35.44 L 15.56 34.62 Q 15.28 34.72 15.38 34.44 L 13.06 32 L 10.25 29.44 L 8.81 27.88 L 8.12 27.31 L 6.12 25.19 L 5.75 24.69 L 5.75 24.19 L 6 23.69 L 7.69 22 Q 7.97 22.09 7.88 21.81 Q 8.31 21.66 8.25 21.25 L 8.44 21.25 L 8.94 20.88 L 11 18.81 L 11.12 18.38 L 11.31 18.38 L 12.12 17.69 L 12.81 16.88 L 13.12 16.69 L 14.31 15.38 L 15.12 14.69 L 15.31 14.38 L 16.12 13.69 L 16.44 13.12 L 17 12.88 L 17 12.69 L 17.56 12.12 L 18.12 11.69 L 18.44 11.25 L 19.12 10.69 L 19.56 10.12 L 20.12 9.69 L 20.38 9.12 L 20.56 9.12 L 22.69 7.12 L 23.44 6.62 Z";
226
- const SERVER_MARK_TICK_PATH = "M 30.12 16.88 L 29.88 17 L 29.5 17.62 L 27 20.25 L 25.25 21.88 L 24 23.25 L 23.75 23.75 L 23.62 23.75 L 22.75 24.62 Q 22.88 24.88 22.62 24.75 L 21.88 25.62 L 20.62 26.62 L 20.25 26.5 L 19.62 26 L 19.12 25.5 L 18.62 25 L 18.12 24.5 L 16.75 23.25 L 16 23 L 15.62 23 L 15 23.25 Q 14.25 23.62 14 24.5 L 14 25.62 L 14.25 26.25 L 14.75 26.88 L 15.12 27 L 17.75 30 L 18.25 30.75 L 19.88 32 L 20.88 32 L 21.88 31.25 L 22.25 30.75 L 22.88 30.25 L 23.25 29.75 L 23.88 29.25 L 24.38 28.62 L 24.75 28.38 L 25.38 27.62 L 25.88 27.25 L 26.25 26.75 L 26.88 26.25 L 27.12 25.88 L 28 25.12 L 28.38 24.5 L 28.88 24.12 L 29.25 23.62 L 29.62 23.38 Q 30 23 30.25 22.5 L 31 22 L 31.12 21.75 L 31.88 21.12 L 33 20 Q 33.25 19.75 33.12 19.25 L 33.25 19.12 L 33.12 18.38 L 32.62 17.75 L 31.88 17 Q 31.25 17.12 31.25 16.88 L 30.12 16.88 Z";
1578
+ }), [["__scopeId", "data-v-e1ab12d3"]]);
227
1579
  //#endregion
228
1580
  //#region src/components/ServerBar/Index.vue
229
- const _hoisted_1$1 = { class: "server-bar" };
230
- const _hoisted_2$1 = {
1581
+ const _hoisted_1$3 = { class: "server-bar" };
1582
+ const _hoisted_2$3 = {
231
1583
  class: "mark",
232
1584
  viewBox: "0 0 46 46",
233
1585
  "aria-hidden": "true"
234
1586
  };
235
- const _hoisted_3$1 = ["d"];
236
- const _hoisted_4 = ["d"];
237
- const _hoisted_5 = { class: "name" };
238
- var Index_default$6 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
1587
+ const _hoisted_3$3 = ["d"];
1588
+ const _hoisted_4$2 = ["d"];
1589
+ const _hoisted_5$2 = { class: "name" };
1590
+ var Index_default$21 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
239
1591
  __name: "Index",
240
1592
  props: { name: {} },
241
1593
  setup(__props) {
242
1594
  return (_ctx, _cache) => {
243
- return openBlock(), createElementBlock(Fragment, null, [
244
- createCommentVNode(" The bar naming the chosen server, 456 by 75 units: a dark glass slab with a faint rim, the ticked diamond at its "),
245
- createCommentVNode(" Left and the server's name at its middle, measured from the English client's login screen at 1080 high "),
246
- createElementVNode("div", _hoisted_1$1, [(openBlock(), createElementBlock("svg", _hoisted_2$1, [createElementVNode("path", {
247
- class: "diamond",
248
- d: unref(SERVER_MARK_DIAMOND_PATH)
249
- }, null, 8, _hoisted_3$1), createElementVNode("path", {
250
- class: "tick",
251
- d: unref(SERVER_MARK_TICK_PATH)
252
- }, null, 8, _hoisted_4)])), createElementVNode("p", _hoisted_5, toDisplayString(__props.name), 1)])
253
- ], 2112);
1595
+ 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$3, [(openBlock(), createElementBlock("svg", _hoisted_2$3, [createElementVNode("path", {
1596
+ class: "diamond",
1597
+ d: unref(SERVER_MARK_DIAMOND_PATH)
1598
+ }, null, 8, _hoisted_3$3), createElementVNode("path", {
1599
+ class: "tick",
1600
+ d: unref(SERVER_MARK_TICK_PATH)
1601
+ }, null, 8, _hoisted_4$2)])), createElementVNode("p", _hoisted_5$2, toDisplayString(__props.name), 1)])], 2112);
254
1602
  };
255
1603
  }
256
- }), [["__scopeId", "data-v-deaec8b8"]]);
1604
+ }), [["__scopeId", "data-v-6b68b3eb"]]);
257
1605
  //#endregion
258
1606
  //#region src/components/ToastNotice/Index.vue
259
- const _sfc_main = {};
260
- const _hoisted_1 = {
1607
+ const _sfc_main$3 = {};
1608
+ const _hoisted_1$2 = {
261
1609
  class: "toast-notice",
262
1610
  role: "status"
263
1611
  };
264
- const _hoisted_2 = { class: "mark" };
265
- const _hoisted_3 = { class: "text" };
1612
+ const _hoisted_2$2 = { class: "mark" };
1613
+ const _hoisted_3$2 = { class: "text" };
266
1614
  function _sfc_render(_ctx, _cache) {
267
- return openBlock(), createElementBlock(Fragment, null, [
268
- createCommentVNode(" The game's notice card, dropped at the top of a screen: white with rounded corners, 107 units high and at least "),
269
- createCommentVNode(" 537 across, a round mark at its left and its words in the game's near black. Measured from a 1440 high "),
270
- createCommentVNode(" Recording of the welcome the login screen shows "),
271
- createElementVNode("div", _hoisted_1, [createElementVNode("span", _hoisted_2, [renderSlot(_ctx.$slots, "mark", {}, void 0, true)]), createElementVNode("p", _hoisted_3, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])])
272
- ], 2112);
1615
+ 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$2, [createElementVNode("span", _hoisted_2$2, [renderSlot(_ctx.$slots, "mark", {}, void 0, true)]), createElementVNode("p", _hoisted_3$2, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])])], 2112);
273
1616
  }
274
- var Index_default$7 = /*#__PURE__*/ export_helper_default(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-8ae84baf"]]);
1617
+ var Index_default$22 = /*#__PURE__*/ export_helper_default(_sfc_main$3, [["render", _sfc_render], ["__scopeId", "data-v-a09dfb40"]]);
1618
+ //#endregion
1619
+ //#region src/components/WishDetails/Index.vue
1620
+ const _hoisted_1$1 = ["aria-label"];
1621
+ const _hoisted_2$1 = { class: "panel" };
1622
+ const _hoisted_3$1 = { class: "title" };
1623
+ const _hoisted_4$1 = ["aria-label"];
1624
+ const _hoisted_5$1 = { class: "pool" };
1625
+ const _hoisted_6$1 = { class: "stars" };
1626
+ const _hoisted_7$1 = { class: "pool-items" };
1627
+ const _hoisted_8$1 = ["data-featured"];
1628
+ const _hoisted_9$1 = {
1629
+ key: 0,
1630
+ class: "path"
1631
+ };
1632
+ const _hoisted_10$1 = { class: "fate-points" };
1633
+ var Index_default$24 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
1634
+ __name: "Index",
1635
+ props: {
1636
+ closeLabel: {},
1637
+ fatePoints: {},
1638
+ pathLabel: {},
1639
+ pool: {},
1640
+ title: {}
1641
+ },
1642
+ emits: ["close"],
1643
+ setup(__props, { emit: __emit }) {
1644
+ const emit = __emit;
1645
+ const poolRarityCellsMap = computed(() => Map.groupBy(__props.pool, ({ rarity }) => rarity));
1646
+ return (_ctx, _cache) => {
1647
+ 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", {
1648
+ class: "wish-details",
1649
+ role: "dialog",
1650
+ "aria-label": __props.title
1651
+ }, [createElementVNode("div", _hoisted_2$1, [
1652
+ createElementVNode("p", _hoisted_3$1, toDisplayString(__props.title), 1),
1653
+ createElementVNode("button", {
1654
+ class: "close",
1655
+ type: "button",
1656
+ "aria-label": __props.closeLabel,
1657
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
1658
+ }, "✕", 8, _hoisted_4$1),
1659
+ createElementVNode("ul", _hoisted_5$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(poolRarityCellsMap.value, ([rarity, cells]) => {
1660
+ return openBlock(), createElementBlock("li", {
1661
+ key: rarity,
1662
+ class: "pool-rarity"
1663
+ }, [createElementVNode("span", _hoisted_6$1, toDisplayString("★".repeat(rarity)), 1), createElementVNode("ul", _hoisted_7$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(cells, ({ id, isFeatured, name }) => {
1664
+ return openBlock(), createElementBlock("li", {
1665
+ key: id,
1666
+ class: "pool-item",
1667
+ "data-featured": isFeatured
1668
+ }, toDisplayString(name), 9, _hoisted_8$1);
1669
+ }), 128))])]);
1670
+ }), 128))]),
1671
+ __props.pathLabel ? (openBlock(), createElementBlock("p", _hoisted_9$1, [createTextVNode(toDisplayString(__props.pathLabel) + " ", 1), createElementVNode("span", _hoisted_10$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.fatePoints, ({ color, text }, index) => {
1672
+ return openBlock(), createElementBlock("span", {
1673
+ key: index,
1674
+ style: normalizeStyle({ color })
1675
+ }, toDisplayString(text), 5);
1676
+ }), 128))])])) : createCommentVNode("v-if", true)
1677
+ ])], 8, _hoisted_1$1)], 2112);
1678
+ };
1679
+ }
1680
+ }), [["__scopeId", "data-v-4fcea975"]]);
1681
+ //#endregion
1682
+ //#region src/components/WishScreen/Index.vue
1683
+ const _hoisted_1 = { class: "wish-screen" };
1684
+ const _hoisted_2 = {
1685
+ class: "title",
1686
+ role: "heading",
1687
+ "aria-level": "1"
1688
+ };
1689
+ const _hoisted_3 = { class: "banners" };
1690
+ const _hoisted_4 = { class: "currencies" };
1691
+ const _hoisted_5 = { class: "currency-name" };
1692
+ const _hoisted_6 = {
1693
+ key: 0,
1694
+ class: "card"
1695
+ };
1696
+ const _hoisted_7 = { class: "tag" };
1697
+ const _hoisted_8 = { class: "card-title" };
1698
+ const _hoisted_9 = { class: "probability" };
1699
+ const _hoisted_10 = { class: "rate-up" };
1700
+ const _hoisted_11 = {
1701
+ key: 0,
1702
+ class: "featured"
1703
+ };
1704
+ const _hoisted_12 = { class: "featured-name" };
1705
+ const _hoisted_13 = { class: "stars" };
1706
+ const _hoisted_14 = { class: "featured-title" };
1707
+ const _hoisted_15 = { class: "links" };
1708
+ const _hoisted_16 = {
1709
+ key: 1,
1710
+ class: "path"
1711
+ };
1712
+ const _hoisted_17 = { class: "fate-points" };
1713
+ const _hoisted_18 = {
1714
+ key: 2,
1715
+ class: "sets"
1716
+ };
1717
+ const _hoisted_19 = { class: "set-label" };
1718
+ const _hoisted_20 = { class: "cost" };
1719
+ const _hoisted_21 = { class: "set-label" };
1720
+ const _hoisted_22 = { class: "cost" };
1721
+ const _hoisted_23 = { class: "result-list" };
1722
+ const _hoisted_24 = ["data-capturing-radiance", "data-rarity"];
1723
+ const _hoisted_25 = { class: "result-name" };
1724
+ const _hoisted_26 = { class: "stars" };
1725
+ const _hoisted_27 = { class: "result-return" };
1726
+ var Index_default$25 = /*#__PURE__*/ export_helper_default(/* @__PURE__ */ defineComponent({
1727
+ __name: "Index",
1728
+ props: /*@__PURE__*/ mergeModels({
1729
+ backLabel: {},
1730
+ bannerCard: {},
1731
+ bannerKinds: {},
1732
+ bannerLabels: {},
1733
+ currencies: {},
1734
+ detailsLabel: {},
1735
+ fatePoints: {},
1736
+ historyLabel: {},
1737
+ pathLabel: {},
1738
+ pool: {},
1739
+ probabilityLabel: {},
1740
+ purchases: {},
1741
+ results: {},
1742
+ sets: {},
1743
+ shopLabel: {},
1744
+ title: {}
1745
+ }, {
1746
+ "bannerKind": {},
1747
+ "bannerKindModifiers": {}
1748
+ }),
1749
+ emits: /*@__PURE__*/ mergeModels([
1750
+ "buy",
1751
+ "close",
1752
+ "dismiss",
1753
+ "wish"
1754
+ ], ["update:bannerKind"]),
1755
+ setup(__props, { emit: __emit }) {
1756
+ const bannerKind = useModel(__props, "bannerKind");
1757
+ const emit = __emit;
1758
+ const isDetailsOpen = ref(false);
1759
+ const featuredCell = computed(() => __props.pool.find(({ isFeatured, rarity }) => isFeatured && rarity === 5));
1760
+ const getBannerLabel = (kind) => __props.bannerLabels[kind].map(({ text }) => text).join("");
1761
+ const bannerLabelText = computed(() => bannerKind.value && getBannerLabel(bannerKind.value));
1762
+ return (_ctx, _cache) => {
1763
+ 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, [
1764
+ createElementVNode("p", _hoisted_2, toDisplayString(__props.title), 1),
1765
+ createElementVNode("ul", _hoisted_3, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.bannerKinds, (kind) => {
1766
+ return openBlock(), createElementBlock("li", { key: kind }, [createVNode(Index_default$10, {
1767
+ class: "banner",
1768
+ "aria-label": getBannerLabel(kind),
1769
+ "aria-pressed": kind === bannerKind.value,
1770
+ kind: unref(GameButtonKind).Row,
1771
+ onClick: ($event) => bannerKind.value = kind
1772
+ }, null, 8, [
1773
+ "aria-label",
1774
+ "aria-pressed",
1775
+ "kind",
1776
+ "onClick"
1777
+ ])]);
1778
+ }), 128))]),
1779
+ createElementVNode("ul", _hoisted_4, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.currencies, ({ id, name, quantity }) => {
1780
+ return openBlock(), createElementBlock("li", {
1781
+ key: id,
1782
+ class: "currency"
1783
+ }, [createElementVNode("span", _hoisted_5, toDisplayString(name), 1), createTextVNode(" " + toDisplayString(quantity), 1)]);
1784
+ }), 128))]),
1785
+ createVNode(Index_default$10, {
1786
+ class: "back",
1787
+ "aria-label": __props.backLabel,
1788
+ kind: unref(GameButtonKind).Plain,
1789
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
1790
+ }, {
1791
+ default: withCtx(() => [..._cache[5] || (_cache[5] = [createTextVNode("✕", -1)])]),
1792
+ _: 1
1793
+ }, 8, ["aria-label", "kind"]),
1794
+ __props.bannerCard && bannerLabelText.value ? (openBlock(), createElementBlock("section", _hoisted_6, [
1795
+ createElementVNode("p", _hoisted_7, toDisplayString(bannerLabelText.value), 1),
1796
+ createElementVNode("p", _hoisted_8, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.bannerCard.title, ({ color, text }, index) => {
1797
+ return openBlock(), createElementBlock("span", {
1798
+ key: index,
1799
+ style: normalizeStyle({ color })
1800
+ }, toDisplayString(text), 5);
1801
+ }), 128))]),
1802
+ createElementVNode("p", _hoisted_9, toDisplayString(__props.probabilityLabel), 1),
1803
+ createElementVNode("p", _hoisted_10, toDisplayString(__props.bannerCard.rateUp), 1),
1804
+ featuredCell.value ? (openBlock(), createElementBlock("div", _hoisted_11, [
1805
+ createElementVNode("p", _hoisted_12, toDisplayString(featuredCell.value.name), 1),
1806
+ createElementVNode("p", _hoisted_13, toDisplayString("★".repeat(featuredCell.value.rarity)), 1),
1807
+ createElementVNode("p", _hoisted_14, toDisplayString(__props.bannerCard.featuredTitle), 1)
1808
+ ])) : createCommentVNode("v-if", true)
1809
+ ])) : createCommentVNode("v-if", true),
1810
+ createElementVNode("div", _hoisted_15, [
1811
+ createVNode(Index_default$10, {
1812
+ class: "link",
1813
+ kind: unref(GameButtonKind).Reply
1814
+ }, {
1815
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.shopLabel), 1)]),
1816
+ _: 1
1817
+ }, 8, ["kind"]),
1818
+ createVNode(Index_default$10, {
1819
+ class: "link",
1820
+ kind: unref(GameButtonKind).Reply,
1821
+ onClick: _cache[1] || (_cache[1] = ($event) => isDetailsOpen.value = true)
1822
+ }, {
1823
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.detailsLabel), 1)]),
1824
+ _: 1
1825
+ }, 8, ["kind"]),
1826
+ createVNode(Index_default$10, {
1827
+ class: "link",
1828
+ kind: unref(GameButtonKind).Reply
1829
+ }, {
1830
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.historyLabel), 1)]),
1831
+ _: 1
1832
+ }, 8, ["kind"])
1833
+ ]),
1834
+ __props.pathLabel ? (openBlock(), createElementBlock("p", _hoisted_16, [createTextVNode(toDisplayString(__props.pathLabel) + " ", 1), createElementVNode("span", _hoisted_17, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.fatePoints, ({ color, text }, index) => {
1835
+ return openBlock(), createElementBlock("span", {
1836
+ key: index,
1837
+ style: normalizeStyle({ color })
1838
+ }, toDisplayString(text), 5);
1839
+ }), 128))])])) : createCommentVNode("v-if", true),
1840
+ bannerKind.value ? (openBlock(), createElementBlock("div", _hoisted_18, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.sets, ({ cost, count, isAffordable, label }) => {
1841
+ return openBlock(), createBlock(Index_default$10, {
1842
+ key: count,
1843
+ class: "set",
1844
+ disabled: !isAffordable,
1845
+ kind: unref(GameButtonKind).Pill,
1846
+ onClick: ($event) => emit("wish", count)
1847
+ }, {
1848
+ default: withCtx(() => [createElementVNode("span", _hoisted_19, toDisplayString(label), 1), createElementVNode("span", _hoisted_20, toDisplayString(cost), 1)]),
1849
+ _: 2
1850
+ }, 1032, [
1851
+ "disabled",
1852
+ "kind",
1853
+ "onClick"
1854
+ ]);
1855
+ }), 128)), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.purchases, ({ cost, isAffordable, label }) => {
1856
+ return openBlock(), createBlock(Index_default$10, {
1857
+ key: label,
1858
+ class: "set",
1859
+ disabled: !isAffordable,
1860
+ kind: unref(GameButtonKind).Pill,
1861
+ onClick: _cache[2] || (_cache[2] = ($event) => emit("buy"))
1862
+ }, {
1863
+ default: withCtx(() => [createElementVNode("span", _hoisted_21, toDisplayString(label), 1), createElementVNode("span", _hoisted_22, toDisplayString(cost), 1)]),
1864
+ _: 2
1865
+ }, 1032, ["disabled", "kind"]);
1866
+ }), 128))])) : createCommentVNode("v-if", true),
1867
+ isDetailsOpen.value ? (openBlock(), createBlock(Index_default$24, {
1868
+ key: 3,
1869
+ "close-label": __props.backLabel,
1870
+ "fate-points": __props.fatePoints,
1871
+ "path-label": __props.pathLabel,
1872
+ pool: __props.pool,
1873
+ title: __props.detailsLabel,
1874
+ onClose: _cache[3] || (_cache[3] = ($event) => isDetailsOpen.value = false)
1875
+ }, null, 8, [
1876
+ "close-label",
1877
+ "fate-points",
1878
+ "path-label",
1879
+ "pool",
1880
+ "title"
1881
+ ])) : createCommentVNode("v-if", true),
1882
+ __props.results.length > 0 ? (openBlock(), createElementBlock("div", {
1883
+ key: 4,
1884
+ class: "results",
1885
+ onClick: _cache[4] || (_cache[4] = ($event) => emit("dismiss"))
1886
+ }, [createElementVNode("ul", _hoisted_23, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.results, ({ isCapturingRadiance, name, rarity, wishReturn }, index) => {
1887
+ return openBlock(), createElementBlock("li", {
1888
+ key: index,
1889
+ class: "result",
1890
+ "data-capturing-radiance": isCapturingRadiance,
1891
+ "data-rarity": rarity
1892
+ }, [
1893
+ createElementVNode("span", _hoisted_25, toDisplayString(name), 1),
1894
+ createElementVNode("span", _hoisted_26, toDisplayString("★".repeat(rarity)), 1),
1895
+ createElementVNode("span", _hoisted_27, toDisplayString(wishReturn), 1)
1896
+ ], 8, _hoisted_24);
1897
+ }), 128))])])) : createCommentVNode("v-if", true)
1898
+ ])], 2112);
1899
+ };
1900
+ }
1901
+ }), [["__scopeId", "data-v-fe40ca36"]]);
1902
+ //#endregion
1903
+ //#region src/models/InteractionKind.ts
1904
+ let InteractionKind = /* @__PURE__ */ function(InteractionKind) {
1905
+ InteractionKind["Activate"] = "Activate";
1906
+ InteractionKind["Open"] = "Open";
1907
+ InteractionKind["PickUp"] = "PickUp";
1908
+ InteractionKind["Read"] = "Read";
1909
+ InteractionKind["Talk"] = "Talk";
1910
+ return InteractionKind;
1911
+ }({});
1912
+ //#endregion
1913
+ //#region src/models/InteractionState.ts
1914
+ let InteractionState = /* @__PURE__ */ function(InteractionState) {
1915
+ InteractionState["Hover"] = "Hover";
1916
+ InteractionState["Pressed"] = "Pressed";
1917
+ return InteractionState;
1918
+ }({});
275
1919
  //#endregion
276
1920
  //#region src/models/InterfaceClipProperty.ts
277
1921
  let InterfaceClipProperty = /* @__PURE__ */ function(InterfaceClipProperty) {
@@ -281,29 +1925,37 @@ let InterfaceClipProperty = /* @__PURE__ */ function(InterfaceClipProperty) {
281
1925
  InterfaceClipProperty["Y"] = "y";
282
1926
  return InterfaceClipProperty;
283
1927
  }({});
1928
+ const InterfaceClipProperties = Object.values(InterfaceClipProperty);
284
1929
  //#endregion
285
1930
  //#region src/models/reference/GameSourceKind.ts
286
1931
  let GameSourceKind = /* @__PURE__ */ function(GameSourceKind) {
287
1932
  GameSourceKind["AnimationClip"] = "AnimationClip";
1933
+ GameSourceKind["Avatar"] = "Avatar";
1934
+ GameSourceKind["BinaryData"] = "MiHoYoBinData";
288
1935
  GameSourceKind["Capture"] = "Capture";
1936
+ GameSourceKind["DataTable"] = "DataTable";
1937
+ GameSourceKind["GameObject"] = "GameObject";
289
1938
  GameSourceKind["Material"] = "Material";
290
1939
  GameSourceKind["Mesh"] = "Mesh";
291
1940
  GameSourceKind["MonoBehaviour"] = "MonoBehaviour";
292
1941
  GameSourceKind["RectTransform"] = "RectTransform";
293
1942
  GameSourceKind["Shader"] = "Shader";
1943
+ GameSourceKind["Sound"] = "Sound";
1944
+ GameSourceKind["TerrainData"] = "TerrainData";
294
1945
  GameSourceKind["Texture"] = "Texture";
295
1946
  GameSourceKind["Transform"] = "Transform";
296
1947
  return GameSourceKind;
297
1948
  }({});
298
1949
  //#endregion
299
- //#region src/services/computeRectOffsets.ts
300
- const computeRectOffsets = ({ pivot, position, size }) => {
301
- const offsetMin = [position[0] - size[0] * pivot[0], position[1] - size[1] * pivot[1]];
302
- return {
303
- offsetMax: [offsetMin[0] + size[0], offsetMin[1] + size[1]],
304
- offsetMin
305
- };
306
- };
1950
+ //#region src/models/reference/InvestigationOutcome.ts
1951
+ let InvestigationOutcome = /* @__PURE__ */ function(InvestigationOutcome) {
1952
+ InvestigationOutcome["Adopted"] = "Adopted";
1953
+ InvestigationOutcome["DeadEnd"] = "DeadEnd";
1954
+ InvestigationOutcome["Found"] = "Found";
1955
+ InvestigationOutcome["Rejected"] = "Rejected";
1956
+ InvestigationOutcome["Superseded"] = "Superseded";
1957
+ return InvestigationOutcome;
1958
+ }({});
307
1959
  //#endregion
308
1960
  //#region src/services/playInterfaceClip.ts
309
1961
  const InterfaceClipPropertyKeyframeMap = {
@@ -325,10 +1977,10 @@ const playInterfaceClip = (root, { durationMs, tracks }) => tracks.flatMap(({ ke
325
1977
  })];
326
1978
  });
327
1979
  //#endregion
328
- //#region src/services/readInterfaceClip.ts
329
- const PROPERTIES = Object.values(InterfaceClipProperty);
330
- const checkIsProperty = (property) => PROPERTIES.includes(property);
331
- const readInterfaceClip = ({ durationMs, tracks }) => ({
1980
+ //#region src/services/toInterfaceClip.ts
1981
+ const INTERFACE_CLIP_PROPERTY_NAMES = InterfaceClipProperties;
1982
+ const checkIsProperty = (property) => INTERFACE_CLIP_PROPERTY_NAMES.includes(property);
1983
+ const toInterfaceClip = ({ durationMs, tracks }) => ({
332
1984
  durationMs,
333
1985
  tracks: tracks.flatMap(({ keyframes, property, target }) => checkIsProperty(property) ? [{
334
1986
  keyframes: keyframes.map(([offset = 0, value = 0]) => [offset, value]),
@@ -337,20 +1989,4 @@ const readInterfaceClip = ({ durationMs, tracks }) => ({
337
1989
  }] : [])
338
1990
  });
339
1991
  //#endregion
340
- //#region src/services/toCanvasRectStyle.ts
341
- const toAxis = (anchorMin, anchorMax, offsetMin, size, span, start) => [`calc(${start} + ${anchorMin} * ${span} + ${offsetMin} * var(--canvas-unit))`, `calc(${anchorMax - anchorMin} * ${span} + ${size} * var(--canvas-unit))`];
342
- const toCanvasRectStyle = (rect, isOnCanvas = false) => {
343
- const { anchorMax, anchorMin, size } = rect;
344
- const { offsetMin } = computeRectOffsets(rect);
345
- const [left, width] = toAxis(anchorMin[0], anchorMax[0], offsetMin[0], size[0], isOnCanvas ? "(100% - 2 * var(--canvas-inset))" : "100%", isOnCanvas ? "var(--canvas-inset)" : "0px");
346
- const [bottom, height] = toAxis(anchorMin[1], anchorMax[1], offsetMin[1], size[1], "100%", "0px");
347
- return {
348
- bottom,
349
- height,
350
- left,
351
- position: "absolute",
352
- width
353
- };
354
- };
355
- //#endregion
356
- export { FIXTURE_VARIANT_SEPARATOR, GAME_CANVAS_INSET, GAME_CANVAS_UNIT, GAME_CURSOR, GAME_FONT_FAMILY, GAME_UNIT, Index_default as GameScreen, GameSourceKind, InterfaceClipProperty, InterfaceIcon, InterfaceIconCentreMap, InterfaceIconPathMap, Index_default$1 as LoadingSpinner, ORNAMENT_END_PATH, ORNAMENT_MIDDLE_PATH, Index_default$2 as OrnamentDivider, Index_default$3 as ProgressBar, Index_default$4 as PromptBand, Index_default$5 as RoundButton, SERVER_MARK_DIAMOND_PATH, SERVER_MARK_TICK_PATH, SETTINGS_RING_CENTRE, SETTINGS_RING_RADIUS, SETTINGS_RING_WIDTH, Index_default$6 as ServerBar, Index_default$7 as ToastNotice, computeRectOffsets, playInterfaceClip, readInterfaceClip, toCanvasRectStyle };
1992
+ export { ASCENSION_PHASE_COUNT, BannerKind, BannerKinds, CHECK_MARK_PATH, CONSTELLATION_NODE_PLACES, Index_default as CharacterMenu, Index_default$1 as CharacterMenuArtifacts, Index_default$2 as CharacterMenuButtons, Index_default$3 as CharacterMenuConstellation, Index_default$4 as CharacterMenuProfile, CharacterMenuTab, CharacterMenuTabs, Index_default$5 as CharacterMenuTalents, Index_default$6 as CharacterMenuWeapons, Index_default$7 as CraftingScreen, DialogueChoiceIcon, DialogueChoiceIconPathMap, Index_default$8 as DialogueScreen, FIXTURE_VARIANT_SEPARATOR, ForgeQueueState, Index_default$9 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$10 as GameButton, GameButtonKind, _sfc_main as GameRect, Index_default$11 as GameScreen, GameSourceKind, INTERACTION_HOVER_MS, INTERACTION_KEY_LABEL, INTERACTION_PILL_REST_MS, INTERACTION_PRESS_MS, INTERACTION_REST_MS, InteractionKind, Index_default$12 as InteractionPrompts, InteractionState, InterfaceClipProperties, InterfaceClipProperty, InterfaceIcon, InterfaceIconCentreMap, InterfaceIconPathMap, InterfaceIcons, Index_default$13 as InventoryScreen, InventorySort, InventorySorts, InvestigationOutcome, ItemCategories, ItemCategory, Index_default$14 as ItemTile, Index_default$15 as LoadingSpinner, MOBILE_INTERFACE_SCALE, ORNAMENT_END_PATH, ORNAMENT_MIDDLE_PATH, Index_default$16 as OrnamentDivider, Index_default$17 as ProgressBar, Index_default$18 as PromptBand, Index_default$19 as ReputationScreen, Index_default$20 as RoundButton, SERVER_MARK_DIAMOND_PATH, SERVER_MARK_TICK_PATH, SETTINGS_RING_CENTRE, SETTINGS_RING_RADIUS, SETTINGS_RING_WIDTH, Index_default$21 as ServerBar, Index_default$22 as ToastNotice, Index_default$23 as TwoColumnScreen, Index_default$24 as WishDetails, Index_default$25 as WishScreen, computeRectOffsets, playInterfaceClip, toCanvasRect, toCanvasRectStyle, toInterfaceClip };