bc-deeplib 1.2.0 → 2.0.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/deeplib.d.ts +93 -67
- package/dist/deeplib.js +238 -197
- package/dist/deeplib.js.map +2 -2
- package/dist/public/dl_images/arrow_left.svg +9 -1
- package/dist/public/dl_images/arrow_right.svg +9 -1
- package/dist/public/dl_images/bookmark.svg +17 -0
- package/dist/public/dl_images/bug.svg +9 -1
- package/dist/public/dl_images/exit.svg +12 -1
- package/dist/public/dl_images/notebook.svg +10 -1
- package/dist/public/dl_images/transfer.svg +9 -1
- package/dist/public/dl_images/trash_bin.svg +18 -1
- package/dist/public/dl_translations/en.lang +6 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -11
package/dist/deeplib.js
CHANGED
|
@@ -28,7 +28,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
// node_modules/.pnpm/bondage-club-mod-sdk@1.2.0/node_modules/bondage-club-mod-sdk/dist/bcmodsdk.js
|
|
29
29
|
var require_bcmodsdk = __commonJS({
|
|
30
30
|
"node_modules/.pnpm/bondage-club-mod-sdk@1.2.0/node_modules/bondage-club-mod-sdk/dist/bcmodsdk.js"(exports) {
|
|
31
|
-
var bcModSdk = function() {
|
|
31
|
+
var bcModSdk = (function() {
|
|
32
32
|
"use strict";
|
|
33
33
|
const o = "1.2.0";
|
|
34
34
|
function e(o2) {
|
|
@@ -44,7 +44,7 @@ var require_bcmodsdk = __commonJS({
|
|
|
44
44
|
__name(n, "n");
|
|
45
45
|
function r(o2) {
|
|
46
46
|
const e2 = /* @__PURE__ */ new Set();
|
|
47
|
-
return o2.filter((o3) => !e2.has(o3) && e2.add(o3));
|
|
47
|
+
return o2.filter(((o3) => !e2.has(o3) && e2.add(o3)));
|
|
48
48
|
}
|
|
49
49
|
__name(r, "r");
|
|
50
50
|
const i = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Set();
|
|
@@ -67,13 +67,13 @@ Patch2:
|
|
|
67
67
|
${a2}`), t2.set(e3, a2), n2.add(r3.name);
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
-
e2.sort((o3, e3) => e3.priority - o3.priority);
|
|
71
|
-
const r2 = function(o3, e3) {
|
|
70
|
+
e2.sort(((o3, e3) => e3.priority - o3.priority));
|
|
71
|
+
const r2 = (function(o3, e3) {
|
|
72
72
|
if (0 === e3.size) return o3;
|
|
73
73
|
let t3 = o3.toString().replaceAll("\r\n", "\n");
|
|
74
74
|
for (const [n3, r3] of e3.entries()) t3.includes(n3) || c(`ModSDK: Patching ${o3.name}: Patch ${n3} not applied`), t3 = t3.replaceAll(n3, r3);
|
|
75
75
|
return (0, eval)(`(${t3})`);
|
|
76
|
-
}(o2.original, t2);
|
|
76
|
+
})(o2.original, t2);
|
|
77
77
|
let i2 = /* @__PURE__ */ __name(function(e3) {
|
|
78
78
|
var t3, i3;
|
|
79
79
|
const a2 = null === (i3 = (t3 = m.errorReporterHooks).hookChainExit) || void 0 === i3 ? void 0 : i3.call(t3, o2.name, n2), c2 = r2.apply(this, e3);
|
|
@@ -102,7 +102,7 @@ ${a2}`), t2.set(e3, a2), n2.add(r3.name);
|
|
|
102
102
|
for (let t2 = 0; t2 < a2.length - 1; t2++) if (e3 = e3[a2[t2]], !n(e3)) throw new Error(`ModSDK: Function ${o2} to be patched not found; ${a2.slice(0, t2 + 1).join(".")} is not object`);
|
|
103
103
|
const c2 = e3[a2[a2.length - 1]];
|
|
104
104
|
if ("function" != typeof c2) throw new Error(`ModSDK: Function ${o2} to be patched not found`);
|
|
105
|
-
const l2 = function(o3) {
|
|
105
|
+
const l2 = (function(o3) {
|
|
106
106
|
let e4 = -1;
|
|
107
107
|
for (const n2 of t.encode(o3)) {
|
|
108
108
|
let o4 = 255 & (e4 ^ n2);
|
|
@@ -110,13 +110,13 @@ ${a2}`), t2.set(e3, a2), n2.add(r3.name);
|
|
|
110
110
|
e4 = e4 >>> 8 ^ o4;
|
|
111
111
|
}
|
|
112
112
|
return ((-1 ^ e4) >>> 0).toString(16).padStart(8, "0").toUpperCase();
|
|
113
|
-
}(c2.toString().replaceAll("\r\n", "\n")), d2 = { name: o2, original: c2, originalHash: l2 };
|
|
113
|
+
})(c2.toString().replaceAll("\r\n", "\n")), d2 = { name: o2, original: c2, originalHash: l2 };
|
|
114
114
|
r2 = Object.assign(Object.assign({}, d2), { precomputed: s(d2), router: /* @__PURE__ */ __name(() => {
|
|
115
|
-
}, "router"), context: e3, contextProperty: a2[a2.length - 1] }), r2.router = /* @__PURE__ */ function(o3) {
|
|
115
|
+
}, "router"), context: e3, contextProperty: a2[a2.length - 1] }), r2.router = /* @__PURE__ */ (function(o3) {
|
|
116
116
|
return function(...e4) {
|
|
117
117
|
return o3.precomputed.enter.apply(this, [e4]);
|
|
118
118
|
};
|
|
119
|
-
}(r2), i.set(o2, r2), e3[r2.contextProperty] = r2.router;
|
|
119
|
+
})(r2), i.set(o2, r2), e3[r2.contextProperty] = r2.router;
|
|
120
120
|
}
|
|
121
121
|
return r2;
|
|
122
122
|
}
|
|
@@ -127,7 +127,7 @@ ${a2}`), t2.set(e3, a2), n2.add(r3.name);
|
|
|
127
127
|
__name(d, "d");
|
|
128
128
|
function p() {
|
|
129
129
|
const o2 = /* @__PURE__ */ new Map();
|
|
130
|
-
for (const [e2, t2] of i) o2.set(e2, { name: e2, original: t2.original, originalHash: t2.originalHash, sdkEntrypoint: t2.router, currentEntrypoint: t2.context[t2.contextProperty], hookedByMods: r(t2.precomputed.hooks.map((o3) => o3.mod)), patchedByMods: Array.from(t2.precomputed.patchesSources) });
|
|
130
|
+
for (const [e2, t2] of i) o2.set(e2, { name: e2, original: t2.original, originalHash: t2.originalHash, sdkEntrypoint: t2.router, currentEntrypoint: t2.context[t2.contextProperty], hookedByMods: r(t2.precomputed.hooks.map(((o3) => o3.mod))), patchedByMods: Array.from(t2.precomputed.patchesSources) });
|
|
131
131
|
return o2;
|
|
132
132
|
}
|
|
133
133
|
__name(p, "p");
|
|
@@ -152,7 +152,7 @@ Was the mod loaded multiple times?`), u(a2));
|
|
|
152
152
|
g2.loaded || e(`Mod ${r2} attempted to call SDK function after being unloaded`);
|
|
153
153
|
const s3 = t3(...n2);
|
|
154
154
|
return null == c3 || c3(), s3;
|
|
155
|
-
}, "s"), p2 = { unload: s2("unload", () => u(g2)), hookFunction: s2("hookFunction", (o3, t3, n2) => {
|
|
155
|
+
}, "s"), p2 = { unload: s2("unload", (() => u(g2))), hookFunction: s2("hookFunction", ((o3, t3, n2) => {
|
|
156
156
|
"string" == typeof o3 && o3 || e(`Mod ${r2} failed to patch a function: Expected function name string, got ${typeof o3}`);
|
|
157
157
|
const i3 = l(o3), a3 = c2(i3);
|
|
158
158
|
"number" != typeof t3 && e(`Mod ${r2} failed to hook function '${o3}': Expected priority number, got ${typeof t3}`), "function" != typeof n2 && e(`Mod ${r2} failed to hook function '${o3}': Expected hook function, got ${typeof n2}`);
|
|
@@ -161,24 +161,24 @@ Was the mod loaded multiple times?`), u(a2));
|
|
|
161
161
|
const o4 = a3.hooks.indexOf(s3);
|
|
162
162
|
o4 >= 0 && (a3.hooks.splice(o4, 1), d());
|
|
163
163
|
};
|
|
164
|
-
}), patchFunction: s2("patchFunction", (o3, t3) => {
|
|
164
|
+
})), patchFunction: s2("patchFunction", ((o3, t3) => {
|
|
165
165
|
"string" == typeof o3 && o3 || e(`Mod ${r2} failed to patch a function: Expected function name string, got ${typeof o3}`);
|
|
166
166
|
const i3 = l(o3), a3 = c2(i3);
|
|
167
167
|
n(t3) || e(`Mod ${r2} failed to patch function '${o3}': Expected patches object, got ${typeof t3}`);
|
|
168
168
|
for (const [n2, i4] of Object.entries(t3)) "string" == typeof i4 ? a3.patches.set(n2, i4) : null === i4 ? a3.patches.delete(n2) : e(`Mod ${r2} failed to patch function '${o3}': Invalid format of patch '${n2}'`);
|
|
169
169
|
d();
|
|
170
|
-
}), removePatches: s2("removePatches", (o3) => {
|
|
170
|
+
})), removePatches: s2("removePatches", ((o3) => {
|
|
171
171
|
"string" == typeof o3 && o3 || e(`Mod ${r2} failed to patch a function: Expected function name string, got ${typeof o3}`);
|
|
172
172
|
const t3 = l(o3);
|
|
173
173
|
c2(t3).patches.clear(), d();
|
|
174
|
-
}), callOriginal: s2("callOriginal", (o3, t3, n2) => {
|
|
174
|
+
})), callOriginal: s2("callOriginal", ((o3, t3, n2) => {
|
|
175
175
|
"string" == typeof o3 && o3 || e(`Mod ${r2} failed to call a function: Expected function name string, got ${typeof o3}`);
|
|
176
176
|
const i3 = l(o3);
|
|
177
177
|
return Array.isArray(t3) || e(`Mod ${r2} failed to call a function: Expected args array, got ${typeof t3}`), i3.original.apply(null != n2 ? n2 : globalThis, t3);
|
|
178
|
-
}), getOriginalHash: s2("getOriginalHash", (o3) => {
|
|
178
|
+
})), getOriginalHash: s2("getOriginalHash", ((o3) => {
|
|
179
179
|
"string" == typeof o3 && o3 || e(`Mod ${r2} failed to get hash: Expected function name string, got ${typeof o3}`);
|
|
180
180
|
return l(o3).originalHash;
|
|
181
|
-
}) }, g2 = { name: o2.name, fullName: o2.fullName, version: o2.version, repository: o2.repository, allowReplace: i2, api: p2, loaded: true, patching: /* @__PURE__ */ new Map() };
|
|
181
|
+
})) }, g2 = { name: o2.name, fullName: o2.fullName, version: o2.version, repository: o2.repository, allowReplace: i2, api: p2, loaded: true, patching: /* @__PURE__ */ new Map() };
|
|
182
182
|
return f.set(o2.name, g2), Object.freeze(p2);
|
|
183
183
|
}
|
|
184
184
|
__name(g, "g");
|
|
@@ -189,13 +189,13 @@ Was the mod loaded multiple times?`), u(a2));
|
|
|
189
189
|
}
|
|
190
190
|
__name(h, "h");
|
|
191
191
|
let m;
|
|
192
|
-
const y = void 0 === window.bcModSdk ? window.bcModSdk = function() {
|
|
192
|
+
const y = void 0 === window.bcModSdk ? window.bcModSdk = (function() {
|
|
193
193
|
const e2 = { version: o, apiVersion: 1, registerMod: g, getModsInfo: h, getPatchingInfo: p, errorReporterHooks: Object.seal({ apiEndpointEnter: null, hookEnter: null, hookChainExit: null }) };
|
|
194
194
|
return m = e2, Object.freeze(e2);
|
|
195
|
-
}() : (n(window.bcModSdk) || e("Failed to init Mod SDK: Name already in use"), 1 !== window.bcModSdk.apiVersion && e(`Failed to init Mod SDK: Different version already loaded ('1.2.0' vs '${window.bcModSdk.version}')`), window.bcModSdk.version !== o && alert(`Mod SDK warning: Loading different but compatible versions ('1.2.0' vs '${window.bcModSdk.version}')
|
|
195
|
+
})() : (n(window.bcModSdk) || e("Failed to init Mod SDK: Name already in use"), 1 !== window.bcModSdk.apiVersion && e(`Failed to init Mod SDK: Different version already loaded ('1.2.0' vs '${window.bcModSdk.version}')`), window.bcModSdk.version !== o && alert(`Mod SDK warning: Loading different but compatible versions ('1.2.0' vs '${window.bcModSdk.version}')
|
|
196
196
|
One of mods you are using is using an old version of SDK. It will work for now but please inform author to update`), window.bcModSdk);
|
|
197
197
|
return "undefined" != typeof exports && (Object.defineProperty(exports, "__esModule", { value: true }), exports.default = y), y;
|
|
198
|
-
}();
|
|
198
|
+
})();
|
|
199
199
|
}
|
|
200
200
|
});
|
|
201
201
|
|
|
@@ -297,12 +297,13 @@ var BaseModule = class {
|
|
|
297
297
|
};
|
|
298
298
|
|
|
299
299
|
// src/base/base_subscreen.ts
|
|
300
|
-
function setSubscreen(subscreen) {
|
|
300
|
+
async function setSubscreen(subscreen) {
|
|
301
301
|
if (!GUI.instance) {
|
|
302
302
|
throw new Error("Attempt to set subscreen before init");
|
|
303
303
|
}
|
|
304
|
-
|
|
305
|
-
|
|
304
|
+
const screenName = typeof subscreen === "string" ? subscreen : subscreen?.options.name;
|
|
305
|
+
const screenId = `${BaseSubscreen.id}_${screenName}`;
|
|
306
|
+
await CommonSetScreen(...["DeepLibMod", `${screenId}`]);
|
|
306
307
|
}
|
|
307
308
|
__name(setSubscreen, "setSubscreen");
|
|
308
309
|
var BaseSubscreen = class _BaseSubscreen {
|
|
@@ -317,28 +318,36 @@ var BaseSubscreen = class _BaseSubscreen {
|
|
|
317
318
|
options;
|
|
318
319
|
/** Reference to the module this subscreen belongs to. */
|
|
319
320
|
module;
|
|
320
|
-
|
|
321
|
+
/** Identifier for internal use to avoid screen name collisions. */
|
|
322
|
+
static id = CommonGenerateUniqueID();
|
|
323
|
+
/** Optional configuration flags for a BaseSubscreen instance. */
|
|
324
|
+
static subscreenOptions = {
|
|
325
|
+
drawCharacter: true,
|
|
326
|
+
name: "UNKNOWN",
|
|
327
|
+
icon: "",
|
|
328
|
+
background: "Sheet"
|
|
329
|
+
};
|
|
330
|
+
constructor(module) {
|
|
321
331
|
if (module) this.module = module;
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
return "";
|
|
332
|
+
const ctor = this.constructor;
|
|
333
|
+
this.options = {
|
|
334
|
+
..._BaseSubscreen.subscreenOptions,
|
|
335
|
+
...ctor.subscreenOptions
|
|
336
|
+
};
|
|
337
|
+
const screenName = this.options.name;
|
|
338
|
+
const screenId = `${_BaseSubscreen.id}_${screenName}`;
|
|
339
|
+
exportToGlobal(`${screenId}Load`, this.load.bind(this));
|
|
340
|
+
exportToGlobal(`${screenId}Run`, this.run.bind(this));
|
|
341
|
+
exportToGlobal(`${screenId}Click`, this.click.bind(this));
|
|
342
|
+
exportToGlobal(`${screenId}Exit`, this.exit.bind(this));
|
|
343
|
+
exportToGlobal(`${screenId}Unload`, this.unload.bind(this));
|
|
344
|
+
exportToGlobal(`${screenId}Resize`, this.resize.bind(this));
|
|
345
|
+
exportToGlobal(`${screenId}Background`, this.options.background);
|
|
346
|
+
CommonCSVCache[ScreenFileGetTranslation("DeepLibMod", screenId)] = [];
|
|
338
347
|
}
|
|
339
348
|
/** Changes the currently active subscreen. */
|
|
340
|
-
setSubscreen(screen) {
|
|
341
|
-
return setSubscreen(screen);
|
|
349
|
+
async setSubscreen(screen) {
|
|
350
|
+
return await setSubscreen(screen);
|
|
342
351
|
}
|
|
343
352
|
/** Gets this subscreen's settings object from its parent module. */
|
|
344
353
|
get settings() {
|
|
@@ -413,8 +422,8 @@ var BaseSubscreen = class _BaseSubscreen {
|
|
|
413
422
|
if (!module.settings || !Object.keys(module.settings).length) module.registerDefaultSettings();
|
|
414
423
|
}
|
|
415
424
|
_BaseSubscreen.currentPage = 1;
|
|
416
|
-
layout.
|
|
417
|
-
const settingsElement = layout.
|
|
425
|
+
layout.getSubscreen();
|
|
426
|
+
const settingsElement = layout.getSettingsDiv();
|
|
418
427
|
layout.appendToSubscreen(settingsElement);
|
|
419
428
|
const menu = ElementMenu.Create("deeplib-nav-menu", []);
|
|
420
429
|
layout.appendToSubscreen(menu);
|
|
@@ -429,12 +438,36 @@ var BaseSubscreen = class _BaseSubscreen {
|
|
|
429
438
|
});
|
|
430
439
|
ElementMenu.PrependItem(menu, backNext);
|
|
431
440
|
}
|
|
441
|
+
if (this.options.help) {
|
|
442
|
+
const onClick = this.options.help.onClick;
|
|
443
|
+
let action = /* @__PURE__ */ __name(() => {
|
|
444
|
+
}, "action");
|
|
445
|
+
if (typeof onClick === "string" || onClick instanceof URL) {
|
|
446
|
+
action = /* @__PURE__ */ __name(() => window.open(onClick, "_blank"), "action");
|
|
447
|
+
} else if (typeof onClick === "function") {
|
|
448
|
+
action = onClick;
|
|
449
|
+
} else if (onClick instanceof _BaseSubscreen) {
|
|
450
|
+
action = /* @__PURE__ */ __name(async () => await this.setSubscreen(onClick), "action");
|
|
451
|
+
}
|
|
452
|
+
this.options.help.tooltip ??= getText("settings.button.help_button_hint");
|
|
453
|
+
this.options.help.icon ??= `${PUBLIC_URL}/dl_images/bookmark.svg`;
|
|
454
|
+
const helpButton = advElement.createButton({
|
|
455
|
+
id: "deeplib-help",
|
|
456
|
+
size: [90, 90],
|
|
457
|
+
onClick: action,
|
|
458
|
+
options: {
|
|
459
|
+
image: this.options.help.icon,
|
|
460
|
+
tooltip: this.options.help.tooltip
|
|
461
|
+
}
|
|
462
|
+
});
|
|
463
|
+
ElementMenu.AppendButton(menu, helpButton);
|
|
464
|
+
}
|
|
432
465
|
const subscreenTitle = advElement.createLabel({
|
|
433
466
|
id: "deeplib-subscreen-title",
|
|
434
|
-
label: getText(`${this.name}.title`).replace("$ModVersion", ModSdkManager.ModInfo.version)
|
|
467
|
+
label: getText(`${this.options.name}.title`).replace("$ModVersion", ModSdkManager.ModInfo.version)
|
|
435
468
|
});
|
|
436
469
|
layout.appendToSubscreen(subscreenTitle);
|
|
437
|
-
if (this.name !== "mainmenu") {
|
|
470
|
+
if (this.options.name !== "mainmenu") {
|
|
438
471
|
const exitButton = advElement.createButton({
|
|
439
472
|
id: "deeplib-exit",
|
|
440
473
|
size: [90, 90],
|
|
@@ -499,21 +532,29 @@ var BaseSubscreen = class _BaseSubscreen {
|
|
|
499
532
|
exit() {
|
|
500
533
|
CharacterAppearanceForceUpCharacter = -1;
|
|
501
534
|
CharacterLoadCanvas(Player);
|
|
502
|
-
|
|
503
|
-
|
|
535
|
+
const returnScreen = typeof this.options.returnScreen === "function" ? this.options.returnScreen() : this.options.returnScreen;
|
|
536
|
+
if (returnScreen instanceof _BaseSubscreen || !returnScreen) {
|
|
537
|
+
setSubscreen(returnScreen ?? "mainmenu").then(() => {
|
|
538
|
+
modStorage.save();
|
|
539
|
+
});
|
|
540
|
+
} else if (Array.isArray(returnScreen)) {
|
|
541
|
+
CommonSetScreen(...returnScreen).then(() => {
|
|
542
|
+
modStorage.save();
|
|
543
|
+
});
|
|
544
|
+
}
|
|
504
545
|
}
|
|
505
546
|
/**
|
|
506
547
|
* Called when the window is resized.
|
|
507
548
|
* Also checks for overflow in the settings div and applies styling accordingly.
|
|
508
549
|
*/
|
|
509
|
-
resize(
|
|
550
|
+
resize(_onLoad = false) {
|
|
510
551
|
const offset = this.options.drawCharacter ? 0 : 380;
|
|
511
552
|
const subscreen = layout.getSubscreen();
|
|
512
553
|
const settingsDiv = layout.getSettingsDiv();
|
|
513
554
|
ElementSetPosition(subscreen || "", 0, 0);
|
|
514
555
|
ElementSetSize(subscreen || "", 2e3, 1e3);
|
|
515
556
|
ElementSetFontSize(subscreen || "", "auto");
|
|
516
|
-
if (this.name === "mainmenu") {
|
|
557
|
+
if (this.options.name === "mainmenu") {
|
|
517
558
|
ElementSetPosition(settingsDiv || "", 530 - offset, 170);
|
|
518
559
|
ElementSetSize(settingsDiv || "", 600 + offset, 660);
|
|
519
560
|
} else {
|
|
@@ -645,7 +686,6 @@ var styles_default = `.deeplib-subscreen,
|
|
|
645
686
|
grid-auto-rows: min-content;
|
|
646
687
|
padding: min(1dvh, 0.5dvw);
|
|
647
688
|
gap: 0.3em;
|
|
648
|
-
overflow-y: scroll;
|
|
649
689
|
}
|
|
650
690
|
|
|
651
691
|
.deeplib-misc {
|
|
@@ -665,6 +705,7 @@ var styles_default = `.deeplib-subscreen,
|
|
|
665
705
|
padding: min(1vh, 0.5vw);
|
|
666
706
|
font-size: 0.8em;
|
|
667
707
|
border: min(0.2vh, 0.1vw) solid var(--deeplib-border-color);
|
|
708
|
+
z-index: 1;
|
|
668
709
|
}
|
|
669
710
|
|
|
670
711
|
.deeplib-overflow-box {
|
|
@@ -682,14 +723,14 @@ var styles_default = `.deeplib-subscreen,
|
|
|
682
723
|
border-radius: min(1dvh, 0.5dvw);
|
|
683
724
|
border: min(0.2vh, 0.1vw) solid var(--deeplib-border-color);
|
|
684
725
|
}
|
|
685
|
-
.deeplib-prev-next .deeplib-prev-next-button {
|
|
686
|
-
height: 100%;
|
|
687
|
-
aspect-ratio: 1;
|
|
688
|
-
}
|
|
689
726
|
.deeplib-prev-next .deeplib-prev-next-button:hover {
|
|
690
727
|
background-color: var(--deeplib-element-hover-color);
|
|
691
728
|
border-radius: var(--deeplib-border-radius);
|
|
692
729
|
}
|
|
730
|
+
.deeplib-prev-next .deeplib-prev-next-button {
|
|
731
|
+
height: 100%;
|
|
732
|
+
aspect-ratio: 1;
|
|
733
|
+
}
|
|
693
734
|
.deeplib-prev-next .deeplib-prev-next-label {
|
|
694
735
|
white-space: nowrap;
|
|
695
736
|
}
|
|
@@ -874,7 +915,7 @@ input[type=number] {
|
|
|
874
915
|
height: 100dvh;
|
|
875
916
|
background-color: rgba(0, 0, 0, 0.5);
|
|
876
917
|
}
|
|
877
|
-
/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL21lZGlhL05WTUUvU3R1ZmYvQ29kZS9CQy9CQy1EZWVwTGliL3NyYy9zdHlsZXMiLCJzb3VyY2VzIjpbInZhcnMuc2NzcyIsImJ1dHRvbnMuc2NzcyIsImVsZW1lbnRzLnNjc3MiLCJpbnB1dHMuc2NzcyIsIm1lc3NhZ2VzLnNjc3MiLCJtb2RhbC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7RUFFRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FDZEY7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0FBQUE7RUFFRTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBRUE7RUFDQTtFQUNBOzs7QUFHRjtFQUNFOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTs7O0FDM0NGO0VBQ0U7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBTUU7RUFDQTs7QUFOQTtFQUNFO0VBQ0E7O0FBT0o7RUFDRTs7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBOzs7QUN6R0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFJRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQUdGO0FBQUE7RUFFRTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQzdERjtFQUNFO0VBQ0E7OztBQUdGO0FBQUE7RUFFRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtBQUFBO0VBRUU7OztBQUdGO0VBQ0U7RUFDQTtFQUNBOzs7QUM3QkY7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQUtOO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUlKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIuZGVlcGxpYi1zdWJzY3JlZW4sXG4uZGVlcGxpYi1tb2RhbCB7XG4gIC0tZGVlcGxpYi1iYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10bWQtbWFpbiwgd2hpdGUpO1xuICAtLWRlZXBsaWItZWxlbWVudC1jb2xvcjogdmFyKC0tdG1kLWVsZW1lbnQsIHdoaXRlKTtcbiAgLS1kZWVwbGliLWVsZW1lbnQtaG92ZXItY29sb3I6IHZhcigtLXRtZC1lbGVtZW50LWhvdmVyLCBjeWFuKTtcbiAgLS1kZWVwbGliLWFjY2VudC1jb2xvcjogdmFyKC0tdG1kLWFjY2VudCwgI0ZGRkY4OCk7XG4gIC0tZGVlcGxpYi1ibG9ja2VkLWNvbG9yOiB2YXIoLS10bWQtYmxvY2tlZCwgcmVkKTtcbiAgLS1kZWVwbGliLXRleHQtY29sb3I6IHZhcigtLXRtZC10ZXh0LCBibGFjayk7XG4gIC0tZGVlcGxpYi1pY29uLWNvbG9yOiB2YXIoLS10bWQtYWNjZW50LCBibGFjayk7XG4gIC0tZGVlcGxpYi1pY29uLWhvdmVyLWNvbG9yOiB2YXIoLS10bWQtYWNjZW50LWhvdmVyLCBibGFjayk7XG4gIC0tZGVlcGxpYi1ib3JkZXItY29sb3I6IHZhcigtLXRtZC1hY2NlbnQsIGJsYWNrKTtcbiAgLS1kZWVwbGliLWJvcmRlci13aWR0aDogbWluKDAuMnZoLCAwLjF2dyk7XG4gIC0tZGVlcGxpYi1ib3JkZXItd2lkdGg6IG1pbigwLjJkdmgsIDAuMWR2dyk7XG4gIC0tZGVlcGxpYi1ib3JkZXItcmFkaXVzOiBtaW4oMXZoLCAwLjV2dyk7XG4gIC0tZGVlcGxpYi1ib3JkZXItcmFkaXVzOiBtaW4oMWR2aCwgMC41ZHZ3KTtcbn1cbiIsIi5kZWVwbGliLWJ1dHRvbiB7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4uZGVlcGxpYi1idXR0b24uYnV0dG9uLXN0eWxpbmcsXG4uZGVlcGxpYi1idXR0b24uYnV0dG9uLXN0eWxpbmc6OmJlZm9yZSB7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG59XG5cbi5kZWVwbGliLWJ1dHRvbiBpbWcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMCU7XG4gIGxlZnQ6IDAlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWljb24tY29sb3IpO1xuICBiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6IG11bHRpcGx5O1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIG1hc2stcG9zaXRpb246IGxlZnQ7XG4gIG1hc2stc2l6ZTogY29udGFpbjtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgbWFzay1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xuXG4gIGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLWltYWdlKTtcbiAgbWFzay1pbWFnZTogdmFyKC0taW1hZ2UpO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmRlZXBsaWItYnV0dG9uOmhvdmVyIGltZyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItaWNvbi1ob3Zlci1jb2xvcik7XG59XG5cbi5kZWVwbGliLWJ1dHRvbiAuYnV0dG9uLWxhYmVsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG4gIGZvbnQtc2l6ZTogbWluKDMuNmR2aCwgMS44ZHZ3KTtcbn1cblxuLmRlZXBsaWItYnV0dG9uIC5idXR0b24tdG9vbHRpcCB7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG59XG4iLCIjZGVlcGxpYi1wYWdlLWxhYmVsIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbiNkZWVwbGliLXN1YnNjcmVlbi10aXRsZSB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xufVxuXG4uZGVlcGxpYi10ZXh0IHtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG59XG5cbi5kZWVwbGliLXN1YnNjcmVlbiB7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5kZWVwbGliLXN1YnNjcmVlbiAqIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcbn1cblxuLmRlZXBsaWItc2V0dGluZ3Mge1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLWF1dG8tcm93czogbWluLWNvbnRlbnQ7XG4gIHBhZGRpbmc6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gIGdhcDogMC4zZW07XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbn1cblxuLmRlZXBsaWItbWlzYyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgZ2FwOiBtaW4oMXZoLCAwLjV2dyk7XG59XG5cbi5kZWVwbGliLXRvb2x0aXAge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWVsZW1lbnQtY29sb3IpO1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gIHBhZGRpbmc6IG1pbigxdmgsIDAuNXZ3KTtcbiAgZm9udC1zaXplOiAwLjhlbTtcbiAgYm9yZGVyOiBtaW4oMC4ydmgsIDAuMXZ3KSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcik7XG59XG5cbi5kZWVwbGliLW92ZXJmbG93LWJveCB7XG4gIGJvcmRlcjogdmFyKC0tZGVlcGxpYi1ib3JkZXItY29sb3IpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLXdpZHRoKTtcbn1cblxuLmRlZXBsaWItcHJldi1uZXh0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBnYXA6IG1pbigyZHZoLCAxZHZ3KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gIGJvcmRlcjogbWluKDAuMnZoLCAwLjF2dykgc29saWQgdmFyKC0tZGVlcGxpYi1ib3JkZXItY29sb3IpO1xuXG4gIC5kZWVwbGliLXByZXYtbmV4dC1idXR0b24ge1xuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWhvdmVyLWNvbG9yKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWRlZXBsaWItYm9yZGVyLXJhZGl1cyk7XG4gICAgfVxuICAgIFxuICAgIGhlaWdodDogMTAwJTtcbiAgICBhc3BlY3QtcmF0aW86IDE7XG4gIH1cblxuICAuZGVlcGxpYi1wcmV2LW5leHQtbGFiZWwge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cbn1cblxuI2RlZXBsaWItbmF2LW1lbnUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBnYXA6IG1pbigyZHZoLCAxZHZ3KTtcbn1cblxuI2RlZXBsaWItc3RvcmFnZS1tZXRlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwcHg7XG4gIGxlZnQ6IDBweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWNvbG9yKTtcbiAgYm9yZGVyOiB2YXIoLS1kZWVwbGliLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tZGVlcGxpYi1ib3JkZXItY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1kZWVwbGliLWJvcmRlci1yYWRpdXMpO1xuICB6LWluZGV4OiAtMTtcbn1cblxuI2RlZXBsaWItc3RvcmFnZS1iYXIge1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAwJTtcbiAgYmFja2dyb3VuZDogdmFyKC0tZGVlcGxpYi1hY2NlbnQtY29sb3IpO1xufVxuIiwiLmRlZXBsaWItY2hlY2tib3gtY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAwLjNlbTtcbn1cblxuLmRlZXBsaWItY2hlY2tib3gtY29udGFpbmVyIGlucHV0LmRlZXBsaWItaW5wdXQge1xuICB3aWR0aDogbWluKDV2aCwgMi41dncpO1xuICBoZWlnaHQ6IG1pbig1dmgsIDIuNXZ3KTtcbiAgYm9yZGVyLXJhZGl1czogbWluKDEuMGR2aCwgMC41ZHZ3KTtcbn1cblxuLmRlZXBsaWItY2hlY2tib3gtY29udGFpbmVyIGlucHV0LmRlZXBsaWItaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmNoZWNrZWQ6OmJlZm9yZSB7XG4gIHdpZHRoOiA4MCU7XG4gIGhlaWdodDogODAlO1xufVxuXG4uZGVlcGxpYi1pbnB1dC1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuM2VtO1xufVxuXG4uZGVlcGxpYi1pbnB1dC1jb250YWluZXI6aGFzKGxhYmVsLmRlZXBsaWItdGV4dCkge1xuICBtYXJnaW4tdG9wOiBtaW4oMXZoLCAwLjV2dyk7XG59XG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lciBpbnB1dC5kZWVwbGliLWlucHV0IHtcbiAgZm9udC1zaXplOiAwLjZlbTtcbiAgcGFkZGluZzogNXB4IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBvdXRsaW5lOiBub25lO1xuICBwYWRkaW5nLWxlZnQ6IG1pbigxdmgsIDAuNXZ3KTtcbiAgcGFkZGluZy1yaWdodDogbWluKDF2aCwgMC41dncpO1xuICBtaW4taGVpZ2h0OiBtaW4oNWR2aCwgMi41ZHZ3KTtcbiAgYm9yZGVyLXJhZGl1czogbWluKDEuMGR2aCwgMC41ZHZ3KTtcbn1cblxuXG4uZGVlcGxpYi1pbnB1dC1jb250YWluZXIgaW5wdXQuZGVlcGxpYi1pbnB1dFt0eXBlPVwiY29sb3JcIl0ge1xuICBwYWRkaW5nOiAwcHg7XG4gIHdpZHRoOiBtaW4oNXZoLCAyLjV2dyk7XG4gIGhlaWdodDogbWluKDV2aCwgMi41dncpO1xuICBib3JkZXItcmFkaXVzOiAwcHg7XG59XG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lciBpbnB1dC5kZWVwbGliLWlucHV0W3R5cGU9XCJjb2xvclwiXTpkaXNhYmxlZCB7XG4gIGJvcmRlcjogdmFyKC0tZGVlcGxpYi1ibG9ja2VkLWNvbG9yKSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci13aWR0aCk7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbmlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLFxuaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gIG1hcmdpbjogMDtcbn1cblxuaW5wdXRbdHlwZT1udW1iZXJdIHtcbiAgYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xuICAtbW96LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcbn1cbiIsIi5kZWVwbGliLWhpZ2hsaWdodC10ZXh0IHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiByZ2IoMjAzLCAxODUsIDIzKTtcbn1cblxuI1RleHRBcmVhQ2hhdExvZ1tkYXRhLWNvbG9ydGhlbWU9J2RhcmsnXSBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlLFxuI1RleHRBcmVhQ2hhdExvZ1tkYXRhLWNvbG9ydGhlbWU9J2RhcmsyJ10gZGl2LkNoYXRNZXNzYWdlLmRlZXBsaWItbWVzc2FnZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItZWxlbWVudC1jb2xvcik7XG4gIGJvcmRlcjogbWluKDAuMmR2aCwgMC4xZHZ3KSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xufVxuXG4jVGV4dEFyZWFDaGF0TG9nIGRpdi5DaGF0TWVzc2FnZS5kZWVwbGliLW1lc3NhZ2Uge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1xuICBib3JkZXI6IG1pbigwLjJkdmgsIDAuMWR2dykgc29saWQgIzQ0MDE3MTtcbiAgY29sb3I6ICMxMTE7XG4gIHBhZGRpbmctbGVmdDogbWluKDAuNmR2aCwgMC4zZHZ3KTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG59XG5cbiNUZXh0QXJlYUNoYXRMb2dbZGF0YS1jb2xvcnRoZW1lPSdkYXJrJ10gZGl2LkNoYXRNZXNzYWdlLmRlZXBsaWItbWVzc2FnZSBhLFxuI1RleHRBcmVhQ2hhdExvZ1tkYXRhLWNvbG9ydGhlbWU9J2RhcmsyJ10gZGl2LkNoYXRNZXNzYWdlLmRlZXBsaWItbWVzc2FnZSBhIHtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG59XG5cbiNUZXh0QXJlYUNoYXRMb2cgZGl2LkNoYXRNZXNzYWdlLmRlZXBsaWItbWVzc2FnZSBhIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICMxMTE7XG59XG4iLCIuZGVlcGxpYi1tb2RhbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAxMCU7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICB6LWluZGV4OiAxMDAxO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAwLjVlbTtcbiAgd2lkdGg6IG1heCg1MGR2dywgMjVkdmgpO1xuICBmb250LXNpemU6IG1pbig0ZHZoLCAyZHZ3KTtcbiAgcGFkZGluZzogbWluKDJkdmgsIDFkdncpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWVsZW1lbnQtY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4yZHZoLCAwLjZkdncpO1xuICBib3JkZXI6IG1pbigwLjJkdmgsIDAuMWR2dykgc29saWQgdmFyKC0tZGVlcGxpYi1ib3JkZXItY29sb3IpO1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcblxuICAuZGVlcGxpYi1tb2RhbC1pbnB1dCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZm9udC1zaXplOiBtaW4oMi42ZHZoLCAxLjhkdncpO1xuICAgIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gICAgcGFkZGluZzogbWluKDFkdmgsIDAuNWR2dyk7XG4gIH1cblxuICBpbnB1dC5kZWVwbGliLW1vZGFsLWlucHV0IHtcbiAgICBtYXgtd2lkdGg6IG1heCg1MGR2aCwgMjVkdncpO1xuICB9XG5cbiAgLmRlZXBsaWItbW9kYWwtYnV0dG9uLWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgZ2FwOiAwLjVlbTtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC5kZWVwbGliLWJ1dHRvbiB7XG4gICAgICBmb250LXNpemU6IDAuOGVtO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgcGFkZGluZzogbWluKDAuNHZoLCAwLjJ2dykgbWluKDJ2aCwgMXZ3KTtcblxuICAgICAgLmJ1dHRvbi1sYWJlbCB7XG4gICAgICAgIGRpc3BsYXk6IGNvbnRlbnRzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kZWVwbGliLW1vZGFsLXByb21wdC1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB9XG59XG5cbi5kZWVwbGliLW1vZGFsLWJsb2NrZXIge1xuICB6LWluZGV4OiAxMDAwO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMGR2dztcbiAgaGVpZ2h0OiAxMDBkdmg7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbiJdfQ== */`;
|
|
918
|
+
/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL21lZGlhL05WTUUvU3R1ZmYvQ29kZS9CQy9CQy1EZWVwTGliL3NyYy9zdHlsZXMiLCJzb3VyY2VzIjpbInZhcnMuc2NzcyIsImJ1dHRvbnMuc2NzcyIsImVsZW1lbnRzLnNjc3MiLCJpbnB1dHMuc2NzcyIsIm1lc3NhZ2VzLnNjc3MiLCJtb2RhbC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7RUFFRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FDZEY7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0FBQUE7RUFFRTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBRUE7RUFDQTtFQUNBOzs7QUFHRjtFQUNFOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTs7O0FDM0NGO0VBQ0U7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdFO0VBQ0U7RUFDQTs7QUFISjtFQU1FO0VBQ0E7O0FBR0Y7RUFDRTs7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBOzs7QUN6R0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFJRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQUdGO0FBQUE7RUFFRTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQzdERjtFQUNFO0VBQ0E7OztBQUdGO0FBQUE7RUFFRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtBQUFBO0VBRUU7OztBQUdGO0VBQ0U7RUFDQTtFQUNBOzs7QUM3QkY7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQUtOO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUlKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIuZGVlcGxpYi1zdWJzY3JlZW4sXG4uZGVlcGxpYi1tb2RhbCB7XG4gIC0tZGVlcGxpYi1iYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10bWQtbWFpbiwgd2hpdGUpO1xuICAtLWRlZXBsaWItZWxlbWVudC1jb2xvcjogdmFyKC0tdG1kLWVsZW1lbnQsIHdoaXRlKTtcbiAgLS1kZWVwbGliLWVsZW1lbnQtaG92ZXItY29sb3I6IHZhcigtLXRtZC1lbGVtZW50LWhvdmVyLCBjeWFuKTtcbiAgLS1kZWVwbGliLWFjY2VudC1jb2xvcjogdmFyKC0tdG1kLWFjY2VudCwgI0ZGRkY4OCk7XG4gIC0tZGVlcGxpYi1ibG9ja2VkLWNvbG9yOiB2YXIoLS10bWQtYmxvY2tlZCwgcmVkKTtcbiAgLS1kZWVwbGliLXRleHQtY29sb3I6IHZhcigtLXRtZC10ZXh0LCBibGFjayk7XG4gIC0tZGVlcGxpYi1pY29uLWNvbG9yOiB2YXIoLS10bWQtYWNjZW50LCBibGFjayk7XG4gIC0tZGVlcGxpYi1pY29uLWhvdmVyLWNvbG9yOiB2YXIoLS10bWQtYWNjZW50LWhvdmVyLCBibGFjayk7XG4gIC0tZGVlcGxpYi1ib3JkZXItY29sb3I6IHZhcigtLXRtZC1hY2NlbnQsIGJsYWNrKTtcbiAgLS1kZWVwbGliLWJvcmRlci13aWR0aDogbWluKDAuMnZoLCAwLjF2dyk7XG4gIC0tZGVlcGxpYi1ib3JkZXItd2lkdGg6IG1pbigwLjJkdmgsIDAuMWR2dyk7XG4gIC0tZGVlcGxpYi1ib3JkZXItcmFkaXVzOiBtaW4oMXZoLCAwLjV2dyk7XG4gIC0tZGVlcGxpYi1ib3JkZXItcmFkaXVzOiBtaW4oMWR2aCwgMC41ZHZ3KTtcbn1cbiIsIi5kZWVwbGliLWJ1dHRvbiB7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4uZGVlcGxpYi1idXR0b24uYnV0dG9uLXN0eWxpbmcsXG4uZGVlcGxpYi1idXR0b24uYnV0dG9uLXN0eWxpbmc6OmJlZm9yZSB7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG59XG5cbi5kZWVwbGliLWJ1dHRvbiBpbWcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMCU7XG4gIGxlZnQ6IDAlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWljb24tY29sb3IpO1xuICBiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6IG11bHRpcGx5O1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIG1hc2stcG9zaXRpb246IGxlZnQ7XG4gIG1hc2stc2l6ZTogY29udGFpbjtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgbWFzay1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xuXG4gIGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLWltYWdlKTtcbiAgbWFzay1pbWFnZTogdmFyKC0taW1hZ2UpO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmRlZXBsaWItYnV0dG9uOmhvdmVyIGltZyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItaWNvbi1ob3Zlci1jb2xvcik7XG59XG5cbi5kZWVwbGliLWJ1dHRvbiAuYnV0dG9uLWxhYmVsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG4gIGZvbnQtc2l6ZTogbWluKDMuNmR2aCwgMS44ZHZ3KTtcbn1cblxuLmRlZXBsaWItYnV0dG9uIC5idXR0b24tdG9vbHRpcCB7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG59XG4iLCIjZGVlcGxpYi1wYWdlLWxhYmVsIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbiNkZWVwbGliLXN1YnNjcmVlbi10aXRsZSB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xufVxuXG4uZGVlcGxpYi10ZXh0IHtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG59XG5cbi5kZWVwbGliLXN1YnNjcmVlbiB7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5kZWVwbGliLXN1YnNjcmVlbiAqIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcbn1cblxuLmRlZXBsaWItc2V0dGluZ3Mge1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLWF1dG8tcm93czogbWluLWNvbnRlbnQ7XG4gIHBhZGRpbmc6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gIGdhcDogMC4zZW07XG59XG5cbi5kZWVwbGliLW1pc2Mge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gIGdhcDogbWluKDF2aCwgMC41dncpO1xufVxuXG4uZGVlcGxpYi10b29sdGlwIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xuICBwYWRkaW5nOiBtaW4oMXZoLCAwLjV2dyk7XG4gIGZvbnQtc2l6ZTogMC44ZW07XG4gIGJvcmRlcjogbWluKDAuMnZoLCAwLjF2dykgc29saWQgdmFyKC0tZGVlcGxpYi1ib3JkZXItY29sb3IpO1xuICB6LWluZGV4OiAxO1xufVxuXG4uZGVlcGxpYi1vdmVyZmxvdy1ib3gge1xuICBib3JkZXI6IHZhcigtLWRlZXBsaWItYm9yZGVyLWNvbG9yKSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci13aWR0aCk7XG59XG5cbi5kZWVwbGliLXByZXYtbmV4dCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZ2FwOiBtaW4oMmR2aCwgMWR2dyk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItZWxlbWVudC1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xuICBib3JkZXI6IG1pbigwLjJ2aCwgMC4xdncpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLWNvbG9yKTtcblxuICAuZGVlcGxpYi1wcmV2LW5leHQtYnV0dG9uIHtcbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItZWxlbWVudC1ob3Zlci1jb2xvcik7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1kZWVwbGliLWJvcmRlci1yYWRpdXMpO1xuICAgIH1cbiAgICBcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYXNwZWN0LXJhdGlvOiAxO1xuICB9XG5cbiAgLmRlZXBsaWItcHJldi1uZXh0LWxhYmVsIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG59XG5cbiNkZWVwbGliLW5hdi1tZW51IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZ2FwOiBtaW4oMmR2aCwgMWR2dyk7XG59XG5cbiNkZWVwbGliLXN0b3JhZ2UtbWV0ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMHB4O1xuICBsZWZ0OiAwcHg7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItZWxlbWVudC1jb2xvcik7XG4gIGJvcmRlcjogdmFyKC0tZGVlcGxpYi1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcGxpYi1ib3JkZXItcmFkaXVzKTtcbiAgei1pbmRleDogLTE7XG59XG5cbiNkZWVwbGliLXN0b3JhZ2UtYmFyIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMCU7XG4gIGJhY2tncm91bmQ6IHZhcigtLWRlZXBsaWItYWNjZW50LWNvbG9yKTtcbn1cbiIsIi5kZWVwbGliLWNoZWNrYm94LWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC4zZW07XG59XG5cbi5kZWVwbGliLWNoZWNrYm94LWNvbnRhaW5lciBpbnB1dC5kZWVwbGliLWlucHV0IHtcbiAgd2lkdGg6IG1pbig1dmgsIDIuNXZ3KTtcbiAgaGVpZ2h0OiBtaW4oNXZoLCAyLjV2dyk7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG59XG5cbi5kZWVwbGliLWNoZWNrYm94LWNvbnRhaW5lciBpbnB1dC5kZWVwbGliLWlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpjaGVja2VkOjpiZWZvcmUge1xuICB3aWR0aDogODAlO1xuICBoZWlnaHQ6IDgwJTtcbn1cblxuLmRlZXBsaWItaW5wdXQtY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAwLjNlbTtcbn1cblxuLmRlZXBsaWItaW5wdXQtY29udGFpbmVyOmhhcyhsYWJlbC5kZWVwbGliLXRleHQpIHtcbiAgbWFyZ2luLXRvcDogbWluKDF2aCwgMC41dncpO1xufVxuXG4uZGVlcGxpYi1pbnB1dC1jb250YWluZXIgaW5wdXQuZGVlcGxpYi1pbnB1dCB7XG4gIGZvbnQtc2l6ZTogMC42ZW07XG4gIHBhZGRpbmc6IDVweCAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgb3V0bGluZTogbm9uZTtcbiAgcGFkZGluZy1sZWZ0OiBtaW4oMXZoLCAwLjV2dyk7XG4gIHBhZGRpbmctcmlnaHQ6IG1pbigxdmgsIDAuNXZ3KTtcbiAgbWluLWhlaWdodDogbWluKDVkdmgsIDIuNWR2dyk7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG59XG5cblxuLmRlZXBsaWItaW5wdXQtY29udGFpbmVyIGlucHV0LmRlZXBsaWItaW5wdXRbdHlwZT1cImNvbG9yXCJdIHtcbiAgcGFkZGluZzogMHB4O1xuICB3aWR0aDogbWluKDV2aCwgMi41dncpO1xuICBoZWlnaHQ6IG1pbig1dmgsIDIuNXZ3KTtcbiAgYm9yZGVyLXJhZGl1czogMHB4O1xufVxuXG4uZGVlcGxpYi1pbnB1dC1jb250YWluZXIgaW5wdXQuZGVlcGxpYi1pbnB1dFt0eXBlPVwiY29sb3JcIl06ZGlzYWJsZWQge1xuICBib3JkZXI6IHZhcigtLWRlZXBsaWItYmxvY2tlZC1jb2xvcikgc29saWQgdmFyKC0tZGVlcGxpYi1ib3JkZXItd2lkdGgpO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG5pbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbixcbmlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICBtYXJnaW46IDA7XG59XG5cbmlucHV0W3R5cGU9bnVtYmVyXSB7XG4gIGFwcGVhcmFuY2U6IHRleHRmaWVsZDtcbiAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG59XG4iLCIuZGVlcGxpYi1oaWdobGlnaHQtdGV4dCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogcmdiKDIwMywgMTg1LCAyMyk7XG59XG5cbiNUZXh0QXJlYUNoYXRMb2dbZGF0YS1jb2xvcnRoZW1lPSdkYXJrJ10gZGl2LkNoYXRNZXNzYWdlLmRlZXBsaWItbWVzc2FnZSxcbiNUZXh0QXJlYUNoYXRMb2dbZGF0YS1jb2xvcnRoZW1lPSdkYXJrMiddIGRpdi5DaGF0TWVzc2FnZS5kZWVwbGliLW1lc3NhZ2Uge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWVsZW1lbnQtY29sb3IpO1xuICBib3JkZXI6IG1pbigwLjJkdmgsIDAuMWR2dykgc29saWQgdmFyKC0tZGVlcGxpYi1ib3JkZXItY29sb3IpO1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbn1cblxuI1RleHRBcmVhQ2hhdExvZyBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTtcbiAgYm9yZGVyOiBtaW4oMC4yZHZoLCAwLjFkdncpIHNvbGlkICM0NDAxNzE7XG4gIGNvbG9yOiAjMTExO1xuICBwYWRkaW5nLWxlZnQ6IG1pbigwLjZkdmgsIDAuM2R2dyk7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xufVxuXG4jVGV4dEFyZWFDaGF0TG9nW2RhdGEtY29sb3J0aGVtZT0nZGFyayddIGRpdi5DaGF0TWVzc2FnZS5kZWVwbGliLW1lc3NhZ2UgYSxcbiNUZXh0QXJlYUNoYXRMb2dbZGF0YS1jb2xvcnRoZW1lPSdkYXJrMiddIGRpdi5DaGF0TWVzc2FnZS5kZWVwbGliLW1lc3NhZ2UgYSB7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xufVxuXG4jVGV4dEFyZWFDaGF0TG9nIGRpdi5DaGF0TWVzc2FnZS5kZWVwbGliLW1lc3NhZ2UgYSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjMTExO1xufVxuIiwiLmRlZXBsaWItbW9kYWwge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMTAlO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgei1pbmRleDogMTAwMTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC41ZW07XG4gIHdpZHRoOiBtYXgoNTBkdncsIDI1ZHZoKTtcbiAgZm9udC1zaXplOiBtaW4oNGR2aCwgMmR2dyk7XG4gIHBhZGRpbmc6IG1pbigyZHZoLCAxZHZ3KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogbWluKDEuMmR2aCwgMC42ZHZ3KTtcbiAgYm9yZGVyOiBtaW4oMC4yZHZoLCAwLjFkdncpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG5cbiAgLmRlZXBsaWItbW9kYWwtaW5wdXQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGZvbnQtc2l6ZTogbWluKDIuNmR2aCwgMS44ZHZ3KTtcbiAgICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xuICAgIHBhZGRpbmc6IG1pbigxZHZoLCAwLjVkdncpO1xuICB9XG5cbiAgaW5wdXQuZGVlcGxpYi1tb2RhbC1pbnB1dCB7XG4gICAgbWF4LXdpZHRoOiBtYXgoNTBkdmgsIDI1ZHZ3KTtcbiAgfVxuXG4gIC5kZWVwbGliLW1vZGFsLWJ1dHRvbi1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIGdhcDogMC41ZW07XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAuZGVlcGxpYi1idXR0b24ge1xuICAgICAgZm9udC1zaXplOiAwLjhlbTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICAgIHBhZGRpbmc6IG1pbigwLjR2aCwgMC4ydncpIG1pbigydmgsIDF2dyk7XG5cbiAgICAgIC5idXR0b24tbGFiZWwge1xuICAgICAgICBkaXNwbGF5OiBjb250ZW50cztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGVlcGxpYi1tb2RhbC1wcm9tcHQtY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxufVxuXG4uZGVlcGxpYi1tb2RhbC1ibG9ja2VyIHtcbiAgei1pbmRleDogMTAwMDtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDBkdnc7XG4gIGhlaWdodDogMTAwZHZoO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG59XG4iXX0= */`;
|
|
878
919
|
|
|
879
920
|
// src/base/initialization.ts
|
|
880
921
|
var modStorage;
|
|
@@ -921,7 +962,6 @@ async function init(options) {
|
|
|
921
962
|
await options.initFunction?.();
|
|
922
963
|
if (options.mainMenuOptions)
|
|
923
964
|
MainMenu.setOptions(options.mainMenuOptions);
|
|
924
|
-
VersionModule.checkVersionUpdate();
|
|
925
965
|
for (const m of modules()) {
|
|
926
966
|
if (m.defaultSettings && hasGetter(m, "defaultSettings") && m.settings && hasSetter(m, "settings")) {
|
|
927
967
|
if (Object.entries(m.defaultSettings).length === 0) continue;
|
|
@@ -999,8 +1039,6 @@ var GUI = class _GUI extends BaseModule {
|
|
|
999
1039
|
_subscreens;
|
|
1000
1040
|
/** The mod's main menu screen. */
|
|
1001
1041
|
_mainMenu;
|
|
1002
|
-
/** The currently active subscreen, or `null` if none is active. */
|
|
1003
|
-
_currentSubscreen = null;
|
|
1004
1042
|
/** Options defining how the mod's settings button is displayed and behaves. */
|
|
1005
1043
|
_modButtonOptions;
|
|
1006
1044
|
/** Returns all registered subscreens. */
|
|
@@ -1011,38 +1049,12 @@ var GUI = class _GUI extends BaseModule {
|
|
|
1011
1049
|
get mainMenu() {
|
|
1012
1050
|
return this._mainMenu;
|
|
1013
1051
|
}
|
|
1014
|
-
/** Returns the currently active subscreen. */
|
|
1015
|
-
get currentSubscreen() {
|
|
1016
|
-
return this._currentSubscreen;
|
|
1017
|
-
}
|
|
1018
|
-
/**
|
|
1019
|
-
* Sets the current subscreen.
|
|
1020
|
-
* Accepts either a `BaseSubscreen` instance or the `name` of a subscreen.
|
|
1021
|
-
*
|
|
1022
|
-
* @throws If a string is provided but no subscreen with that name exists.
|
|
1023
|
-
*/
|
|
1024
|
-
set currentSubscreen(subscreen) {
|
|
1025
|
-
if (this._currentSubscreen) {
|
|
1026
|
-
this._currentSubscreen.unload();
|
|
1027
|
-
}
|
|
1028
|
-
if (typeof subscreen === "string") {
|
|
1029
|
-
const scr = this._subscreens?.find((s) => s.name === subscreen);
|
|
1030
|
-
if (!scr) throw `Failed to find screen name ${subscreen}`;
|
|
1031
|
-
this._currentSubscreen = scr;
|
|
1032
|
-
} else {
|
|
1033
|
-
this._currentSubscreen = subscreen;
|
|
1034
|
-
}
|
|
1035
|
-
if (this._currentSubscreen) {
|
|
1036
|
-
this._currentSubscreen.load();
|
|
1037
|
-
this._currentSubscreen.resize(true);
|
|
1038
|
-
}
|
|
1039
|
-
}
|
|
1040
1052
|
/**
|
|
1041
1053
|
* Creates the GUI instance and initializes the main menu.
|
|
1042
1054
|
*
|
|
1043
1055
|
* @throws If another `GUI` instance already exists.
|
|
1044
1056
|
*/
|
|
1045
|
-
constructor(
|
|
1057
|
+
constructor(guiOptions = null) {
|
|
1046
1058
|
super();
|
|
1047
1059
|
if (_GUI.instance) {
|
|
1048
1060
|
throw new Error("Duplicate initialization");
|
|
@@ -1050,9 +1062,9 @@ var GUI = class _GUI extends BaseModule {
|
|
|
1050
1062
|
for (const module of modules()) {
|
|
1051
1063
|
if (!module.settingsScreen) continue;
|
|
1052
1064
|
}
|
|
1053
|
-
this._mainMenu = new MainMenu(this);
|
|
1065
|
+
this._mainMenu = guiOptions?.mainMenu ? new guiOptions.mainMenu(this) : new MainMenu(this);
|
|
1054
1066
|
this._subscreens = [this._mainMenu];
|
|
1055
|
-
this._modButtonOptions =
|
|
1067
|
+
this._modButtonOptions = guiOptions;
|
|
1056
1068
|
_GUI.instance = this;
|
|
1057
1069
|
}
|
|
1058
1070
|
/**
|
|
@@ -1063,43 +1075,25 @@ var GUI = class _GUI extends BaseModule {
|
|
|
1063
1075
|
* - Sets up the main menu and its subscreens.
|
|
1064
1076
|
*/
|
|
1065
1077
|
load() {
|
|
1078
|
+
if (!this._modButtonOptions) return;
|
|
1066
1079
|
for (const module of modules()) {
|
|
1067
1080
|
if (!module.settingsScreen) continue;
|
|
1068
|
-
this._subscreens.push(new module.settingsScreen(
|
|
1081
|
+
this._subscreens.push(new module.settingsScreen(module));
|
|
1069
1082
|
}
|
|
1070
1083
|
this._mainMenu.subscreens = this._subscreens;
|
|
1071
1084
|
PreferenceRegisterExtensionSetting({
|
|
1072
|
-
Identifier: this._modButtonOptions.
|
|
1073
|
-
ButtonText: this._modButtonOptions.
|
|
1074
|
-
Image: this._modButtonOptions.
|
|
1075
|
-
load: /* @__PURE__ */ __name(() => {
|
|
1076
|
-
setSubscreen(
|
|
1085
|
+
Identifier: this._modButtonOptions.identifier,
|
|
1086
|
+
ButtonText: this._modButtonOptions.buttonText,
|
|
1087
|
+
Image: this._modButtonOptions.image,
|
|
1088
|
+
load: /* @__PURE__ */ __name(async () => {
|
|
1089
|
+
await setSubscreen(this._mainMenu);
|
|
1077
1090
|
}, "load"),
|
|
1078
1091
|
run: /* @__PURE__ */ __name(() => {
|
|
1079
|
-
if (this._currentSubscreen) {
|
|
1080
|
-
this._currentSubscreen.run();
|
|
1081
|
-
const newCanvasPosition = [MainCanvas.canvas.offsetLeft, MainCanvas.canvas.offsetTop, MainCanvas.canvas.clientWidth, MainCanvas.canvas.clientHeight];
|
|
1082
|
-
if (!CommonArraysEqual(newCanvasPosition, DrawCanvasPosition)) {
|
|
1083
|
-
DrawCanvasPosition = newCanvasPosition;
|
|
1084
|
-
this._currentSubscreen.resize(false);
|
|
1085
|
-
}
|
|
1086
|
-
}
|
|
1087
1092
|
}, "run"),
|
|
1088
1093
|
click: /* @__PURE__ */ __name(() => {
|
|
1089
|
-
if (this._currentSubscreen) {
|
|
1090
|
-
this._currentSubscreen.click();
|
|
1091
|
-
}
|
|
1092
1094
|
}, "click"),
|
|
1093
1095
|
exit: /* @__PURE__ */ __name(() => {
|
|
1094
|
-
|
|
1095
|
-
this._currentSubscreen.exit();
|
|
1096
|
-
}
|
|
1097
|
-
}, "exit"),
|
|
1098
|
-
unload: /* @__PURE__ */ __name(() => {
|
|
1099
|
-
if (this._currentSubscreen) {
|
|
1100
|
-
this._currentSubscreen.unload();
|
|
1101
|
-
}
|
|
1102
|
-
}, "unload")
|
|
1096
|
+
}, "exit")
|
|
1103
1097
|
});
|
|
1104
1098
|
}
|
|
1105
1099
|
};
|
|
@@ -1112,29 +1106,38 @@ var VersionModule = class _VersionModule extends BaseModule {
|
|
|
1112
1106
|
/** Whether the current session is running a new version compared to stored data */
|
|
1113
1107
|
static isItNewVersion = false;
|
|
1114
1108
|
/** The current mod version (retrieved from `ModSdkManager.ModInfo.version`) */
|
|
1115
|
-
static
|
|
1109
|
+
static version;
|
|
1116
1110
|
/** Message to display when a new version is detected */
|
|
1117
|
-
static
|
|
1111
|
+
static newVersionMessage = "";
|
|
1118
1112
|
/** List of registered migration handlers, sorted by version */
|
|
1119
|
-
static
|
|
1113
|
+
static migrators = [];
|
|
1114
|
+
/** Optional lifecycle hook. Runs before each migration */
|
|
1115
|
+
static beforeEach;
|
|
1116
|
+
/** Optional lifecycle hook. Runs after each migration */
|
|
1117
|
+
static afterEach;
|
|
1118
|
+
/** Optional lifecycle hook. Runs before all migrations */
|
|
1119
|
+
static beforeAll;
|
|
1120
|
+
/** Optional lifecycle hook. Runs after all migrations */
|
|
1121
|
+
static afterAll;
|
|
1122
|
+
constructor(options) {
|
|
1123
|
+
super();
|
|
1124
|
+
_VersionModule.newVersionMessage = options.newVersionMessage;
|
|
1125
|
+
_VersionModule.beforeEach = options.beforeEach;
|
|
1126
|
+
_VersionModule.afterEach = options.afterEach;
|
|
1127
|
+
_VersionModule.beforeAll = options.beforeAll;
|
|
1128
|
+
_VersionModule.afterAll = options.afterAll;
|
|
1129
|
+
}
|
|
1120
1130
|
/**
|
|
1121
1131
|
* Initializes the module on load:
|
|
1122
1132
|
* - Stores the current mod version.
|
|
1123
1133
|
* - Hooks into `ChatRoomSync` to show a "new version" message when applicable.
|
|
1124
1134
|
*/
|
|
1125
1135
|
load() {
|
|
1126
|
-
_VersionModule.
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
next(args);
|
|
1132
|
-
if (modStorage.playerStorage.GlobalModule.doShowNewVersionMessage && _VersionModule.isItNewVersion) {
|
|
1133
|
-
_VersionModule.sendNewVersionMessage();
|
|
1134
|
-
}
|
|
1135
|
-
},
|
|
1136
|
-
"VersionModule"
|
|
1137
|
-
);
|
|
1136
|
+
_VersionModule.version = ModSdkManager.ModInfo.version;
|
|
1137
|
+
_VersionModule.checkVersionUpdate();
|
|
1138
|
+
if (modStorage.playerStorage.GlobalModule.doShowNewVersionMessage && _VersionModule.isItNewVersion) {
|
|
1139
|
+
_VersionModule.sendNewVersionMessage();
|
|
1140
|
+
}
|
|
1138
1141
|
}
|
|
1139
1142
|
/**
|
|
1140
1143
|
* Checks if the stored version differs from the current version.
|
|
@@ -1145,9 +1148,9 @@ var VersionModule = class _VersionModule extends BaseModule {
|
|
|
1145
1148
|
* - Saves `modStorage`.
|
|
1146
1149
|
*/
|
|
1147
1150
|
static checkVersionUpdate() {
|
|
1148
|
-
const
|
|
1149
|
-
const
|
|
1150
|
-
if (_VersionModule.isNewVersion(
|
|
1151
|
+
const previousVersion = _VersionModule.loadVersion();
|
|
1152
|
+
const currentVersion = _VersionModule.version;
|
|
1153
|
+
if (_VersionModule.isNewVersion(previousVersion, currentVersion)) {
|
|
1151
1154
|
_VersionModule.isItNewVersion = true;
|
|
1152
1155
|
_VersionModule.checkVersionMigration();
|
|
1153
1156
|
_VersionModule.saveVersion();
|
|
@@ -1159,29 +1162,58 @@ var VersionModule = class _VersionModule extends BaseModule {
|
|
|
1159
1162
|
* is newer than the previously stored version.
|
|
1160
1163
|
*/
|
|
1161
1164
|
static checkVersionMigration() {
|
|
1162
|
-
const
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1165
|
+
const previousVersion = _VersionModule.loadVersion();
|
|
1166
|
+
const toMigrate = _VersionModule.migrators.filter(
|
|
1167
|
+
(m) => _VersionModule.isNewVersion(previousVersion, m.migrationVersion)
|
|
1168
|
+
);
|
|
1169
|
+
if (!toMigrate.length) return;
|
|
1170
|
+
_VersionModule.beforeAll?.();
|
|
1171
|
+
for (const migrator of toMigrate) {
|
|
1172
|
+
_VersionModule.beforeEach?.();
|
|
1173
|
+
migrator.migrate();
|
|
1174
|
+
deepLibLogger.info(
|
|
1175
|
+
`Migrating ${ModSdkManager.ModInfo.name} from ${previousVersion} to ${migrator.migrationVersion} with ${migrator.constructor.name}`
|
|
1176
|
+
);
|
|
1177
|
+
_VersionModule.afterEach?.();
|
|
1168
1178
|
}
|
|
1179
|
+
_VersionModule.afterAll?.();
|
|
1169
1180
|
}
|
|
1170
1181
|
/**
|
|
1171
1182
|
* Registers a new migrator for handling version-specific changes.
|
|
1172
1183
|
* Migrators are sorted by their `MigrationVersion` in ascending order.
|
|
1173
1184
|
*/
|
|
1174
1185
|
static registerMigrator(migrator) {
|
|
1175
|
-
_VersionModule.
|
|
1176
|
-
_VersionModule.
|
|
1177
|
-
}
|
|
1178
|
-
/** Sets the message that will be displayed when a new version is detected. */
|
|
1179
|
-
static setNewVersionMessage(newVersionMessage) {
|
|
1180
|
-
_VersionModule.NewVersionMessage = newVersionMessage;
|
|
1186
|
+
_VersionModule.migrators.push(migrator);
|
|
1187
|
+
_VersionModule.migrators.sort((a, b) => a.migrationVersion.localeCompare(b.migrationVersion));
|
|
1181
1188
|
}
|
|
1182
1189
|
/** Sends the currently configured "new version" message to the local player. */
|
|
1183
1190
|
static sendNewVersionMessage() {
|
|
1184
|
-
|
|
1191
|
+
const beepLogLength = FriendListBeepLog.push({
|
|
1192
|
+
MemberNumber: Player.MemberNumber,
|
|
1193
|
+
MemberName: ModSdkManager.ModInfo.name,
|
|
1194
|
+
ChatRoomName: getText("module.version.version_update"),
|
|
1195
|
+
ChatRoomSpace: "X",
|
|
1196
|
+
Private: false,
|
|
1197
|
+
Sent: false,
|
|
1198
|
+
Time: /* @__PURE__ */ new Date(),
|
|
1199
|
+
Message: _VersionModule.newVersionMessage
|
|
1200
|
+
});
|
|
1201
|
+
const beepIdx = beepLogLength - 1;
|
|
1202
|
+
const title = CommonStringPartitionReplace(getText("module.version.new_version_toast_title"), {
|
|
1203
|
+
$modName$: ModSdkManager.ModInfo.name,
|
|
1204
|
+
$modVersion$: _VersionModule.version
|
|
1205
|
+
}).join("");
|
|
1206
|
+
const data = FriendListBeepLog[beepIdx];
|
|
1207
|
+
ServerShowBeep(_VersionModule.newVersionMessage, 1e4, {
|
|
1208
|
+
memberNumber: data.MemberNumber,
|
|
1209
|
+
memberName: data.MemberName,
|
|
1210
|
+
chatRoomName: data.ChatRoomName,
|
|
1211
|
+
...data.Message && {
|
|
1212
|
+
onClick: /* @__PURE__ */ __name(() => {
|
|
1213
|
+
FriendListShowBeep(beepIdx);
|
|
1214
|
+
}, "onClick")
|
|
1215
|
+
}
|
|
1216
|
+
}, title);
|
|
1185
1217
|
}
|
|
1186
1218
|
/**
|
|
1187
1219
|
* Determines if a given `candidate` version is newer than the `current` version.
|
|
@@ -1206,7 +1238,7 @@ var VersionModule = class _VersionModule extends BaseModule {
|
|
|
1206
1238
|
/** Saves the current mod version into persistent player storage. */
|
|
1207
1239
|
static saveVersion() {
|
|
1208
1240
|
if (modStorage.playerStorage) {
|
|
1209
|
-
Player[ModSdkManager.ModInfo.name].Version = _VersionModule.
|
|
1241
|
+
Player[ModSdkManager.ModInfo.name].Version = _VersionModule.version;
|
|
1210
1242
|
}
|
|
1211
1243
|
}
|
|
1212
1244
|
/** Loads the stored mod version from persistent player storage. */
|
|
@@ -1220,9 +1252,9 @@ var GuiDebug = class extends BaseSubscreen {
|
|
|
1220
1252
|
static {
|
|
1221
1253
|
__name(this, "GuiDebug");
|
|
1222
1254
|
}
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
}
|
|
1255
|
+
static subscreenOptions = {
|
|
1256
|
+
name: "debug"
|
|
1257
|
+
};
|
|
1226
1258
|
get pageStructure() {
|
|
1227
1259
|
return [
|
|
1228
1260
|
[
|
|
@@ -1952,15 +1984,15 @@ var MainMenu = class _MainMenu extends BaseSubscreen {
|
|
|
1952
1984
|
}
|
|
1953
1985
|
subscreens = [];
|
|
1954
1986
|
static options = {};
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
}
|
|
1987
|
+
static subscreenOptions = {
|
|
1988
|
+
name: "mainmenu"
|
|
1989
|
+
};
|
|
1958
1990
|
constructor(module) {
|
|
1959
|
-
super(
|
|
1991
|
+
super(module);
|
|
1960
1992
|
this.subscreens = module.subscreens;
|
|
1961
1993
|
}
|
|
1962
1994
|
load() {
|
|
1963
|
-
if (!GUI.instance
|
|
1995
|
+
if (!GUI.instance || CurrentModule !== "DeepLibMod") {
|
|
1964
1996
|
this.setSubscreen(this);
|
|
1965
1997
|
return;
|
|
1966
1998
|
}
|
|
@@ -1981,21 +2013,21 @@ var MainMenu = class _MainMenu extends BaseSubscreen {
|
|
|
1981
2013
|
ElementMenu.AppendButton(menu, exitButton);
|
|
1982
2014
|
}
|
|
1983
2015
|
for (const screen of this.subscreens) {
|
|
1984
|
-
if (screen.name == "mainmenu") continue;
|
|
2016
|
+
if (screen.options.name == "mainmenu") continue;
|
|
1985
2017
|
const button = advElement.createButton({
|
|
1986
|
-
id: `${screen.name}-button`,
|
|
2018
|
+
id: `${screen.options.name}-button`,
|
|
1987
2019
|
onClick: /* @__PURE__ */ __name(() => {
|
|
1988
2020
|
this.setSubscreen(screen);
|
|
1989
2021
|
}, "onClick"),
|
|
1990
2022
|
size: [null, 90],
|
|
1991
2023
|
options: {
|
|
1992
|
-
image: screen.icon,
|
|
1993
|
-
label: getText(`mainmenu.button.${screen.name}`)
|
|
2024
|
+
image: screen.options.icon,
|
|
2025
|
+
label: getText(`mainmenu.button.${screen.options.name}`)
|
|
1994
2026
|
}
|
|
1995
2027
|
});
|
|
1996
2028
|
layout.appendToSettingsDiv(button);
|
|
1997
2029
|
}
|
|
1998
|
-
const miscDiv = layout.
|
|
2030
|
+
const miscDiv = layout.getMiscDiv();
|
|
1999
2031
|
layout.appendToSubscreen(miscDiv);
|
|
2000
2032
|
if (_MainMenu.options.wikiLink) {
|
|
2001
2033
|
const wikiButton = advElement.createButton({
|
|
@@ -2115,8 +2147,17 @@ var MainMenu = class _MainMenu extends BaseSubscreen {
|
|
|
2115
2147
|
exit() {
|
|
2116
2148
|
CharacterAppearanceForceUpCharacter = -1;
|
|
2117
2149
|
CharacterLoadCanvas(Player);
|
|
2118
|
-
this.
|
|
2119
|
-
|
|
2150
|
+
const returnScreen = typeof this.options.returnScreen === "function" ? this.options.returnScreen() : this.options.returnScreen;
|
|
2151
|
+
if (!returnScreen) {
|
|
2152
|
+
PreferenceOpenSubscreen("Extensions").then(() => {
|
|
2153
|
+
PreferenceSubscreenExtensionsClear();
|
|
2154
|
+
});
|
|
2155
|
+
} else if (returnScreen instanceof BaseSubscreen) {
|
|
2156
|
+
setSubscreen(returnScreen ?? null).then(() => {
|
|
2157
|
+
});
|
|
2158
|
+
} else if (Array.isArray(returnScreen)) {
|
|
2159
|
+
CommonSetScreen(...returnScreen);
|
|
2160
|
+
}
|
|
2120
2161
|
}
|
|
2121
2162
|
resize() {
|
|
2122
2163
|
super.resize();
|
|
@@ -2127,6 +2168,18 @@ var MainMenu = class _MainMenu extends BaseSubscreen {
|
|
|
2127
2168
|
_MainMenu.options = mainMenuOptions;
|
|
2128
2169
|
}
|
|
2129
2170
|
};
|
|
2171
|
+
async function PreferenceOpenSubscreen(subscreen, page = 1) {
|
|
2172
|
+
if (CurrentModule !== "Character" || CurrentScreen !== "Preference") {
|
|
2173
|
+
await CommonSetScreen("Character", "Preference");
|
|
2174
|
+
}
|
|
2175
|
+
PreferenceSubscreen?.unload?.();
|
|
2176
|
+
PreferenceSubscreen = PreferenceSubscreens.find((s) => s.name === subscreen) ?? null;
|
|
2177
|
+
if (!CommonIsNonNegativeInteger(page)) page = 1;
|
|
2178
|
+
PreferencePageCurrent = page;
|
|
2179
|
+
PreferenceMessage = "";
|
|
2180
|
+
PreferenceSubscreen?.load?.();
|
|
2181
|
+
}
|
|
2182
|
+
__name(PreferenceOpenSubscreen, "PreferenceOpenSubscreen");
|
|
2130
2183
|
|
|
2131
2184
|
// src/screens/import_export.ts
|
|
2132
2185
|
var GuiImportExport = class extends BaseSubscreen {
|
|
@@ -2134,11 +2187,11 @@ var GuiImportExport = class extends BaseSubscreen {
|
|
|
2134
2187
|
__name(this, "GuiImportExport");
|
|
2135
2188
|
}
|
|
2136
2189
|
importExportOptions;
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
}
|
|
2190
|
+
static subscreenOptions = {
|
|
2191
|
+
name: "import-export"
|
|
2192
|
+
};
|
|
2140
2193
|
constructor(importExportOptions) {
|
|
2141
|
-
super(
|
|
2194
|
+
super();
|
|
2142
2195
|
this.importExportOptions = importExportOptions;
|
|
2143
2196
|
}
|
|
2144
2197
|
load() {
|
|
@@ -2513,34 +2566,28 @@ __name(hasOverflow, "hasOverflow");
|
|
|
2513
2566
|
|
|
2514
2567
|
// src/utilities/elements/layout.ts
|
|
2515
2568
|
var layout = {
|
|
2516
|
-
createSubscreen: elementCreateSubscreenDiv,
|
|
2517
2569
|
getSubscreen: elementGetSubscreenDiv,
|
|
2518
2570
|
appendToSubscreen: elementAppendToSubscreenDiv,
|
|
2519
2571
|
removeSubscreen: elementRemoveSubscreenDiv,
|
|
2520
|
-
createSettingsDiv: elementCreateSettingsDiv,
|
|
2521
2572
|
getSettingsDiv: elementGetSettingsDiv,
|
|
2522
2573
|
appendToSettingsDiv: elementAppendToSettingsDiv,
|
|
2523
2574
|
removeSettingsDiv: elementRemoveSettingsDiv,
|
|
2524
|
-
createMiscDiv: elementCreateMiscDiv,
|
|
2525
2575
|
getMiscDiv: elementGetMiscDiv,
|
|
2526
2576
|
appendToMiscDiv: elementAppendToMiscDiv,
|
|
2527
2577
|
removeMiscDiv: elementRemoveMiscDiv
|
|
2528
2578
|
};
|
|
2529
|
-
function
|
|
2530
|
-
const subscreenDiv =
|
|
2579
|
+
function elementGetSubscreenDiv() {
|
|
2580
|
+
const subscreenDiv = ElementWrap("deeplib-subscreen");
|
|
2531
2581
|
if (subscreenDiv) {
|
|
2532
|
-
console.error("Subscreen already exists");
|
|
2533
2582
|
return subscreenDiv;
|
|
2534
2583
|
}
|
|
2535
|
-
const div =
|
|
2536
|
-
|
|
2537
|
-
|
|
2584
|
+
const div = ElementCreate({
|
|
2585
|
+
tag: "div",
|
|
2586
|
+
classList: ["deeplib-subscreen", "HideOnPopup"],
|
|
2587
|
+
attributes: { id: "deeplib-subscreen" }
|
|
2588
|
+
});
|
|
2538
2589
|
return document.body.appendChild(div);
|
|
2539
2590
|
}
|
|
2540
|
-
__name(elementCreateSubscreenDiv, "elementCreateSubscreenDiv");
|
|
2541
|
-
function elementGetSubscreenDiv() {
|
|
2542
|
-
return document.getElementById("deeplib-subscreen") ?? void 0;
|
|
2543
|
-
}
|
|
2544
2591
|
__name(elementGetSubscreenDiv, "elementGetSubscreenDiv");
|
|
2545
2592
|
function elementRemoveSubscreenDiv() {
|
|
2546
2593
|
return elementGetSubscreenDiv()?.remove();
|
|
@@ -2550,21 +2597,18 @@ function elementAppendToSubscreenDiv(...element) {
|
|
|
2550
2597
|
return elementGetSubscreenDiv()?.append(...element);
|
|
2551
2598
|
}
|
|
2552
2599
|
__name(elementAppendToSubscreenDiv, "elementAppendToSubscreenDiv");
|
|
2553
|
-
function
|
|
2554
|
-
const settingsDiv =
|
|
2600
|
+
function elementGetSettingsDiv() {
|
|
2601
|
+
const settingsDiv = ElementWrap("deeplib-settings");
|
|
2555
2602
|
if (settingsDiv) {
|
|
2556
|
-
console.error("Settings screen already exists");
|
|
2557
2603
|
return settingsDiv;
|
|
2558
2604
|
}
|
|
2559
|
-
const div =
|
|
2560
|
-
|
|
2561
|
-
|
|
2605
|
+
const div = ElementCreate({
|
|
2606
|
+
tag: "div",
|
|
2607
|
+
classList: ["deeplib-settings", "scroll-box"],
|
|
2608
|
+
attributes: { id: "deeplib-settings" }
|
|
2609
|
+
});
|
|
2562
2610
|
return div;
|
|
2563
2611
|
}
|
|
2564
|
-
__name(elementCreateSettingsDiv, "elementCreateSettingsDiv");
|
|
2565
|
-
function elementGetSettingsDiv() {
|
|
2566
|
-
return document.getElementById("deeplib-settings") ?? void 0;
|
|
2567
|
-
}
|
|
2568
2612
|
__name(elementGetSettingsDiv, "elementGetSettingsDiv");
|
|
2569
2613
|
function elementAppendToSettingsDiv(...element) {
|
|
2570
2614
|
return elementGetSettingsDiv()?.append(...element);
|
|
@@ -2574,21 +2618,18 @@ function elementRemoveSettingsDiv() {
|
|
|
2574
2618
|
return elementGetSettingsDiv()?.remove();
|
|
2575
2619
|
}
|
|
2576
2620
|
__name(elementRemoveSettingsDiv, "elementRemoveSettingsDiv");
|
|
2577
|
-
function
|
|
2578
|
-
const miscDiv =
|
|
2621
|
+
function elementGetMiscDiv() {
|
|
2622
|
+
const miscDiv = ElementWrap("deeplib-misc");
|
|
2579
2623
|
if (miscDiv) {
|
|
2580
|
-
console.error("Settings screen already exists");
|
|
2581
2624
|
return miscDiv;
|
|
2582
2625
|
}
|
|
2583
|
-
const div =
|
|
2584
|
-
|
|
2585
|
-
|
|
2626
|
+
const div = ElementCreate({
|
|
2627
|
+
tag: "div",
|
|
2628
|
+
classList: ["deeplib-misc"],
|
|
2629
|
+
attributes: { id: "deeplib-misc" }
|
|
2630
|
+
});
|
|
2586
2631
|
return div;
|
|
2587
2632
|
}
|
|
2588
|
-
__name(elementCreateMiscDiv, "elementCreateMiscDiv");
|
|
2589
|
-
function elementGetMiscDiv() {
|
|
2590
|
-
return document.getElementById("deeplib-misc");
|
|
2591
|
-
}
|
|
2592
2633
|
__name(elementGetMiscDiv, "elementGetMiscDiv");
|
|
2593
2634
|
function elementAppendToMiscDiv(...element) {
|
|
2594
2635
|
return elementGetMiscDiv()?.append(...element);
|