bc-deeplib 1.1.0 → 1.1.2

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.js CHANGED
@@ -204,12 +204,27 @@ var BaseModule = class {
204
204
  static {
205
205
  __name(this, "BaseModule");
206
206
  }
207
+ /**
208
+ * An optional UI screen for configuring this module's settings.
209
+ * Subclasses can override this getter to provide a `Subscreen` instance.
210
+ * Modules with screens are automatically registered to the main menu.
211
+ */
207
212
  get settingsScreen() {
208
213
  return null;
209
214
  }
215
+ /**
216
+ * The storage key under which this module's settings will be saved.
217
+ * Defaults to the class name.
218
+ *
219
+ * Subclasses can override this if they require a custom storage key.
220
+ */
210
221
  get settingsStorage() {
211
222
  return this.constructor.name;
212
223
  }
224
+ /**
225
+ * Retrieves the current settings for this module.
226
+ * If no settings exist yet, registers default settings first.
227
+ */
213
228
  get settings() {
214
229
  const modName = ModSdkManager.ModInfo.name;
215
230
  if (!this.settingsStorage) return {};
@@ -219,6 +234,10 @@ var BaseModule = class {
219
234
  } else if (!modStorage.playerStorage[this.settingsStorage]) this.registerDefaultSettings();
220
235
  return modStorage.playerStorage[this.settingsStorage];
221
236
  }
237
+ /**
238
+ * Persists new settings for this module.
239
+ * Automatically initializes storage and defaults if they don't exist.
240
+ */
222
241
  set settings(value) {
223
242
  const modName = ModSdkManager.ModInfo.name;
224
243
  const storage = new ModStorage(modName);
@@ -229,31 +248,55 @@ var BaseModule = class {
229
248
  } else if (!storage.playerStorage[this.settingsStorage]) this.registerDefaultSettings();
230
249
  storage.playerStorage[this.settingsStorage] = value;
231
250
  }
251
+ /**
252
+ * Initializes the module.
253
+ * Default implementation registers default settings immediately.
254
+ * Subclasses can override to perform additional setup.
255
+ */
232
256
  init() {
233
257
  this.registerDefaultSettings();
234
258
  }
259
+ /**
260
+ * Registers default settings for this module in persistent storage.
261
+ * Only runs if a storage key and default settings are defined.
262
+ *
263
+ * If some settings already exist, they will be merged with defaults.
264
+ * Existing values will NOT be overwritten.
265
+ */
235
266
  registerDefaultSettings() {
236
267
  const storage = this.settingsStorage;
237
268
  const defaults = this.defaultSettings;
238
269
  if (!storage || !defaults) return;
239
270
  Player[ModSdkManager.ModInfo.name][storage] = Object.assign(defaults, Player[ModSdkManager.ModInfo.name][storage] ?? {});
240
271
  }
272
+ /**
273
+ * Provides default settings for this module.
274
+ * Subclasses should override this getter to return their defaults.
275
+ */
241
276
  get defaultSettings() {
242
277
  return null;
243
278
  }
279
+ /**
280
+ * Called when the module is loaded into the system.
281
+ * Subclasses should override to perform data loading or initialization.
282
+ */
244
283
  load() {
245
284
  }
285
+ /**
286
+ * By default doesn't get called each frame, only once when the module is loaded.
287
+ * Subclasses can override to implement runtime logic.
288
+ */
246
289
  run() {
247
290
  }
291
+ /**
292
+ * Called when the module is being removed.
293
+ * Subclasses can override to perform cleanup or save final state.
294
+ */
248
295
  unload() {
249
296
  }
250
297
  };
251
298
 
252
299
  // src/base/base_subscreen.ts
253
- function getCurrentSubscreen() {
254
- return GUI.instance && GUI.instance.currentSubscreen;
255
- }
256
- __name(getCurrentSubscreen, "getCurrentSubscreen");
257
300
  function setSubscreen(subscreen) {
258
301
  if (!GUI.instance) {
259
302
  throw new Error("Attempt to set subscreen before init");
@@ -266,38 +309,62 @@ var BaseSubscreen = class _BaseSubscreen {
266
309
  static {
267
310
  __name(this, "BaseSubscreen");
268
311
  }
312
+ /** Global registry of currently rendered elements and their definitions. */
269
313
  static currentElements = [];
314
+ /** Tracks the currently visible page number (1-based index). */
270
315
  static currentPage = 1;
316
+ /** Runtime options for this subscreen. */
271
317
  options;
318
+ /** Reference to the module this subscreen belongs to. */
272
319
  module;
273
320
  constructor(subscreenOptions, module) {
274
321
  if (module) this.module = module;
275
322
  this.options = subscreenOptions || {};
276
323
  }
324
+ /**
325
+ * Logical name of this subscreen.
326
+ * Used for localization key resolution in `load()`.
327
+ * Subclasses should override this with a meaningful identifier.
328
+ */
277
329
  get name() {
278
330
  return "UNKNOWN";
279
331
  }
332
+ /**
333
+ * Path to or Base64 data for an icon representing this subscreen.
334
+ * Defaults to empty string (no icon).
335
+ */
280
336
  get icon() {
281
337
  return "";
282
338
  }
283
- get subscreenName() {
284
- return this.constructor.name;
285
- }
339
+ /** Changes the currently active subscreen. */
286
340
  setSubscreen(screen) {
287
341
  return setSubscreen(screen);
288
342
  }
343
+ /** Gets this subscreen's settings object from its parent module. */
289
344
  get settings() {
290
345
  return this.module.settings;
291
346
  }
347
+ /** Updates this subscreen's settings in its parent module. */
292
348
  set settings(value) {
293
349
  this.module.settings = value;
294
350
  }
351
+ /**
352
+ * Defines the paginated layout of the subscreen's settings UI.
353
+ * Each element in the outer array is a page; each page contains `SettingElement`s.
354
+ *
355
+ * Subclasses should override to define their actual UI structure.
356
+ */
295
357
  get pageStructure() {
296
358
  return [[]];
297
359
  }
360
+ /** Gets the currently visible page's settings elements. */
298
361
  get currentPage() {
299
362
  return this.pageStructure[Math.min(_BaseSubscreen.currentPage - 1, this.pageStructure.length - 1)];
300
363
  }
364
+ /**
365
+ * Changes the visible page in a multi-page subscreen.
366
+ * Automatically wraps around when going past the first or last page.
367
+ */
301
368
  changePage(page, setLabel) {
302
369
  const totalPages = this.pageStructure.length;
303
370
  if (page > totalPages) page = 1;
@@ -306,6 +373,10 @@ var BaseSubscreen = class _BaseSubscreen {
306
373
  this.managePageElementsVisibility();
307
374
  setLabel(`${_BaseSubscreen.currentPage} of ${this.pageStructure.length}`);
308
375
  }
376
+ /**
377
+ * Updates the DOM to show only elements belonging to the current page.
378
+ * All elements on other pages are hidden.
379
+ */
309
380
  managePageElementsVisibility() {
310
381
  this.pageStructure.forEach((item, ix) => {
311
382
  if (ix != _BaseSubscreen.currentPage - 1) {
@@ -319,19 +390,30 @@ var BaseSubscreen = class _BaseSubscreen {
319
390
  }
320
391
  });
321
392
  }
393
+ /**
394
+ * Called when this subscreen is first displayed.
395
+ * Builds the layout, initializes navigation, and renders all settings elements.
396
+ *
397
+ * Handles:
398
+ * - Ensuring each module with a settings screen has its defaults loaded
399
+ * - Creating navigation menus and back/next page controls
400
+ * - Building and appending UI elements based on `pageStructure`
401
+ * - Setting up exit button and tooltip
402
+ * - Resetting to page 1
403
+ */
322
404
  load() {
323
405
  for (const module of modules()) {
324
406
  if (!module.settingsScreen) continue;
325
407
  if (!module.settings || !Object.keys(module.settings).length) module.registerDefaultSettings();
326
408
  }
327
409
  _BaseSubscreen.currentPage = 1;
328
- layoutElement.createSubscreenDiv();
329
- const settingsElement = layoutElement.createSettingsDiv();
330
- layoutElement.appendToSubscreenDiv(settingsElement);
410
+ layout.createSubscreen();
411
+ const settingsElement = layout.createSettingsDiv();
412
+ layout.appendToSubscreen(settingsElement);
331
413
  const menu = ElementMenu.Create("deeplib-nav-menu", []);
332
- layoutElement.appendToSubscreenDiv(menu);
414
+ layout.appendToSubscreen(menu);
333
415
  if (this.pageStructure.length > 1) {
334
- const backNext = advancedElement.createBackNext({
416
+ const backNext = advElement.createBackNext({
335
417
  id: "deeplib-page-back-next",
336
418
  next: /* @__PURE__ */ __name(({ setLabel }) => this.changePage(_BaseSubscreen.currentPage + 1, setLabel), "next"),
337
419
  initialNextTooltip: getText("settings.button.next_button_hint"),
@@ -341,13 +423,13 @@ var BaseSubscreen = class _BaseSubscreen {
341
423
  });
342
424
  ElementMenu.PrependItem(menu, backNext);
343
425
  }
344
- const subscreenTitle = advancedElement.createLabel({
426
+ const subscreenTitle = advElement.createLabel({
345
427
  id: "deeplib-subscreen-title",
346
428
  label: getText(`${this.name}.title`).replace("$ModVersion", ModSdkManager.ModInfo.version)
347
429
  });
348
- layoutElement.appendToSubscreenDiv(subscreenTitle);
430
+ layout.appendToSubscreen(subscreenTitle);
349
431
  if (this.name !== "mainmenu") {
350
- const exitButton = advancedElement.createButton({
432
+ const exitButton = advElement.createButton({
351
433
  id: "deeplib-exit",
352
434
  size: [90, 90],
353
435
  image: `${PUBLIC_URL}/dl_images/exit.svg`,
@@ -358,8 +440,8 @@ var BaseSubscreen = class _BaseSubscreen {
358
440
  });
359
441
  ElementMenu.AppendButton(menu, exitButton);
360
442
  }
361
- const tooltip = advancedElement.createTooltip();
362
- layoutElement.appendToSubscreenDiv(tooltip);
443
+ const tooltip = advElement.createTooltip();
444
+ layout.appendToSubscreen(tooltip);
363
445
  this.pageStructure.forEach(
364
446
  (s) => s.forEach((item) => {
365
447
  let element;
@@ -367,42 +449,59 @@ var BaseSubscreen = class _BaseSubscreen {
367
449
  case "text":
368
450
  case "number":
369
451
  case "color":
370
- element = advancedElement.createInput(item);
452
+ element = advElement.createInput(item);
371
453
  break;
372
454
  case "checkbox":
373
- element = advancedElement.createCheckbox(item);
455
+ element = advElement.createCheckbox(item);
374
456
  break;
375
457
  case "button":
376
- element = advancedElement.createButton(item);
458
+ element = advElement.createButton(item);
377
459
  break;
378
460
  case "label":
379
- element = advancedElement.createLabel(item);
461
+ element = advElement.createLabel(item);
380
462
  break;
381
463
  case "custom":
382
- element = advancedElement.createCustom(item);
464
+ element = advElement.createCustom(item);
383
465
  break;
384
466
  }
385
- layoutElement.appendToSettingsDiv(element);
467
+ layout.appendToSettingsDiv(element);
386
468
  })
387
469
  );
388
470
  this.managePageElementsVisibility();
389
471
  CharacterAppearanceForceUpCharacter = Player.MemberNumber ?? -1;
390
472
  }
473
+ /**
474
+ * Called each frame while this subscreen is active.
475
+ * Default behavior draws the player's character if `drawCharacter` is enabled.
476
+ */
391
477
  run() {
392
478
  if (this.options.drawCharacter) DrawCharacter(Player, 50, 50, 0.9, false);
393
479
  }
480
+ /**
481
+ * Handles mouse clicks *on canvas* while the subscreen is active.
482
+ * Default implementation is empty — subclasses may override.
483
+ */
394
484
  click() {
395
485
  }
486
+ /**
487
+ * Exits this subscreen, returning to the main menu.
488
+ * Also saves persistent storage changes.
489
+ * Called after the `unload`.
490
+ */
396
491
  exit() {
397
492
  CharacterAppearanceForceUpCharacter = -1;
398
493
  CharacterLoadCanvas(Player);
399
494
  setSubscreen("mainmenu");
400
495
  modStorage.save();
401
496
  }
497
+ /**
498
+ * Called when the window is resized.
499
+ * Also checks for overflow in the settings div and applies styling accordingly.
500
+ */
402
501
  resize(onLoad = false) {
403
502
  const offset = this.options.drawCharacter ? 0 : 380;
404
- const subscreen = layoutElement.getSubscreenDiv();
405
- const settingsDiv = layoutElement.getSettingsDiv();
503
+ const subscreen = layout.getSubscreen();
504
+ const settingsDiv = layout.getSettingsDiv();
406
505
  ElementSetPosition(subscreen || "", 0, 0);
407
506
  ElementSetSize(subscreen || "", 2e3, 1e3);
408
507
  ElementSetFontSize(subscreen || "", "auto");
@@ -417,8 +516,8 @@ var BaseSubscreen = class _BaseSubscreen {
417
516
  ElementSetSize("deeplib-subscreen-title", 800, 60);
418
517
  ElementSetPosition("deeplib-nav-menu", 1905, 75, "top-right");
419
518
  ElementSetSize("deeplib-nav-menu", null, 90);
420
- ElementSetPosition(advancedElement.getTooltip() || "", 250, 850);
421
- ElementSetSize(advancedElement.getTooltip() || "", 1500, 70);
519
+ ElementSetPosition(advElement.getTooltip() || "", 250, 850);
520
+ ElementSetSize(advElement.getTooltip() || "", 1500, 70);
422
521
  _BaseSubscreen.currentElements.forEach((item) => {
423
522
  const options = item[1];
424
523
  domUtil.autoSetPosition(options.id, options.position);
@@ -432,9 +531,14 @@ var BaseSubscreen = class _BaseSubscreen {
432
531
  }
433
532
  }
434
533
  }
534
+ /**
535
+ * Called when this subscreen is being removed.
536
+ * Resets the static element registry and removes the subscreen from the layout.
537
+ * Called before `exit`.
538
+ */
435
539
  unload() {
436
540
  _BaseSubscreen.currentElements = [];
437
- layoutElement.removeSubscreenDiv();
541
+ layout.removeSubscreen();
438
542
  }
439
543
  };
440
544
 
@@ -446,8 +550,8 @@ var styles_default = `.deeplib-subscreen,
446
550
  --deeplib-element-hover-color: var(--tmd-element-hover, cyan);
447
551
  --deeplib-blocked-color: var(--tmd-blocked, red);
448
552
  --deeplib-text-color: var(--tmd-text, black);
449
- --deeplib-icon-color: var(--tmd-accent, white);
450
- --deeplib-icon-hover-color: var(--tmd-accent-hover, cyan);
553
+ --deeplib-icon-color: var(--tmd-accent, black);
554
+ --deeplib-icon-hover-color: var(--tmd-accent-hover, black);
451
555
  --deeplib-border-color: var(--tmd-accent, black);
452
556
  --deeplib-border-width: min(0.2vh, 0.1vw);
453
557
  --deeplib-border-width: min(0.2dvh, 0.1dvw);
@@ -735,7 +839,7 @@ input[type=number] {
735
839
  height: 100dvh;
736
840
  background-color: rgba(0, 0, 0, 0.5);
737
841
  }
738
- /*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL21lZGlhL0Rlby9OVk1FL1N0dWZmL0NvZGUvQkMvQkMtRGVlcExpYi9zcmMvc3R5bGVzIiwic291cmNlcyI6WyJ2YXJzLnNjc3MiLCJidXR0b25zLnNjc3MiLCJlbGVtZW50cy5zY3NzIiwiaW5wdXRzLnNjc3MiLCJtZXNzYWdlcy5zY3NzIiwibW9kYWwuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0VBRUU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUNiRjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0Y7QUFBQTtFQUVFOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7RUFDQTtFQUNBOzs7QUFHRjtFQUNFOzs7QUMzQ0Y7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFNRTtFQUNBOztBQU5BO0VBQ0U7RUFDQTs7QUFPSjtFQUNFOzs7QUFJSjtFQUNFO0VBQ0E7RUFDQTs7O0FDdEZGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBSUY7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBOzs7QUFHRjtBQUFBO0VBRUU7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBOzs7QUM3REY7RUFDRTtFQUNBOzs7QUFHRjtBQUFBO0VBRUU7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7QUFBQTtFQUVFOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7O0FDN0JGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTs7O0FBTVI7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSIsInNvdXJjZXNDb250ZW50IjpbIi5kZWVwbGliLXN1YnNjcmVlbixcbi5kZWVwbGliLW1vZGFsIHtcbiAgLS1kZWVwbGliLWJhY2tncm91bmQtY29sb3I6IHZhcigtLXRtZC1tYWluLCB3aGl0ZSk7XG4gIC0tZGVlcGxpYi1lbGVtZW50LWNvbG9yOiB2YXIoLS10bWQtZWxlbWVudCwgd2hpdGUpO1xuICAtLWRlZXBsaWItZWxlbWVudC1ob3Zlci1jb2xvcjogdmFyKC0tdG1kLWVsZW1lbnQtaG92ZXIsIGN5YW4pO1xuICAtLWRlZXBsaWItYmxvY2tlZC1jb2xvcjogdmFyKC0tdG1kLWJsb2NrZWQsIHJlZCk7XG4gIC0tZGVlcGxpYi10ZXh0LWNvbG9yOiB2YXIoLS10bWQtdGV4dCwgYmxhY2spO1xuICAtLWRlZXBsaWItaWNvbi1jb2xvcjogdmFyKC0tdG1kLWFjY2VudCwgd2hpdGUpO1xuICAtLWRlZXBsaWItaWNvbi1ob3Zlci1jb2xvcjogdmFyKC0tdG1kLWFjY2VudC1ob3ZlciwgY3lhbik7XG4gIC0tZGVlcGxpYi1ib3JkZXItY29sb3I6IHZhcigtLXRtZC1hY2NlbnQsIGJsYWNrKTtcbiAgLS1kZWVwbGliLWJvcmRlci13aWR0aDogbWluKDAuMnZoLCAwLjF2dyk7XG4gIC0tZGVlcGxpYi1ib3JkZXItd2lkdGg6IG1pbigwLjJkdmgsIDAuMWR2dyk7XG4gIC0tZGVlcGxpYi1ib3JkZXItcmFkaXVzOiBtaW4oMXZoLCAwLjV2dyk7XG4gIC0tZGVlcGxpYi1ib3JkZXItcmFkaXVzOiBtaW4oMWR2aCwgMC41ZHZ3KTtcbn1cbiIsIi5kZWVwbGliLWJ1dHRvbiB7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4uZGVlcGxpYi1idXR0b24uYnV0dG9uLXN0eWxpbmcsXG4uZGVlcGxpYi1idXR0b24uYnV0dG9uLXN0eWxpbmc6OmJlZm9yZSB7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG59XG5cbi5kZWVwbGliLWJ1dHRvbiBpbWcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMCU7XG4gIGxlZnQ6IDAlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWljb24tY29sb3IpO1xuICBiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6IG11bHRpcGx5O1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIG1hc2stcG9zaXRpb246IGxlZnQ7XG4gIG1hc2stc2l6ZTogY29udGFpbjtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgbWFzay1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xuXG4gIGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLWltYWdlKTtcbiAgbWFzay1pbWFnZTogdmFyKC0taW1hZ2UpO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmRlZXBsaWItYnV0dG9uOmhvdmVyIGltZyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItaWNvbi1ob3Zlci1jb2xvcik7XG59XG5cbi5kZWVwbGliLWJ1dHRvbiAuYnV0dG9uLWxhYmVsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG4gIGZvbnQtc2l6ZTogbWluKDMuNmR2aCwgMS44ZHZ3KTtcbn1cblxuLmRlZXBsaWItYnV0dG9uIC5idXR0b24tdG9vbHRpcCB7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG59XG4iLCIjZGVlcGxpYi1wYWdlLWxhYmVsIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbiNkZWVwbGliLXN1YnNjcmVlbi10aXRsZSB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xufVxuXG4uZGVlcGxpYi10ZXh0IHtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG59XG5cbi5kZWVwbGliLXN1YnNjcmVlbiB7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5kZWVwbGliLXN1YnNjcmVlbiAqIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcbn1cblxuLmRlZXBsaWItc2V0dGluZ3Mge1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLWF1dG8tcm93czogbWluLWNvbnRlbnQ7XG4gIHBhZGRpbmc6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gIGdhcDogMC4zZW07XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbn1cblxuLmRlZXBsaWItbWlzYyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgZ2FwOiBtaW4oMXZoLCAwLjV2dyk7XG59XG5cbi5kZWVwbGliLXRvb2x0aXAge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWVsZW1lbnQtY29sb3IpO1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gIHBhZGRpbmc6IG1pbigxdmgsIDAuNXZ3KTtcbiAgZm9udC1zaXplOiAwLjhlbTtcbiAgYm9yZGVyOiBtaW4oMC4ydmgsIDAuMXZ3KSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcik7XG59XG5cbi5kZWVwbGliLW92ZXJmbG93LWJveCB7XG4gIGJvcmRlcjogdmFyKC0tZGVlcGxpYi1ib3JkZXItY29sb3IpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLXdpZHRoKTtcbn1cblxuLmRlZXBsaWItcHJldi1uZXh0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBnYXA6IG1pbigyZHZoLCAxZHZ3KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gIGJvcmRlcjogbWluKDAuMnZoLCAwLjF2dykgc29saWQgdmFyKC0tZGVlcGxpYi1ib3JkZXItY29sb3IpO1xuXG4gIC5kZWVwbGliLXByZXYtbmV4dC1idXR0b24ge1xuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWhvdmVyLWNvbG9yKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWRlZXBsaWItYm9yZGVyLXJhZGl1cyk7XG4gICAgfVxuICAgIFxuICAgIGhlaWdodDogMTAwJTtcbiAgICBhc3BlY3QtcmF0aW86IDE7XG4gIH1cblxuICAuZGVlcGxpYi1wcmV2LW5leHQtbGFiZWwge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cbn1cblxuI2RlZXBsaWItbmF2LW1lbnUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBnYXA6IG1pbigyZHZoLCAxZHZ3KTtcbn0iLCIuZGVlcGxpYi1jaGVja2JveC1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuM2VtO1xufVxuXG4uZGVlcGxpYi1jaGVja2JveC1jb250YWluZXIgaW5wdXQuZGVlcGxpYi1pbnB1dCB7XG4gIHdpZHRoOiBtaW4oNXZoLCAyLjV2dyk7XG4gIGhlaWdodDogbWluKDV2aCwgMi41dncpO1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xufVxuXG4uZGVlcGxpYi1jaGVja2JveC1jb250YWluZXIgaW5wdXQuZGVlcGxpYi1pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06Y2hlY2tlZDo6YmVmb3JlIHtcbiAgd2lkdGg6IDgwJTtcbiAgaGVpZ2h0OiA4MCU7XG59XG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC4zZW07XG59XG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lcjpoYXMobGFiZWwuZGVlcGxpYi10ZXh0KSB7XG4gIG1hcmdpbi10b3A6IG1pbigxdmgsIDAuNXZ3KTtcbn1cblxuLmRlZXBsaWItaW5wdXQtY29udGFpbmVyIGlucHV0LmRlZXBsaWItaW5wdXQge1xuICBmb250LXNpemU6IDAuNmVtO1xuICBwYWRkaW5nOiA1cHggMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHBhZGRpbmctbGVmdDogbWluKDF2aCwgMC41dncpO1xuICBwYWRkaW5nLXJpZ2h0OiBtaW4oMXZoLCAwLjV2dyk7XG4gIG1pbi1oZWlnaHQ6IG1pbig1ZHZoLCAyLjVkdncpO1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xufVxuXG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lciBpbnB1dC5kZWVwbGliLWlucHV0W3R5cGU9XCJjb2xvclwiXSB7XG4gIHBhZGRpbmc6IDBweDtcbiAgd2lkdGg6IG1pbig1dmgsIDIuNXZ3KTtcbiAgaGVpZ2h0OiBtaW4oNXZoLCAyLjV2dyk7XG4gIGJvcmRlci1yYWRpdXM6IDBweDtcbn1cblxuLmRlZXBsaWItaW5wdXQtY29udGFpbmVyIGlucHV0LmRlZXBsaWItaW5wdXRbdHlwZT1cImNvbG9yXCJdOmRpc2FibGVkIHtcbiAgYm9yZGVyOiB2YXIoLS1kZWVwbGliLWJsb2NrZWQtY29sb3IpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLXdpZHRoKTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sXG5pbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgbWFyZ2luOiAwO1xufVxuXG5pbnB1dFt0eXBlPW51bWJlcl0ge1xuICBhcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gIC1tb3otYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xufVxuIiwiLmRlZXBsaWItaGlnaGxpZ2h0LXRleHQge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6IHJnYigyMDMsIDE4NSwgMjMpO1xufVxuXG4jVGV4dEFyZWFDaGF0TG9nW2RhdGEtY29sb3J0aGVtZT0nZGFyayddIGRpdi5DaGF0TWVzc2FnZS5kZWVwbGliLW1lc3NhZ2UsXG4jVGV4dEFyZWFDaGF0TG9nW2RhdGEtY29sb3J0aGVtZT0nZGFyazInXSBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWNvbG9yKTtcbiAgYm9yZGVyOiBtaW4oMC4yZHZoLCAwLjFkdncpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG59XG5cbiNUZXh0QXJlYUNoYXRMb2cgZGl2LkNoYXRNZXNzYWdlLmRlZXBsaWItbWVzc2FnZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG4gIGJvcmRlcjogbWluKDAuMmR2aCwgMC4xZHZ3KSBzb2xpZCAjNDQwMTcxO1xuICBjb2xvcjogIzExMTtcbiAgcGFkZGluZy1sZWZ0OiBtaW4oMC42ZHZoLCAwLjNkdncpO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbn1cblxuI1RleHRBcmVhQ2hhdExvZ1tkYXRhLWNvbG9ydGhlbWU9J2RhcmsnXSBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIGEsXG4jVGV4dEFyZWFDaGF0TG9nW2RhdGEtY29sb3J0aGVtZT0nZGFyazInXSBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIGEge1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbn1cblxuI1RleHRBcmVhQ2hhdExvZyBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIGEge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogIzExMTtcbn1cbiIsIi5kZWVwbGliLW1vZGFsIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDEwJTtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gIHotaW5kZXg6IDEwMDE7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuNWVtO1xuICB3aWR0aDogbWF4KDUwZHZ3LCAyNWR2aCk7XG4gIGZvbnQtc2l6ZTogbWluKDRkdmgsIDJkdncpO1xuICBwYWRkaW5nOiBtaW4oMmR2aCwgMWR2dyk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItZWxlbWVudC1jb2xvcik7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjJkdmgsIDAuNmR2dyk7XG4gIGJvcmRlcjogbWluKDAuMmR2aCwgMC4xZHZ3KSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xuXG4gIC5kZWVwbGliLW1vZGFsLWlucHV0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBmb250LXNpemU6IG1pbigyLjZkdmgsIDEuOGR2dyk7XG4gICAgYm9yZGVyLXJhZGl1czogbWluKDEuMGR2aCwgMC41ZHZ3KTtcbiAgICBwYWRkaW5nOiBtaW4oMWR2aCwgMC41ZHZ3KTtcbiAgfVxuXG4gIGlucHV0LmRlZXBsaWItbW9kYWwtaW5wdXQge1xuICAgIG1heC13aWR0aDogbWF4KDUwZHZoLCAyNWR2dyk7XG4gIH1cblxuICAuZGVlcGxpYi1tb2RhbC1idXR0b24tY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBnYXA6IDAuNWVtO1xuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgLmRlZXBsaWItYnV0dG9uIHtcbiAgICAgIGZvbnQtc2l6ZTogMC44ZW07XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgICBwYWRkaW5nOiBtaW4oMC40dmgsIDAuMnZ3KSBtaW4oMnZoLCAxdncpO1xuXG4gICAgICAuYnV0dG9uLWxhYmVsIHtcbiAgICAgICAgZGlzcGxheTogY29udGVudHM7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi5kZWVwbGliLW1vZGFsLWJsb2NrZXIge1xuICB6LWluZGV4OiAxMDAwO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMGR2dztcbiAgaGVpZ2h0OiAxMDBkdmg7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbiJdfQ== */`;
842
+ /*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL21lZGlhL05WTUUvU3R1ZmYvQ29kZS9CQy9CQy1EZWVwTGliL3NyYy9zdHlsZXMiLCJzb3VyY2VzIjpbInZhcnMuc2NzcyIsImJ1dHRvbnMuc2NzcyIsImVsZW1lbnRzLnNjc3MiLCJpbnB1dHMuc2NzcyIsIm1lc3NhZ2VzLnNjc3MiLCJtb2RhbC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7RUFFRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQ2JGO0VBQ0U7RUFDQTtFQUNBOzs7QUFHRjtBQUFBO0VBRUU7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7OztBQzNDRjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBOzs7QUFHRjtFQUNFOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQU1FO0VBQ0E7O0FBTkE7RUFDRTtFQUNBOztBQU9KO0VBQ0U7OztBQUlKO0VBQ0U7RUFDQTtFQUNBOzs7QUN0RkY7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFJRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQUdGO0FBQUE7RUFFRTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQzdERjtFQUNFO0VBQ0E7OztBQUdGO0FBQUE7RUFFRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtBQUFBO0VBRUU7OztBQUdGO0VBQ0U7RUFDQTtFQUNBOzs7QUM3QkY7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOzs7QUFNUjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBIiwic291cmNlc0NvbnRlbnQiOlsiLmRlZXBsaWItc3Vic2NyZWVuLFxuLmRlZXBsaWItbW9kYWwge1xuICAtLWRlZXBsaWItYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdG1kLW1haW4sIHdoaXRlKTtcbiAgLS1kZWVwbGliLWVsZW1lbnQtY29sb3I6IHZhcigtLXRtZC1lbGVtZW50LCB3aGl0ZSk7XG4gIC0tZGVlcGxpYi1lbGVtZW50LWhvdmVyLWNvbG9yOiB2YXIoLS10bWQtZWxlbWVudC1ob3ZlciwgY3lhbik7XG4gIC0tZGVlcGxpYi1ibG9ja2VkLWNvbG9yOiB2YXIoLS10bWQtYmxvY2tlZCwgcmVkKTtcbiAgLS1kZWVwbGliLXRleHQtY29sb3I6IHZhcigtLXRtZC10ZXh0LCBibGFjayk7XG4gIC0tZGVlcGxpYi1pY29uLWNvbG9yOiB2YXIoLS10bWQtYWNjZW50LCBibGFjayk7XG4gIC0tZGVlcGxpYi1pY29uLWhvdmVyLWNvbG9yOiB2YXIoLS10bWQtYWNjZW50LWhvdmVyLCBibGFjayk7XG4gIC0tZGVlcGxpYi1ib3JkZXItY29sb3I6IHZhcigtLXRtZC1hY2NlbnQsIGJsYWNrKTtcbiAgLS1kZWVwbGliLWJvcmRlci13aWR0aDogbWluKDAuMnZoLCAwLjF2dyk7XG4gIC0tZGVlcGxpYi1ib3JkZXItd2lkdGg6IG1pbigwLjJkdmgsIDAuMWR2dyk7XG4gIC0tZGVlcGxpYi1ib3JkZXItcmFkaXVzOiBtaW4oMXZoLCAwLjV2dyk7XG4gIC0tZGVlcGxpYi1ib3JkZXItcmFkaXVzOiBtaW4oMWR2aCwgMC41ZHZ3KTtcbn1cbiIsIi5kZWVwbGliLWJ1dHRvbiB7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4uZGVlcGxpYi1idXR0b24uYnV0dG9uLXN0eWxpbmcsXG4uZGVlcGxpYi1idXR0b24uYnV0dG9uLXN0eWxpbmc6OmJlZm9yZSB7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG59XG5cbi5kZWVwbGliLWJ1dHRvbiBpbWcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMCU7XG4gIGxlZnQ6IDAlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWljb24tY29sb3IpO1xuICBiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6IG11bHRpcGx5O1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIG1hc2stcG9zaXRpb246IGxlZnQ7XG4gIG1hc2stc2l6ZTogY29udGFpbjtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgbWFzay1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xuXG4gIGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLWltYWdlKTtcbiAgbWFzay1pbWFnZTogdmFyKC0taW1hZ2UpO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmRlZXBsaWItYnV0dG9uOmhvdmVyIGltZyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItaWNvbi1ob3Zlci1jb2xvcik7XG59XG5cbi5kZWVwbGliLWJ1dHRvbiAuYnV0dG9uLWxhYmVsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG4gIGZvbnQtc2l6ZTogbWluKDMuNmR2aCwgMS44ZHZ3KTtcbn1cblxuLmRlZXBsaWItYnV0dG9uIC5idXR0b24tdG9vbHRpcCB7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG59XG4iLCIjZGVlcGxpYi1wYWdlLWxhYmVsIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbiNkZWVwbGliLXN1YnNjcmVlbi10aXRsZSB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xufVxuXG4uZGVlcGxpYi10ZXh0IHtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG59XG5cbi5kZWVwbGliLXN1YnNjcmVlbiB7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5kZWVwbGliLXN1YnNjcmVlbiAqIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcbn1cblxuLmRlZXBsaWItc2V0dGluZ3Mge1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLWF1dG8tcm93czogbWluLWNvbnRlbnQ7XG4gIHBhZGRpbmc6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gIGdhcDogMC4zZW07XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbn1cblxuLmRlZXBsaWItbWlzYyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgZ2FwOiBtaW4oMXZoLCAwLjV2dyk7XG59XG5cbi5kZWVwbGliLXRvb2x0aXAge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWVsZW1lbnQtY29sb3IpO1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gIHBhZGRpbmc6IG1pbigxdmgsIDAuNXZ3KTtcbiAgZm9udC1zaXplOiAwLjhlbTtcbiAgYm9yZGVyOiBtaW4oMC4ydmgsIDAuMXZ3KSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcik7XG59XG5cbi5kZWVwbGliLW92ZXJmbG93LWJveCB7XG4gIGJvcmRlcjogdmFyKC0tZGVlcGxpYi1ib3JkZXItY29sb3IpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLXdpZHRoKTtcbn1cblxuLmRlZXBsaWItcHJldi1uZXh0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBnYXA6IG1pbigyZHZoLCAxZHZ3KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gIGJvcmRlcjogbWluKDAuMnZoLCAwLjF2dykgc29saWQgdmFyKC0tZGVlcGxpYi1ib3JkZXItY29sb3IpO1xuXG4gIC5kZWVwbGliLXByZXYtbmV4dC1idXR0b24ge1xuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWhvdmVyLWNvbG9yKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWRlZXBsaWItYm9yZGVyLXJhZGl1cyk7XG4gICAgfVxuICAgIFxuICAgIGhlaWdodDogMTAwJTtcbiAgICBhc3BlY3QtcmF0aW86IDE7XG4gIH1cblxuICAuZGVlcGxpYi1wcmV2LW5leHQtbGFiZWwge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cbn1cblxuI2RlZXBsaWItbmF2LW1lbnUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBnYXA6IG1pbigyZHZoLCAxZHZ3KTtcbn0iLCIuZGVlcGxpYi1jaGVja2JveC1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuM2VtO1xufVxuXG4uZGVlcGxpYi1jaGVja2JveC1jb250YWluZXIgaW5wdXQuZGVlcGxpYi1pbnB1dCB7XG4gIHdpZHRoOiBtaW4oNXZoLCAyLjV2dyk7XG4gIGhlaWdodDogbWluKDV2aCwgMi41dncpO1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xufVxuXG4uZGVlcGxpYi1jaGVja2JveC1jb250YWluZXIgaW5wdXQuZGVlcGxpYi1pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06Y2hlY2tlZDo6YmVmb3JlIHtcbiAgd2lkdGg6IDgwJTtcbiAgaGVpZ2h0OiA4MCU7XG59XG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC4zZW07XG59XG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lcjpoYXMobGFiZWwuZGVlcGxpYi10ZXh0KSB7XG4gIG1hcmdpbi10b3A6IG1pbigxdmgsIDAuNXZ3KTtcbn1cblxuLmRlZXBsaWItaW5wdXQtY29udGFpbmVyIGlucHV0LmRlZXBsaWItaW5wdXQge1xuICBmb250LXNpemU6IDAuNmVtO1xuICBwYWRkaW5nOiA1cHggMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHBhZGRpbmctbGVmdDogbWluKDF2aCwgMC41dncpO1xuICBwYWRkaW5nLXJpZ2h0OiBtaW4oMXZoLCAwLjV2dyk7XG4gIG1pbi1oZWlnaHQ6IG1pbig1ZHZoLCAyLjVkdncpO1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xufVxuXG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lciBpbnB1dC5kZWVwbGliLWlucHV0W3R5cGU9XCJjb2xvclwiXSB7XG4gIHBhZGRpbmc6IDBweDtcbiAgd2lkdGg6IG1pbig1dmgsIDIuNXZ3KTtcbiAgaGVpZ2h0OiBtaW4oNXZoLCAyLjV2dyk7XG4gIGJvcmRlci1yYWRpdXM6IDBweDtcbn1cblxuLmRlZXBsaWItaW5wdXQtY29udGFpbmVyIGlucHV0LmRlZXBsaWItaW5wdXRbdHlwZT1cImNvbG9yXCJdOmRpc2FibGVkIHtcbiAgYm9yZGVyOiB2YXIoLS1kZWVwbGliLWJsb2NrZWQtY29sb3IpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLXdpZHRoKTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sXG5pbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgbWFyZ2luOiAwO1xufVxuXG5pbnB1dFt0eXBlPW51bWJlcl0ge1xuICBhcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gIC1tb3otYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xufVxuIiwiLmRlZXBsaWItaGlnaGxpZ2h0LXRleHQge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6IHJnYigyMDMsIDE4NSwgMjMpO1xufVxuXG4jVGV4dEFyZWFDaGF0TG9nW2RhdGEtY29sb3J0aGVtZT0nZGFyayddIGRpdi5DaGF0TWVzc2FnZS5kZWVwbGliLW1lc3NhZ2UsXG4jVGV4dEFyZWFDaGF0TG9nW2RhdGEtY29sb3J0aGVtZT0nZGFyazInXSBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWNvbG9yKTtcbiAgYm9yZGVyOiBtaW4oMC4yZHZoLCAwLjFkdncpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG59XG5cbiNUZXh0QXJlYUNoYXRMb2cgZGl2LkNoYXRNZXNzYWdlLmRlZXBsaWItbWVzc2FnZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG4gIGJvcmRlcjogbWluKDAuMmR2aCwgMC4xZHZ3KSBzb2xpZCAjNDQwMTcxO1xuICBjb2xvcjogIzExMTtcbiAgcGFkZGluZy1sZWZ0OiBtaW4oMC42ZHZoLCAwLjNkdncpO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbn1cblxuI1RleHRBcmVhQ2hhdExvZ1tkYXRhLWNvbG9ydGhlbWU9J2RhcmsnXSBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIGEsXG4jVGV4dEFyZWFDaGF0TG9nW2RhdGEtY29sb3J0aGVtZT0nZGFyazInXSBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIGEge1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbn1cblxuI1RleHRBcmVhQ2hhdExvZyBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIGEge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogIzExMTtcbn1cbiIsIi5kZWVwbGliLW1vZGFsIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDEwJTtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gIHotaW5kZXg6IDEwMDE7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuNWVtO1xuICB3aWR0aDogbWF4KDUwZHZ3LCAyNWR2aCk7XG4gIGZvbnQtc2l6ZTogbWluKDRkdmgsIDJkdncpO1xuICBwYWRkaW5nOiBtaW4oMmR2aCwgMWR2dyk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItZWxlbWVudC1jb2xvcik7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjJkdmgsIDAuNmR2dyk7XG4gIGJvcmRlcjogbWluKDAuMmR2aCwgMC4xZHZ3KSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xuXG4gIC5kZWVwbGliLW1vZGFsLWlucHV0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBmb250LXNpemU6IG1pbigyLjZkdmgsIDEuOGR2dyk7XG4gICAgYm9yZGVyLXJhZGl1czogbWluKDEuMGR2aCwgMC41ZHZ3KTtcbiAgICBwYWRkaW5nOiBtaW4oMWR2aCwgMC41ZHZ3KTtcbiAgfVxuXG4gIGlucHV0LmRlZXBsaWItbW9kYWwtaW5wdXQge1xuICAgIG1heC13aWR0aDogbWF4KDUwZHZoLCAyNWR2dyk7XG4gIH1cblxuICAuZGVlcGxpYi1tb2RhbC1idXR0b24tY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBnYXA6IDAuNWVtO1xuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgLmRlZXBsaWItYnV0dG9uIHtcbiAgICAgIGZvbnQtc2l6ZTogMC44ZW07XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgICBwYWRkaW5nOiBtaW4oMC40dmgsIDAuMnZ3KSBtaW4oMnZoLCAxdncpO1xuXG4gICAgICAuYnV0dG9uLWxhYmVsIHtcbiAgICAgICAgZGlzcGxheTogY29udGVudHM7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi5kZWVwbGliLW1vZGFsLWJsb2NrZXIge1xuICB6LWluZGV4OiAxMDAwO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMGR2dztcbiAgaGVpZ2h0OiAxMDBkdmg7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbiJdfQ== */`;
739
843
 
740
844
  // src/base/initialization.ts
741
845
  var modStorage;
@@ -769,11 +873,7 @@ async function init(options) {
769
873
  const MOD_VERSION = ModSdkManager.ModInfo.version;
770
874
  if (window[MOD_NAME + "Loaded"]) return;
771
875
  modStorage.load();
772
- if (options.pathToTranslationsFolder) {
773
- await Localization.init({
774
- pathToTranslationsFolder: options.pathToTranslationsFolder
775
- });
776
- }
876
+ await Localization.init(options.translationOptions);
777
877
  if (options.modules && !initModules(options.modules)) {
778
878
  unloadMod();
779
879
  return;
@@ -883,13 +983,12 @@ var GUI = class _GUI extends BaseModule {
883
983
  } else {
884
984
  this._currentSubscreen = subscreen;
885
985
  }
886
- PreferenceMessage = "";
887
- PreferencePageCurrent = 1;
888
986
  if (this._currentSubscreen) {
889
987
  this._currentSubscreen.load();
890
988
  this._currentSubscreen.resize(true);
891
989
  }
892
990
  }
991
+ /** Creates the GUI instance and initializes the main menu. */
893
992
  constructor(modButtonOptions) {
894
993
  super();
895
994
  if (_GUI.instance) {
@@ -1244,8 +1343,8 @@ function hasSetter(obj, prop) {
1244
1343
  }
1245
1344
  __name(hasSetter, "hasSetter");
1246
1345
 
1247
- // src/utilities/elements/advanced_elements.ts
1248
- var advancedElement = {
1346
+ // src/utilities/elements/elements.ts
1347
+ var advElement = {
1249
1348
  createButton: elementCreateButton,
1250
1349
  createCheckbox: elementCreateCheckbox,
1251
1350
  createInput: elementCreateInput,
@@ -1484,7 +1583,7 @@ function elementPrevNext(options) {
1484
1583
  id: options.id
1485
1584
  },
1486
1585
  children: [
1487
- advancedElement.createButton({
1586
+ advElement.createButton({
1488
1587
  id: `deeplib-prev-next-${options.id}-prev-button`,
1489
1588
  image: `${PUBLIC_URL}/dl_images/arrow_left.svg`,
1490
1589
  onClick: /* @__PURE__ */ __name(() => {
@@ -1506,14 +1605,14 @@ function elementPrevNext(options) {
1506
1605
  }
1507
1606
  }
1508
1607
  }),
1509
- advancedElement.createLabel({
1608
+ advElement.createLabel({
1510
1609
  id: `${options.id}-label`,
1511
1610
  label: options.initialLabel,
1512
1611
  htmlOptions: {
1513
1612
  classList: ["deeplib-prev-next-label"]
1514
1613
  }
1515
1614
  }),
1516
- advancedElement.createButton({
1615
+ advElement.createButton({
1517
1616
  id: `deeplib-prev-next-${options.id}-next-button`,
1518
1617
  image: `${PUBLIC_URL}/dl_images/arrow_right.svg`,
1519
1618
  onClick: /* @__PURE__ */ __name(() => {
@@ -1622,7 +1721,7 @@ var Modal = class _Modal {
1622
1721
  container.classList.add("deeplib-modal-button-container");
1623
1722
  const btns = this.opts.buttons ? [...this.opts.buttons] : [];
1624
1723
  btns.forEach((b) => {
1625
- const btn = advancedElement.createButton({
1724
+ const btn = advElement.createButton({
1626
1725
  label: b.text,
1627
1726
  id: `deeplib-modal-${b.action}`,
1628
1727
  disabled: b.disabled,
@@ -1725,7 +1824,7 @@ var MainMenu = class _MainMenu extends BaseSubscreen {
1725
1824
  return;
1726
1825
  }
1727
1826
  super.load();
1728
- const exitButton = advancedElement.createButton({
1827
+ const exitButton = advElement.createButton({
1729
1828
  id: "exit",
1730
1829
  size: [90, 90],
1731
1830
  image: `${PUBLIC_URL}/dl_images/exit.svg`,
@@ -1740,7 +1839,7 @@ var MainMenu = class _MainMenu extends BaseSubscreen {
1740
1839
  }
1741
1840
  for (const screen of this.subscreens) {
1742
1841
  if (screen.name == "mainmenu") continue;
1743
- const button = advancedElement.createButton({
1842
+ const button = advElement.createButton({
1744
1843
  id: `${screen.name}-button`,
1745
1844
  image: screen.icon,
1746
1845
  label: getText(`mainmenu.button.${screen.name}`),
@@ -1749,12 +1848,12 @@ var MainMenu = class _MainMenu extends BaseSubscreen {
1749
1848
  }, "onClick"),
1750
1849
  size: [null, 90]
1751
1850
  });
1752
- layoutElement.appendToSettingsDiv(button);
1851
+ layout.appendToSettingsDiv(button);
1753
1852
  }
1754
- const miscDiv = layoutElement.createMiscDiv();
1755
- layoutElement.appendToSubscreenDiv(miscDiv);
1853
+ const miscDiv = layout.createMiscDiv();
1854
+ layout.appendToSubscreen(miscDiv);
1756
1855
  if (_MainMenu.options.wikiLink) {
1757
- const wikiButton = advancedElement.createButton({
1856
+ const wikiButton = advElement.createButton({
1758
1857
  id: "deeplib-wiki-button",
1759
1858
  image: `${PUBLIC_URL}/dl_images/notebook.svg`,
1760
1859
  label: getText("mainmenu.button.wiki"),
@@ -1763,10 +1862,10 @@ var MainMenu = class _MainMenu extends BaseSubscreen {
1763
1862
  }, "onClick"),
1764
1863
  size: [null, 80]
1765
1864
  });
1766
- layoutElement.appendToMiscDiv(wikiButton);
1865
+ layout.appendToMiscDiv(wikiButton);
1767
1866
  }
1768
1867
  if (_MainMenu.options.repoLink) {
1769
- const repoButton = advancedElement.createButton({
1868
+ const repoButton = advElement.createButton({
1770
1869
  id: "deeplib-repo-button",
1771
1870
  image: `${PUBLIC_URL}/dl_images/git.svg`,
1772
1871
  label: getText("mainmenu.button.repo"),
@@ -1775,10 +1874,10 @@ var MainMenu = class _MainMenu extends BaseSubscreen {
1775
1874
  }, "onClick"),
1776
1875
  size: [null, 80]
1777
1876
  });
1778
- layoutElement.appendToMiscDiv(repoButton);
1877
+ layout.appendToMiscDiv(repoButton);
1779
1878
  }
1780
1879
  if (_MainMenu.options.resetSubscreen) {
1781
- const resetButton = advancedElement.createButton({
1880
+ const resetButton = advElement.createButton({
1782
1881
  id: "deeplib-reset-button",
1783
1882
  image: `${PUBLIC_URL}/dl_images/trash_bin.svg`,
1784
1883
  label: getText("mainmenu.button.reset"),
@@ -1787,10 +1886,10 @@ var MainMenu = class _MainMenu extends BaseSubscreen {
1787
1886
  }, "onClick"),
1788
1887
  size: [null, 80]
1789
1888
  });
1790
- layoutElement.appendToMiscDiv(resetButton);
1889
+ layout.appendToMiscDiv(resetButton);
1791
1890
  }
1792
1891
  if (_MainMenu.options.importExportSubscreen) {
1793
- const importExportButton = advancedElement.createButton({
1892
+ const importExportButton = advElement.createButton({
1794
1893
  id: "deeplib-import-export-button",
1795
1894
  image: `${PUBLIC_URL}/dl_images/transfer.svg`,
1796
1895
  label: getText("mainmenu.button.import_export"),
@@ -1799,10 +1898,10 @@ var MainMenu = class _MainMenu extends BaseSubscreen {
1799
1898
  }, "onClick"),
1800
1899
  size: [null, 80]
1801
1900
  });
1802
- layoutElement.appendToMiscDiv(importExportButton);
1901
+ layout.appendToMiscDiv(importExportButton);
1803
1902
  }
1804
1903
  if (IS_DEBUG) {
1805
- const debugButton = advancedElement.createButton({
1904
+ const debugButton = advElement.createButton({
1806
1905
  id: "deeplib-debug-button",
1807
1906
  image: `${PUBLIC_URL}/dl_images/bug.svg`,
1808
1907
  onClick: /* @__PURE__ */ __name(() => {
@@ -1851,7 +1950,7 @@ var GuiImportExport = class extends BaseSubscreen {
1851
1950
  }
1852
1951
  load() {
1853
1952
  super.load();
1854
- const importFromFileButton = advancedElement.createButton({
1953
+ const importFromFileButton = advElement.createButton({
1855
1954
  id: "deeplib-import-file-button",
1856
1955
  size: [600, 90],
1857
1956
  image: `${PUBLIC_URL}/dl_images/file_import.svg`,
@@ -1860,8 +1959,8 @@ var GuiImportExport = class extends BaseSubscreen {
1860
1959
  }, "onClick"),
1861
1960
  label: getText("import-export.button.import_file")
1862
1961
  });
1863
- layoutElement.appendToSettingsDiv(importFromFileButton);
1864
- const exportToFileButton = advancedElement.createButton({
1962
+ layout.appendToSettingsDiv(importFromFileButton);
1963
+ const exportToFileButton = advElement.createButton({
1865
1964
  id: "deeplib-export-file-button",
1866
1965
  size: [600, 90],
1867
1966
  image: `${PUBLIC_URL}/dl_images/file_export.svg`,
@@ -1870,8 +1969,8 @@ var GuiImportExport = class extends BaseSubscreen {
1870
1969
  }, "onClick"),
1871
1970
  label: getText("import-export.button.export_file")
1872
1971
  });
1873
- layoutElement.appendToSettingsDiv(exportToFileButton);
1874
- const importFromClipboardButton = advancedElement.createButton({
1972
+ layout.appendToSettingsDiv(exportToFileButton);
1973
+ const importFromClipboardButton = advElement.createButton({
1875
1974
  id: "deeplib-import-clipboard-button",
1876
1975
  size: [600, 90],
1877
1976
  image: `${PUBLIC_URL}/dl_images/clipboard_import.svg`,
@@ -1880,8 +1979,8 @@ var GuiImportExport = class extends BaseSubscreen {
1880
1979
  }, "onClick"),
1881
1980
  label: getText("import-export.button.import_clipboard")
1882
1981
  });
1883
- layoutElement.appendToSettingsDiv(importFromClipboardButton);
1884
- const exportToClipboardButton = advancedElement.createButton({
1982
+ layout.appendToSettingsDiv(importFromClipboardButton);
1983
+ const exportToClipboardButton = advElement.createButton({
1885
1984
  id: "deeplib-export-clipboard-button",
1886
1985
  size: [600, 90],
1887
1986
  image: `${PUBLIC_URL}/dl_images/clipboard_export.svg`,
@@ -1890,7 +1989,7 @@ var GuiImportExport = class extends BaseSubscreen {
1890
1989
  }, "onClick"),
1891
1990
  label: getText("import-export.button.export_clipboard")
1892
1991
  });
1893
- layoutElement.appendToSettingsDiv(exportToClipboardButton);
1992
+ layout.appendToSettingsDiv(exportToClipboardButton);
1894
1993
  }
1895
1994
  resize() {
1896
1995
  super.resize();
@@ -2105,7 +2204,7 @@ var ModStorage = class _ModStorage {
2105
2204
  }
2106
2205
  };
2107
2206
 
2108
- // src/utilities/elements/element_helpers.ts
2207
+ // src/utilities/elements/helpers.ts
2109
2208
  var domUtil = {
2110
2209
  autoSetPosition,
2111
2210
  autoSetSize,
@@ -2166,12 +2265,12 @@ function hasOverflow(el) {
2166
2265
  }
2167
2266
  __name(hasOverflow, "hasOverflow");
2168
2267
 
2169
- // src/utilities/elements/layout_elements.ts
2170
- var layoutElement = {
2171
- createSubscreenDiv: elementCreateSubscreenDiv,
2172
- getSubscreenDiv: elementGetSubscreenDiv,
2173
- appendToSubscreenDiv: elementAppendToSubscreenDiv,
2174
- removeSubscreenDiv: elementRemoveSubscreenDiv,
2268
+ // src/utilities/elements/layout.ts
2269
+ var layout = {
2270
+ createSubscreen: elementCreateSubscreenDiv,
2271
+ getSubscreen: elementGetSubscreenDiv,
2272
+ appendToSubscreen: elementAppendToSubscreenDiv,
2273
+ removeSubscreen: elementRemoveSubscreenDiv,
2175
2274
  createSettingsDiv: elementCreateSettingsDiv,
2176
2275
  getSettingsDiv: elementGetSettingsDiv,
2177
2276
  appendToSettingsDiv: elementAppendToSettingsDiv,
@@ -2489,24 +2588,30 @@ var Localization = class _Localization {
2489
2588
  static ModTranslation = {};
2490
2589
  static PathToModTranslation;
2491
2590
  static PathToLibTranslation = `${PUBLIC_URL}/dl_translations/`;
2591
+ static DefaultLanguage = "en";
2492
2592
  static initialized = false;
2493
2593
  static async init(initOptions) {
2494
2594
  if (_Localization.initialized) return;
2495
2595
  _Localization.initialized = true;
2496
- _Localization.PathToModTranslation = initOptions.pathToTranslationsFolder.endsWith("/") ? initOptions.pathToTranslationsFolder : initOptions.pathToTranslationsFolder + "/";
2497
- const lang = TranslationLanguage.toLowerCase();
2596
+ _Localization.PathToModTranslation = (() => {
2597
+ if (!initOptions?.pathToTranslationsFolder) return void 0;
2598
+ return initOptions.pathToTranslationsFolder.endsWith("/") ? initOptions.pathToTranslationsFolder : `${initOptions.pathToTranslationsFolder}/`;
2599
+ })();
2600
+ _Localization.DefaultLanguage = initOptions?.defaultLanguage || _Localization.DefaultLanguage;
2601
+ const lang = initOptions?.fixedLanguage ? _Localization.DefaultLanguage : TranslationLanguage.toLowerCase();
2498
2602
  const libTranslation = await _Localization.fetchLanguageFile(_Localization.PathToLibTranslation, lang);
2499
- if (lang === "en") {
2603
+ if (lang === _Localization.DefaultLanguage) {
2500
2604
  _Localization.LibTranslation = libTranslation;
2501
2605
  } else {
2502
- const fallbackTranslation = await _Localization.fetchLanguageFile(_Localization.PathToLibTranslation, "en");
2606
+ const fallbackTranslation = await _Localization.fetchLanguageFile(_Localization.PathToLibTranslation, _Localization.DefaultLanguage);
2503
2607
  _Localization.LibTranslation = { ...fallbackTranslation, ...libTranslation };
2504
2608
  }
2609
+ if (!_Localization.PathToModTranslation) return;
2505
2610
  const modTranslation = await _Localization.fetchLanguageFile(_Localization.PathToModTranslation, lang);
2506
- if (lang === "en") {
2611
+ if (lang === _Localization.DefaultLanguage) {
2507
2612
  _Localization.ModTranslation = modTranslation;
2508
2613
  } else {
2509
- const fallbackTranslation = await _Localization.fetchLanguageFile(_Localization.PathToModTranslation, "en");
2614
+ const fallbackTranslation = await _Localization.fetchLanguageFile(_Localization.PathToModTranslation, _Localization.DefaultLanguage);
2510
2615
  _Localization.ModTranslation = { ...fallbackTranslation, ...modTranslation };
2511
2616
  }
2512
2617
  }
@@ -2518,8 +2623,11 @@ var Localization = class _Localization {
2518
2623
  }
2519
2624
  static async fetchLanguageFile(baseUrl, lang) {
2520
2625
  const response = await fetch(`${baseUrl}${lang}.lang`);
2521
- if (lang !== "en" && !response.ok) {
2522
- return this.fetchLanguageFile(baseUrl, "en");
2626
+ if (lang !== _Localization.DefaultLanguage && !response.ok) {
2627
+ return this.fetchLanguageFile(baseUrl, _Localization.DefaultLanguage);
2628
+ }
2629
+ if (!response.ok) {
2630
+ return {};
2523
2631
  }
2524
2632
  const langFileContent = await response.text();
2525
2633
  return this.parseLanguageFile(langFileContent);
@@ -2555,20 +2663,19 @@ export {
2555
2663
  Modal,
2556
2664
  Style,
2557
2665
  VersionModule,
2558
- advancedElement,
2666
+ advElement,
2559
2667
  deepLibLogger,
2560
2668
  deepMerge,
2561
2669
  deepMergeMatchingProperties,
2562
2670
  domUtil,
2563
2671
  exportToGlobal,
2564
- getCurrentSubscreen,
2565
2672
  getModule,
2566
2673
  getText,
2567
2674
  hasGetter,
2568
2675
  hasSetter,
2569
2676
  init,
2570
2677
  initMod,
2571
- layoutElement,
2678
+ layout,
2572
2679
  modStorage,
2573
2680
  modules,
2574
2681
  modulesMap,