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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../node_modules/.pnpm/bondage-club-mod-sdk@1.2.0/node_modules/bondage-club-mod-sdk/dist/bcmodsdk.js", "../src/base/base_module.ts", "../src/base/base_subscreen.ts", "../src/styles/index.scss", "../src/base/initialization.ts", "../src/base/modules.ts", "../src/migrators/base_migrator.ts", "../src/modules/gui.ts", "../src/modules/version.ts", "../src/screens/debug.ts", "../src/utilities/common.ts", "../src/utilities/elements/advanced_elements.ts", "../src/screens/main_menu.ts", "../src/screens/import_export.ts", "../src/utilities/data.ts", "../src/utilities/elements/element_helpers.ts", "../src/utilities/elements/layout_elements.ts", "../src/utilities/logger.ts", "../src/utilities/messages.ts", "../src/utilities/sdk.ts", "../src/utilities/style.ts", "../src/utilities/translation.ts"],
4
- "sourcesContent": ["// Bondage Club Mod Development Kit (1.2.0)\n// For more info see: https://github.com/Jomshir98/bondage-club-mod-sdk\n/** @type {ModSDKGlobalAPI} */\nvar bcModSdk=function(){\"use strict\";const o=\"1.2.0\";function e(o){alert(\"Mod ERROR:\\n\"+o);const e=new Error(o);throw console.error(e),e}const t=new TextEncoder;function n(o){return!!o&&\"object\"==typeof o&&!Array.isArray(o)}function r(o){const e=new Set;return o.filter((o=>!e.has(o)&&e.add(o)))}const i=new Map,a=new Set;function c(o){a.has(o)||(a.add(o),console.warn(o))}function s(o){const e=[],t=new Map,n=new Set;for(const r of f.values()){const i=r.patching.get(o.name);if(i){e.push(...i.hooks);for(const[e,a]of i.patches.entries())t.has(e)&&t.get(e)!==a&&c(`ModSDK: Mod '${r.name}' is patching function ${o.name} with same pattern that is already applied by different mod, but with different pattern:\\nPattern:\\n${e}\\nPatch1:\\n${t.get(e)||\"\"}\\nPatch2:\\n${a}`),t.set(e,a),n.add(r.name)}}e.sort(((o,e)=>e.priority-o.priority));const r=function(o,e){if(0===e.size)return o;let t=o.toString().replaceAll(\"\\r\\n\",\"\\n\");for(const[n,r]of e.entries())t.includes(n)||c(`ModSDK: Patching ${o.name}: Patch ${n} not applied`),t=t.replaceAll(n,r);return(0,eval)(`(${t})`)}(o.original,t);let i=function(e){var t,i;const a=null===(i=(t=m.errorReporterHooks).hookChainExit)||void 0===i?void 0:i.call(t,o.name,n),c=r.apply(this,e);return null==a||a(),c};for(let t=e.length-1;t>=0;t--){const n=e[t],r=i;i=function(e){var t,i;const a=null===(i=(t=m.errorReporterHooks).hookEnter)||void 0===i?void 0:i.call(t,o.name,n.mod),c=n.hook.apply(this,[e,o=>{if(1!==arguments.length||!Array.isArray(e))throw new Error(`Mod ${n.mod} failed to call next hook: Expected args to be array, got ${typeof o}`);return r.call(this,o)}]);return null==a||a(),c}}return{hooks:e,patches:t,patchesSources:n,enter:i,final:r}}function l(o,e=!1){let r=i.get(o);if(r)e&&(r.precomputed=s(r));else{let e=window;const a=o.split(\".\");for(let t=0;t<a.length-1;t++)if(e=e[a[t]],!n(e))throw new Error(`ModSDK: Function ${o} to be patched not found; ${a.slice(0,t+1).join(\".\")} is not object`);const c=e[a[a.length-1]];if(\"function\"!=typeof c)throw new Error(`ModSDK: Function ${o} to be patched not found`);const l=function(o){let e=-1;for(const n of t.encode(o)){let o=255&(e^n);for(let e=0;e<8;e++)o=1&o?-306674912^o>>>1:o>>>1;e=e>>>8^o}return((-1^e)>>>0).toString(16).padStart(8,\"0\").toUpperCase()}(c.toString().replaceAll(\"\\r\\n\",\"\\n\")),d={name:o,original:c,originalHash:l};r=Object.assign(Object.assign({},d),{precomputed:s(d),router:()=>{},context:e,contextProperty:a[a.length-1]}),r.router=function(o){return function(...e){return o.precomputed.enter.apply(this,[e])}}(r),i.set(o,r),e[r.contextProperty]=r.router}return r}function d(){for(const o of i.values())o.precomputed=s(o)}function p(){const o=new Map;for(const[e,t]of i)o.set(e,{name:e,original:t.original,originalHash:t.originalHash,sdkEntrypoint:t.router,currentEntrypoint:t.context[t.contextProperty],hookedByMods:r(t.precomputed.hooks.map((o=>o.mod))),patchedByMods:Array.from(t.precomputed.patchesSources)});return o}const f=new Map;function u(o){f.get(o.name)!==o&&e(`Failed to unload mod '${o.name}': Not registered`),f.delete(o.name),o.loaded=!1,d()}function g(o,t){o&&\"object\"==typeof o||e(\"Failed to register mod: Expected info object, got \"+typeof o),\"string\"==typeof o.name&&o.name||e(\"Failed to register mod: Expected name to be non-empty string, got \"+typeof o.name);let r=`'${o.name}'`;\"string\"==typeof o.fullName&&o.fullName||e(`Failed to register mod ${r}: Expected fullName to be non-empty string, got ${typeof o.fullName}`),r=`'${o.fullName} (${o.name})'`,\"string\"!=typeof o.version&&e(`Failed to register mod ${r}: Expected version to be string, got ${typeof o.version}`),o.repository||(o.repository=void 0),void 0!==o.repository&&\"string\"!=typeof o.repository&&e(`Failed to register mod ${r}: Expected repository to be undefined or string, got ${typeof o.version}`),null==t&&(t={}),t&&\"object\"==typeof t||e(`Failed to register mod ${r}: Expected options to be undefined or object, got ${typeof t}`);const i=!0===t.allowReplace,a=f.get(o.name);a&&(a.allowReplace&&i||e(`Refusing to load mod ${r}: it is already loaded and doesn't allow being replaced.\\nWas the mod loaded multiple times?`),u(a));const c=o=>{let e=g.patching.get(o.name);return e||(e={hooks:[],patches:new Map},g.patching.set(o.name,e)),e},s=(o,t)=>(...n)=>{var i,a;const c=null===(a=(i=m.errorReporterHooks).apiEndpointEnter)||void 0===a?void 0:a.call(i,o,g.name);g.loaded||e(`Mod ${r} attempted to call SDK function after being unloaded`);const s=t(...n);return null==c||c(),s},p={unload:s(\"unload\",(()=>u(g))),hookFunction:s(\"hookFunction\",((o,t,n)=>{\"string\"==typeof o&&o||e(`Mod ${r} failed to patch a function: Expected function name string, got ${typeof o}`);const i=l(o),a=c(i);\"number\"!=typeof t&&e(`Mod ${r} failed to hook function '${o}': Expected priority number, got ${typeof t}`),\"function\"!=typeof n&&e(`Mod ${r} failed to hook function '${o}': Expected hook function, got ${typeof n}`);const s={mod:g.name,priority:t,hook:n};return a.hooks.push(s),d(),()=>{const o=a.hooks.indexOf(s);o>=0&&(a.hooks.splice(o,1),d())}})),patchFunction:s(\"patchFunction\",((o,t)=>{\"string\"==typeof o&&o||e(`Mod ${r} failed to patch a function: Expected function name string, got ${typeof o}`);const i=l(o),a=c(i);n(t)||e(`Mod ${r} failed to patch function '${o}': Expected patches object, got ${typeof t}`);for(const[n,i]of Object.entries(t))\"string\"==typeof i?a.patches.set(n,i):null===i?a.patches.delete(n):e(`Mod ${r} failed to patch function '${o}': Invalid format of patch '${n}'`);d()})),removePatches:s(\"removePatches\",(o=>{\"string\"==typeof o&&o||e(`Mod ${r} failed to patch a function: Expected function name string, got ${typeof o}`);const t=l(o);c(t).patches.clear(),d()})),callOriginal:s(\"callOriginal\",((o,t,n)=>{\"string\"==typeof o&&o||e(`Mod ${r} failed to call a function: Expected function name string, got ${typeof o}`);const i=l(o);return Array.isArray(t)||e(`Mod ${r} failed to call a function: Expected args array, got ${typeof t}`),i.original.apply(null!=n?n:globalThis,t)})),getOriginalHash:s(\"getOriginalHash\",(o=>{\"string\"==typeof o&&o||e(`Mod ${r} failed to get hash: Expected function name string, got ${typeof o}`);return l(o).originalHash}))},g={name:o.name,fullName:o.fullName,version:o.version,repository:o.repository,allowReplace:i,api:p,loaded:!0,patching:new Map};return f.set(o.name,g),Object.freeze(p)}function h(){const o=[];for(const e of f.values())o.push({name:e.name,fullName:e.fullName,version:e.version,repository:e.repository});return o}let m;const y=void 0===window.bcModSdk?window.bcModSdk=function(){const e={version:o,apiVersion:1,registerMod:g,getModsInfo:h,getPatchingInfo:p,errorReporterHooks:Object.seal({apiEndpointEnter:null,hookEnter:null,hookChainExit:null})};return m=e,Object.freeze(e)}():(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}')\\nOne 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);return\"undefined\"!=typeof exports&&(Object.defineProperty(exports,\"__esModule\",{value:!0}),exports.default=y),y}();\n", "import { BaseSettingsModel, SettingsModel, Subscreen, ModSdkManager, ModStorage, modStorage } from '../deeplib';\n\nexport abstract class BaseModule {\n get settingsScreen(): Subscreen | null {\n return null;\n }\n\n get settingsStorage(): string | null {\n return this.constructor.name;\n }\n\n get settings(): BaseSettingsModel {\n const modName = ModSdkManager.ModInfo.name;\n if (!this.settingsStorage) return {} as BaseSettingsModel;\n if (!modStorage.playerStorage) {\n Player[modName] = <SettingsModel>{};\n this.registerDefaultSettings();\n } else if (!modStorage.playerStorage[this.settingsStorage]) this.registerDefaultSettings();\n return modStorage.playerStorage[this.settingsStorage];\n }\n\n set settings(value) {\n const modName = ModSdkManager.ModInfo.name;\n const storage = new ModStorage<SettingsModel>(modName);\n if (!this.settingsStorage) return;\n if (!storage.playerStorage) {\n Player[modName] = <SettingsModel>{};\n this.registerDefaultSettings();\n } else if (!storage.playerStorage[this.settingsStorage]) this.registerDefaultSettings();\n storage.playerStorage[this.settingsStorage] = value;\n }\n\n init() {\n this.registerDefaultSettings();\n }\n\n registerDefaultSettings(): void {\n const storage = this.settingsStorage;\n const defaults = this.defaultSettings;\n if (!storage || !defaults) return;\n\n Player[ModSdkManager.ModInfo.name][storage] = Object.assign(defaults, Player[ModSdkManager.ModInfo.name][storage] ?? {});\n }\n\n get defaultSettings(): BaseSettingsModel | null {\n return null;\n }\n\n load() { }\n\n run() { }\n\n unload() { }\n}\n", "import { BaseModule, BaseSettingsModel, GUI, advancedElement, ModSdkManager, domUtil, getText, layoutElement, modules, modStorage } from '../deeplib';\nimport { SettingElement } from './elements_typings';\n\ntype SubscreenOptions = {\n drawCharacter?: boolean;\n};\n\nexport type Subscreen = new (subscreenOptions?: SubscreenOptions, module?: BaseModule) => BaseSubscreen;\n\nexport function getCurrentSubscreen(): BaseSubscreen | null {\n return GUI.instance && GUI.instance.currentSubscreen;\n}\n\nexport function setSubscreen(subscreen: BaseSubscreen | string | null): BaseSubscreen | null {\n if (!GUI.instance) {\n throw new Error('Attempt to set subscreen before init');\n }\n GUI.instance.currentSubscreen = subscreen;\n\n return GUI.instance.currentSubscreen;\n}\n\nexport abstract class BaseSubscreen {\n static currentElements: [HTMLElement, SettingElement][] = [];\n static currentPage: number = 1;\n readonly options: SubscreenOptions;\n readonly module!: BaseModule;\n\n constructor(subscreenOptions?: SubscreenOptions, module?: BaseModule) {\n if (module) this.module = module;\n this.options = subscreenOptions || {} as SubscreenOptions;\n }\n\n get name(): string {\n return 'UNKNOWN';\n }\n\n get icon(): string {\n return '';\n }\n\n get subscreenName(): string {\n return this.constructor.name;\n }\n\n setSubscreen(screen: BaseSubscreen | string | null) {\n return setSubscreen(screen);\n }\n\n get settings(): BaseSettingsModel {\n return this.module.settings as BaseSettingsModel;\n }\n\n set settings(value) {\n this.module.settings = value;\n }\n\n get pageStructure(): SettingElement[][] {\n return [[]];\n }\n\n get currentPage(): SettingElement[] {\n return this.pageStructure[Math.min(BaseSubscreen.currentPage - 1, this.pageStructure.length - 1)];\n }\n\n changePage(page: number, setLabel: (label: string) => void) {\n const totalPages = this.pageStructure.length;\n\n if (page > totalPages) page = 1;\n if (page < 1) page = totalPages;\n BaseSubscreen.currentPage = page;\n\n this.managePageElementsVisibility();\n\n setLabel(`${BaseSubscreen.currentPage} of ${this.pageStructure.length}`);\n }\n\n managePageElementsVisibility() {\n this.pageStructure.forEach((item, ix) => {\n if (ix != BaseSubscreen.currentPage - 1) {\n item.forEach((setting) => {\n domUtil.hide(`${setting.id}-container`);\n });\n } else {\n item.forEach((setting) => {\n domUtil.unhide(`${setting.id}-container`);\n });\n }\n });\n }\n\n load() {\n for (const module of modules()) {\n if (!module.settingsScreen) continue;\n if (!module.settings || !Object.keys(module.settings).length) module.registerDefaultSettings();\n }\n\n BaseSubscreen.currentPage = 1;\n\n layoutElement.createSubscreenDiv();\n const settingsElement = layoutElement.createSettingsDiv();\n layoutElement.appendToSubscreenDiv(settingsElement);\n\n const menu = ElementMenu.Create('deeplib-nav-menu', []);\n layoutElement.appendToSubscreenDiv(menu);\n\n if (this.pageStructure.length > 1) {\n const backNext = advancedElement.createBackNext({\n id: 'deeplib-page-back-next',\n next: ({ setLabel }) => this.changePage(BaseSubscreen.currentPage + 1, setLabel),\n initialNextTooltip: getText('settings.button.next_button_hint'),\n back: ({ setLabel }) => this.changePage(BaseSubscreen.currentPage - 1, setLabel),\n initialPrevTooltip: getText('settings.button.prev_button_hint'),\n initialLabel: `${BaseSubscreen.currentPage} of ${this.pageStructure.length}`,\n });\n\n ElementMenu.PrependItem(menu, backNext);\n }\n\n const subscreenTitle = advancedElement.createLabel({\n id: 'deeplib-subscreen-title',\n label: getText(`${this.name}.title`).replace('$ModVersion', ModSdkManager.ModInfo.version),\n });\n layoutElement.appendToSubscreenDiv(subscreenTitle);\n\n if (this.name !== 'mainmenu') {\n const exitButton = advancedElement.createButton({\n id: 'deeplib-exit',\n size: [90, 90],\n image: `${PUBLIC_URL}/dl_images/exit.svg`,\n onClick: () => {\n this.exit();\n },\n tooltip: getText('settings.button.back_button_hint')\n });\n ElementMenu.AppendButton(menu, exitButton);\n }\n\n const tooltip = advancedElement.createTooltip();\n layoutElement.appendToSubscreenDiv(tooltip);\n\n this.pageStructure.forEach((s) =>\n s.forEach((item) => {\n let element: HTMLElement;\n switch (item.type) {\n case 'text':\n case 'number':\n case 'color':\n element = advancedElement.createInput(item);\n break;\n case 'checkbox':\n element = advancedElement.createCheckbox(item);\n break;\n case 'button':\n element = advancedElement.createButton(item);\n break;\n case 'label':\n element = advancedElement.createLabel(item);\n break;\n case 'custom':\n element = advancedElement.createCustom(item);\n break;\n }\n layoutElement.appendToSettingsDiv(element);\n })\n );\n\n this.managePageElementsVisibility();\n\n CharacterAppearanceForceUpCharacter = Player.MemberNumber ?? -1;\n }\n\n run() {\n if (this.options.drawCharacter) DrawCharacter(Player, 50, 50, 0.9, false);\n }\n\n click() {\n }\n\n exit() {\n CharacterAppearanceForceUpCharacter = -1;\n CharacterLoadCanvas(Player);\n\n setSubscreen('mainmenu');\n modStorage.save();\n }\n\n resize(onLoad: boolean = false) {\n const offset = this.options.drawCharacter ? 0 : 380;\n const subscreen = layoutElement.getSubscreenDiv();\n const settingsDiv = layoutElement.getSettingsDiv();\n\n ElementSetPosition(subscreen || '', 0, 0);\n ElementSetSize(subscreen || '', 2000, 1000);\n ElementSetFontSize(subscreen || '', 'auto');\n\n if (this.name === 'mainmenu') {\n ElementSetPosition(settingsDiv || '', 530 - offset, 170);\n ElementSetSize(settingsDiv || '', 600 + offset, 660);\n } else {\n ElementSetPosition(settingsDiv || '', 530 - offset, 170);\n ElementSetSize(settingsDiv || '', 1000 + offset, 660);\n }\n\n ElementSetPosition('deeplib-subscreen-title', 530 - offset, 75);\n ElementSetSize('deeplib-subscreen-title', 800, 60);\n\n ElementSetPosition('deeplib-nav-menu', 1905, 75, 'top-right');\n ElementSetSize('deeplib-nav-menu', null, 90);\n\n ElementSetPosition(advancedElement.getTooltip() || '', 250, 850);\n ElementSetSize(advancedElement.getTooltip() || '', 1500, 70);\n\n BaseSubscreen.currentElements.forEach((item) => {\n const options = item[1];\n\n domUtil.autoSetPosition(options.id, options.position);\n domUtil.autoSetSize(options.id, options.size);\n });\n\n if (settingsDiv) {\n if (domUtil.hasOverflow(settingsDiv)?.vertical) {\n settingsDiv.classList.add('deeplib-overflow-box');\n } else {\n settingsDiv.classList.remove('deeplib-overflow-box');\n }\n }\n }\n\n unload() {\n BaseSubscreen.currentElements = [];\n\n layoutElement.removeSubscreenDiv();\n }\n}\n\n", "export default `.deeplib-subscreen,\n.deeplib-modal {\n --deeplib-background-color: var(--tmd-main, white);\n --deeplib-element-color: var(--tmd-element, white);\n --deeplib-element-hover-color: var(--tmd-element-hover, cyan);\n --deeplib-blocked-color: var(--tmd-blocked, red);\n --deeplib-text-color: var(--tmd-text, black);\n --deeplib-icon-color: var(--tmd-accent, white);\n --deeplib-icon-hover-color: var(--tmd-accent-hover, cyan);\n --deeplib-border-color: var(--tmd-accent, black);\n --deeplib-border-width: min(0.2vh, 0.1vw);\n --deeplib-border-width: min(0.2dvh, 0.1dvw);\n --deeplib-border-radius: min(1vh, 0.5vw);\n --deeplib-border-radius: min(1dvh, 0.5dvw);\n}\n\n.deeplib-button {\n color: var(--deeplib-text-color);\n width: 100%;\n height: 100%;\n}\n\n.deeplib-button.button-styling,\n.deeplib-button.button-styling::before {\n border-radius: min(1dvh, 0.5dvw);\n}\n\n.deeplib-button img {\n position: absolute;\n top: 0%;\n left: 0%;\n width: 100%;\n height: 100%;\n background-position: left;\n background-color: var(--deeplib-icon-color);\n background-blend-mode: multiply;\n background-size: contain;\n mask-position: left;\n mask-size: contain;\n background-repeat: no-repeat;\n mask-repeat: no-repeat;\n color: transparent;\n background-image: var(--image);\n mask-image: var(--image);\n pointer-events: none;\n}\n\n.deeplib-button:hover img {\n background-color: var(--deeplib-icon-hover-color);\n}\n\n.deeplib-button .button-label {\n background-color: transparent !important;\n color: var(--deeplib-text-color);\n font-size: min(3.6dvh, 1.8dvw);\n}\n\n.deeplib-button .button-tooltip {\n border-radius: min(1dvh, 0.5dvw);\n}\n\n#deeplib-page-label {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n#deeplib-subscreen-title {\n text-align: left;\n color: var(--deeplib-text-color);\n}\n\n.deeplib-text {\n color: var(--deeplib-text-color);\n}\n\n.deeplib-subscreen {\n padding: 0;\n margin: 0;\n pointer-events: none;\n}\n\n.deeplib-subscreen * {\n box-sizing: border-box;\n pointer-events: all;\n}\n\n.deeplib-settings {\n display: grid;\n grid-auto-rows: min-content;\n padding: min(1dvh, 0.5dvw);\n gap: 0.3em;\n overflow-y: scroll;\n}\n\n.deeplib-misc {\n display: flex;\n align-items: center;\n flex-direction: column-reverse;\n gap: min(1vh, 0.5vw);\n}\n\n.deeplib-tooltip {\n background-color: var(--deeplib-element-color);\n color: var(--deeplib-text-color);\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: min(1dvh, 0.5dvw);\n padding: min(1vh, 0.5vw);\n font-size: 0.8em;\n border: min(0.2vh, 0.1vw) solid var(--deeplib-border-color);\n}\n\n.deeplib-overflow-box {\n border: var(--deeplib-border-color) solid var(--deeplib-border-width);\n}\n\n.deeplib-prev-next {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-direction: row;\n gap: min(2dvh, 1dvw);\n background-color: var(--deeplib-element-color);\n color: var(--deeplib-text-color);\n border-radius: min(1dvh, 0.5dvw);\n border: min(0.2vh, 0.1vw) solid var(--deeplib-border-color);\n}\n.deeplib-prev-next .deeplib-prev-next-button {\n height: 100%;\n aspect-ratio: 1;\n}\n.deeplib-prev-next .deeplib-prev-next-button:hover {\n background-color: var(--deeplib-element-hover-color);\n border-radius: var(--deeplib-border-radius);\n}\n.deeplib-prev-next .deeplib-prev-next-label {\n white-space: nowrap;\n}\n\n#deeplib-nav-menu {\n display: flex;\n flex-direction: row;\n gap: min(2dvh, 1dvw);\n}\n\n.deeplib-checkbox-container {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 0.3em;\n}\n\n.deeplib-checkbox-container input.deeplib-input {\n width: min(5vh, 2.5vw);\n height: min(5vh, 2.5vw);\n border-radius: min(1dvh, 0.5dvw);\n}\n\n.deeplib-checkbox-container input.deeplib-input[type=checkbox]:checked::before {\n width: 80%;\n height: 80%;\n}\n\n.deeplib-input-container {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 0.3em;\n}\n\n.deeplib-input-container:has(label.deeplib-text) {\n margin-top: min(1vh, 0.5vw);\n}\n\n.deeplib-input-container input.deeplib-input {\n font-size: 0.6em;\n padding: 5px 0;\n background-color: transparent;\n outline: none;\n padding-left: min(1vh, 0.5vw);\n padding-right: min(1vh, 0.5vw);\n min-height: min(5dvh, 2.5dvw);\n border-radius: min(1dvh, 0.5dvw);\n}\n\n.deeplib-input-container input.deeplib-input[type=color] {\n padding: 0px;\n width: min(5vh, 2.5vw);\n height: min(5vh, 2.5vw);\n border-radius: 0px;\n}\n\n.deeplib-input-container input.deeplib-input[type=color]:disabled {\n border: var(--deeplib-blocked-color) solid var(--deeplib-border-width);\n cursor: not-allowed;\n}\n\ninput::-webkit-outer-spin-button,\ninput::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\ninput[type=number] {\n appearance: textfield;\n -moz-appearance: textfield;\n}\n\n.deeplib-highlight-text {\n font-weight: bold;\n color: rgb(203, 185, 23);\n}\n\n#TextAreaChatLog[data-colortheme=dark] div.ChatMessage.deeplib-message,\n#TextAreaChatLog[data-colortheme=dark2] div.ChatMessage.deeplib-message {\n background-color: var(--deeplib-element-color);\n border: min(0.2dvh, 0.1dvw) solid var(--deeplib-border-color);\n color: var(--deeplib-text-color);\n}\n\n#TextAreaChatLog div.ChatMessage.deeplib-message {\n background-color: #eee;\n border: min(0.2dvh, 0.1dvw) solid #440171;\n color: #111;\n padding-left: min(0.6dvh, 0.3dvw);\n display: block;\n white-space: normal;\n}\n\n#TextAreaChatLog[data-colortheme=dark] div.ChatMessage.deeplib-message a,\n#TextAreaChatLog[data-colortheme=dark2] div.ChatMessage.deeplib-message a {\n color: var(--deeplib-text-color);\n}\n\n#TextAreaChatLog div.ChatMessage.deeplib-message a {\n cursor: pointer;\n font-weight: bold;\n color: #111;\n}\n\n.deeplib-modal {\n position: fixed;\n top: 10%;\n left: 50%;\n transform: translateX(-50%);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 0.5em;\n width: max(50dvw, 25dvh);\n font-size: min(4dvh, 2dvw);\n padding: min(2dvh, 1dvw);\n background-color: var(--deeplib-element-color);\n border-radius: min(1.2dvh, 0.6dvw);\n border: min(0.2dvh, 0.1dvw) solid var(--deeplib-border-color);\n color: var(--deeplib-text-color);\n}\n.deeplib-modal .deeplib-modal-input {\n width: 100%;\n font-size: min(2.6dvh, 1.8dvw);\n border-radius: min(1dvh, 0.5dvw);\n padding: min(1dvh, 0.5dvw);\n}\n.deeplib-modal input.deeplib-modal-input {\n max-width: max(50dvh, 25dvw);\n}\n.deeplib-modal .deeplib-modal-button-container {\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n gap: 0.5em;\n width: 100%;\n}\n.deeplib-modal .deeplib-modal-button-container .deeplib-button {\n font-size: 0.8em;\n display: flex;\n width: auto;\n padding: min(0.4vh, 0.2vw) min(2vh, 1vw);\n}\n.deeplib-modal .deeplib-modal-button-container .deeplib-button .button-label {\n display: contents;\n}\n\n.deeplib-modal-blocker {\n z-index: 1000;\n position: fixed;\n top: 0;\n left: 0;\n width: 100dvw;\n height: 100dvh;\n background-color: rgba(0, 0, 0, 0.5);\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL21lZGlhL0Rlby9OVk1FL1N0dWZmL0NvZGUvQkMvQkMtRGVlcExpYi9zcmMvc3R5bGVzIiwic291cmNlcyI6WyJ2YXJzLnNjc3MiLCJidXR0b25zLnNjc3MiLCJlbGVtZW50cy5zY3NzIiwiaW5wdXRzLnNjc3MiLCJtZXNzYWdlcy5zY3NzIiwibW9kYWwuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0VBRUU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUNiRjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0Y7QUFBQTtFQUVFOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7RUFDQTtFQUNBOzs7QUFHRjtFQUNFOzs7QUMzQ0Y7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFNRTtFQUNBOztBQU5BO0VBQ0U7RUFDQTs7QUFPSjtFQUNFOzs7QUFJSjtFQUNFO0VBQ0E7RUFDQTs7O0FDdEZGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBSUY7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBOzs7QUFHRjtBQUFBO0VBRUU7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBOzs7QUM3REY7RUFDRTtFQUNBOzs7QUFHRjtBQUFBO0VBRUU7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7QUFBQTtFQUVFOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7O0FDN0JGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTs7O0FBTVI7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSIsInNvdXJjZXNDb250ZW50IjpbIi5kZWVwbGliLXN1YnNjcmVlbixcbi5kZWVwbGliLW1vZGFsIHtcbiAgLS1kZWVwbGliLWJhY2tncm91bmQtY29sb3I6IHZhcigtLXRtZC1tYWluLCB3aGl0ZSk7XG4gIC0tZGVlcGxpYi1lbGVtZW50LWNvbG9yOiB2YXIoLS10bWQtZWxlbWVudCwgd2hpdGUpO1xuICAtLWRlZXBsaWItZWxlbWVudC1ob3Zlci1jb2xvcjogdmFyKC0tdG1kLWVsZW1lbnQtaG92ZXIsIGN5YW4pO1xuICAtLWRlZXBsaWItYmxvY2tlZC1jb2xvcjogdmFyKC0tdG1kLWJsb2NrZWQsIHJlZCk7XG4gIC0tZGVlcGxpYi10ZXh0LWNvbG9yOiB2YXIoLS10bWQtdGV4dCwgYmxhY2spO1xuICAtLWRlZXBsaWItaWNvbi1jb2xvcjogdmFyKC0tdG1kLWFjY2VudCwgd2hpdGUpO1xuICAtLWRlZXBsaWItaWNvbi1ob3Zlci1jb2xvcjogdmFyKC0tdG1kLWFjY2VudC1ob3ZlciwgY3lhbik7XG4gIC0tZGVlcGxpYi1ib3JkZXItY29sb3I6IHZhcigtLXRtZC1hY2NlbnQsIGJsYWNrKTtcbiAgLS1kZWVwbGliLWJvcmRlci13aWR0aDogbWluKDAuMnZoLCAwLjF2dyk7XG4gIC0tZGVlcGxpYi1ib3JkZXItd2lkdGg6IG1pbigwLjJkdmgsIDAuMWR2dyk7XG4gIC0tZGVlcGxpYi1ib3JkZXItcmFkaXVzOiBtaW4oMXZoLCAwLjV2dyk7XG4gIC0tZGVlcGxpYi1ib3JkZXItcmFkaXVzOiBtaW4oMWR2aCwgMC41ZHZ3KTtcbn1cbiIsIi5kZWVwbGliLWJ1dHRvbiB7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4uZGVlcGxpYi1idXR0b24uYnV0dG9uLXN0eWxpbmcsXG4uZGVlcGxpYi1idXR0b24uYnV0dG9uLXN0eWxpbmc6OmJlZm9yZSB7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG59XG5cbi5kZWVwbGliLWJ1dHRvbiBpbWcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMCU7XG4gIGxlZnQ6IDAlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWljb24tY29sb3IpO1xuICBiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6IG11bHRpcGx5O1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIG1hc2stcG9zaXRpb246IGxlZnQ7XG4gIG1hc2stc2l6ZTogY29udGFpbjtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgbWFzay1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xuXG4gIGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLWltYWdlKTtcbiAgbWFzay1pbWFnZTogdmFyKC0taW1hZ2UpO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmRlZXBsaWItYnV0dG9uOmhvdmVyIGltZyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItaWNvbi1ob3Zlci1jb2xvcik7XG59XG5cbi5kZWVwbGliLWJ1dHRvbiAuYnV0dG9uLWxhYmVsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG4gIGZvbnQtc2l6ZTogbWluKDMuNmR2aCwgMS44ZHZ3KTtcbn1cblxuLmRlZXBsaWItYnV0dG9uIC5idXR0b24tdG9vbHRpcCB7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG59XG4iLCIjZGVlcGxpYi1wYWdlLWxhYmVsIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbiNkZWVwbGliLXN1YnNjcmVlbi10aXRsZSB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xufVxuXG4uZGVlcGxpYi10ZXh0IHtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG59XG5cbi5kZWVwbGliLXN1YnNjcmVlbiB7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5kZWVwbGliLXN1YnNjcmVlbiAqIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcbn1cblxuLmRlZXBsaWItc2V0dGluZ3Mge1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLWF1dG8tcm93czogbWluLWNvbnRlbnQ7XG4gIHBhZGRpbmc6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gIGdhcDogMC4zZW07XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbn1cblxuLmRlZXBsaWItbWlzYyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgZ2FwOiBtaW4oMXZoLCAwLjV2dyk7XG59XG5cbi5kZWVwbGliLXRvb2x0aXAge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWVsZW1lbnQtY29sb3IpO1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gIHBhZGRpbmc6IG1pbigxdmgsIDAuNXZ3KTtcbiAgZm9udC1zaXplOiAwLjhlbTtcbiAgYm9yZGVyOiBtaW4oMC4ydmgsIDAuMXZ3KSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcik7XG59XG5cbi5kZWVwbGliLW92ZXJmbG93LWJveCB7XG4gIGJvcmRlcjogdmFyKC0tZGVlcGxpYi1ib3JkZXItY29sb3IpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLXdpZHRoKTtcbn1cblxuLmRlZXBsaWItcHJldi1uZXh0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBnYXA6IG1pbigyZHZoLCAxZHZ3KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gIGJvcmRlcjogbWluKDAuMnZoLCAwLjF2dykgc29saWQgdmFyKC0tZGVlcGxpYi1ib3JkZXItY29sb3IpO1xuXG4gIC5kZWVwbGliLXByZXYtbmV4dC1idXR0b24ge1xuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWhvdmVyLWNvbG9yKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWRlZXBsaWItYm9yZGVyLXJhZGl1cyk7XG4gICAgfVxuICAgIFxuICAgIGhlaWdodDogMTAwJTtcbiAgICBhc3BlY3QtcmF0aW86IDE7XG4gIH1cblxuICAuZGVlcGxpYi1wcmV2LW5leHQtbGFiZWwge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cbn1cblxuI2RlZXBsaWItbmF2LW1lbnUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBnYXA6IG1pbigyZHZoLCAxZHZ3KTtcbn0iLCIuZGVlcGxpYi1jaGVja2JveC1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuM2VtO1xufVxuXG4uZGVlcGxpYi1jaGVja2JveC1jb250YWluZXIgaW5wdXQuZGVlcGxpYi1pbnB1dCB7XG4gIHdpZHRoOiBtaW4oNXZoLCAyLjV2dyk7XG4gIGhlaWdodDogbWluKDV2aCwgMi41dncpO1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xufVxuXG4uZGVlcGxpYi1jaGVja2JveC1jb250YWluZXIgaW5wdXQuZGVlcGxpYi1pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06Y2hlY2tlZDo6YmVmb3JlIHtcbiAgd2lkdGg6IDgwJTtcbiAgaGVpZ2h0OiA4MCU7XG59XG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC4zZW07XG59XG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lcjpoYXMobGFiZWwuZGVlcGxpYi10ZXh0KSB7XG4gIG1hcmdpbi10b3A6IG1pbigxdmgsIDAuNXZ3KTtcbn1cblxuLmRlZXBsaWItaW5wdXQtY29udGFpbmVyIGlucHV0LmRlZXBsaWItaW5wdXQge1xuICBmb250LXNpemU6IDAuNmVtO1xuICBwYWRkaW5nOiA1cHggMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHBhZGRpbmctbGVmdDogbWluKDF2aCwgMC41dncpO1xuICBwYWRkaW5nLXJpZ2h0OiBtaW4oMXZoLCAwLjV2dyk7XG4gIG1pbi1oZWlnaHQ6IG1pbig1ZHZoLCAyLjVkdncpO1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xufVxuXG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lciBpbnB1dC5kZWVwbGliLWlucHV0W3R5cGU9XCJjb2xvclwiXSB7XG4gIHBhZGRpbmc6IDBweDtcbiAgd2lkdGg6IG1pbig1dmgsIDIuNXZ3KTtcbiAgaGVpZ2h0OiBtaW4oNXZoLCAyLjV2dyk7XG4gIGJvcmRlci1yYWRpdXM6IDBweDtcbn1cblxuLmRlZXBsaWItaW5wdXQtY29udGFpbmVyIGlucHV0LmRlZXBsaWItaW5wdXRbdHlwZT1cImNvbG9yXCJdOmRpc2FibGVkIHtcbiAgYm9yZGVyOiB2YXIoLS1kZWVwbGliLWJsb2NrZWQtY29sb3IpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLXdpZHRoKTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sXG5pbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgbWFyZ2luOiAwO1xufVxuXG5pbnB1dFt0eXBlPW51bWJlcl0ge1xuICBhcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gIC1tb3otYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xufVxuIiwiLmRlZXBsaWItaGlnaGxpZ2h0LXRleHQge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6IHJnYigyMDMsIDE4NSwgMjMpO1xufVxuXG4jVGV4dEFyZWFDaGF0TG9nW2RhdGEtY29sb3J0aGVtZT0nZGFyayddIGRpdi5DaGF0TWVzc2FnZS5kZWVwbGliLW1lc3NhZ2UsXG4jVGV4dEFyZWFDaGF0TG9nW2RhdGEtY29sb3J0aGVtZT0nZGFyazInXSBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWNvbG9yKTtcbiAgYm9yZGVyOiBtaW4oMC4yZHZoLCAwLjFkdncpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG59XG5cbiNUZXh0QXJlYUNoYXRMb2cgZGl2LkNoYXRNZXNzYWdlLmRlZXBsaWItbWVzc2FnZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG4gIGJvcmRlcjogbWluKDAuMmR2aCwgMC4xZHZ3KSBzb2xpZCAjNDQwMTcxO1xuICBjb2xvcjogIzExMTtcbiAgcGFkZGluZy1sZWZ0OiBtaW4oMC42ZHZoLCAwLjNkdncpO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbn1cblxuI1RleHRBcmVhQ2hhdExvZ1tkYXRhLWNvbG9ydGhlbWU9J2RhcmsnXSBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIGEsXG4jVGV4dEFyZWFDaGF0TG9nW2RhdGEtY29sb3J0aGVtZT0nZGFyazInXSBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIGEge1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbn1cblxuI1RleHRBcmVhQ2hhdExvZyBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIGEge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogIzExMTtcbn1cbiIsIi5kZWVwbGliLW1vZGFsIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDEwJTtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gIHotaW5kZXg6IDEwMDE7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuNWVtO1xuICB3aWR0aDogbWF4KDUwZHZ3LCAyNWR2aCk7XG4gIGZvbnQtc2l6ZTogbWluKDRkdmgsIDJkdncpO1xuICBwYWRkaW5nOiBtaW4oMmR2aCwgMWR2dyk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItZWxlbWVudC1jb2xvcik7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjJkdmgsIDAuNmR2dyk7XG4gIGJvcmRlcjogbWluKDAuMmR2aCwgMC4xZHZ3KSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xuXG4gIC5kZWVwbGliLW1vZGFsLWlucHV0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBmb250LXNpemU6IG1pbigyLjZkdmgsIDEuOGR2dyk7XG4gICAgYm9yZGVyLXJhZGl1czogbWluKDEuMGR2aCwgMC41ZHZ3KTtcbiAgICBwYWRkaW5nOiBtaW4oMWR2aCwgMC41ZHZ3KTtcbiAgfVxuXG4gIGlucHV0LmRlZXBsaWItbW9kYWwtaW5wdXQge1xuICAgIG1heC13aWR0aDogbWF4KDUwZHZoLCAyNWR2dyk7XG4gIH1cblxuICAuZGVlcGxpYi1tb2RhbC1idXR0b24tY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBnYXA6IDAuNWVtO1xuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgLmRlZXBsaWItYnV0dG9uIHtcbiAgICAgIGZvbnQtc2l6ZTogMC44ZW07XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgICBwYWRkaW5nOiBtaW4oMC40dmgsIDAuMnZ3KSBtaW4oMnZoLCAxdncpO1xuXG4gICAgICAuYnV0dG9uLWxhYmVsIHtcbiAgICAgICAgZGlzcGxheTogY29udGVudHM7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi5kZWVwbGliLW1vZGFsLWJsb2NrZXIge1xuICB6LWluZGV4OiAxMDAwO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMGR2dztcbiAgaGVpZ2h0OiAxMDBkdmg7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbiJdfQ== */`;\n", "import deeplib_style from '../styles/index.scss';\nimport { BaseModule, ModSdkManager, deepLibLogger, Localization, modules, registerModule, Style, VersionModule, hasSetter, deepMergeMatchingProperties, hasGetter, BaseMigrator, ModStorage, MainMenuOptions, MainMenu } from '../deeplib';\n\ninterface InitOptions {\n modInfo: {\n info: ModSDKModInfo,\n options?: ModSDKModOptions\n };\n modules?: BaseModule[];\n migrators?: BaseMigrator[];\n mainMenuOptions?: MainMenuOptions;\n beforeLogin?: () => (void);\n initFunction?: () => (void | Promise<void>);\n pathToTranslationsFolder?: string;\n}\n\nexport let modStorage: ModStorage;\n\nexport function initMod(options: InitOptions) {\n const sdk = new ModSdkManager(options.modInfo.info, options.modInfo.options);\n const MOD_NAME = ModSdkManager.ModInfo.name;\n\n modStorage = new ModStorage(ModSdkManager.ModInfo.name);\n Style.injectInline('deeplib-style', deeplib_style);\n\n deepLibLogger.debug(`Init wait for ${MOD_NAME}`);\n if (CurrentScreen == null || CurrentScreen === 'Login') {\n options.beforeLogin?.();\n const removeHook = sdk.hookFunction('LoginResponse', 0, (args, next) => {\n deepLibLogger.debug(`Init for ${MOD_NAME}! LoginResponse caught: `, args);\n next(args);\n const response = args[0];\n if (response === 'InvalidNamePassword') return next(args);\n if (response && typeof response.Name === 'string' && typeof response.AccountName === 'string') {\n init(options);\n removeHook();\n }\n });\n } else {\n deepLibLogger.debug(`Already logged in, initing ${MOD_NAME}`);\n init(options);\n }\n\n return { sdk };\n}\n\nexport async function init(options: InitOptions) {\n const MOD_NAME = ModSdkManager.ModInfo.name;\n const MOD_VERSION = ModSdkManager.ModInfo.version;\n\n if ((window as any)[MOD_NAME + 'Loaded']) return;\n\n modStorage.load();\n\n if (options.pathToTranslationsFolder) {\n await Localization.init({\n pathToTranslationsFolder: options.pathToTranslationsFolder\n });\n }\n\n if (options.modules && !initModules(options.modules)) {\n unloadMod();\n return;\n }\n\n if (options.migrators) {\n for (const m of options.migrators) {\n VersionModule.registerMigrator(m);\n }\n }\n\n await options.initFunction?.();\n\n if (options.mainMenuOptions)\n MainMenu.setOptions(options.mainMenuOptions);\n\n VersionModule.checkVersionUpdate();\n\n for (const m of modules()) {\n if (m.defaultSettings && hasGetter(m, 'defaultSettings') && m.settings && hasSetter(m, 'settings')) {\n if (Object.entries(m.defaultSettings).length === 0) continue;\n m.settings = deepMergeMatchingProperties(m.defaultSettings, m.settings);\n }\n }\n\n (window as any)[MOD_NAME + 'Loaded'] = true;\n deepLibLogger.log(`Loaded ${MOD_NAME}! Version: ${MOD_VERSION}`);\n}\n\nfunction initModules(modulesToRegister: BaseModule[]): boolean {\n const MOD_NAME = ModSdkManager.ModInfo.name;\n\n for (const module of modulesToRegister) {\n registerModule(module);\n }\n\n for (const module of modules()) {\n module.init();\n }\n\n for (const module of modules()) {\n module.load();\n }\n\n for (const module of modules()) {\n module.run();\n }\n\n deepLibLogger.debug(`Modules Loaded for ${MOD_NAME}.`);\n return true;\n}\n\nexport function unloadMod(): true {\n const MOD_NAME = ModSdkManager.ModInfo.name;\n unloadModules();\n\n delete (window as any)[MOD_NAME + 'Loaded'];\n deepLibLogger.debug(`Unloaded ${MOD_NAME}.`);\n return true;\n}\n\nfunction unloadModules() {\n for (const module of modules()) {\n module.unload();\n }\n}\n", "import { BaseModule } from '../deeplib';\n\nexport const modulesMap: Map<string, BaseModule> = new Map<string, BaseModule>();\n\nexport function modules(): BaseModule[] {\n return [...modulesMap.values()];\n}\n\nexport function registerModule<T extends BaseModule>(module: T): T {\n modulesMap.set(module.constructor.name, module);\n return module;\n}\n\nexport function getModule<T extends BaseModule>(moduleType: string): T {\n return modulesMap.get(moduleType) as T;\n}\n", "export abstract class BaseMigrator {\n abstract get MigrationVersion(): string;\n abstract Migrate(): boolean;\n}\n", "import { BaseModule, BaseSubscreen, MainMenu, modules, setSubscreen } from '../deeplib';\n\ntype ModButtonOptions = {\n Identifier: string;\n ButtonText: string | (()=>string);\n Image: string | (()=>string);\n\n load?: () => void;\n click?: () => void;\n run?: () => void;\n unload?: () => void;\n exit?: () => boolean | void;\n};\n\nexport class GUI extends BaseModule {\n static instance: GUI | null = null;\n\n private _subscreens: BaseSubscreen[];\n private _mainMenu: MainMenu;\n private _currentSubscreen: BaseSubscreen | null = null;\n private _modButtonOptions: ModButtonOptions;\n\n get subscreens(): BaseSubscreen[] {\n return this._subscreens;\n }\n\n get mainMenu(): MainMenu {\n return this._mainMenu;\n }\n\n get currentSubscreen(): BaseSubscreen | null {\n return this._currentSubscreen;\n }\n\n set currentSubscreen(subscreen: BaseSubscreen | string | null) {\n if (this._currentSubscreen) {\n this._currentSubscreen.unload();\n }\n\n if (typeof subscreen === 'string') {\n const scr = this._subscreens?.find((s) => s.name === subscreen);\n if (!scr) throw `Failed to find screen name ${subscreen}`;\n this._currentSubscreen = scr;\n } else {\n this._currentSubscreen = subscreen;\n }\n\n PreferenceMessage = '';\n PreferencePageCurrent = 1;\n\n if (this._currentSubscreen) {\n this._currentSubscreen.load();\n this._currentSubscreen.resize(true);\n }\n }\n\n constructor(modButtonOptions: ModButtonOptions) {\n super();\n if (GUI.instance) {\n throw new Error('Duplicate initialization');\n }\n\n for (const module of modules()) {\n if (!module.settingsScreen) continue;\n }\n\n this._mainMenu = new MainMenu(this);\n this._subscreens = [this._mainMenu];\n this._modButtonOptions = modButtonOptions;\n\n GUI.instance = this;\n }\n\n get defaultSettings(): null {\n return null;\n }\n\n load(): void {\n for (const module of modules()) {\n if (!module.settingsScreen) continue;\n\n this._subscreens.push(new module.settingsScreen({}, module));\n }\n\n this._mainMenu.subscreens = this._subscreens;\n PreferenceRegisterExtensionSetting({\n Identifier: this._modButtonOptions.Identifier,\n ButtonText: this._modButtonOptions.ButtonText,\n Image: this._modButtonOptions.Image,\n load: this._modButtonOptions.load || (() => {\n setSubscreen(new MainMenu(this));\n }),\n run: this._modButtonOptions.run || (() => {\n if (this._currentSubscreen) {\n MainCanvas.textAlign = 'left';\n this._currentSubscreen.run();\n MainCanvas.textAlign = 'center';\n \n const newCanvasPosition: RectTuple = [MainCanvas.canvas.offsetLeft, MainCanvas.canvas.offsetTop, MainCanvas.canvas.clientWidth, MainCanvas.canvas.clientHeight];\n if (!CommonArraysEqual(newCanvasPosition, DrawCanvasPosition)) {\n DrawCanvasPosition = newCanvasPosition;\n this._currentSubscreen.resize(false);\n }\n }\n }),\n click: this._modButtonOptions.click || (() => {\n if (this._currentSubscreen) {\n this._currentSubscreen.click();\n }\n }),\n exit: this._modButtonOptions.exit || (() => {\n if (this._currentSubscreen) {\n this._currentSubscreen.exit();\n }\n }),\n unload: this._modButtonOptions.unload || (() => {\n if (this._currentSubscreen) {\n this._currentSubscreen.unload();\n }\n })\n });\n }\n}\n", "import { BaseMigrator, BaseModule, HookPriority, ModSdkManager, deepLibLogger, modStorage, sendLocalMessage } from '../deeplib';\n\nexport class VersionModule extends BaseModule {\n private static isItNewVersion: boolean = false;\n static Version: string;\n static NewVersionMessage: string = '';\n private static Migrators: BaseMigrator[] = [];\n\n load(): void {\n VersionModule.Version = ModSdkManager.ModInfo.version;\n\n ModSdkManager.prototype.hookFunction(\n 'ChatRoomSync',\n HookPriority.Observe,\n (args, next) => {\n next(args);\n if (modStorage.playerStorage.GlobalModule.doShowNewVersionMessage && VersionModule.isItNewVersion) {\n VersionModule.sendNewVersionMessage();\n }\n },\n 'VersionModule'\n );\n }\n\n static checkVersionUpdate() {\n const PreviousVersion = VersionModule.loadVersion();\n const CurrentVersion = VersionModule.Version;\n\n if (VersionModule.isNewVersion(PreviousVersion, CurrentVersion)) {\n VersionModule.isItNewVersion = true;\n VersionModule.checkVersionMigration();\n VersionModule.saveVersion();\n }\n\n modStorage.save();\n }\n\n private static checkVersionMigration() {\n const PreviousVersion = VersionModule.loadVersion();\n\n for (const migrator of VersionModule.Migrators) {\n if (VersionModule.isNewVersion(PreviousVersion, migrator.MigrationVersion)) {\n migrator.Migrate();\n deepLibLogger.info(`Migrating ${ModSdkManager.ModInfo.name} from ${PreviousVersion} to ${migrator.MigrationVersion} with ${migrator.constructor.name}`);\n }\n }\n }\n \n static registerMigrator(migrator: BaseMigrator) {\n VersionModule.Migrators.push(migrator);\n\n VersionModule.Migrators.sort((a, b) => a.MigrationVersion.localeCompare(b.MigrationVersion));\n }\n\n static setNewVersionMessage(newVersionMessage: string) {\n VersionModule.NewVersionMessage = newVersionMessage;\n }\n\n static sendNewVersionMessage() {\n sendLocalMessage('deeplib-new-version', VersionModule.NewVersionMessage);\n }\n\n private static isNewVersion(current: string | undefined, candidate: string) {\n if (current !== undefined) {\n const CURRENT_ = current.split('.'),\n CANDIDATE_ = candidate.split('.');\n for (let i = 0; i < 3; i++) {\n if (CURRENT_[i] === CANDIDATE_[i]) {\n continue;\n }\n return CANDIDATE_[i] > CURRENT_[i];\n }\n }\n if (current === undefined || current === '' || !current) {\n return true;\n }\n return false;\n }\n\n private static saveVersion() {\n if (modStorage.playerStorage) {\n Player[ModSdkManager.ModInfo.name].Version = VersionModule.Version;\n }\n }\n\n private static loadVersion() {\n return modStorage.playerStorage?.Version;\n }\n}\n", "\nimport { Button, Checkbox, Input, Label, SettingElement } from '../base/elements_typings';\nimport { BaseSubscreen, deepLibLogger } from '../deeplib';\n\nexport class GuiDebug extends BaseSubscreen {\n\n get name(): string {\n return 'debug';\n }\n\n get pageStructure(): SettingElement[][] {\n return [[\n <Button>{\n type: 'button',\n id: 'test-deeplib-big-button',\n size: [405, 80],\n label: 'Big Button',\n tooltip: 'This is a big button',\n image: 'Icons/Exit.png',\n onClick() {\n deepLibLogger.info('Big Button Clicked');\n }\n },\n <Button>{\n type: 'button',\n id: 'test-deeplib-small-button',\n size: [90, 90],\n tooltip: 'This is a small button',\n image: 'Icons/Exit.png',\n onClick() {\n deepLibLogger.info('Small Button Clicked');\n }\n },\n <Checkbox>{\n type: 'checkbox',\n id: 'test-deeplib-checkbox',\n label: 'Checkbox',\n description: 'This is a checkbox',\n setElementValue() {\n return true;\n },\n setSettingValue(val: boolean) {\n deepLibLogger.info('Checkbox value:', val);\n },\n },\n <Input>{\n type: 'text',\n id: 'test-deeplib-text-input',\n label: 'Input',\n description: 'This is a text input',\n setElementValue() {\n return 'Input Value';\n },\n setSettingValue(val: string) {\n deepLibLogger.info('Input value:', val);\n },\n },\n <Input>{\n type: 'number',\n id: 'test-deeplib-number-input',\n label: 'Input',\n description: 'This is a number input',\n setElementValue() {\n return '123';\n },\n setSettingValue(val: string) {\n deepLibLogger.info('Input value:', val);\n },\n },\n <Label>{\n type: 'label',\n id: 'test-deeplib-label',\n label: 'Label',\n description: 'This is a label',\n }\n ],\n [\n <Button>{\n type: 'button',\n id: 'test-deeplib-big-button2',\n size: [405, 80],\n label: 'Big Button',\n tooltip: 'This is a big button',\n image: 'Icons/Prev.png',\n onClick() {\n deepLibLogger.info('Big Button Clicked');\n }\n },\n <Button>{\n type: 'button',\n id: 'test-deeplib-small-button2',\n size: [90, 90],\n tooltip: 'This is a small button',\n image: 'Icons/Next.png',\n onClick() {\n deepLibLogger.info('Small Button Clicked');\n }\n },\n <Checkbox>{\n type: 'checkbox',\n id: 'test-deeplib-checkbox2',\n label: 'Checkbox',\n description: 'This is a checkbox',\n setElementValue() {\n return true;\n },\n setSettingValue(val: boolean) {\n deepLibLogger.info('Checkbox value:', val);\n },\n },\n <Input>{\n type: 'text',\n id: 'test-deeplib-text-input2',\n label: 'Input',\n description: 'This is a text input',\n setElementValue() {\n return 'Input Value';\n },\n setSettingValue(val: string) {\n deepLibLogger.info('Input value:', val);\n },\n },\n <Input>{\n type: 'number',\n id: 'test-deeplib-number-input2',\n label: 'Input',\n description: 'This is a number input',\n setElementValue() {\n return '123';\n },\n setSettingValue(val: string) {\n deepLibLogger.info('Input value:', val);\n },\n },\n <Label>{\n type: 'label',\n id: 'test-deeplib-label2',\n label: 'Label',\n description: 'This is a label',\n }\n ]];\n }\n}\n", "export function deepMerge(target: any, source: any): any {\n if (target === undefined) return source;\n if (source === undefined) return target;\n if (typeof target !== 'object' || typeof source !== 'object') {\n return source;\n }\n\n for (const key of Object.keys(source)) {\n if (Array.isArray(source[key]) && Array.isArray(target[key])) {\n target[key] = [...target[key], ...source[key]];\n } else if (typeof source[key] === 'object' && source[key] !== null) {\n target[key] = deepMerge(target[key] || {}, source[key]);\n } else {\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nexport function shuffleArray(array: string[]) {\n const temp: string[] = JSON.parse(JSON.stringify(array));\n const ret: string[] = [];\n\n while (temp.length > 0) {\n const d = Math.floor(Math.random() * temp.length);\n ret.push(temp[d]);\n temp.splice(d, 1);\n }\n\n return ret;\n}\n\nexport function exportToGlobal(name: string, value: any): void {\n const keys = name.split('.');\n let current = globalThis as any;\n\n for (let i = 0; i < keys.length - 1; i++) {\n if (!current[keys[i]]) {\n current[keys[i]] = {};\n }\n current = current[keys[i]];\n }\n\n current[keys[keys.length - 1]] = value;\n}\n\n/** Merges matching properties from `mergeFrom` into `mergeTo`. */\nexport function deepMergeMatchingProperties<T extends object>(mergeTo: T, mergeFrom: T): T {\n const mergedObject = { ...mergeTo };\n\n for (const key in mergeFrom) {\n if (mergeFrom[key] !== null && typeof mergeFrom[key] === 'object') {\n (mergedObject as any)[key] = deepMergeMatchingProperties(mergedObject[key] || {}, mergeFrom[key]);\n } else if (key in mergedObject) {\n (mergedObject as any)[key] = mergeFrom[key];\n }\n }\n\n return mergedObject;\n}\n\nexport function hasGetter<T extends object>(obj: T, prop: keyof T | string): boolean {\n while (obj && obj !== Object.prototype) {\n const descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n if (descriptor?.get) return true;\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n}\n\nexport function hasSetter<T extends object>(obj: T, prop: keyof T | string): boolean {\n while (obj && obj !== Object.prototype) {\n const descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n if (descriptor?.set) return true;\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n}", "import { Button, Checkbox, Custom, Input, Label } from '../../base/elements_typings';\nimport { BaseSubscreen } from '../../deeplib';\nimport { deepMerge } from '../common';\n\nexport const advancedElement = {\n createButton: elementCreateButton,\n createCheckbox: elementCreateCheckbox,\n createInput: elementCreateInput,\n createLabel: elementCreateLabel,\n createCustom: elementCreateCustom,\n\n createTooltip: elementCreateTooltip,\n getTooltip: elementGetTooltip,\n setTooltip: elementSetTooltip,\n\n createBackNext: elementPrevNext,\n};\n\nfunction elementCreateButton(options: Omit<Button, 'type'>): HTMLButtonElement {\n const elem = document.getElementById(options.id) as HTMLButtonElement;\n\n if (elem) return elem;\n\n (options as Button).type = 'button';\n\n const disabled = typeof options?.disabled === 'function' ? options?.disabled() : options?.disabled;\n\n const button = ElementButton.Create(\n options.htmlOptions?.id ?? options.id,\n options.htmlOptions?.onClick ?? options?.onClick ?? (() => { }),\n deepMerge({\n tooltip: options.tooltip,\n label: options.label,\n labelPosition: 'center',\n }, options.htmlOptions?.options),\n deepMerge({\n button: {\n classList: ['deeplib-button'],\n attributes: {\n disabled: disabled,\n },\n children: [\n options.image ? {\n tag: 'img',\n attributes: {\n id: `${options.id}-image`,\n alt: '',\n decoding: 'async',\n loading: 'lazy',\n src: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7' // 1x1 transparent image to get rid of broken image\n },\n style: {\n '--image': `url(\"${options.image}\")`,\n },\n } : undefined,\n ],\n },\n }, options.htmlOptions?.htmlOptions ?? {}));\n\n BaseSubscreen.currentElements.push([button, options as Button]);\n\n return button;\n};\n\nfunction elementCreateCheckbox(options: Omit<Checkbox, 'type'>) {\n const elem = document.getElementById(options.id);\n\n if (elem) return elem;\n\n (options as Checkbox).type = 'checkbox';\n\n const disabled = typeof options?.disabled === 'function' ? options?.disabled() : options?.disabled;\n\n const retElem = ElementCreate({\n tag: 'div',\n classList: ['deeplib-checkbox-container'],\n attributes: {\n id: `${options.id}-container`,\n },\n children: [\n deepMerge({\n tag: 'input',\n classList: ['checkbox', 'deeplib-input'],\n attributes: {\n type: 'checkbox',\n id: options.id,\n disabled: disabled,\n checked: options?.setElementValue?.() || undefined,\n },\n }, options.htmlOptions),\n {\n tag: 'label',\n classList: ['deeplib-text'],\n attributes: {\n for: options.id,\n },\n children: [options.label]\n },\n ],\n eventListeners: {\n change: () => {\n options?.setSettingValue?.((document.getElementById(options.id) as HTMLInputElement)?.checked);\n }\n }\n });\n\n if (options.description) {\n retElem.addEventListener('mouseover', () => {\n elementSetTooltip(options.description || '');\n });\n\n retElem.addEventListener('mouseout', () => {\n elementSetTooltip('');\n });\n }\n\n BaseSubscreen.currentElements.push([retElem, options as Checkbox]);\n\n return retElem;\n}\n\nfunction elementCreateCustom(options: Omit<Custom, 'type'>) {\n const elem = document.getElementById(options.id);\n\n if (elem) return elem;\n\n (options as Custom).type = 'custom';\n\n const retElem = ElementCreate(options.htmlOptions);\n\n BaseSubscreen.currentElements.push([retElem, options as Custom]);\n\n return retElem;\n}\n\nfunction elementCreateInput(options: Input) {\n const elem = document.getElementById(options.id);\n\n if (elem) return elem;\n\n const disabled = typeof options?.disabled === 'function' ? options?.disabled() : options?.disabled;\n\n const retElem = ElementCreate({\n tag: 'div',\n classList: ['deeplib-input-container'],\n attributes: {\n id: `${options.id}-container`,\n },\n children: [\n deepMerge({\n tag: 'input',\n classList: ['deeplib-input'],\n attributes: {\n type: options.type,\n id: options.id,\n placeholder: ' ',\n disabled: disabled,\n value: options?.setElementValue?.() || undefined,\n },\n }, options.htmlOptions),\n options.label ? {\n tag: 'label',\n classList: ['deeplib-text'],\n attributes: {\n for: options.id,\n },\n children: [options.label]\n } : undefined,\n ],\n eventListeners: {\n input: () => {\n options?.setSettingValue?.((document.getElementById(options.id) as HTMLInputElement)?.value);\n }\n }\n });\n\n if (options.description) {\n retElem.addEventListener('mouseover', () => {\n elementSetTooltip(options.description || '');\n });\n\n retElem.addEventListener('mouseout', () => {\n elementSetTooltip('');\n });\n }\n\n BaseSubscreen.currentElements.push([retElem, options]);\n\n return retElem;\n}\n\nfunction elementCreateLabel(options: Omit<Label, 'type'>) {\n const elem = document.getElementById(options.id);\n\n if (elem) return elem;\n\n (options as Label).type = 'label';\n\n const retElem = ElementCreate(deepMerge({\n tag: 'span',\n classList: ['deeplib-label', 'deeplib-text'],\n attributes: {\n id: options.id\n },\n children: [\n options.label,\n ],\n }, options.htmlOptions));\n\n if (options.description) {\n retElem.addEventListener('mouseover', () => {\n elementSetTooltip(options.description || '');\n });\n\n retElem.addEventListener('mouseout', () => {\n elementSetTooltip('');\n });\n }\n\n BaseSubscreen.currentElements.push([retElem, options as Label]);\n\n return retElem;\n}\n\nfunction elementCreateTooltip() {\n const element = ElementCreate({\n tag: 'div',\n classList: ['deeplib-tooltip'],\n attributes: {\n id: 'deeplib-tooltip'\n },\n style: {\n display: 'none'\n }\n });\n\n return element;\n}\n\nfunction elementGetTooltip() {\n return document.getElementById('deeplib-tooltip') ?? undefined;\n}\n\nfunction elementSetTooltip(text: string) {\n const element = document.getElementById('deeplib-tooltip');\n\n if (!element) return false;\n\n element.innerHTML = text;\n if (text === '') element.style.display = 'none';\n else element.style.display = '';\n\n return true;\n}\n\ninterface PrevNext {\n id: string,\n initialLabel?: string\n back: (arg0: PrevNextCallbacks) => void,\n initialPrevTooltip?: string,\n next: (arg0: PrevNextCallbacks) => void,\n initialNextTooltip?: string\n};\n\ninterface PrevNextCallbacks {\n setLabel: (label: string) => void,\n setBackTooltip: (tooltip: string) => void,\n setNextTooltip: (tooltip: string) => void\n}\n\nfunction elementPrevNext(options: PrevNext) {\n const elem = document.getElementById(options.id);\n\n if (elem) return elem;\n\n const setLabel = (label: string) => {\n const elem = document.getElementById(`${options.id}-label`);\n if (!elem) return false;\n elem.textContent = label;\n };\n\n const setPrevTooltip = (tooltip: string) => {\n const elem = document.getElementById(`deeplib-prev-next-${options.id}-prev-button-tooltip`);\n if (!elem) return false;\n elem.textContent = tooltip;\n };\n\n const setNextTooltip = (tooltip: string) => {\n const elem = document.getElementById(`deeplib-prev-next-${options.id}-next-button-tooltip`);\n if (!elem) return false;\n elem.textContent = tooltip;\n };\n\n const retElem = ElementCreate({\n tag: 'div',\n classList: ['deeplib-prev-next'],\n attributes: {\n id: options.id\n },\n children: [\n advancedElement.createButton({\n id: `deeplib-prev-next-${options.id}-prev-button`,\n image: `${PUBLIC_URL}/dl_images/arrow_left.svg`,\n onClick: () => {\n options.back({\n setLabel: setLabel,\n setBackTooltip: setPrevTooltip,\n setNextTooltip: setNextTooltip,\n });\n },\n tooltip: options.initialPrevTooltip,\n htmlOptions: {\n htmlOptions: {\n button: {\n classList: ['deeplib-prev-next-button']\n }\n },\n options: {\n noStyling: true\n }\n }\n }),\n advancedElement.createLabel({\n id: `${options.id}-label`,\n label: options.initialLabel,\n htmlOptions: {\n classList: ['deeplib-prev-next-label']\n }\n }),\n advancedElement.createButton({\n id: `deeplib-prev-next-${options.id}-next-button`,\n image: `${PUBLIC_URL}/dl_images/arrow_right.svg`,\n onClick: () => {\n options.next({\n setLabel: setLabel,\n setBackTooltip: setPrevTooltip,\n setNextTooltip: setNextTooltip,\n });\n },\n tooltip: options.initialNextTooltip,\n htmlOptions: {\n htmlOptions: {\n button: {\n classList: ['deeplib-prev-next-button']\n }\n },\n options: {\n noStyling: true\n }\n }\n }),\n ]\n });\n\n return retElem;\n}\n\nexport type ModalButton<T extends string = string> = {\n text: string\n action: T\n disabled?: boolean\n};\n\nexport type ModalInputOptions = {\n defaultValue?: string\n readOnly?: boolean\n placeholder?: string\n type: 'input' | 'textarea'\n validate?: (value: string) => string | null\n};\n\nexport type ModalOptions<T extends string = string> = {\n prompt: string | Node\n input?: ModalInputOptions\n buttons?: ModalButton<T>[]\n custom?: readonly (string | Node | HTMLOptions<keyof HTMLElementTagNameMap> | null | undefined)[] | undefined\n closeOnBackdrop?: boolean\n timeoutMs?: number\n};\n\nexport class Modal<T extends string = string> {\n private dialog: HTMLDialogElement;\n private blocker: HTMLDivElement;\n private inputEl?: HTMLInputElement | HTMLTextAreaElement;\n private timeoutId?: number;\n\n private static queue: Modal<any>[] = [];\n private static processing = false;\n\n constructor(private opts: ModalOptions<T>) {\n opts ??= {} as ModalOptions<T>;\n opts.closeOnBackdrop ??= true;\n\n const promptId = `modal-prompt-${Date.now()}`;\n\n this.dialog = ElementCreate({\n tag: 'dialog',\n classList: ['deeplib-modal'],\n attributes: {\n role: 'dialog',\n 'aria-modal': 'true',\n 'aria-labelledby': promptId\n },\n style: {\n fontFamily: CommonGetFontName()\n },\n children: [\n opts.prompt,\n {\n tag: 'div',\n classList: ['deeplib-modal-prompt'],\n attributes: {\n id: promptId\n },\n children: [\n opts.input ? this.renderInput(opts.input) : undefined,\n ]\n },\n this.renderButtons()\n ]\n });\n\n this.blocker = this.createBlocker();\n\n this.renderButtons();\n document.body.append(this.createBlocker(), this.dialog);\n this.setupFocusTrap();\n if (opts.timeoutMs) {\n this.timeoutId = window.setTimeout(() => this.close('timeout' as T), opts.timeoutMs);\n }\n }\n\n show(): Promise<[T, string | null]> {\n return Modal.enqueue(this);\n }\n\n static async alert(msg: string, timeoutMs?: number) {\n await new Modal({ prompt: msg, buttons: [{ action: 'close', text: 'OK' }], timeoutMs }).show();\n }\n\n static async confirm(msg: string) {\n const [action] = await new Modal({ prompt: msg, buttons: [{ text: 'Cancel', action: 'cancel' }, { text: 'OK', action: 'ok' }] }).show();\n return action === 'ok';\n }\n\n static async prompt(msg: string, defaultValue = ''): Promise<string | null> {\n const [action, value] = await new Modal({ prompt: msg, timeoutMs: 0, input: { type: 'input', defaultValue }, buttons: [{ text: 'Cancel', action: 'cancel' }, { text: 'Submit', action: 'submit' }] }).show();\n return action === 'submit' ? value : null;\n }\n\n private renderInput(cfg: ModalInputOptions) {\n const el = document.createElement(cfg.type);\n el.classList.add('deeplib-modal-input');\n if (cfg.placeholder) el.placeholder = cfg.placeholder;\n if (cfg.readOnly) el.readOnly = true;\n if (cfg.defaultValue) el.value = cfg.defaultValue;\n if (cfg.type === 'textarea') (el as HTMLTextAreaElement).rows = 5;\n el.addEventListener('input', () => {\n const err = cfg.validate?.(el.value);\n el.setCustomValidity(err || '');\n });\n this.inputEl = el;\n\n return el;\n }\n\n private renderButtons() {\n const container = document.createElement('div');\n container.classList.add('deeplib-modal-button-container');\n\n const btns = this.opts.buttons ? [...this.opts.buttons] : [];\n\n btns.forEach(b => {\n const btn = advancedElement.createButton({\n label: b.text,\n id: `deeplib-modal-${b.action}`,\n disabled: b.disabled,\n onClick: () => this.close(b.action)\n });\n container.append(btn);\n });\n\n return container;\n }\n\n private createBlocker() {\n const blocker = document.createElement('div');\n blocker.classList.add('deeplib-modal-blocker');\n blocker.title = 'Click to close';\n if (this.opts.closeOnBackdrop !== false)\n blocker.addEventListener('click', () => this.close('close' as T));\n\n return blocker;\n }\n\n private setupFocusTrap() {\n const focusable = 'button, [href], input, textarea, select, [tabindex]:not([tabindex=\"-1\"])';\n const elements = Array.from(this.dialog.querySelectorAll<HTMLElement>(focusable));\n const first = elements[0];\n const last = elements[elements.length - 1];\n this.dialog.addEventListener('keydown', e => {\n if (e.key === 'Tab') {\n if (elements.length === 0) {\n e.preventDefault();\n return;\n }\n if (e.shiftKey) {\n if (document.activeElement === first) {\n last.focus();\n e.preventDefault();\n }\n } else {\n if (document.activeElement === last) {\n first.focus();\n e.preventDefault();\n }\n }\n } else if (e.key === 'Escape') {\n e.stopPropagation();\n this.close('close' as T);\n }\n });\n window.requestAnimationFrame(() => {\n (this.inputEl || first)?.focus();\n });\n }\n\n private close(action: T) {\n if (this.timeoutId) clearTimeout(this.timeoutId);\n this.dialog.close();\n this.dialog.remove();\n this.blocker.remove();\n document.body.querySelector('.deeplib-modal-blocker')?.remove();\n const value = this.inputEl?.value ?? '';\n this.resolve([action, value]);\n Modal.dequeue();\n }\n\n /**\n * An internal function where we will save promise function.\n */\n private resolve: (result: [T, string]) => void = () => { };\n\n /** A function that adds a modal to the queue and returns a promise */\n private static enqueue(modal: Modal<any>): Promise<[any, string]> {\n Modal.queue.push(modal);\n if (!Modal.processing) Modal.dequeue();\n return new Promise(resolve => (modal.resolve = resolve));\n }\n\n /** A function that processes the queue, removing the first modal */\n private static dequeue() {\n const modal = Modal.queue.shift();\n if (modal) {\n Modal.processing = true;\n modal.dialog.show();\n } else {\n Modal.processing = false;\n }\n }\n}\n\n(window as any).Modal = Modal;", "\nimport { BaseSubscreen, getText, GUI, GuiDebug, layoutElement } from '../deeplib';\nimport { advancedElement } from '../utilities/elements/advanced_elements';\nimport { GuiImportExport } from './import_export';\n\nexport type MainMenuOptions = {\n repoLink?: string;\n wikiLink?: string;\n resetSubscreen?: BaseSubscreen;\n importExportSubscreen?: GuiImportExport;\n};\n\nexport class MainMenu extends BaseSubscreen {\n subscreens: BaseSubscreen[] = [];\n\n private static options: MainMenuOptions = {};\n\n get name(): string {\n return 'mainmenu';\n }\n\n constructor(module: GUI) {\n super({ drawCharacter: true }, module);\n\n this.subscreens = module.subscreens;\n }\n\n load(): void {\n if (!GUI.instance?.currentSubscreen) {\n this.setSubscreen(this);\n return;\n }\n\n super.load();\n\n const exitButton = advancedElement.createButton({\n id: 'exit',\n size: [90, 90],\n image: `${PUBLIC_URL}/dl_images/exit.svg`,\n onClick: () => {\n this.exit();\n },\n tooltip: getText('settings.button.back_button_hint')\n });\n\n const menu = document.getElementById('deeplib-nav-menu');\n if (menu) {\n ElementMenu.AppendButton(menu, exitButton);\n }\n\n for (const screen of this.subscreens) {\n\n if (screen.name == 'mainmenu') continue;\n\n const button = advancedElement.createButton({\n id: `${screen.name}-button`,\n image: screen.icon,\n label: getText(`mainmenu.button.${screen.name}`),\n onClick: () => {\n this.setSubscreen(screen);\n },\n size: [null, 90],\n });\n\n layoutElement.appendToSettingsDiv(button);\n }\n\n const miscDiv = layoutElement.createMiscDiv();\n layoutElement.appendToSubscreenDiv(miscDiv);\n\n if (MainMenu.options.wikiLink) {\n const wikiButton = advancedElement.createButton({\n id: 'deeplib-wiki-button',\n image: `${PUBLIC_URL}/dl_images/notebook.svg`,\n label: getText('mainmenu.button.wiki'),\n onClick: () => {\n window.open(MainMenu.options.wikiLink, '_blank');\n },\n size: [null, 80],\n });\n layoutElement.appendToMiscDiv(wikiButton);\n }\n\n if (MainMenu.options.repoLink) {\n const repoButton = advancedElement.createButton({\n id: 'deeplib-repo-button',\n image: `${PUBLIC_URL}/dl_images/git.svg`,\n label: getText('mainmenu.button.repo'),\n onClick: () => {\n window.open(MainMenu.options.repoLink, '_blank');\n },\n size: [null, 80],\n });\n layoutElement.appendToMiscDiv(repoButton);\n }\n\n if (MainMenu.options.resetSubscreen) {\n const resetButton = advancedElement.createButton({\n id: 'deeplib-reset-button',\n image: `${PUBLIC_URL}/dl_images/trash_bin.svg`,\n label: getText('mainmenu.button.reset'),\n onClick: () => {\n this.setSubscreen(MainMenu.options.resetSubscreen!);\n },\n size: [null, 80],\n });\n layoutElement.appendToMiscDiv(resetButton);\n }\n\n if (MainMenu.options.importExportSubscreen) {\n const importExportButton = advancedElement.createButton({\n id: 'deeplib-import-export-button',\n image: `${PUBLIC_URL}/dl_images/transfer.svg`,\n label: getText('mainmenu.button.import_export'),\n onClick: () => {\n this.setSubscreen(MainMenu.options.importExportSubscreen!);\n },\n size: [null, 80],\n });\n layoutElement.appendToMiscDiv(importExportButton);\n }\n\n if (IS_DEBUG) {\n const debugButton = advancedElement.createButton({\n id: 'deeplib-debug-button',\n image: `${PUBLIC_URL}/dl_images/bug.svg`,\n onClick: () => {\n this.setSubscreen(new GuiDebug());\n },\n size: [90, 90],\n });\n if (menu) {\n ElementMenu.PrependItem(menu, debugButton);\n }\n }\n }\n\n run() {\n super.run();\n }\n\n click() { }\n\n exit(): void {\n CharacterAppearanceForceUpCharacter = -1;\n CharacterLoadCanvas(Player);\n this.setSubscreen(null);\n PreferenceSubscreenExtensionsClear();\n }\n\n resize(): void {\n super.resize();\n ElementSetPosition('deeplib-misc', 1905, 930, 'bottom-right');\n ElementSetSize('deeplib-misc', 405, null);\n }\n\n static setOptions(mainMenuOptions: MainMenuOptions) {\n MainMenu.options = mainMenuOptions;\n }\n}\n", "\nimport { BaseSubscreen, ModSdkManager, getText, layoutElement, SettingsModel, modStorage, deepLibLogger } from '../deeplib';\nimport { advancedElement, Modal } from '../utilities/elements/advanced_elements';\n\nexport type ImportExportOptions = {\n /** A custom save file extension. */\n customFileExtension: string;\n /** A callback to be called after data is imported. */\n onImport?: () => void;\n /** A callback to be called after data is exported. */\n onExport?: () => void;\n};\n\ntype DataTransferMethod = 'clipboard' | 'file';\n\nexport class GuiImportExport extends BaseSubscreen {\n private importExportOptions: ImportExportOptions;\n\n get name(): string {\n return 'import-export';\n }\n\n constructor(importExportOptions: ImportExportOptions) {\n super({ drawCharacter: true });\n this.importExportOptions = importExportOptions;\n }\n\n load(): void {\n\n super.load();\n\n const importFromFileButton = advancedElement.createButton({\n id: 'deeplib-import-file-button',\n size: [600, 90],\n image: `${PUBLIC_URL}/dl_images/file_import.svg`,\n onClick: () => {\n this.dataImport('file');\n },\n label: getText('import-export.button.import_file')\n });\n layoutElement.appendToSettingsDiv(importFromFileButton);\n\n const exportToFileButton = advancedElement.createButton({\n id: 'deeplib-export-file-button',\n size: [600, 90],\n image: `${PUBLIC_URL}/dl_images/file_export.svg`,\n onClick: () => {\n this.dataExport('file');\n },\n label: getText('import-export.button.export_file')\n });\n layoutElement.appendToSettingsDiv(exportToFileButton);\n\n const importFromClipboardButton = advancedElement.createButton({\n id: 'deeplib-import-clipboard-button',\n size: [600, 90],\n image: `${PUBLIC_URL}/dl_images/clipboard_import.svg`,\n onClick: () => {\n this.dataImport('clipboard');\n },\n label: getText('import-export.button.import_clipboard')\n });\n layoutElement.appendToSettingsDiv(importFromClipboardButton);\n\n const exportToClipboardButton = advancedElement.createButton({\n id: 'deeplib-export-clipboard-button',\n size: [600, 90],\n image: `${PUBLIC_URL}/dl_images/clipboard_export.svg`,\n onClick: () => {\n this.dataExport('clipboard');\n },\n label: getText('import-export.button.export_clipboard')\n });\n layoutElement.appendToSettingsDiv(exportToClipboardButton);\n }\n\n resize(): void {\n super.resize();\n }\n\n async dataExport(transferMethod: DataTransferMethod) {\n try {\n const data = LZString.compressToBase64(JSON.stringify(modStorage.playerStorage));\n\n if (transferMethod === 'clipboard') {\n await this.exportToClipboard(data);\n } else if (transferMethod === 'file') {\n await this.exportToFile(data, 'themed_settings');\n }\n\n this.importExportOptions.onExport?.();\n ToastManager.success('Data exported successfully.');\n } catch (error) {\n ToastManager.error('Data export failed.');\n deepLibLogger.error(`Data export failed for ${ModSdkManager.ModInfo.name}.`, error,);\n }\n }\n\n async dataImport(transferMethod: DataTransferMethod) {\n try {\n let importedData: string | null = '';\n\n if (transferMethod === 'clipboard') {\n importedData = await this.importFromClipboard() ?? null;\n } else if (transferMethod === 'file') {\n importedData = await this.importFromFile() ?? null;\n }\n\n if (!importedData) {\n throw new Error('No data imported.');\n }\n\n const data = JSON.parse(LZString.decompressFromBase64(importedData) ?? '') as SettingsModel;\n\n if (!data) {\n throw new Error('Invalid data.');\n }\n\n modStorage.playerStorage = data;\n this.importExportOptions.onImport?.();\n ToastManager.success('Data imported successfully.');\n } catch (error) {\n ToastManager.error('Data import failed.');\n deepLibLogger.error(`Data import failed for ${ModSdkManager.ModInfo.name}.`, error,);\n }\n }\n\n async exportToFile(data: string, defaultFileName: string): Promise<void> {\n const CUSTOM_EXTENSION = this.importExportOptions.customFileExtension.startsWith('.')\n ? this.importExportOptions.customFileExtension\n : '.' + this.importExportOptions.customFileExtension;\n\n const suggestedName = defaultFileName.endsWith(CUSTOM_EXTENSION)\n ? defaultFileName\n : defaultFileName + CUSTOM_EXTENSION;\n\n if ('showSaveFilePicker' in window) {\n try {\n const handle = await (window as any).showSaveFilePicker({\n suggestedName: suggestedName,\n types: [\n {\n description: 'Custom Data Files',\n accept: { 'text/plain': [CUSTOM_EXTENSION] },\n },\n ],\n });\n const writable = await handle.createWritable();\n await writable.write(data);\n await writable.close();\n } catch (error: any) {\n throw new Error('File save cancelled or failed: ' + error.message);\n }\n } else {\n const fileName = await Modal.prompt('Enter file name', suggestedName);\n\n if (fileName === null) {\n return;\n } else if (fileName === '') {\n throw new Error('File name cannot be empty.');\n }\n\n const blob = new Blob([data], { type: 'text/plain' });\n const link = ElementCreate({\n tag: 'a',\n attributes: {\n href: URL.createObjectURL(blob),\n download: fileName.endsWith(CUSTOM_EXTENSION) ? fileName : fileName + CUSTOM_EXTENSION\n },\n });\n\n link.click();\n URL.revokeObjectURL(link.href);\n }\n }\n\n async importFromFile(): Promise<string | null> {\n const CUSTOM_EXTENSION = this.importExportOptions.customFileExtension.startsWith('.')\n ? this.importExportOptions.customFileExtension\n : '.' + this.importExportOptions.customFileExtension;\n\n async function importFromFileInternal(file: File): Promise<string | null> {\n if (!file.name.endsWith(CUSTOM_EXTENSION)) {\n throw new Error(`Invalid file type. Expected a ${CUSTOM_EXTENSION} file.`);\n }\n\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = () => reject(new Error('Failed to read file.'));\n reader.readAsText(file);\n });\n }\n\n if ('showOpenFilePicker' in window) {\n try {\n const [fileHandle] = await (window as any).showOpenFilePicker({\n types: [\n {\n description: 'Custom Data Files',\n accept: { 'text/plain': [CUSTOM_EXTENSION] },\n },\n ],\n multiple: false,\n });\n const file = await fileHandle.getFile();\n return await importFromFileInternal(file);\n } catch (error: any) {\n throw new Error('File selection cancelled or failed: ' + error.message);\n }\n } else {\n return new Promise((resolve, reject) => {\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = CUSTOM_EXTENSION;\n input.onchange = async (event) => {\n const file = (event.target as HTMLInputElement).files?.[0];\n if (file) {\n try {\n const data = await importFromFileInternal(file);\n resolve(data);\n } catch (error) {\n reject(error);\n }\n } else {\n reject(new Error('No file selected.'));\n }\n };\n input.click();\n });\n }\n }\n\n async exportToClipboard(data: string): Promise<void> {\n return navigator.clipboard.writeText(data).catch((error) => {\n throw new Error('Failed to copy data to clipboard.' + error);\n });\n }\n\n async importFromClipboard(): Promise<string | null> {\n return Modal.prompt('Enter data to import').catch((error) => {\n throw new Error('Failed to read data from clipboard.' + error);\n });\n }\n}\n", "import { SettingsModel, deepLibLogger } from '../deeplib';\n\nexport class ModStorage<T extends SettingsModel = SettingsModel> {\n private static _instance: ModStorage | null = null;\n private modName: string;\n\n constructor(modName: string) {\n if (!ModStorage._instance) {\n ModStorage._instance = this;\n this.modName = modName;\n }\n this.modName ??= modName;\n\n return ModStorage._instance as ModStorage<T>;\n }\n\n get playerStorage(): T {\n return Player[this.modName];\n }\n\n set playerStorage(value: T) {\n Player[this.modName] = value;\n }\n\n get extensionStorage(): string {\n return Player.ExtensionSettings[this.modName];\n }\n\n set extensionStorage(value: string) {\n Player.ExtensionSettings[this.modName] = value;\n }\n\n setLocalStorage(key: string, value: object) {\n localStorage.setItem(`${this.modName}_${key}`, ModStorage.dataCompress(value));\n }\n\n getLocalStorage(key: string): object | null {\n const data = localStorage.getItem(`${this.modName}_${key}`);\n\n if (!data) return null;\n\n return ModStorage.dataDecompress<T>(data);\n }\n\n load() {\n if (this.extensionStorage) {\n const parsed = ModStorage.dataDecompress<T>(this.extensionStorage || '');\n if (parsed === null || !Object.hasOwn(parsed, 'Version')) {\n this.playerStorage = {} as T;\n } else {\n this.playerStorage = parsed;\n };\n } else {\n this.playerStorage = {} as T;\n }\n }\n\n save() {\n if (!this.extensionStorage) this.extensionStorage = '';\n this.extensionStorage = ModStorage.dataCompress(this.playerStorage);\n ServerPlayerExtensionSettingsSync(this.modName);\n }\n\n static dataDecompress<T = object>(string: string): T | null {\n const d = LZString.decompressFromBase64(string as string);\n let data: T | null = null;\n\n try {\n const decoded: T = JSON.parse(d as string);\n data = decoded;\n } catch (error) {\n deepLibLogger.error(error);\n }\n\n return data;\n }\n\n static dataCompress(object: object) {\n return LZString.compressToBase64(JSON.stringify(object));\n }\n}\n", "import { SettingElement } from '../../base/elements_typings';\n\nexport const domUtil = {\n autoSetPosition: autoSetPosition,\n autoSetSize: autoSetSize,\n hide: hide,\n unhide: unhide,\n hasOverflow: hasOverflow\n};\n\nfunction autoSetPosition(_: ElementHelp.ElementOrId, position: SettingElement['position']) {\n let xPos = undefined;\n let yPos = undefined;\n\n if (Array.isArray(position)) {\n xPos = position[0];\n yPos = position[1];\n } else if (typeof position === 'function') {\n const result = position();\n xPos = result[0];\n yPos = result[1];\n }\n\n if (xPos !== undefined && yPos !== undefined) ElementSetPosition(_, xPos, yPos);\n}\n\nfunction autoSetSize(_: ElementHelp.ElementOrId, size: SettingElement['size']) {\n let width = undefined;\n let height = undefined;\n \n if (Array.isArray(size)) {\n width = size[0];\n height = size[1];\n } else if (typeof size === 'function') {\n const result = size();\n width = result[0];\n height = result[1];\n }\n \n if (width !== undefined && height !== undefined) ElementSetSize(_, width, height);\n}\n\nfunction hide(_: ElementHelp.ElementOrId) {\n const element = ElementWrap(_);\n if (!element) return;\n\n element.style.display = 'none';\n};\n\nfunction unhide(_: ElementHelp.ElementOrId) {\n const element = ElementWrap(_);\n if (!element) return;\n\n element.style.display = '';\n};\n\nfunction hasOverflow(el: ElementHelp.ElementOrId): { any: boolean, vertical: boolean, horizontal: boolean } | null {\n const element = ElementWrap(el);\n if (!element) return null;\n\n const vertical = element.scrollHeight > element.clientHeight;\n const horizontal = element.scrollWidth > element.clientWidth;\n\n return {\n any: vertical || horizontal,\n vertical,\n horizontal,\n };\n}", "export const layoutElement = {\n createSubscreenDiv: elementCreateSubscreenDiv,\n getSubscreenDiv: elementGetSubscreenDiv,\n appendToSubscreenDiv: elementAppendToSubscreenDiv,\n removeSubscreenDiv: elementRemoveSubscreenDiv,\n\n createSettingsDiv: elementCreateSettingsDiv,\n getSettingsDiv: elementGetSettingsDiv,\n appendToSettingsDiv: elementAppendToSettingsDiv,\n removeSettingsDiv: elementRemoveSettingsDiv,\n\n createMiscDiv: elementCreateMiscDiv,\n getMiscDiv: elementGetMiscDiv,\n appendToMiscDiv: elementAppendToMiscDiv,\n removeMiscDiv: elementRemoveMiscDiv\n};\n\nfunction elementCreateSubscreenDiv() {\n const subscreenDiv = elementGetSubscreenDiv();\n if (subscreenDiv) {\n console.error('Subscreen already exists');\n return subscreenDiv;\n }\n\n const div = document.createElement('div');\n div.id = 'deeplib-subscreen';\n div.classList.add('deeplib-subscreen', 'HideOnPopup');\n\n return document.body.appendChild(div);\n}\n\nfunction elementGetSubscreenDiv() {\n return document.getElementById('deeplib-subscreen') ?? undefined;\n}\n\nfunction elementRemoveSubscreenDiv() {\n return elementGetSubscreenDiv()?.remove();\n}\n\nfunction elementAppendToSubscreenDiv(...element: HTMLElement[]) {\n return elementGetSubscreenDiv()?.append(...element);\n}\n\nfunction elementCreateSettingsDiv() {\n const settingsDiv = elementGetSettingsDiv();\n if (settingsDiv) {\n console.error('Settings screen already exists');\n return settingsDiv;\n }\n\n const div = document.createElement('div');\n div.id = 'deeplib-settings';\n div.classList.add('deeplib-settings');\n\n return div;\n}\n\nfunction elementGetSettingsDiv() {\n return document.getElementById('deeplib-settings') ?? undefined;\n}\n\nfunction elementAppendToSettingsDiv(...element: HTMLElement[]) {\n return elementGetSettingsDiv()?.append(...element);\n}\n\nfunction elementRemoveSettingsDiv() {\n return elementGetSettingsDiv()?.remove();\n}\n\nfunction elementCreateMiscDiv() {\n const miscDiv = elementGetMiscDiv();\n if (miscDiv) {\n console.error('Settings screen already exists');\n return miscDiv;\n }\n\n const div = document.createElement('div');\n div.id = 'deeplib-misc';\n div.classList.add('deeplib-misc');\n\n return div;\n}\n\nfunction elementGetMiscDiv() {\n return document.getElementById('deeplib-misc');\n}\n\nfunction elementAppendToMiscDiv(...element: HTMLElement[]) {\n return elementGetMiscDiv()?.append(...element);\n}\n\nfunction elementRemoveMiscDiv() {\n return elementGetMiscDiv()?.remove();\n}\n", "type LogLevel = 'info' | 'log' | 'warn' | 'error' | 'debug';\n\ninterface LogEntry {\n readonly args: readonly any[];\n readonly date: Date;\n readonly logLevel: LogLevel;\n}\n\nexport class Logger extends Array<LogEntry> {\n private ModName: string = 'DeepLib';\n\n constructor(modName?: string) {\n super();\n\n if (modName) {\n this.ModName = modName;\n }\n }\n\n private _Log(level: LogLevel, ...args: any[]): void {\n const logEntry: LogEntry = {\n logLevel: level,\n args: [...args],\n // trace: arguments.callee.caller.toString().split('\\n'), \n date: new Date(Date.now())\n // `[${this.ModName}] ${formattedArgs}` \n };\n\n const userAgent = navigator.userAgent.toLowerCase();\n if (userAgent.includes('chrome') || userAgent.includes('firefox')) {\n const color = Logger.colorizeLog(level);\n args.forEach(arg => {\n if (typeof arg === 'string') {\n arg = `\\n%c${arg}`;\n // args.splice(args.indexOf(arg), 1, arg, color);\n }\n });\n console.log(`%c${this.ModName}:`, color, ...args);\n } else {\n console.log(`${this.ModName}:`, ...args);\n }\n\n this.push(logEntry);\n }\n\n info(...args: any[]): void {\n this._Log('info', ...args);\n }\n\n log(...args: any[]): void {\n this._Log('log', ...args);\n }\n\n warn(...args: any[]): void {\n this._Log('warn', ...args);\n }\n\n error(...args: any[]): void {\n this._Log('error', ...args);\n }\n\n debug(...args: any[]): void {\n this._Log('debug', ...args);\n }\n\n static colorizeLog(logLevel: LogLevel): string {\n const colors: Record<LogLevel, string> = {\n info: 'color: #32CCCC',\n log: 'color: #CCCC32',\n warn: 'color: #eec355',\n error: 'color: #750b0b',\n debug: 'color: #9E4BCF',\n };\n\n return colors[logLevel];\n }\n}\n\nexport const deepLibLogger = new Logger();\n", "export function sendLocalMessage(id: string | null, message: string, timeoutInSeconds?: number) {\n const element = ElementCreate({\n tag: 'div',\n classList: ['ChatMessage', 'deeplib-message', 'ChatMessageNonDialogue'],\n attributes: {\n id: id ?? `DEEPLIB_LOCAL_MESSAGE_${Date.now()}`,\n 'data-time': ChatRoomCurrentTime(),\n 'data-sender': Player.MemberNumber?.toString(),\n },\n children: [\n {\n tag: 'span',\n classList: ['deeplib-text'],\n innerHTML: message.replaceAll('\\n\\t', ''),\n },\n {\n tag: 'br',\n },\n {\n tag: 'a',\n classList: ['deeplib-text'],\n attributes: {\n href: '#',\n },\n innerHTML: '<b>Close (Click)</b>',\n eventListeners: {\n click: () => {\n element.remove();\n },\n },\n }\n ]\n });\n\n ChatRoomAppendChat(element);\n if (!timeoutInSeconds) return;\n setTimeout(() => element.remove(), timeoutInSeconds * 1000);\n}\n\nexport function sendActionMessage(msg: string, target: undefined | number = undefined, dictionary: ChatMessageDictionaryEntry[] = []) {\n if (!msg) return;\n ServerSend('ChatRoomChat', {\n Content: 'DEEPLIB_CUSTOM_ACTION',\n Type: 'Action',\n Target: target ?? undefined,\n Dictionary: [\n { Tag: 'MISSING TEXT IN \"Interface.csv\": DEEPLIB_CUSTOM_ACTION', Text: msg },\n ...dictionary,\n ],\n });\n}\n", "import rawSdkImport from 'bondage-club-mod-sdk';\n\n// What the fuck is this?? \n// It seems that ESBuild breaks things, either when building this package or a final mod\nconst rawSdk = rawSdkImport as any;\nconst bcModSdkRef = (rawSdk.default ?? rawSdk) as ModSDKGlobalAPI;\n\nexport const HookPriority = {\n Observe: 0,\n AddBehavior: 1,\n ModifyBehavior: 5,\n OverrideBehavior: 10,\n Top: 100\n};\n\nexport type ModuleCategory = number | string;\n\ninterface IPatchedFunctionData {\n name: string;\n hooks: {\n hook: PatchHook;\n priority: number;\n module: ModuleCategory | null;\n removeCallback: () => void;\n }[];\n}\n\nexport class ModSdkManager {\n private static SDK: ModSDKModAPI;\n private static patchedFunctions: Map<string, IPatchedFunctionData> = new Map();\n\n public static ModInfo: ModSDKModInfo;\n\n constructor(info: ModSDKModInfo, options?: ModSDKModOptions) {\n ModSdkManager.SDK = bcModSdkRef.registerMod(info, options);\n ModSdkManager.ModInfo = info;\n }\n\n initPatchableFunction(target: string): IPatchedFunctionData {\n let result = ModSdkManager.patchedFunctions.get(target);\n if (!result) {\n result = {\n name: target,\n hooks: []\n };\n ModSdkManager.patchedFunctions.set(target, result);\n }\n return result;\n }\n\n hookFunction<TargetName extends string>(\n target: TargetName,\n priority: number,\n hook: PatchHook<GetDotedPathType<typeof globalThis, TargetName>>,\n module: ModuleCategory | null = null\n ): () => void {\n const data = this.initPatchableFunction(target);\n\n if (data.hooks.some((h) => h.hook === hook)) {\n return () => null;\n }\n\n const removeCallback = ModSdkManager.SDK?.hookFunction(target, priority, hook);\n\n data.hooks.push({\n hook,\n priority,\n module,\n removeCallback\n });\n data.hooks.sort((a, b) => b.priority - a.priority);\n\n return removeCallback;\n }\n\n patchFunction(target: string, patches: Record<string, string>): void {\n ModSdkManager.SDK?.patchFunction(target, patches);\n }\n\n unpatchFunction(target: string): void {\n ModSdkManager.SDK?.removePatches(target);\n }\n\n removeHookByModule(target: string, module: ModuleCategory): boolean {\n const data = this.initPatchableFunction(target);\n\n for (let i = data.hooks.length - 1; i >= 0; i--) {\n if (data.hooks[i].module === module) {\n data.hooks[i].removeCallback();\n data.hooks.splice(i, 1);\n }\n }\n\n return true;\n }\n\n removeAllHooksByModule(module: ModuleCategory): boolean {\n for (const data of ModSdkManager.patchedFunctions.values()) {\n for (let i = data.hooks.length - 1; i >= 0; i--) {\n if (data.hooks[i].module === module) {\n data.hooks[i].removeCallback();\n data.hooks.splice(i, 1);\n }\n }\n }\n\n return true;\n }\n}\n", "export const Style = {\n injectInline(styleId: string, styleSource: string) {\n const isStyleLoaded = document.getElementById(styleId);\n\n if (isStyleLoaded) return;\n\n const styleElement = document.createElement('style');\n styleElement.id = styleId;\n styleElement.appendChild(document.createTextNode(styleSource));\n document.head.appendChild(styleElement);\n },\n\n injectEmbed(styleId: string, styleLink: string) {\n const isStyleLoaded = document.getElementById(styleId);\n\n if (isStyleLoaded) return;\n\n const styleElement = document.createElement('link');\n styleElement.id = styleId;\n styleElement.rel = 'stylesheet';\n styleElement.href = styleLink;\n document.head.appendChild(styleElement);\n },\n\n eject(id: string) {\n const style = document.getElementById(id);\n if (!style) return;\n\n style.remove();\n },\n\n reload(styleId: string, styleSource: string) {\n Style.eject(styleId);\n Style.injectInline(styleId, styleSource);\n },\n\n async fetch(link: string) {\n return fetch(link).then((res) => res.text());\n }\n};\n", "type TranslationDict = {\n [key: string]: string;\n};\n\ninterface InitOptions {\n pathToTranslationsFolder: string;\n}\n\nexport class Localization {\n private static LibTranslation: TranslationDict = {};\n private static ModTranslation: TranslationDict = {};\n private static PathToModTranslation: string;\n private static PathToLibTranslation: string = `${PUBLIC_URL}/dl_translations/`;\n private static initialized = false;\n\n static async init(initOptions: InitOptions) {\n if (Localization.initialized) return;\n Localization.initialized = true;\n\n Localization.PathToModTranslation = initOptions.pathToTranslationsFolder.endsWith('/') ? initOptions.pathToTranslationsFolder : initOptions.pathToTranslationsFolder + '/';\n\n const lang = TranslationLanguage.toLowerCase();\n\n const libTranslation = await Localization.fetchLanguageFile(Localization.PathToLibTranslation, lang);\n if (lang === 'en') {\n Localization.LibTranslation = libTranslation;\n } else {\n const fallbackTranslation = await Localization.fetchLanguageFile(Localization.PathToLibTranslation, 'en');\n Localization.LibTranslation = { ...fallbackTranslation, ...libTranslation };\n }\n\n const modTranslation = await Localization.fetchLanguageFile(Localization.PathToModTranslation, lang);\n if (lang === 'en') {\n Localization.ModTranslation = modTranslation;\n } else {\n const fallbackTranslation = await Localization.fetchLanguageFile(Localization.PathToModTranslation, 'en');\n Localization.ModTranslation = { ...fallbackTranslation, ...modTranslation };\n }\n }\n\n static getTextMod(srcTag: string): string | undefined {\n return Localization.ModTranslation?.[srcTag] || undefined;\n }\n\n static getTextLib(srcTag: string): string | undefined {\n return Localization.LibTranslation?.[srcTag] || undefined;\n }\n\n private static async fetchLanguageFile(baseUrl: string, lang: string): Promise<TranslationDict> {\n const response = await fetch(`${baseUrl}${lang}.lang`);\n\n if (lang !== 'en' && !response.ok) {\n return this.fetchLanguageFile(baseUrl, 'en');\n }\n const langFileContent = await response.text();\n\n return this.parseLanguageFile(langFileContent);\n }\n\n private static parseLanguageFile(content: string): TranslationDict {\n const translations: TranslationDict = {};\n const lines = content.split('\\n');\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n\n const [key, ...rest] = trimmed.split('=');\n translations[key.trim()] = rest.join('=').trim();\n }\n\n return translations;\n }\n}\n\nexport const getText = (srcTag: string): string => {\n return Localization.getTextMod(srcTag) || Localization.getTextLib(srcTag) || srcTag;\n};\n"],
5
- "mappings": "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",
3
+ "sources": ["../node_modules/.pnpm/bondage-club-mod-sdk@1.2.0/node_modules/bondage-club-mod-sdk/dist/bcmodsdk.js", "../src/base/base_module.ts", "../src/base/base_subscreen.ts", "../src/styles/index.scss", "../src/base/initialization.ts", "../src/base/modules.ts", "../src/migrators/base_migrator.ts", "../src/modules/gui.ts", "../src/modules/version.ts", "../src/screens/debug.ts", "../src/utilities/common.ts", "../src/utilities/elements/elements.ts", "../src/screens/main_menu.ts", "../src/screens/import_export.ts", "../src/utilities/data.ts", "../src/utilities/elements/helpers.ts", "../src/utilities/elements/layout.ts", "../src/utilities/logger.ts", "../src/utilities/messages.ts", "../src/utilities/sdk.ts", "../src/utilities/style.ts", "../src/utilities/translation.ts"],
4
+ "sourcesContent": ["// Bondage Club Mod Development Kit (1.2.0)\n// For more info see: https://github.com/Jomshir98/bondage-club-mod-sdk\n/** @type {ModSDKGlobalAPI} */\nvar bcModSdk=function(){\"use strict\";const o=\"1.2.0\";function e(o){alert(\"Mod ERROR:\\n\"+o);const e=new Error(o);throw console.error(e),e}const t=new TextEncoder;function n(o){return!!o&&\"object\"==typeof o&&!Array.isArray(o)}function r(o){const e=new Set;return o.filter((o=>!e.has(o)&&e.add(o)))}const i=new Map,a=new Set;function c(o){a.has(o)||(a.add(o),console.warn(o))}function s(o){const e=[],t=new Map,n=new Set;for(const r of f.values()){const i=r.patching.get(o.name);if(i){e.push(...i.hooks);for(const[e,a]of i.patches.entries())t.has(e)&&t.get(e)!==a&&c(`ModSDK: Mod '${r.name}' is patching function ${o.name} with same pattern that is already applied by different mod, but with different pattern:\\nPattern:\\n${e}\\nPatch1:\\n${t.get(e)||\"\"}\\nPatch2:\\n${a}`),t.set(e,a),n.add(r.name)}}e.sort(((o,e)=>e.priority-o.priority));const r=function(o,e){if(0===e.size)return o;let t=o.toString().replaceAll(\"\\r\\n\",\"\\n\");for(const[n,r]of e.entries())t.includes(n)||c(`ModSDK: Patching ${o.name}: Patch ${n} not applied`),t=t.replaceAll(n,r);return(0,eval)(`(${t})`)}(o.original,t);let i=function(e){var t,i;const a=null===(i=(t=m.errorReporterHooks).hookChainExit)||void 0===i?void 0:i.call(t,o.name,n),c=r.apply(this,e);return null==a||a(),c};for(let t=e.length-1;t>=0;t--){const n=e[t],r=i;i=function(e){var t,i;const a=null===(i=(t=m.errorReporterHooks).hookEnter)||void 0===i?void 0:i.call(t,o.name,n.mod),c=n.hook.apply(this,[e,o=>{if(1!==arguments.length||!Array.isArray(e))throw new Error(`Mod ${n.mod} failed to call next hook: Expected args to be array, got ${typeof o}`);return r.call(this,o)}]);return null==a||a(),c}}return{hooks:e,patches:t,patchesSources:n,enter:i,final:r}}function l(o,e=!1){let r=i.get(o);if(r)e&&(r.precomputed=s(r));else{let e=window;const a=o.split(\".\");for(let t=0;t<a.length-1;t++)if(e=e[a[t]],!n(e))throw new Error(`ModSDK: Function ${o} to be patched not found; ${a.slice(0,t+1).join(\".\")} is not object`);const c=e[a[a.length-1]];if(\"function\"!=typeof c)throw new Error(`ModSDK: Function ${o} to be patched not found`);const l=function(o){let e=-1;for(const n of t.encode(o)){let o=255&(e^n);for(let e=0;e<8;e++)o=1&o?-306674912^o>>>1:o>>>1;e=e>>>8^o}return((-1^e)>>>0).toString(16).padStart(8,\"0\").toUpperCase()}(c.toString().replaceAll(\"\\r\\n\",\"\\n\")),d={name:o,original:c,originalHash:l};r=Object.assign(Object.assign({},d),{precomputed:s(d),router:()=>{},context:e,contextProperty:a[a.length-1]}),r.router=function(o){return function(...e){return o.precomputed.enter.apply(this,[e])}}(r),i.set(o,r),e[r.contextProperty]=r.router}return r}function d(){for(const o of i.values())o.precomputed=s(o)}function p(){const o=new Map;for(const[e,t]of i)o.set(e,{name:e,original:t.original,originalHash:t.originalHash,sdkEntrypoint:t.router,currentEntrypoint:t.context[t.contextProperty],hookedByMods:r(t.precomputed.hooks.map((o=>o.mod))),patchedByMods:Array.from(t.precomputed.patchesSources)});return o}const f=new Map;function u(o){f.get(o.name)!==o&&e(`Failed to unload mod '${o.name}': Not registered`),f.delete(o.name),o.loaded=!1,d()}function g(o,t){o&&\"object\"==typeof o||e(\"Failed to register mod: Expected info object, got \"+typeof o),\"string\"==typeof o.name&&o.name||e(\"Failed to register mod: Expected name to be non-empty string, got \"+typeof o.name);let r=`'${o.name}'`;\"string\"==typeof o.fullName&&o.fullName||e(`Failed to register mod ${r}: Expected fullName to be non-empty string, got ${typeof o.fullName}`),r=`'${o.fullName} (${o.name})'`,\"string\"!=typeof o.version&&e(`Failed to register mod ${r}: Expected version to be string, got ${typeof o.version}`),o.repository||(o.repository=void 0),void 0!==o.repository&&\"string\"!=typeof o.repository&&e(`Failed to register mod ${r}: Expected repository to be undefined or string, got ${typeof o.version}`),null==t&&(t={}),t&&\"object\"==typeof t||e(`Failed to register mod ${r}: Expected options to be undefined or object, got ${typeof t}`);const i=!0===t.allowReplace,a=f.get(o.name);a&&(a.allowReplace&&i||e(`Refusing to load mod ${r}: it is already loaded and doesn't allow being replaced.\\nWas the mod loaded multiple times?`),u(a));const c=o=>{let e=g.patching.get(o.name);return e||(e={hooks:[],patches:new Map},g.patching.set(o.name,e)),e},s=(o,t)=>(...n)=>{var i,a;const c=null===(a=(i=m.errorReporterHooks).apiEndpointEnter)||void 0===a?void 0:a.call(i,o,g.name);g.loaded||e(`Mod ${r} attempted to call SDK function after being unloaded`);const s=t(...n);return null==c||c(),s},p={unload:s(\"unload\",(()=>u(g))),hookFunction:s(\"hookFunction\",((o,t,n)=>{\"string\"==typeof o&&o||e(`Mod ${r} failed to patch a function: Expected function name string, got ${typeof o}`);const i=l(o),a=c(i);\"number\"!=typeof t&&e(`Mod ${r} failed to hook function '${o}': Expected priority number, got ${typeof t}`),\"function\"!=typeof n&&e(`Mod ${r} failed to hook function '${o}': Expected hook function, got ${typeof n}`);const s={mod:g.name,priority:t,hook:n};return a.hooks.push(s),d(),()=>{const o=a.hooks.indexOf(s);o>=0&&(a.hooks.splice(o,1),d())}})),patchFunction:s(\"patchFunction\",((o,t)=>{\"string\"==typeof o&&o||e(`Mod ${r} failed to patch a function: Expected function name string, got ${typeof o}`);const i=l(o),a=c(i);n(t)||e(`Mod ${r} failed to patch function '${o}': Expected patches object, got ${typeof t}`);for(const[n,i]of Object.entries(t))\"string\"==typeof i?a.patches.set(n,i):null===i?a.patches.delete(n):e(`Mod ${r} failed to patch function '${o}': Invalid format of patch '${n}'`);d()})),removePatches:s(\"removePatches\",(o=>{\"string\"==typeof o&&o||e(`Mod ${r} failed to patch a function: Expected function name string, got ${typeof o}`);const t=l(o);c(t).patches.clear(),d()})),callOriginal:s(\"callOriginal\",((o,t,n)=>{\"string\"==typeof o&&o||e(`Mod ${r} failed to call a function: Expected function name string, got ${typeof o}`);const i=l(o);return Array.isArray(t)||e(`Mod ${r} failed to call a function: Expected args array, got ${typeof t}`),i.original.apply(null!=n?n:globalThis,t)})),getOriginalHash:s(\"getOriginalHash\",(o=>{\"string\"==typeof o&&o||e(`Mod ${r} failed to get hash: Expected function name string, got ${typeof o}`);return l(o).originalHash}))},g={name:o.name,fullName:o.fullName,version:o.version,repository:o.repository,allowReplace:i,api:p,loaded:!0,patching:new Map};return f.set(o.name,g),Object.freeze(p)}function h(){const o=[];for(const e of f.values())o.push({name:e.name,fullName:e.fullName,version:e.version,repository:e.repository});return o}let m;const y=void 0===window.bcModSdk?window.bcModSdk=function(){const e={version:o,apiVersion:1,registerMod:g,getModsInfo:h,getPatchingInfo:p,errorReporterHooks:Object.seal({apiEndpointEnter:null,hookEnter:null,hookChainExit:null})};return m=e,Object.freeze(e)}():(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}')\\nOne 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);return\"undefined\"!=typeof exports&&(Object.defineProperty(exports,\"__esModule\",{value:!0}),exports.default=y),y}();\n", "import { BaseSettingsModel, SettingsModel, Subscreen, ModSdkManager, ModStorage, modStorage } from '../deeplib';\n\n/**\n * An abstract foundation for modular systems that require:\n * - Optional settings screens\n * - Persistent settings storage per module\n * - Default settings registration\n * - Lifecycle hooks for loading, running, and unloading\n *\n * ### Responsibilities\n * This class defines the base contract for all modules in the system:\n * - Provides a standardized interface for retrieving and storing settings\n * - Ensures default settings are registered if missing\n * - Integrates with the module storage system (`modStorage`)\n * - Offers overridable lifecycle methods (`init`, `load`, `run`, `unload`)\n *\n * **Subclass Requirements:**\n * - Must extend `BaseModule`\n * - Should override `defaultSettings` to define defaults for its settings, if any\n * - May override `settingsScreen` to provide a UI component\n * - May override lifecycle methods as needed\n */\nexport abstract class BaseModule {\n /**\n * An optional UI screen for configuring this module's settings.\n * Subclasses can override this getter to provide a `Subscreen` instance.\n * Modules with screens are automatically registered to the main menu.\n */\n get settingsScreen(): Subscreen | null {\n return null;\n }\n\n /**\n * The storage key under which this module's settings will be saved.\n * Defaults to the class name.\n *\n * Subclasses can override this if they require a custom storage key.\n */\n get settingsStorage(): string | null {\n return this.constructor.name;\n }\n\n /**\n * Retrieves the current settings for this module.\n * If no settings exist yet, registers default settings first.\n */\n get settings(): BaseSettingsModel {\n const modName = ModSdkManager.ModInfo.name;\n if (!this.settingsStorage) return {} as BaseSettingsModel;\n if (!modStorage.playerStorage) {\n Player[modName] = <SettingsModel>{};\n this.registerDefaultSettings();\n } else if (!modStorage.playerStorage[this.settingsStorage]) this.registerDefaultSettings();\n return modStorage.playerStorage[this.settingsStorage];\n }\n\n /**\n * Persists new settings for this module.\n * Automatically initializes storage and defaults if they don't exist.\n */\n set settings(value) {\n const modName = ModSdkManager.ModInfo.name;\n const storage = new ModStorage<SettingsModel>(modName);\n if (!this.settingsStorage) return;\n if (!storage.playerStorage) {\n Player[modName] = <SettingsModel>{};\n this.registerDefaultSettings();\n } else if (!storage.playerStorage[this.settingsStorage]) this.registerDefaultSettings();\n storage.playerStorage[this.settingsStorage] = value;\n }\n\n /**\n * Initializes the module.\n * Default implementation registers default settings immediately.\n * Subclasses can override to perform additional setup.\n */\n init() {\n this.registerDefaultSettings();\n }\n\n /**\n * Registers default settings for this module in persistent storage.\n * Only runs if a storage key and default settings are defined.\n * \n * If some settings already exist, they will be merged with defaults.\n * Existing values will NOT be overwritten.\n */\n registerDefaultSettings(): void {\n const storage = this.settingsStorage;\n const defaults = this.defaultSettings;\n if (!storage || !defaults) return;\n\n Player[ModSdkManager.ModInfo.name][storage] = Object.assign(defaults, Player[ModSdkManager.ModInfo.name][storage] ?? {});\n }\n\n /**\n * Provides default settings for this module.\n * Subclasses should override this getter to return their defaults.\n */\n get defaultSettings(): BaseSettingsModel | null {\n return null;\n }\n\n /**\n * Called when the module is loaded into the system.\n * Subclasses should override to perform data loading or initialization.\n */\n load() { }\n\n /**\n * By default doesn't get called each frame, only once when the module is loaded.\n * Subclasses can override to implement runtime logic.\n */\n run() { }\n\n /**\n * Called when the module is being removed.\n * Subclasses can override to perform cleanup or save final state.\n */\n unload() { }\n}\n", "import { BaseModule, BaseSettingsModel, GUI, advElement, ModSdkManager, domUtil, getText, layout, modules, modStorage } from '../deeplib';\nimport { SettingElement } from './elements_typings';\n\n/** Optional configuration flags for a `BaseSubscreen` instance. */\ntype SubscreenOptions = {\n /**\n * If `true`, the subscreen will draw the player's character model\n * in the UI when `run()` is called.\n * Also shift the UI to the right to make room for the character.\n */\n drawCharacter?: boolean;\n};\n\n/**\n * Represents a constructor type for a subscreen.\n * Allows dynamic instantiation of subscreen classes with optional\n * configuration options and a parent module reference.\n */\nexport type Subscreen = new (\n subscreenOptions?: SubscreenOptions,\n module?: BaseModule\n) => BaseSubscreen;\n\n/** Switches the active subscreen in the global `GUI` instance. */\nexport function setSubscreen(subscreen: BaseSubscreen | string | null): BaseSubscreen | null {\n if (!GUI.instance) {\n throw new Error('Attempt to set subscreen before init');\n }\n GUI.instance.currentSubscreen = subscreen;\n\n return GUI.instance.currentSubscreen;\n}\n\n/**\n * Abstract base class for creating settings/configuration subscreens in a module.\n *\n * ### Responsibilities\n * This class defines the base contract for all modules in the system:\n * - Provides a standardized interface for retrieving and storing settings\n * - Ensures default settings are registered if missing\n * - Integrates with the module storage system (`modStorage`)\n * - Offers overridable lifecycle methods (`init`, `load`, `run`, `unload`)\n *\n * **Subclass Requirements:**\n * - Must extend `BaseSubscreen`\n * - Should override `name`, `icon` to define subscreen metadata\n * - May override `pageStructure` to define UI layout and controls\n * - May override lifecycle methods as needed\n */\nexport abstract class BaseSubscreen {\n /** Global registry of currently rendered elements and their definitions. */\n static currentElements: [HTMLElement, SettingElement][] = [];\n /** Tracks the currently visible page number (1-based index). */\n static currentPage: number = 1;\n /** Runtime options for this subscreen. */\n readonly options: SubscreenOptions;\n /** Reference to the module this subscreen belongs to. */\n readonly module!: BaseModule;\n\n constructor(subscreenOptions?: SubscreenOptions, module?: BaseModule) {\n if (module) this.module = module;\n this.options = subscreenOptions || {} as SubscreenOptions;\n }\n\n /**\n * Logical name of this subscreen.\n * Used for localization key resolution in `load()`.\n * Subclasses should override this with a meaningful identifier.\n */\n get name(): string {\n return 'UNKNOWN';\n }\n\n /**\n * Path to or Base64 data for an icon representing this subscreen.\n * Defaults to empty string (no icon).\n */\n get icon(): string {\n return '';\n }\n\n /** Changes the currently active subscreen. */\n setSubscreen(screen: BaseSubscreen | string | null) {\n return setSubscreen(screen);\n }\n\n /** Gets this subscreen's settings object from its parent module. */\n get settings(): BaseSettingsModel {\n return this.module.settings as BaseSettingsModel;\n }\n\n /** Updates this subscreen's settings in its parent module. */\n set settings(value) {\n this.module.settings = value;\n }\n\n /**\n * Defines the paginated layout of the subscreen's settings UI.\n * Each element in the outer array is a page; each page contains `SettingElement`s.\n *\n * Subclasses should override to define their actual UI structure.\n */\n get pageStructure(): SettingElement[][] {\n return [[]];\n }\n\n /** Gets the currently visible page's settings elements. */\n get currentPage(): SettingElement[] {\n return this.pageStructure[Math.min(BaseSubscreen.currentPage - 1, this.pageStructure.length - 1)];\n }\n\n /**\n * Changes the visible page in a multi-page subscreen.\n * Automatically wraps around when going past the first or last page.\n */\n changePage(page: number, setLabel: (label: string) => void) {\n const totalPages = this.pageStructure.length;\n\n if (page > totalPages) page = 1;\n if (page < 1) page = totalPages;\n BaseSubscreen.currentPage = page;\n\n this.managePageElementsVisibility();\n\n setLabel(`${BaseSubscreen.currentPage} of ${this.pageStructure.length}`);\n }\n\n /**\n * Updates the DOM to show only elements belonging to the current page.\n * All elements on other pages are hidden.\n */\n managePageElementsVisibility() {\n this.pageStructure.forEach((item, ix) => {\n if (ix != BaseSubscreen.currentPage - 1) {\n item.forEach((setting) => {\n domUtil.hide(`${setting.id}-container`);\n });\n } else {\n item.forEach((setting) => {\n domUtil.unhide(`${setting.id}-container`);\n });\n }\n });\n }\n\n /**\n * Called when this subscreen is first displayed.\n * Builds the layout, initializes navigation, and renders all settings elements.\n *\n * Handles:\n * - Ensuring each module with a settings screen has its defaults loaded\n * - Creating navigation menus and back/next page controls\n * - Building and appending UI elements based on `pageStructure`\n * - Setting up exit button and tooltip\n * - Resetting to page 1\n */\n load() {\n for (const module of modules()) {\n if (!module.settingsScreen) continue;\n if (!module.settings || !Object.keys(module.settings).length) module.registerDefaultSettings();\n }\n\n BaseSubscreen.currentPage = 1;\n\n layout.createSubscreen();\n const settingsElement = layout.createSettingsDiv();\n layout.appendToSubscreen(settingsElement);\n\n const menu = ElementMenu.Create('deeplib-nav-menu', []);\n layout.appendToSubscreen(menu);\n\n if (this.pageStructure.length > 1) {\n const backNext = advElement.createBackNext({\n id: 'deeplib-page-back-next',\n next: ({ setLabel }) => this.changePage(BaseSubscreen.currentPage + 1, setLabel),\n initialNextTooltip: getText('settings.button.next_button_hint'),\n back: ({ setLabel }) => this.changePage(BaseSubscreen.currentPage - 1, setLabel),\n initialPrevTooltip: getText('settings.button.prev_button_hint'),\n initialLabel: `${BaseSubscreen.currentPage} of ${this.pageStructure.length}`,\n });\n\n ElementMenu.PrependItem(menu, backNext);\n }\n\n const subscreenTitle = advElement.createLabel({\n id: 'deeplib-subscreen-title',\n label: getText(`${this.name}.title`).replace('$ModVersion', ModSdkManager.ModInfo.version),\n });\n layout.appendToSubscreen(subscreenTitle);\n\n if (this.name !== 'mainmenu') {\n const exitButton = advElement.createButton({\n id: 'deeplib-exit',\n size: [90, 90],\n image: `${PUBLIC_URL}/dl_images/exit.svg`,\n onClick: () => {\n this.exit();\n },\n tooltip: getText('settings.button.back_button_hint')\n });\n ElementMenu.AppendButton(menu, exitButton);\n }\n\n const tooltip = advElement.createTooltip();\n layout.appendToSubscreen(tooltip);\n\n this.pageStructure.forEach((s) =>\n s.forEach((item) => {\n let element: HTMLElement;\n switch (item.type) {\n case 'text':\n case 'number':\n case 'color':\n element = advElement.createInput(item);\n break;\n case 'checkbox':\n element = advElement.createCheckbox(item);\n break;\n case 'button':\n element = advElement.createButton(item);\n break;\n case 'label':\n element = advElement.createLabel(item);\n break;\n case 'custom':\n element = advElement.createCustom(item);\n break;\n }\n layout.appendToSettingsDiv(element);\n })\n );\n\n this.managePageElementsVisibility();\n\n CharacterAppearanceForceUpCharacter = Player.MemberNumber ?? -1;\n }\n\n\n /**\n * Called each frame while this subscreen is active.\n * Default behavior draws the player's character if `drawCharacter` is enabled.\n */\n run() {\n if (this.options.drawCharacter) DrawCharacter(Player, 50, 50, 0.9, false);\n }\n\n /**\n * Handles mouse clicks *on canvas* while the subscreen is active.\n * Default implementation is empty \u2014 subclasses may override.\n */\n click() {\n }\n\n /**\n * Exits this subscreen, returning to the main menu.\n * Also saves persistent storage changes.\n * Called after the `unload`.\n */\n exit() {\n CharacterAppearanceForceUpCharacter = -1;\n CharacterLoadCanvas(Player);\n\n setSubscreen('mainmenu');\n modStorage.save();\n }\n\n /**\n * Called when the window is resized.\n * Also checks for overflow in the settings div and applies styling accordingly.\n */\n resize(onLoad: boolean = false) {\n const offset = this.options.drawCharacter ? 0 : 380;\n const subscreen = layout.getSubscreen();\n const settingsDiv = layout.getSettingsDiv();\n\n ElementSetPosition(subscreen || '', 0, 0);\n ElementSetSize(subscreen || '', 2000, 1000);\n ElementSetFontSize(subscreen || '', 'auto');\n\n if (this.name === 'mainmenu') {\n ElementSetPosition(settingsDiv || '', 530 - offset, 170);\n ElementSetSize(settingsDiv || '', 600 + offset, 660);\n } else {\n ElementSetPosition(settingsDiv || '', 530 - offset, 170);\n ElementSetSize(settingsDiv || '', 1000 + offset, 660);\n }\n\n ElementSetPosition('deeplib-subscreen-title', 530 - offset, 75);\n ElementSetSize('deeplib-subscreen-title', 800, 60);\n\n ElementSetPosition('deeplib-nav-menu', 1905, 75, 'top-right');\n ElementSetSize('deeplib-nav-menu', null, 90);\n\n ElementSetPosition(advElement.getTooltip() || '', 250, 850);\n ElementSetSize(advElement.getTooltip() || '', 1500, 70);\n\n BaseSubscreen.currentElements.forEach((item) => {\n const options = item[1];\n\n domUtil.autoSetPosition(options.id, options.position);\n domUtil.autoSetSize(options.id, options.size);\n });\n\n if (settingsDiv) {\n if (domUtil.hasOverflow(settingsDiv)?.vertical) {\n settingsDiv.classList.add('deeplib-overflow-box');\n } else {\n settingsDiv.classList.remove('deeplib-overflow-box');\n }\n }\n }\n\n\n /**\n * Called when this subscreen is being removed.\n * Resets the static element registry and removes the subscreen from the layout.\n * Called before `exit`.\n */\n unload() {\n BaseSubscreen.currentElements = [];\n\n layout.removeSubscreen();\n }\n}\n\n", "export default `.deeplib-subscreen,\n.deeplib-modal {\n --deeplib-background-color: var(--tmd-main, white);\n --deeplib-element-color: var(--tmd-element, white);\n --deeplib-element-hover-color: var(--tmd-element-hover, cyan);\n --deeplib-blocked-color: var(--tmd-blocked, red);\n --deeplib-text-color: var(--tmd-text, black);\n --deeplib-icon-color: var(--tmd-accent, black);\n --deeplib-icon-hover-color: var(--tmd-accent-hover, black);\n --deeplib-border-color: var(--tmd-accent, black);\n --deeplib-border-width: min(0.2vh, 0.1vw);\n --deeplib-border-width: min(0.2dvh, 0.1dvw);\n --deeplib-border-radius: min(1vh, 0.5vw);\n --deeplib-border-radius: min(1dvh, 0.5dvw);\n}\n\n.deeplib-button {\n color: var(--deeplib-text-color);\n width: 100%;\n height: 100%;\n}\n\n.deeplib-button.button-styling,\n.deeplib-button.button-styling::before {\n border-radius: min(1dvh, 0.5dvw);\n}\n\n.deeplib-button img {\n position: absolute;\n top: 0%;\n left: 0%;\n width: 100%;\n height: 100%;\n background-position: left;\n background-color: var(--deeplib-icon-color);\n background-blend-mode: multiply;\n background-size: contain;\n mask-position: left;\n mask-size: contain;\n background-repeat: no-repeat;\n mask-repeat: no-repeat;\n color: transparent;\n background-image: var(--image);\n mask-image: var(--image);\n pointer-events: none;\n}\n\n.deeplib-button:hover img {\n background-color: var(--deeplib-icon-hover-color);\n}\n\n.deeplib-button .button-label {\n background-color: transparent !important;\n color: var(--deeplib-text-color);\n font-size: min(3.6dvh, 1.8dvw);\n}\n\n.deeplib-button .button-tooltip {\n border-radius: min(1dvh, 0.5dvw);\n}\n\n#deeplib-page-label {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n#deeplib-subscreen-title {\n text-align: left;\n color: var(--deeplib-text-color);\n}\n\n.deeplib-text {\n color: var(--deeplib-text-color);\n}\n\n.deeplib-subscreen {\n padding: 0;\n margin: 0;\n pointer-events: none;\n}\n\n.deeplib-subscreen * {\n box-sizing: border-box;\n pointer-events: all;\n}\n\n.deeplib-settings {\n display: grid;\n grid-auto-rows: min-content;\n padding: min(1dvh, 0.5dvw);\n gap: 0.3em;\n overflow-y: scroll;\n}\n\n.deeplib-misc {\n display: flex;\n align-items: center;\n flex-direction: column-reverse;\n gap: min(1vh, 0.5vw);\n}\n\n.deeplib-tooltip {\n background-color: var(--deeplib-element-color);\n color: var(--deeplib-text-color);\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: min(1dvh, 0.5dvw);\n padding: min(1vh, 0.5vw);\n font-size: 0.8em;\n border: min(0.2vh, 0.1vw) solid var(--deeplib-border-color);\n}\n\n.deeplib-overflow-box {\n border: var(--deeplib-border-color) solid var(--deeplib-border-width);\n}\n\n.deeplib-prev-next {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-direction: row;\n gap: min(2dvh, 1dvw);\n background-color: var(--deeplib-element-color);\n color: var(--deeplib-text-color);\n border-radius: min(1dvh, 0.5dvw);\n border: min(0.2vh, 0.1vw) solid var(--deeplib-border-color);\n}\n.deeplib-prev-next .deeplib-prev-next-button {\n height: 100%;\n aspect-ratio: 1;\n}\n.deeplib-prev-next .deeplib-prev-next-button:hover {\n background-color: var(--deeplib-element-hover-color);\n border-radius: var(--deeplib-border-radius);\n}\n.deeplib-prev-next .deeplib-prev-next-label {\n white-space: nowrap;\n}\n\n#deeplib-nav-menu {\n display: flex;\n flex-direction: row;\n gap: min(2dvh, 1dvw);\n}\n\n.deeplib-checkbox-container {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 0.3em;\n}\n\n.deeplib-checkbox-container input.deeplib-input {\n width: min(5vh, 2.5vw);\n height: min(5vh, 2.5vw);\n border-radius: min(1dvh, 0.5dvw);\n}\n\n.deeplib-checkbox-container input.deeplib-input[type=checkbox]:checked::before {\n width: 80%;\n height: 80%;\n}\n\n.deeplib-input-container {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 0.3em;\n}\n\n.deeplib-input-container:has(label.deeplib-text) {\n margin-top: min(1vh, 0.5vw);\n}\n\n.deeplib-input-container input.deeplib-input {\n font-size: 0.6em;\n padding: 5px 0;\n background-color: transparent;\n outline: none;\n padding-left: min(1vh, 0.5vw);\n padding-right: min(1vh, 0.5vw);\n min-height: min(5dvh, 2.5dvw);\n border-radius: min(1dvh, 0.5dvw);\n}\n\n.deeplib-input-container input.deeplib-input[type=color] {\n padding: 0px;\n width: min(5vh, 2.5vw);\n height: min(5vh, 2.5vw);\n border-radius: 0px;\n}\n\n.deeplib-input-container input.deeplib-input[type=color]:disabled {\n border: var(--deeplib-blocked-color) solid var(--deeplib-border-width);\n cursor: not-allowed;\n}\n\ninput::-webkit-outer-spin-button,\ninput::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\ninput[type=number] {\n appearance: textfield;\n -moz-appearance: textfield;\n}\n\n.deeplib-highlight-text {\n font-weight: bold;\n color: rgb(203, 185, 23);\n}\n\n#TextAreaChatLog[data-colortheme=dark] div.ChatMessage.deeplib-message,\n#TextAreaChatLog[data-colortheme=dark2] div.ChatMessage.deeplib-message {\n background-color: var(--deeplib-element-color);\n border: min(0.2dvh, 0.1dvw) solid var(--deeplib-border-color);\n color: var(--deeplib-text-color);\n}\n\n#TextAreaChatLog div.ChatMessage.deeplib-message {\n background-color: #eee;\n border: min(0.2dvh, 0.1dvw) solid #440171;\n color: #111;\n padding-left: min(0.6dvh, 0.3dvw);\n display: block;\n white-space: normal;\n}\n\n#TextAreaChatLog[data-colortheme=dark] div.ChatMessage.deeplib-message a,\n#TextAreaChatLog[data-colortheme=dark2] div.ChatMessage.deeplib-message a {\n color: var(--deeplib-text-color);\n}\n\n#TextAreaChatLog div.ChatMessage.deeplib-message a {\n cursor: pointer;\n font-weight: bold;\n color: #111;\n}\n\n.deeplib-modal {\n position: fixed;\n top: 10%;\n left: 50%;\n transform: translateX(-50%);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 0.5em;\n width: max(50dvw, 25dvh);\n font-size: min(4dvh, 2dvw);\n padding: min(2dvh, 1dvw);\n background-color: var(--deeplib-element-color);\n border-radius: min(1.2dvh, 0.6dvw);\n border: min(0.2dvh, 0.1dvw) solid var(--deeplib-border-color);\n color: var(--deeplib-text-color);\n}\n.deeplib-modal .deeplib-modal-input {\n width: 100%;\n font-size: min(2.6dvh, 1.8dvw);\n border-radius: min(1dvh, 0.5dvw);\n padding: min(1dvh, 0.5dvw);\n}\n.deeplib-modal input.deeplib-modal-input {\n max-width: max(50dvh, 25dvw);\n}\n.deeplib-modal .deeplib-modal-button-container {\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n gap: 0.5em;\n width: 100%;\n}\n.deeplib-modal .deeplib-modal-button-container .deeplib-button {\n font-size: 0.8em;\n display: flex;\n width: auto;\n padding: min(0.4vh, 0.2vw) min(2vh, 1vw);\n}\n.deeplib-modal .deeplib-modal-button-container .deeplib-button .button-label {\n display: contents;\n}\n\n.deeplib-modal-blocker {\n z-index: 1000;\n position: fixed;\n top: 0;\n left: 0;\n width: 100dvw;\n height: 100dvh;\n background-color: rgba(0, 0, 0, 0.5);\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL21lZGlhL05WTUUvU3R1ZmYvQ29kZS9CQy9CQy1EZWVwTGliL3NyYy9zdHlsZXMiLCJzb3VyY2VzIjpbInZhcnMuc2NzcyIsImJ1dHRvbnMuc2NzcyIsImVsZW1lbnRzLnNjc3MiLCJpbnB1dHMuc2NzcyIsIm1lc3NhZ2VzLnNjc3MiLCJtb2RhbC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7RUFFRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQ2JGO0VBQ0U7RUFDQTtFQUNBOzs7QUFHRjtBQUFBO0VBRUU7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7OztBQzNDRjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBOzs7QUFHRjtFQUNFOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQU1FO0VBQ0E7O0FBTkE7RUFDRTtFQUNBOztBQU9KO0VBQ0U7OztBQUlKO0VBQ0U7RUFDQTtFQUNBOzs7QUN0RkY7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFJRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQUdGO0FBQUE7RUFFRTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQzdERjtFQUNFO0VBQ0E7OztBQUdGO0FBQUE7RUFFRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtBQUFBO0VBRUU7OztBQUdGO0VBQ0U7RUFDQTtFQUNBOzs7QUM3QkY7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOzs7QUFNUjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBIiwic291cmNlc0NvbnRlbnQiOlsiLmRlZXBsaWItc3Vic2NyZWVuLFxuLmRlZXBsaWItbW9kYWwge1xuICAtLWRlZXBsaWItYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdG1kLW1haW4sIHdoaXRlKTtcbiAgLS1kZWVwbGliLWVsZW1lbnQtY29sb3I6IHZhcigtLXRtZC1lbGVtZW50LCB3aGl0ZSk7XG4gIC0tZGVlcGxpYi1lbGVtZW50LWhvdmVyLWNvbG9yOiB2YXIoLS10bWQtZWxlbWVudC1ob3ZlciwgY3lhbik7XG4gIC0tZGVlcGxpYi1ibG9ja2VkLWNvbG9yOiB2YXIoLS10bWQtYmxvY2tlZCwgcmVkKTtcbiAgLS1kZWVwbGliLXRleHQtY29sb3I6IHZhcigtLXRtZC10ZXh0LCBibGFjayk7XG4gIC0tZGVlcGxpYi1pY29uLWNvbG9yOiB2YXIoLS10bWQtYWNjZW50LCBibGFjayk7XG4gIC0tZGVlcGxpYi1pY29uLWhvdmVyLWNvbG9yOiB2YXIoLS10bWQtYWNjZW50LWhvdmVyLCBibGFjayk7XG4gIC0tZGVlcGxpYi1ib3JkZXItY29sb3I6IHZhcigtLXRtZC1hY2NlbnQsIGJsYWNrKTtcbiAgLS1kZWVwbGliLWJvcmRlci13aWR0aDogbWluKDAuMnZoLCAwLjF2dyk7XG4gIC0tZGVlcGxpYi1ib3JkZXItd2lkdGg6IG1pbigwLjJkdmgsIDAuMWR2dyk7XG4gIC0tZGVlcGxpYi1ib3JkZXItcmFkaXVzOiBtaW4oMXZoLCAwLjV2dyk7XG4gIC0tZGVlcGxpYi1ib3JkZXItcmFkaXVzOiBtaW4oMWR2aCwgMC41ZHZ3KTtcbn1cbiIsIi5kZWVwbGliLWJ1dHRvbiB7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4uZGVlcGxpYi1idXR0b24uYnV0dG9uLXN0eWxpbmcsXG4uZGVlcGxpYi1idXR0b24uYnV0dG9uLXN0eWxpbmc6OmJlZm9yZSB7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG59XG5cbi5kZWVwbGliLWJ1dHRvbiBpbWcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMCU7XG4gIGxlZnQ6IDAlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWljb24tY29sb3IpO1xuICBiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6IG11bHRpcGx5O1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIG1hc2stcG9zaXRpb246IGxlZnQ7XG4gIG1hc2stc2l6ZTogY29udGFpbjtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgbWFzay1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xuXG4gIGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLWltYWdlKTtcbiAgbWFzay1pbWFnZTogdmFyKC0taW1hZ2UpO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmRlZXBsaWItYnV0dG9uOmhvdmVyIGltZyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItaWNvbi1ob3Zlci1jb2xvcik7XG59XG5cbi5kZWVwbGliLWJ1dHRvbiAuYnV0dG9uLWxhYmVsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG4gIGZvbnQtc2l6ZTogbWluKDMuNmR2aCwgMS44ZHZ3KTtcbn1cblxuLmRlZXBsaWItYnV0dG9uIC5idXR0b24tdG9vbHRpcCB7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG59XG4iLCIjZGVlcGxpYi1wYWdlLWxhYmVsIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbiNkZWVwbGliLXN1YnNjcmVlbi10aXRsZSB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xufVxuXG4uZGVlcGxpYi10ZXh0IHtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG59XG5cbi5kZWVwbGliLXN1YnNjcmVlbiB7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5kZWVwbGliLXN1YnNjcmVlbiAqIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcbn1cblxuLmRlZXBsaWItc2V0dGluZ3Mge1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLWF1dG8tcm93czogbWluLWNvbnRlbnQ7XG4gIHBhZGRpbmc6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gIGdhcDogMC4zZW07XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbn1cblxuLmRlZXBsaWItbWlzYyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgZ2FwOiBtaW4oMXZoLCAwLjV2dyk7XG59XG5cbi5kZWVwbGliLXRvb2x0aXAge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWVsZW1lbnQtY29sb3IpO1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gIHBhZGRpbmc6IG1pbigxdmgsIDAuNXZ3KTtcbiAgZm9udC1zaXplOiAwLjhlbTtcbiAgYm9yZGVyOiBtaW4oMC4ydmgsIDAuMXZ3KSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcik7XG59XG5cbi5kZWVwbGliLW92ZXJmbG93LWJveCB7XG4gIGJvcmRlcjogdmFyKC0tZGVlcGxpYi1ib3JkZXItY29sb3IpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLXdpZHRoKTtcbn1cblxuLmRlZXBsaWItcHJldi1uZXh0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBnYXA6IG1pbigyZHZoLCAxZHZ3KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gIGJvcmRlcjogbWluKDAuMnZoLCAwLjF2dykgc29saWQgdmFyKC0tZGVlcGxpYi1ib3JkZXItY29sb3IpO1xuXG4gIC5kZWVwbGliLXByZXYtbmV4dC1idXR0b24ge1xuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWhvdmVyLWNvbG9yKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWRlZXBsaWItYm9yZGVyLXJhZGl1cyk7XG4gICAgfVxuICAgIFxuICAgIGhlaWdodDogMTAwJTtcbiAgICBhc3BlY3QtcmF0aW86IDE7XG4gIH1cblxuICAuZGVlcGxpYi1wcmV2LW5leHQtbGFiZWwge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cbn1cblxuI2RlZXBsaWItbmF2LW1lbnUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBnYXA6IG1pbigyZHZoLCAxZHZ3KTtcbn0iLCIuZGVlcGxpYi1jaGVja2JveC1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuM2VtO1xufVxuXG4uZGVlcGxpYi1jaGVja2JveC1jb250YWluZXIgaW5wdXQuZGVlcGxpYi1pbnB1dCB7XG4gIHdpZHRoOiBtaW4oNXZoLCAyLjV2dyk7XG4gIGhlaWdodDogbWluKDV2aCwgMi41dncpO1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xufVxuXG4uZGVlcGxpYi1jaGVja2JveC1jb250YWluZXIgaW5wdXQuZGVlcGxpYi1pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06Y2hlY2tlZDo6YmVmb3JlIHtcbiAgd2lkdGg6IDgwJTtcbiAgaGVpZ2h0OiA4MCU7XG59XG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC4zZW07XG59XG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lcjpoYXMobGFiZWwuZGVlcGxpYi10ZXh0KSB7XG4gIG1hcmdpbi10b3A6IG1pbigxdmgsIDAuNXZ3KTtcbn1cblxuLmRlZXBsaWItaW5wdXQtY29udGFpbmVyIGlucHV0LmRlZXBsaWItaW5wdXQge1xuICBmb250LXNpemU6IDAuNmVtO1xuICBwYWRkaW5nOiA1cHggMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHBhZGRpbmctbGVmdDogbWluKDF2aCwgMC41dncpO1xuICBwYWRkaW5nLXJpZ2h0OiBtaW4oMXZoLCAwLjV2dyk7XG4gIG1pbi1oZWlnaHQ6IG1pbig1ZHZoLCAyLjVkdncpO1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xufVxuXG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lciBpbnB1dC5kZWVwbGliLWlucHV0W3R5cGU9XCJjb2xvclwiXSB7XG4gIHBhZGRpbmc6IDBweDtcbiAgd2lkdGg6IG1pbig1dmgsIDIuNXZ3KTtcbiAgaGVpZ2h0OiBtaW4oNXZoLCAyLjV2dyk7XG4gIGJvcmRlci1yYWRpdXM6IDBweDtcbn1cblxuLmRlZXBsaWItaW5wdXQtY29udGFpbmVyIGlucHV0LmRlZXBsaWItaW5wdXRbdHlwZT1cImNvbG9yXCJdOmRpc2FibGVkIHtcbiAgYm9yZGVyOiB2YXIoLS1kZWVwbGliLWJsb2NrZWQtY29sb3IpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLXdpZHRoKTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sXG5pbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgbWFyZ2luOiAwO1xufVxuXG5pbnB1dFt0eXBlPW51bWJlcl0ge1xuICBhcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gIC1tb3otYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xufVxuIiwiLmRlZXBsaWItaGlnaGxpZ2h0LXRleHQge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6IHJnYigyMDMsIDE4NSwgMjMpO1xufVxuXG4jVGV4dEFyZWFDaGF0TG9nW2RhdGEtY29sb3J0aGVtZT0nZGFyayddIGRpdi5DaGF0TWVzc2FnZS5kZWVwbGliLW1lc3NhZ2UsXG4jVGV4dEFyZWFDaGF0TG9nW2RhdGEtY29sb3J0aGVtZT0nZGFyazInXSBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWNvbG9yKTtcbiAgYm9yZGVyOiBtaW4oMC4yZHZoLCAwLjFkdncpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG59XG5cbiNUZXh0QXJlYUNoYXRMb2cgZGl2LkNoYXRNZXNzYWdlLmRlZXBsaWItbWVzc2FnZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG4gIGJvcmRlcjogbWluKDAuMmR2aCwgMC4xZHZ3KSBzb2xpZCAjNDQwMTcxO1xuICBjb2xvcjogIzExMTtcbiAgcGFkZGluZy1sZWZ0OiBtaW4oMC42ZHZoLCAwLjNkdncpO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbn1cblxuI1RleHRBcmVhQ2hhdExvZ1tkYXRhLWNvbG9ydGhlbWU9J2RhcmsnXSBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIGEsXG4jVGV4dEFyZWFDaGF0TG9nW2RhdGEtY29sb3J0aGVtZT0nZGFyazInXSBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIGEge1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbn1cblxuI1RleHRBcmVhQ2hhdExvZyBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIGEge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogIzExMTtcbn1cbiIsIi5kZWVwbGliLW1vZGFsIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDEwJTtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gIHotaW5kZXg6IDEwMDE7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuNWVtO1xuICB3aWR0aDogbWF4KDUwZHZ3LCAyNWR2aCk7XG4gIGZvbnQtc2l6ZTogbWluKDRkdmgsIDJkdncpO1xuICBwYWRkaW5nOiBtaW4oMmR2aCwgMWR2dyk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItZWxlbWVudC1jb2xvcik7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjJkdmgsIDAuNmR2dyk7XG4gIGJvcmRlcjogbWluKDAuMmR2aCwgMC4xZHZ3KSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xuXG4gIC5kZWVwbGliLW1vZGFsLWlucHV0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBmb250LXNpemU6IG1pbigyLjZkdmgsIDEuOGR2dyk7XG4gICAgYm9yZGVyLXJhZGl1czogbWluKDEuMGR2aCwgMC41ZHZ3KTtcbiAgICBwYWRkaW5nOiBtaW4oMWR2aCwgMC41ZHZ3KTtcbiAgfVxuXG4gIGlucHV0LmRlZXBsaWItbW9kYWwtaW5wdXQge1xuICAgIG1heC13aWR0aDogbWF4KDUwZHZoLCAyNWR2dyk7XG4gIH1cblxuICAuZGVlcGxpYi1tb2RhbC1idXR0b24tY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBnYXA6IDAuNWVtO1xuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgLmRlZXBsaWItYnV0dG9uIHtcbiAgICAgIGZvbnQtc2l6ZTogMC44ZW07XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgICBwYWRkaW5nOiBtaW4oMC40dmgsIDAuMnZ3KSBtaW4oMnZoLCAxdncpO1xuXG4gICAgICAuYnV0dG9uLWxhYmVsIHtcbiAgICAgICAgZGlzcGxheTogY29udGVudHM7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi5kZWVwbGliLW1vZGFsLWJsb2NrZXIge1xuICB6LWluZGV4OiAxMDAwO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMGR2dztcbiAgaGVpZ2h0OiAxMDBkdmg7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbiJdfQ== */`;\n", "import deeplib_style from '../styles/index.scss';\nimport { BaseModule, ModSdkManager, deepLibLogger, Localization, modules, registerModule, Style, VersionModule, hasSetter, deepMergeMatchingProperties, hasGetter, BaseMigrator, ModStorage, MainMenuOptions, MainMenu, TranslationOptions } from '../deeplib';\n\n/** Configuration object for initializing a mod via `initMod`. */\ninterface InitOptions {\n /**\n * Information about the mod being initialized.\n * - `info` \u2014 Required metadata describing the mod.\n * - `options` \u2014 Optional runtime configuration for the Mod SDK.\n */\n modInfo: {\n info: ModSDKModInfo,\n options?: ModSDKModOptions\n };\n\n /**\n * List of modules (`BaseModule` subclasses) to register with the mod system.\n * Modules are initialized, loaded, and run in order.\n */\n modules?: BaseModule[];\n\n /**\n * List of data migration handlers to register with the `VersionModule`.\n * Each `BaseMigrator` handles upgrading data from one version to another.\n */\n migrators?: BaseMigrator[];\n\n /** Configuration for customizing the main menu when the mod is active. */\n mainMenuOptions?: MainMenuOptions;\n\n /**\n * Optional hook executed *before* login when the player is not yet authenticated.\n * Useful for pre-login setup or display changes.\n */\n beforeLogin?: () => (void);\n\n /**\n * Optional async/sync function run after modules and translations are initialized.\n * Can be used to perform additional setup tasks.\n */\n initFunction?: () => (void | Promise<void>);\n\n /** Options for initializing the localization/translation system. */\n translationOptions?: TranslationOptions;\n}\n\n/**\n * Global storage handler for mod.\n * Initialized by `initMod()` and mod data loaded by `init()`.\n */\nexport let modStorage: ModStorage;\n\n/**\n * Entry point for initializing a mod. Handles:\n * - Setting up the Mod SDK\n * - Preparing persistent storage\n * - Injecting required styles\n * - Delaying initialization until login (if necessary)\n */\nexport function initMod(options: InitOptions) {\n const sdk = new ModSdkManager(options.modInfo.info, options.modInfo.options);\n const MOD_NAME = ModSdkManager.ModInfo.name;\n\n modStorage = new ModStorage(ModSdkManager.ModInfo.name);\n Style.injectInline('deeplib-style', deeplib_style);\n\n deepLibLogger.debug(`Init wait for ${MOD_NAME}`);\n if (CurrentScreen == null || CurrentScreen === 'Login') {\n options.beforeLogin?.();\n const removeHook = sdk.hookFunction('LoginResponse', 0, (args, next) => {\n deepLibLogger.debug(`Init for ${MOD_NAME}! LoginResponse caught: `, args);\n next(args);\n const response = args[0];\n if (response === 'InvalidNamePassword') return next(args);\n if (response && typeof response.Name === 'string' && typeof response.AccountName === 'string') {\n init(options);\n removeHook();\n }\n });\n } else {\n deepLibLogger.debug(`Already logged in, initing ${MOD_NAME}`);\n init(options);\n }\n\n return { sdk };\n}\n\n\n/**\n * Fully initializes the mod after login.\n * Handles:\n * - Preventing double-load\n * - Loading mod data\n * - Initializing localization\n * - Registering modules and migrators\n * - Running optional init functions\n * - Applying main menu changes\n * - Merging default settings into module settings\n *\n * @param options {InitOptions} Configuration for mod initialization.\n */\nexport async function init(options: InitOptions) {\n const MOD_NAME = ModSdkManager.ModInfo.name;\n const MOD_VERSION = ModSdkManager.ModInfo.version;\n\n if ((window as any)[MOD_NAME + 'Loaded']) return;\n\n modStorage.load();\n\n await Localization.init(options.translationOptions);\n\n if (options.modules && !initModules(options.modules)) {\n unloadMod();\n return;\n }\n\n if (options.migrators) {\n for (const m of options.migrators) {\n VersionModule.registerMigrator(m);\n }\n }\n\n await options.initFunction?.();\n\n if (options.mainMenuOptions)\n MainMenu.setOptions(options.mainMenuOptions);\n\n VersionModule.checkVersionUpdate();\n\n for (const m of modules()) {\n if (m.defaultSettings && hasGetter(m, 'defaultSettings') && m.settings && hasSetter(m, 'settings')) {\n if (Object.entries(m.defaultSettings).length === 0) continue;\n m.settings = deepMergeMatchingProperties(m.defaultSettings, m.settings);\n }\n }\n\n (window as any)[MOD_NAME + 'Loaded'] = true;\n deepLibLogger.log(`Loaded ${MOD_NAME}! Version: ${MOD_VERSION}`);\n}\n\n\n/**\n * Registers and starts all modules.\n * Runs `init()`, `load()`, and `run()` for each module in order.\n */\nfunction initModules(modulesToRegister: BaseModule[]): boolean {\n const MOD_NAME = ModSdkManager.ModInfo.name;\n\n for (const module of modulesToRegister) {\n registerModule(module);\n }\n\n for (const module of modules()) {\n module.init();\n }\n\n for (const module of modules()) {\n module.load();\n }\n\n for (const module of modules()) {\n module.run();\n }\n\n deepLibLogger.debug(`Modules Loaded for ${MOD_NAME}.`);\n return true;\n}\n\n/** \n * Cleans up and removes the mod from memory.\n * Calls `unload()` on all modules and removes the global loaded flag.\n */\nexport function unloadMod(): true {\n const MOD_NAME = ModSdkManager.ModInfo.name;\n unloadModules();\n\n delete (window as any)[MOD_NAME + 'Loaded'];\n deepLibLogger.debug(`Unloaded ${MOD_NAME}.`);\n return true;\n}\n\n/** Calls the `unload()` lifecycle method on all registered modules. */\nfunction unloadModules() {\n for (const module of modules()) {\n module.unload();\n }\n}\n", "import { BaseModule } from '../deeplib';\n\n/**\n * Global registry of all loaded modules, keyed by their class name.\n *\n * The map is populated via {@link registerModule} and accessed via {@link modules} or {@link getModule}.\n * This is the central storage for active `BaseModule` instances during the mod lifecycle.\n */\nexport const modulesMap: Map<string, BaseModule> = new Map<string, BaseModule>();\n\n/**\n * Retrieves all registered module instances.\n *\n * @returns An array containing every module currently stored in {@link modulesMap}.\n *\n * @remarks\n * The returned array is a **shallow copy** of the `Map` values, meaning that\n * changes to the array do not affect the registry itself.\n *\n * @example\n * ```ts\n * for (const mod of modules()) {\n * mod.run();\n * }\n * ```\n */\nexport function modules(): BaseModule[] {\n return [...modulesMap.values()];\n}\n\n\n/**\n * Registers a module instance in the global registry.\n * \n * @returns The same module instance passed in, for chaining or immediate use.\n *\n * @remarks\n * - If a module with the same constructor name already exists, it will be **overwritten**.\n * - Keys are based on the class name (`module.constructor.name`), so name collisions are possible\n * if two different classes share the same name.\n *\n * @example\n * ```ts\n * registerModule(new MyGlobalModule());\n * ```\n */\nexport function registerModule<T extends BaseModule>(module: T): T {\n modulesMap.set(module.constructor.name, module);\n return module;\n}\n\n\n/**\n * Retrieves a registered module by its type name.\n *\n * @returns The matching module instance cast to type `T`, or `undefined` if not found.\n *\n * @remarks\n * This function does not perform runtime type checks. If the type parameter `T`\n * does not match the actual module type, you may get runtime errors when using the result.\n *\n * @example\n * ```ts\n * const themeModule = getModule<ThemeModule>('ThemeModule');\n * themeModule?.reloadTheme();\n * ```\n */\nexport function getModule<T extends BaseModule>(moduleType: string): T {\n return modulesMap.get(moduleType) as T;\n}\n", "/**\n * Abstract base class for versioned migration handlers.\n *\n * A migrator is responsible for upgrading or transforming stored data\n * when the mod version changes. Each migrator targets a specific version\n * and executes its {@link Migrate} method once when needed.\n *\n * @remarks\n * To create a new migrator:\n * 1. Extend `BaseMigrator`.\n * 2. Implement the {@link MigrationVersion} getter to return the target version string.\n * 3. Implement {@link Migrate} with the migration logic (e.g., data structure changes).\n */\nexport abstract class BaseMigrator {\n\n /**\n * Gets the target version string for this migration.\n *\n * @remarks\n * - This should exactly match the version format used by the mod\n * - Used by the migration system to determine if this migration should be executed.\n */\n abstract get MigrationVersion(): string;\n\n /**\n * Executes the migration logic for this version.\n *\n * @remarks\n * - Called once when upgrading from a version earlier than {@link MigrationVersion}.\n * - Should handle any necessary data transformations, cleanup, or initialization\n * to bring the mod's state up to date with the new version.\n * - Must be idempotent \u2014 running it multiple times should not cause data corruption.\n */\n abstract Migrate(): void;\n}\n", "import { BaseModule, BaseSubscreen, MainMenu, modules, setSubscreen } from '../deeplib';\n\ntype ModButtonOptions = {\n Identifier: string;\n ButtonText: string | (() => string);\n Image: string | (() => string);\n\n load?: () => void;\n click?: () => void;\n run?: () => void;\n unload?: () => void;\n exit?: () => boolean | void;\n};\n\nexport class GUI extends BaseModule {\n static instance: GUI | null = null;\n\n private _subscreens: BaseSubscreen[];\n private _mainMenu: MainMenu;\n private _currentSubscreen: BaseSubscreen | null = null;\n private _modButtonOptions: ModButtonOptions;\n\n get subscreens(): BaseSubscreen[] {\n return this._subscreens;\n }\n\n get mainMenu(): MainMenu {\n return this._mainMenu;\n }\n\n get currentSubscreen(): BaseSubscreen | null {\n return this._currentSubscreen;\n }\n\n set currentSubscreen(subscreen: BaseSubscreen | string | null) {\n if (this._currentSubscreen) {\n this._currentSubscreen.unload();\n }\n\n if (typeof subscreen === 'string') {\n const scr = this._subscreens?.find((s) => s.name === subscreen);\n if (!scr) throw `Failed to find screen name ${subscreen}`;\n this._currentSubscreen = scr;\n } else {\n this._currentSubscreen = subscreen;\n }\n\n if (this._currentSubscreen) {\n this._currentSubscreen.load();\n this._currentSubscreen.resize(true);\n }\n }\n\n /** Creates the GUI instance and initializes the main menu. */\n constructor(modButtonOptions: ModButtonOptions) {\n super();\n if (GUI.instance) {\n throw new Error('Duplicate initialization');\n }\n\n for (const module of modules()) {\n if (!module.settingsScreen) continue;\n }\n\n this._mainMenu = new MainMenu(this);\n this._subscreens = [this._mainMenu];\n this._modButtonOptions = modButtonOptions;\n\n GUI.instance = this;\n }\n\n get defaultSettings(): null {\n return null;\n }\n\n load(): void {\n for (const module of modules()) {\n if (!module.settingsScreen) continue;\n\n this._subscreens.push(new module.settingsScreen({}, module));\n }\n\n this._mainMenu.subscreens = this._subscreens;\n PreferenceRegisterExtensionSetting({\n Identifier: this._modButtonOptions.Identifier,\n ButtonText: this._modButtonOptions.ButtonText,\n Image: this._modButtonOptions.Image,\n load: this._modButtonOptions.load || (() => {\n setSubscreen(new MainMenu(this));\n }),\n run: this._modButtonOptions.run || (() => {\n if (this._currentSubscreen) {\n MainCanvas.textAlign = 'left';\n this._currentSubscreen.run();\n MainCanvas.textAlign = 'center';\n \n const newCanvasPosition: RectTuple = [MainCanvas.canvas.offsetLeft, MainCanvas.canvas.offsetTop, MainCanvas.canvas.clientWidth, MainCanvas.canvas.clientHeight];\n if (!CommonArraysEqual(newCanvasPosition, DrawCanvasPosition)) {\n DrawCanvasPosition = newCanvasPosition;\n this._currentSubscreen.resize(false);\n }\n }\n }),\n click: this._modButtonOptions.click || (() => {\n if (this._currentSubscreen) {\n this._currentSubscreen.click();\n }\n }),\n exit: this._modButtonOptions.exit || (() => {\n if (this._currentSubscreen) {\n this._currentSubscreen.exit();\n }\n }),\n unload: this._modButtonOptions.unload || (() => {\n if (this._currentSubscreen) {\n this._currentSubscreen.unload();\n }\n })\n });\n }\n}\n", "import { BaseMigrator, BaseModule, HookPriority, ModSdkManager, deepLibLogger, modStorage, sendLocalMessage } from '../deeplib';\n\nexport class VersionModule extends BaseModule {\n private static isItNewVersion: boolean = false;\n static Version: string;\n static NewVersionMessage: string = '';\n private static Migrators: BaseMigrator[] = [];\n\n load(): void {\n VersionModule.Version = ModSdkManager.ModInfo.version;\n\n ModSdkManager.prototype.hookFunction(\n 'ChatRoomSync',\n HookPriority.Observe,\n (args, next) => {\n next(args);\n if (modStorage.playerStorage.GlobalModule.doShowNewVersionMessage && VersionModule.isItNewVersion) {\n VersionModule.sendNewVersionMessage();\n }\n },\n 'VersionModule'\n );\n }\n\n static checkVersionUpdate() {\n const PreviousVersion = VersionModule.loadVersion();\n const CurrentVersion = VersionModule.Version;\n\n if (VersionModule.isNewVersion(PreviousVersion, CurrentVersion)) {\n VersionModule.isItNewVersion = true;\n VersionModule.checkVersionMigration();\n VersionModule.saveVersion();\n }\n\n modStorage.save();\n }\n\n private static checkVersionMigration() {\n const PreviousVersion = VersionModule.loadVersion();\n\n for (const migrator of VersionModule.Migrators) {\n if (VersionModule.isNewVersion(PreviousVersion, migrator.MigrationVersion)) {\n migrator.Migrate();\n deepLibLogger.info(`Migrating ${ModSdkManager.ModInfo.name} from ${PreviousVersion} to ${migrator.MigrationVersion} with ${migrator.constructor.name}`);\n }\n }\n }\n \n static registerMigrator(migrator: BaseMigrator) {\n VersionModule.Migrators.push(migrator);\n\n VersionModule.Migrators.sort((a, b) => a.MigrationVersion.localeCompare(b.MigrationVersion));\n }\n\n static setNewVersionMessage(newVersionMessage: string) {\n VersionModule.NewVersionMessage = newVersionMessage;\n }\n\n static sendNewVersionMessage() {\n sendLocalMessage('deeplib-new-version', VersionModule.NewVersionMessage);\n }\n\n private static isNewVersion(current: string | undefined, candidate: string) {\n if (current !== undefined) {\n const CURRENT_ = current.split('.'),\n CANDIDATE_ = candidate.split('.');\n for (let i = 0; i < 3; i++) {\n if (CURRENT_[i] === CANDIDATE_[i]) {\n continue;\n }\n return CANDIDATE_[i] > CURRENT_[i];\n }\n }\n if (current === undefined || current === '' || !current) {\n return true;\n }\n return false;\n }\n\n private static saveVersion() {\n if (modStorage.playerStorage) {\n Player[ModSdkManager.ModInfo.name].Version = VersionModule.Version;\n }\n }\n\n private static loadVersion() {\n return modStorage.playerStorage?.Version;\n }\n}\n", "\nimport { Button, Checkbox, Input, Label, SettingElement } from '../base/elements_typings';\nimport { BaseSubscreen, deepLibLogger } from '../deeplib';\n\nexport class GuiDebug extends BaseSubscreen {\n\n get name(): string {\n return 'debug';\n }\n\n get pageStructure(): SettingElement[][] {\n return [[\n <Button>{\n type: 'button',\n id: 'test-deeplib-big-button',\n size: [405, 80],\n label: 'Big Button',\n tooltip: 'This is a big button',\n image: 'Icons/Exit.png',\n onClick() {\n deepLibLogger.info('Big Button Clicked');\n }\n },\n <Button>{\n type: 'button',\n id: 'test-deeplib-small-button',\n size: [90, 90],\n tooltip: 'This is a small button',\n image: 'Icons/Exit.png',\n onClick() {\n deepLibLogger.info('Small Button Clicked');\n }\n },\n <Checkbox>{\n type: 'checkbox',\n id: 'test-deeplib-checkbox',\n label: 'Checkbox',\n description: 'This is a checkbox',\n setElementValue() {\n return true;\n },\n setSettingValue(val: boolean) {\n deepLibLogger.info('Checkbox value:', val);\n },\n },\n <Input>{\n type: 'text',\n id: 'test-deeplib-text-input',\n label: 'Input',\n description: 'This is a text input',\n setElementValue() {\n return 'Input Value';\n },\n setSettingValue(val: string) {\n deepLibLogger.info('Input value:', val);\n },\n },\n <Input>{\n type: 'number',\n id: 'test-deeplib-number-input',\n label: 'Input',\n description: 'This is a number input',\n setElementValue() {\n return '123';\n },\n setSettingValue(val: string) {\n deepLibLogger.info('Input value:', val);\n },\n },\n <Label>{\n type: 'label',\n id: 'test-deeplib-label',\n label: 'Label',\n description: 'This is a label',\n }\n ],\n [\n <Button>{\n type: 'button',\n id: 'test-deeplib-big-button2',\n size: [405, 80],\n label: 'Big Button',\n tooltip: 'This is a big button',\n image: 'Icons/Prev.png',\n onClick() {\n deepLibLogger.info('Big Button Clicked');\n }\n },\n <Button>{\n type: 'button',\n id: 'test-deeplib-small-button2',\n size: [90, 90],\n tooltip: 'This is a small button',\n image: 'Icons/Next.png',\n onClick() {\n deepLibLogger.info('Small Button Clicked');\n }\n },\n <Checkbox>{\n type: 'checkbox',\n id: 'test-deeplib-checkbox2',\n label: 'Checkbox',\n description: 'This is a checkbox',\n setElementValue() {\n return true;\n },\n setSettingValue(val: boolean) {\n deepLibLogger.info('Checkbox value:', val);\n },\n },\n <Input>{\n type: 'text',\n id: 'test-deeplib-text-input2',\n label: 'Input',\n description: 'This is a text input',\n setElementValue() {\n return 'Input Value';\n },\n setSettingValue(val: string) {\n deepLibLogger.info('Input value:', val);\n },\n },\n <Input>{\n type: 'number',\n id: 'test-deeplib-number-input2',\n label: 'Input',\n description: 'This is a number input',\n setElementValue() {\n return '123';\n },\n setSettingValue(val: string) {\n deepLibLogger.info('Input value:', val);\n },\n },\n <Label>{\n type: 'label',\n id: 'test-deeplib-label2',\n label: 'Label',\n description: 'This is a label',\n }\n ]];\n }\n}\n", "export function deepMerge(target: any, source: any): any {\n if (target === undefined) return source;\n if (source === undefined) return target;\n if (typeof target !== 'object' || typeof source !== 'object') {\n return source;\n }\n\n for (const key of Object.keys(source)) {\n if (Array.isArray(source[key]) && Array.isArray(target[key])) {\n target[key] = [...target[key], ...source[key]];\n } else if (typeof source[key] === 'object' && source[key] !== null) {\n target[key] = deepMerge(target[key] || {}, source[key]);\n } else {\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nexport function shuffleArray(array: string[]) {\n const temp: string[] = JSON.parse(JSON.stringify(array));\n const ret: string[] = [];\n\n while (temp.length > 0) {\n const d = Math.floor(Math.random() * temp.length);\n ret.push(temp[d]);\n temp.splice(d, 1);\n }\n\n return ret;\n}\n\nexport function exportToGlobal(name: string, value: any): void {\n const keys = name.split('.');\n let current = globalThis as any;\n\n for (let i = 0; i < keys.length - 1; i++) {\n if (!current[keys[i]]) {\n current[keys[i]] = {};\n }\n current = current[keys[i]];\n }\n\n current[keys[keys.length - 1]] = value;\n}\n\n/** Merges matching properties from `mergeFrom` into `mergeTo`. */\nexport function deepMergeMatchingProperties<T extends object>(mergeTo: T, mergeFrom: T): T {\n const mergedObject = { ...mergeTo };\n\n for (const key in mergeFrom) {\n if (mergeFrom[key] !== null && typeof mergeFrom[key] === 'object') {\n (mergedObject as any)[key] = deepMergeMatchingProperties(mergedObject[key] || {}, mergeFrom[key]);\n } else if (key in mergedObject) {\n (mergedObject as any)[key] = mergeFrom[key];\n }\n }\n\n return mergedObject;\n}\n\nexport function hasGetter<T extends object>(obj: T, prop: keyof T | string): boolean {\n while (obj && obj !== Object.prototype) {\n const descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n if (descriptor?.get) return true;\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n}\n\nexport function hasSetter<T extends object>(obj: T, prop: keyof T | string): boolean {\n while (obj && obj !== Object.prototype) {\n const descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n if (descriptor?.set) return true;\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n}", "import { Button, Checkbox, Custom, Input, Label } from '../../base/elements_typings';\nimport { BaseSubscreen } from '../../deeplib';\nimport { deepMerge } from '../common';\n\nexport const advElement = {\n createButton: elementCreateButton,\n createCheckbox: elementCreateCheckbox,\n createInput: elementCreateInput,\n createLabel: elementCreateLabel,\n createCustom: elementCreateCustom,\n\n createTooltip: elementCreateTooltip,\n getTooltip: elementGetTooltip,\n setTooltip: elementSetTooltip,\n\n createBackNext: elementPrevNext,\n};\n\nfunction elementCreateButton(options: Omit<Button, 'type'>): HTMLButtonElement {\n const elem = document.getElementById(options.id) as HTMLButtonElement;\n\n if (elem) return elem;\n\n (options as Button).type = 'button';\n\n const disabled = typeof options?.disabled === 'function' ? options?.disabled() : options?.disabled;\n\n const button = ElementButton.Create(\n options.htmlOptions?.id ?? options.id,\n options.htmlOptions?.onClick ?? options?.onClick ?? (() => { }),\n deepMerge({\n tooltip: options.tooltip,\n label: options.label,\n labelPosition: 'center',\n }, options.htmlOptions?.options),\n deepMerge({\n button: {\n classList: ['deeplib-button'],\n attributes: {\n disabled: disabled,\n },\n children: [\n options.image ? {\n tag: 'img',\n attributes: {\n id: `${options.id}-image`,\n alt: '',\n decoding: 'async',\n loading: 'lazy',\n src: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7' // 1x1 transparent image to get rid of broken image\n },\n style: {\n '--image': `url(\"${options.image}\")`,\n },\n } : undefined,\n ],\n },\n }, options.htmlOptions?.htmlOptions ?? {}));\n\n BaseSubscreen.currentElements.push([button, options as Button]);\n\n return button;\n};\n\nfunction elementCreateCheckbox(options: Omit<Checkbox, 'type'>) {\n const elem = document.getElementById(options.id);\n\n if (elem) return elem;\n\n (options as Checkbox).type = 'checkbox';\n\n const disabled = typeof options?.disabled === 'function' ? options?.disabled() : options?.disabled;\n\n const retElem = ElementCreate({\n tag: 'div',\n classList: ['deeplib-checkbox-container'],\n attributes: {\n id: `${options.id}-container`,\n },\n children: [\n deepMerge({\n tag: 'input',\n classList: ['checkbox', 'deeplib-input'],\n attributes: {\n type: 'checkbox',\n id: options.id,\n disabled: disabled,\n checked: options?.setElementValue?.() || undefined,\n },\n }, options.htmlOptions),\n {\n tag: 'label',\n classList: ['deeplib-text'],\n attributes: {\n for: options.id,\n },\n children: [options.label]\n },\n ],\n eventListeners: {\n change: () => {\n options?.setSettingValue?.((document.getElementById(options.id) as HTMLInputElement)?.checked);\n }\n }\n });\n\n if (options.description) {\n retElem.addEventListener('mouseover', () => {\n elementSetTooltip(options.description || '');\n });\n\n retElem.addEventListener('mouseout', () => {\n elementSetTooltip('');\n });\n }\n\n BaseSubscreen.currentElements.push([retElem, options as Checkbox]);\n\n return retElem;\n}\n\nfunction elementCreateCustom(options: Omit<Custom, 'type'>) {\n const elem = document.getElementById(options.id);\n\n if (elem) return elem;\n\n (options as Custom).type = 'custom';\n\n const retElem = ElementCreate(options.htmlOptions);\n\n BaseSubscreen.currentElements.push([retElem, options as Custom]);\n\n return retElem;\n}\n\nfunction elementCreateInput(options: Input) {\n const elem = document.getElementById(options.id);\n\n if (elem) return elem;\n\n const disabled = typeof options?.disabled === 'function' ? options?.disabled() : options?.disabled;\n\n const retElem = ElementCreate({\n tag: 'div',\n classList: ['deeplib-input-container'],\n attributes: {\n id: `${options.id}-container`,\n },\n children: [\n deepMerge({\n tag: 'input',\n classList: ['deeplib-input'],\n attributes: {\n type: options.type,\n id: options.id,\n placeholder: ' ',\n disabled: disabled,\n value: options?.setElementValue?.() || undefined,\n },\n }, options.htmlOptions),\n options.label ? {\n tag: 'label',\n classList: ['deeplib-text'],\n attributes: {\n for: options.id,\n },\n children: [options.label]\n } : undefined,\n ],\n eventListeners: {\n input: () => {\n options?.setSettingValue?.((document.getElementById(options.id) as HTMLInputElement)?.value);\n }\n }\n });\n\n if (options.description) {\n retElem.addEventListener('mouseover', () => {\n elementSetTooltip(options.description || '');\n });\n\n retElem.addEventListener('mouseout', () => {\n elementSetTooltip('');\n });\n }\n\n BaseSubscreen.currentElements.push([retElem, options]);\n\n return retElem;\n}\n\nfunction elementCreateLabel(options: Omit<Label, 'type'>) {\n const elem = document.getElementById(options.id);\n\n if (elem) return elem;\n\n (options as Label).type = 'label';\n\n const retElem = ElementCreate(deepMerge({\n tag: 'span',\n classList: ['deeplib-label', 'deeplib-text'],\n attributes: {\n id: options.id\n },\n children: [\n options.label,\n ],\n }, options.htmlOptions));\n\n if (options.description) {\n retElem.addEventListener('mouseover', () => {\n elementSetTooltip(options.description || '');\n });\n\n retElem.addEventListener('mouseout', () => {\n elementSetTooltip('');\n });\n }\n\n BaseSubscreen.currentElements.push([retElem, options as Label]);\n\n return retElem;\n}\n\nfunction elementCreateTooltip() {\n const element = ElementCreate({\n tag: 'div',\n classList: ['deeplib-tooltip'],\n attributes: {\n id: 'deeplib-tooltip'\n },\n style: {\n display: 'none'\n }\n });\n\n return element;\n}\n\nfunction elementGetTooltip() {\n return document.getElementById('deeplib-tooltip') ?? undefined;\n}\n\nfunction elementSetTooltip(text: string) {\n const element = document.getElementById('deeplib-tooltip');\n\n if (!element) return false;\n\n element.innerHTML = text;\n if (text === '') element.style.display = 'none';\n else element.style.display = '';\n\n return true;\n}\n\ninterface PrevNext {\n id: string,\n initialLabel?: string\n back: (arg0: PrevNextCallbacks) => void,\n initialPrevTooltip?: string,\n next: (arg0: PrevNextCallbacks) => void,\n initialNextTooltip?: string\n};\n\ninterface PrevNextCallbacks {\n setLabel: (label: string) => void,\n setBackTooltip: (tooltip: string) => void,\n setNextTooltip: (tooltip: string) => void\n}\n\nfunction elementPrevNext(options: PrevNext) {\n const elem = document.getElementById(options.id);\n\n if (elem) return elem;\n\n const setLabel = (label: string) => {\n const elem = document.getElementById(`${options.id}-label`);\n if (!elem) return false;\n elem.textContent = label;\n };\n\n const setPrevTooltip = (tooltip: string) => {\n const elem = document.getElementById(`deeplib-prev-next-${options.id}-prev-button-tooltip`);\n if (!elem) return false;\n elem.textContent = tooltip;\n };\n\n const setNextTooltip = (tooltip: string) => {\n const elem = document.getElementById(`deeplib-prev-next-${options.id}-next-button-tooltip`);\n if (!elem) return false;\n elem.textContent = tooltip;\n };\n\n const retElem = ElementCreate({\n tag: 'div',\n classList: ['deeplib-prev-next'],\n attributes: {\n id: options.id\n },\n children: [\n advElement.createButton({\n id: `deeplib-prev-next-${options.id}-prev-button`,\n image: `${PUBLIC_URL}/dl_images/arrow_left.svg`,\n onClick: () => {\n options.back({\n setLabel: setLabel,\n setBackTooltip: setPrevTooltip,\n setNextTooltip: setNextTooltip,\n });\n },\n tooltip: options.initialPrevTooltip,\n htmlOptions: {\n htmlOptions: {\n button: {\n classList: ['deeplib-prev-next-button']\n }\n },\n options: {\n noStyling: true\n }\n }\n }),\n advElement.createLabel({\n id: `${options.id}-label`,\n label: options.initialLabel,\n htmlOptions: {\n classList: ['deeplib-prev-next-label']\n }\n }),\n advElement.createButton({\n id: `deeplib-prev-next-${options.id}-next-button`,\n image: `${PUBLIC_URL}/dl_images/arrow_right.svg`,\n onClick: () => {\n options.next({\n setLabel: setLabel,\n setBackTooltip: setPrevTooltip,\n setNextTooltip: setNextTooltip,\n });\n },\n tooltip: options.initialNextTooltip,\n htmlOptions: {\n htmlOptions: {\n button: {\n classList: ['deeplib-prev-next-button']\n }\n },\n options: {\n noStyling: true\n }\n }\n }),\n ]\n });\n\n return retElem;\n}\n\nexport type ModalButton<T extends string = string> = {\n text: string\n action: T\n disabled?: boolean\n};\n\nexport type ModalInputOptions = {\n defaultValue?: string\n readOnly?: boolean\n placeholder?: string\n type: 'input' | 'textarea'\n validate?: (value: string) => string | null\n};\n\nexport type ModalOptions<T extends string = string> = {\n prompt: string | Node\n input?: ModalInputOptions\n buttons?: ModalButton<T>[]\n closeOnBackdrop?: boolean\n timeoutMs?: number\n};\n\nexport class Modal<T extends string = string> {\n private dialog: HTMLDialogElement;\n private blocker: HTMLDivElement;\n private inputEl?: HTMLInputElement | HTMLTextAreaElement;\n private timeoutId?: number;\n\n private static queue: Modal<any>[] = [];\n private static processing = false;\n\n constructor(private opts: ModalOptions<T>) {\n opts ??= {} as ModalOptions<T>;\n opts.closeOnBackdrop ??= true;\n\n const promptId = `modal-prompt-${Date.now()}`;\n\n this.dialog = ElementCreate({\n tag: 'dialog',\n classList: ['deeplib-modal'],\n attributes: {\n role: 'dialog',\n 'aria-modal': 'true',\n 'aria-labelledby': promptId\n },\n style: {\n fontFamily: CommonGetFontName()\n },\n children: [\n opts.prompt,\n {\n tag: 'div',\n classList: ['deeplib-modal-prompt'],\n attributes: {\n id: promptId\n },\n children: [\n opts.input ? this.renderInput(opts.input) : undefined,\n ]\n },\n this.renderButtons()\n ]\n });\n\n this.blocker = this.createBlocker();\n\n this.renderButtons();\n document.body.append(this.createBlocker(), this.dialog);\n this.setupFocusTrap();\n if (opts.timeoutMs) {\n this.timeoutId = window.setTimeout(() => this.close('timeout' as T), opts.timeoutMs);\n }\n }\n\n show(): Promise<[T, string | null]> {\n return Modal.enqueue(this);\n }\n\n static async alert(msg: string, timeoutMs?: number) {\n await new Modal({ prompt: msg, buttons: [{ action: 'close', text: 'OK' }], timeoutMs }).show();\n }\n\n static async confirm(msg: string) {\n const [action] = await new Modal({ prompt: msg, buttons: [{ text: 'Cancel', action: 'cancel' }, { text: 'OK', action: 'ok' }] }).show();\n return action === 'ok';\n }\n\n static async prompt(msg: string, defaultValue = ''): Promise<string | null> {\n const [action, value] = await new Modal({ prompt: msg, timeoutMs: 0, input: { type: 'input', defaultValue }, buttons: [{ text: 'Cancel', action: 'cancel' }, { text: 'Submit', action: 'submit' }] }).show();\n return action === 'submit' ? value : null;\n }\n\n private renderInput(cfg: ModalInputOptions) {\n const el = document.createElement(cfg.type);\n el.classList.add('deeplib-modal-input');\n if (cfg.placeholder) el.placeholder = cfg.placeholder;\n if (cfg.readOnly) el.readOnly = true;\n if (cfg.defaultValue) el.value = cfg.defaultValue;\n if (cfg.type === 'textarea') (el as HTMLTextAreaElement).rows = 5;\n el.addEventListener('input', () => {\n const err = cfg.validate?.(el.value);\n el.setCustomValidity(err || '');\n });\n this.inputEl = el;\n\n return el;\n }\n\n private renderButtons() {\n const container = document.createElement('div');\n container.classList.add('deeplib-modal-button-container');\n\n const btns = this.opts.buttons ? [...this.opts.buttons] : [];\n\n btns.forEach(b => {\n const btn = advElement.createButton({\n label: b.text,\n id: `deeplib-modal-${b.action}`,\n disabled: b.disabled,\n onClick: () => this.close(b.action)\n });\n container.append(btn);\n });\n\n return container;\n }\n\n private createBlocker() {\n const blocker = document.createElement('div');\n blocker.classList.add('deeplib-modal-blocker');\n blocker.title = 'Click to close';\n if (this.opts.closeOnBackdrop !== false)\n blocker.addEventListener('click', () => this.close('close' as T));\n\n return blocker;\n }\n\n private setupFocusTrap() {\n const focusable = 'button, [href], input, textarea, select, [tabindex]:not([tabindex=\"-1\"])';\n const elements = Array.from(this.dialog.querySelectorAll<HTMLElement>(focusable));\n const first = elements[0];\n const last = elements[elements.length - 1];\n this.dialog.addEventListener('keydown', e => {\n if (e.key === 'Tab') {\n if (elements.length === 0) {\n e.preventDefault();\n return;\n }\n if (e.shiftKey) {\n if (document.activeElement === first) {\n last.focus();\n e.preventDefault();\n }\n } else {\n if (document.activeElement === last) {\n first.focus();\n e.preventDefault();\n }\n }\n } else if (e.key === 'Escape') {\n e.stopPropagation();\n this.close('close' as T);\n }\n });\n window.requestAnimationFrame(() => {\n (this.inputEl || first)?.focus();\n });\n }\n\n private close(action: T) {\n if (this.timeoutId) clearTimeout(this.timeoutId);\n this.dialog.close();\n this.dialog.remove();\n this.blocker.remove();\n document.body.querySelector('.deeplib-modal-blocker')?.remove();\n const value = this.inputEl?.value ?? '';\n this.resolve([action, value]);\n Modal.dequeue();\n }\n\n /**\n * An internal function where we will save promise function.\n */\n private resolve: (result: [T, string]) => void = () => { };\n\n /** A function that adds a modal to the queue and returns a promise */\n private static enqueue(modal: Modal<any>): Promise<[any, string]> {\n Modal.queue.push(modal);\n if (!Modal.processing) Modal.dequeue();\n return new Promise(resolve => (modal.resolve = resolve));\n }\n\n /** A function that processes the queue, removing the first modal */\n private static dequeue() {\n const modal = Modal.queue.shift();\n if (modal) {\n Modal.processing = true;\n modal.dialog.show();\n } else {\n Modal.processing = false;\n }\n }\n}\n\n(window as any).Modal = Modal;", "\nimport { BaseSubscreen, getText, GUI, GuiDebug, layout } from '../deeplib';\nimport { advElement } from '../utilities/elements/elements';\nimport { GuiImportExport } from './import_export';\n\nexport type MainMenuOptions = {\n repoLink?: string;\n wikiLink?: string;\n resetSubscreen?: BaseSubscreen;\n importExportSubscreen?: GuiImportExport;\n};\n\nexport class MainMenu extends BaseSubscreen {\n subscreens: BaseSubscreen[] = [];\n\n private static options: MainMenuOptions = {};\n\n get name(): string {\n return 'mainmenu';\n }\n\n constructor(module: GUI) {\n super({ drawCharacter: true }, module);\n\n this.subscreens = module.subscreens;\n }\n\n load(): void {\n if (!GUI.instance?.currentSubscreen) {\n this.setSubscreen(this);\n return;\n }\n\n super.load();\n\n const exitButton = advElement.createButton({\n id: 'exit',\n size: [90, 90],\n image: `${PUBLIC_URL}/dl_images/exit.svg`,\n onClick: () => {\n this.exit();\n },\n tooltip: getText('settings.button.back_button_hint')\n });\n\n const menu = document.getElementById('deeplib-nav-menu');\n if (menu) {\n ElementMenu.AppendButton(menu, exitButton);\n }\n\n for (const screen of this.subscreens) {\n\n if (screen.name == 'mainmenu') continue;\n\n const button = advElement.createButton({\n id: `${screen.name}-button`,\n image: screen.icon,\n label: getText(`mainmenu.button.${screen.name}`),\n onClick: () => {\n this.setSubscreen(screen);\n },\n size: [null, 90],\n });\n\n layout.appendToSettingsDiv(button);\n }\n\n const miscDiv = layout.createMiscDiv();\n layout.appendToSubscreen(miscDiv);\n\n if (MainMenu.options.wikiLink) {\n const wikiButton = advElement.createButton({\n id: 'deeplib-wiki-button',\n image: `${PUBLIC_URL}/dl_images/notebook.svg`,\n label: getText('mainmenu.button.wiki'),\n onClick: () => {\n window.open(MainMenu.options.wikiLink, '_blank');\n },\n size: [null, 80],\n });\n layout.appendToMiscDiv(wikiButton);\n }\n\n if (MainMenu.options.repoLink) {\n const repoButton = advElement.createButton({\n id: 'deeplib-repo-button',\n image: `${PUBLIC_URL}/dl_images/git.svg`,\n label: getText('mainmenu.button.repo'),\n onClick: () => {\n window.open(MainMenu.options.repoLink, '_blank');\n },\n size: [null, 80],\n });\n layout.appendToMiscDiv(repoButton);\n }\n\n if (MainMenu.options.resetSubscreen) {\n const resetButton = advElement.createButton({\n id: 'deeplib-reset-button',\n image: `${PUBLIC_URL}/dl_images/trash_bin.svg`,\n label: getText('mainmenu.button.reset'),\n onClick: () => {\n this.setSubscreen(MainMenu.options.resetSubscreen!);\n },\n size: [null, 80],\n });\n layout.appendToMiscDiv(resetButton);\n }\n\n if (MainMenu.options.importExportSubscreen) {\n const importExportButton = advElement.createButton({\n id: 'deeplib-import-export-button',\n image: `${PUBLIC_URL}/dl_images/transfer.svg`,\n label: getText('mainmenu.button.import_export'),\n onClick: () => {\n this.setSubscreen(MainMenu.options.importExportSubscreen!);\n },\n size: [null, 80],\n });\n layout.appendToMiscDiv(importExportButton);\n }\n\n if (IS_DEBUG) {\n const debugButton = advElement.createButton({\n id: 'deeplib-debug-button',\n image: `${PUBLIC_URL}/dl_images/bug.svg`,\n onClick: () => {\n this.setSubscreen(new GuiDebug());\n },\n size: [90, 90],\n });\n if (menu) {\n ElementMenu.PrependItem(menu, debugButton);\n }\n }\n }\n\n run() {\n super.run();\n }\n\n click() { }\n\n exit(): void {\n CharacterAppearanceForceUpCharacter = -1;\n CharacterLoadCanvas(Player);\n this.setSubscreen(null);\n PreferenceSubscreenExtensionsClear();\n }\n\n resize(): void {\n super.resize();\n ElementSetPosition('deeplib-misc', 1905, 930, 'bottom-right');\n ElementSetSize('deeplib-misc', 405, null);\n }\n\n static setOptions(mainMenuOptions: MainMenuOptions) {\n MainMenu.options = mainMenuOptions;\n }\n}\n", "\nimport { BaseSubscreen, ModSdkManager, getText, layout, SettingsModel, modStorage, deepLibLogger } from '../deeplib';\nimport { advElement, Modal } from '../utilities/elements/elements';\n\nexport type ImportExportOptions = {\n /** A custom save file extension. */\n customFileExtension: string;\n /** A callback to be called after data is imported. */\n onImport?: () => void;\n /** A callback to be called after data is exported. */\n onExport?: () => void;\n};\n\ntype DataTransferMethod = 'clipboard' | 'file';\n\nexport class GuiImportExport extends BaseSubscreen {\n private importExportOptions: ImportExportOptions;\n\n get name(): string {\n return 'import-export';\n }\n\n constructor(importExportOptions: ImportExportOptions) {\n super({ drawCharacter: true });\n this.importExportOptions = importExportOptions;\n }\n\n load(): void {\n\n super.load();\n\n const importFromFileButton = advElement.createButton({\n id: 'deeplib-import-file-button',\n size: [600, 90],\n image: `${PUBLIC_URL}/dl_images/file_import.svg`,\n onClick: () => {\n this.dataImport('file');\n },\n label: getText('import-export.button.import_file')\n });\n layout.appendToSettingsDiv(importFromFileButton);\n\n const exportToFileButton = advElement.createButton({\n id: 'deeplib-export-file-button',\n size: [600, 90],\n image: `${PUBLIC_URL}/dl_images/file_export.svg`,\n onClick: () => {\n this.dataExport('file');\n },\n label: getText('import-export.button.export_file')\n });\n layout.appendToSettingsDiv(exportToFileButton);\n\n const importFromClipboardButton = advElement.createButton({\n id: 'deeplib-import-clipboard-button',\n size: [600, 90],\n image: `${PUBLIC_URL}/dl_images/clipboard_import.svg`,\n onClick: () => {\n this.dataImport('clipboard');\n },\n label: getText('import-export.button.import_clipboard')\n });\n layout.appendToSettingsDiv(importFromClipboardButton);\n\n const exportToClipboardButton = advElement.createButton({\n id: 'deeplib-export-clipboard-button',\n size: [600, 90],\n image: `${PUBLIC_URL}/dl_images/clipboard_export.svg`,\n onClick: () => {\n this.dataExport('clipboard');\n },\n label: getText('import-export.button.export_clipboard')\n });\n layout.appendToSettingsDiv(exportToClipboardButton);\n }\n\n resize(): void {\n super.resize();\n }\n\n async dataExport(transferMethod: DataTransferMethod) {\n try {\n const data = LZString.compressToBase64(JSON.stringify(modStorage.playerStorage));\n\n if (transferMethod === 'clipboard') {\n await this.exportToClipboard(data);\n } else if (transferMethod === 'file') {\n await this.exportToFile(data, 'themed_settings');\n }\n\n this.importExportOptions.onExport?.();\n ToastManager.success('Data exported successfully.');\n } catch (error) {\n ToastManager.error('Data export failed.');\n deepLibLogger.error(`Data export failed for ${ModSdkManager.ModInfo.name}.`, error,);\n }\n }\n\n async dataImport(transferMethod: DataTransferMethod) {\n try {\n let importedData: string | null = '';\n\n if (transferMethod === 'clipboard') {\n importedData = await this.importFromClipboard() ?? null;\n } else if (transferMethod === 'file') {\n importedData = await this.importFromFile() ?? null;\n }\n\n if (!importedData) {\n throw new Error('No data imported.');\n }\n\n const data = JSON.parse(LZString.decompressFromBase64(importedData) ?? '') as SettingsModel;\n\n if (!data) {\n throw new Error('Invalid data.');\n }\n\n modStorage.playerStorage = data;\n this.importExportOptions.onImport?.();\n ToastManager.success('Data imported successfully.');\n } catch (error) {\n ToastManager.error('Data import failed.');\n deepLibLogger.error(`Data import failed for ${ModSdkManager.ModInfo.name}.`, error,);\n }\n }\n\n async exportToFile(data: string, defaultFileName: string): Promise<void> {\n const CUSTOM_EXTENSION = this.importExportOptions.customFileExtension.startsWith('.')\n ? this.importExportOptions.customFileExtension\n : '.' + this.importExportOptions.customFileExtension;\n\n const suggestedName = defaultFileName.endsWith(CUSTOM_EXTENSION)\n ? defaultFileName\n : defaultFileName + CUSTOM_EXTENSION;\n\n if ('showSaveFilePicker' in window) {\n try {\n const handle = await (window as any).showSaveFilePicker({\n suggestedName: suggestedName,\n types: [\n {\n description: 'Custom Data Files',\n accept: { 'text/plain': [CUSTOM_EXTENSION] },\n },\n ],\n });\n const writable = await handle.createWritable();\n await writable.write(data);\n await writable.close();\n } catch (error: any) {\n throw new Error('File save cancelled or failed: ' + error.message);\n }\n } else {\n const fileName = await Modal.prompt('Enter file name', suggestedName);\n\n if (fileName === null) {\n return;\n } else if (fileName === '') {\n throw new Error('File name cannot be empty.');\n }\n\n const blob = new Blob([data], { type: 'text/plain' });\n const link = ElementCreate({\n tag: 'a',\n attributes: {\n href: URL.createObjectURL(blob),\n download: fileName.endsWith(CUSTOM_EXTENSION) ? fileName : fileName + CUSTOM_EXTENSION\n },\n });\n\n link.click();\n URL.revokeObjectURL(link.href);\n }\n }\n\n async importFromFile(): Promise<string | null> {\n const CUSTOM_EXTENSION = this.importExportOptions.customFileExtension.startsWith('.')\n ? this.importExportOptions.customFileExtension\n : '.' + this.importExportOptions.customFileExtension;\n\n async function importFromFileInternal(file: File): Promise<string | null> {\n if (!file.name.endsWith(CUSTOM_EXTENSION)) {\n throw new Error(`Invalid file type. Expected a ${CUSTOM_EXTENSION} file.`);\n }\n\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = () => reject(new Error('Failed to read file.'));\n reader.readAsText(file);\n });\n }\n\n if ('showOpenFilePicker' in window) {\n try {\n const [fileHandle] = await (window as any).showOpenFilePicker({\n types: [\n {\n description: 'Custom Data Files',\n accept: { 'text/plain': [CUSTOM_EXTENSION] },\n },\n ],\n multiple: false,\n });\n const file = await fileHandle.getFile();\n return await importFromFileInternal(file);\n } catch (error: any) {\n throw new Error('File selection cancelled or failed: ' + error.message);\n }\n } else {\n return new Promise((resolve, reject) => {\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = CUSTOM_EXTENSION;\n input.onchange = async (event) => {\n const file = (event.target as HTMLInputElement).files?.[0];\n if (file) {\n try {\n const data = await importFromFileInternal(file);\n resolve(data);\n } catch (error) {\n reject(error);\n }\n } else {\n reject(new Error('No file selected.'));\n }\n };\n input.click();\n });\n }\n }\n\n async exportToClipboard(data: string): Promise<void> {\n return navigator.clipboard.writeText(data).catch((error) => {\n throw new Error('Failed to copy data to clipboard.' + error);\n });\n }\n\n async importFromClipboard(): Promise<string | null> {\n return Modal.prompt('Enter data to import').catch((error) => {\n throw new Error('Failed to read data from clipboard.' + error);\n });\n }\n}\n", "import { SettingsModel, deepLibLogger } from '../deeplib';\n\nexport class ModStorage<T extends SettingsModel = SettingsModel> {\n private static _instance: ModStorage | null = null;\n private modName: string;\n\n constructor(modName: string) {\n if (!ModStorage._instance) {\n ModStorage._instance = this;\n this.modName = modName;\n }\n this.modName ??= modName;\n\n return ModStorage._instance as ModStorage<T>;\n }\n\n get playerStorage(): T {\n return Player[this.modName];\n }\n\n set playerStorage(value: T) {\n Player[this.modName] = value;\n }\n\n get extensionStorage(): string {\n return Player.ExtensionSettings[this.modName];\n }\n\n set extensionStorage(value: string) {\n Player.ExtensionSettings[this.modName] = value;\n }\n\n setLocalStorage(key: string, value: object) {\n localStorage.setItem(`${this.modName}_${key}`, ModStorage.dataCompress(value));\n }\n\n getLocalStorage(key: string): object | null {\n const data = localStorage.getItem(`${this.modName}_${key}`);\n\n if (!data) return null;\n\n return ModStorage.dataDecompress<T>(data);\n }\n\n load() {\n if (this.extensionStorage) {\n const parsed = ModStorage.dataDecompress<T>(this.extensionStorage || '');\n if (parsed === null || !Object.hasOwn(parsed, 'Version')) {\n this.playerStorage = {} as T;\n } else {\n this.playerStorage = parsed;\n };\n } else {\n this.playerStorage = {} as T;\n }\n }\n\n save() {\n if (!this.extensionStorage) this.extensionStorage = '';\n this.extensionStorage = ModStorage.dataCompress(this.playerStorage);\n ServerPlayerExtensionSettingsSync(this.modName);\n }\n\n static dataDecompress<T = object>(string: string): T | null {\n const d = LZString.decompressFromBase64(string as string);\n let data: T | null = null;\n\n try {\n const decoded: T = JSON.parse(d as string);\n data = decoded;\n } catch (error) {\n deepLibLogger.error(error);\n }\n\n return data;\n }\n\n static dataCompress(object: object) {\n return LZString.compressToBase64(JSON.stringify(object));\n }\n}\n", "import { SettingElement } from '../../base/elements_typings';\n\nexport const domUtil = {\n autoSetPosition: autoSetPosition,\n autoSetSize: autoSetSize,\n hide: hide,\n unhide: unhide,\n hasOverflow: hasOverflow\n};\n\nfunction autoSetPosition(_: ElementHelp.ElementOrId, position: SettingElement['position']) {\n let xPos = undefined;\n let yPos = undefined;\n\n if (Array.isArray(position)) {\n xPos = position[0];\n yPos = position[1];\n } else if (typeof position === 'function') {\n const result = position();\n xPos = result[0];\n yPos = result[1];\n }\n\n if (xPos !== undefined && yPos !== undefined) ElementSetPosition(_, xPos, yPos);\n}\n\nfunction autoSetSize(_: ElementHelp.ElementOrId, size: SettingElement['size']) {\n let width = undefined;\n let height = undefined;\n \n if (Array.isArray(size)) {\n width = size[0];\n height = size[1];\n } else if (typeof size === 'function') {\n const result = size();\n width = result[0];\n height = result[1];\n }\n \n if (width !== undefined && height !== undefined) ElementSetSize(_, width, height);\n}\n\nfunction hide(_: ElementHelp.ElementOrId) {\n const element = ElementWrap(_);\n if (!element) return;\n\n element.style.display = 'none';\n};\n\nfunction unhide(_: ElementHelp.ElementOrId) {\n const element = ElementWrap(_);\n if (!element) return;\n\n element.style.display = '';\n};\n\nfunction hasOverflow(el: ElementHelp.ElementOrId): { any: boolean, vertical: boolean, horizontal: boolean } | null {\n const element = ElementWrap(el);\n if (!element) return null;\n\n const vertical = element.scrollHeight > element.clientHeight;\n const horizontal = element.scrollWidth > element.clientWidth;\n\n return {\n any: vertical || horizontal,\n vertical,\n horizontal,\n };\n}", "export const layout = {\n createSubscreen: elementCreateSubscreenDiv,\n getSubscreen: elementGetSubscreenDiv,\n appendToSubscreen: elementAppendToSubscreenDiv,\n removeSubscreen: elementRemoveSubscreenDiv,\n\n createSettingsDiv: elementCreateSettingsDiv,\n getSettingsDiv: elementGetSettingsDiv,\n appendToSettingsDiv: elementAppendToSettingsDiv,\n removeSettingsDiv: elementRemoveSettingsDiv,\n\n createMiscDiv: elementCreateMiscDiv,\n getMiscDiv: elementGetMiscDiv,\n appendToMiscDiv: elementAppendToMiscDiv,\n removeMiscDiv: elementRemoveMiscDiv\n};\n\nfunction elementCreateSubscreenDiv() {\n const subscreenDiv = elementGetSubscreenDiv();\n if (subscreenDiv) {\n console.error('Subscreen already exists');\n return subscreenDiv;\n }\n\n const div = document.createElement('div');\n div.id = 'deeplib-subscreen';\n div.classList.add('deeplib-subscreen', 'HideOnPopup');\n\n return document.body.appendChild(div);\n}\n\nfunction elementGetSubscreenDiv() {\n return document.getElementById('deeplib-subscreen') ?? undefined;\n}\n\nfunction elementRemoveSubscreenDiv() {\n return elementGetSubscreenDiv()?.remove();\n}\n\nfunction elementAppendToSubscreenDiv(...element: HTMLElement[]) {\n return elementGetSubscreenDiv()?.append(...element);\n}\n\nfunction elementCreateSettingsDiv() {\n const settingsDiv = elementGetSettingsDiv();\n if (settingsDiv) {\n console.error('Settings screen already exists');\n return settingsDiv;\n }\n\n const div = document.createElement('div');\n div.id = 'deeplib-settings';\n div.classList.add('deeplib-settings');\n\n return div;\n}\n\nfunction elementGetSettingsDiv() {\n return document.getElementById('deeplib-settings') ?? undefined;\n}\n\nfunction elementAppendToSettingsDiv(...element: HTMLElement[]) {\n return elementGetSettingsDiv()?.append(...element);\n}\n\nfunction elementRemoveSettingsDiv() {\n return elementGetSettingsDiv()?.remove();\n}\n\nfunction elementCreateMiscDiv() {\n const miscDiv = elementGetMiscDiv();\n if (miscDiv) {\n console.error('Settings screen already exists');\n return miscDiv;\n }\n\n const div = document.createElement('div');\n div.id = 'deeplib-misc';\n div.classList.add('deeplib-misc');\n\n return div;\n}\n\nfunction elementGetMiscDiv() {\n return document.getElementById('deeplib-misc');\n}\n\nfunction elementAppendToMiscDiv(...element: HTMLElement[]) {\n return elementGetMiscDiv()?.append(...element);\n}\n\nfunction elementRemoveMiscDiv() {\n return elementGetMiscDiv()?.remove();\n}\n", "type LogLevel = 'info' | 'log' | 'warn' | 'error' | 'debug';\n\ninterface LogEntry {\n readonly args: readonly any[];\n readonly date: Date;\n readonly logLevel: LogLevel;\n}\n\nexport class Logger extends Array<LogEntry> {\n private ModName: string = 'DeepLib';\n\n constructor(modName?: string) {\n super();\n\n if (modName) {\n this.ModName = modName;\n }\n }\n\n private _Log(level: LogLevel, ...args: any[]): void {\n const logEntry: LogEntry = {\n logLevel: level,\n args: [...args],\n // trace: arguments.callee.caller.toString().split('\\n'), \n date: new Date(Date.now())\n // `[${this.ModName}] ${formattedArgs}` \n };\n\n const userAgent = navigator.userAgent.toLowerCase();\n if (userAgent.includes('chrome') || userAgent.includes('firefox')) {\n const color = Logger.colorizeLog(level);\n args.forEach(arg => {\n if (typeof arg === 'string') {\n arg = `\\n%c${arg}`;\n // args.splice(args.indexOf(arg), 1, arg, color);\n }\n });\n console.log(`%c${this.ModName}:`, color, ...args);\n } else {\n console.log(`${this.ModName}:`, ...args);\n }\n\n this.push(logEntry);\n }\n\n info(...args: any[]): void {\n this._Log('info', ...args);\n }\n\n log(...args: any[]): void {\n this._Log('log', ...args);\n }\n\n warn(...args: any[]): void {\n this._Log('warn', ...args);\n }\n\n error(...args: any[]): void {\n this._Log('error', ...args);\n }\n\n debug(...args: any[]): void {\n this._Log('debug', ...args);\n }\n\n static colorizeLog(logLevel: LogLevel): string {\n const colors: Record<LogLevel, string> = {\n info: 'color: #32CCCC',\n log: 'color: #CCCC32',\n warn: 'color: #eec355',\n error: 'color: #750b0b',\n debug: 'color: #9E4BCF',\n };\n\n return colors[logLevel];\n }\n}\n\nexport const deepLibLogger = new Logger();\n", "export function sendLocalMessage(id: string | null, message: string, timeoutInSeconds?: number) {\n const element = ElementCreate({\n tag: 'div',\n classList: ['ChatMessage', 'deeplib-message', 'ChatMessageNonDialogue'],\n attributes: {\n id: id ?? `DEEPLIB_LOCAL_MESSAGE_${Date.now()}`,\n 'data-time': ChatRoomCurrentTime(),\n 'data-sender': Player.MemberNumber?.toString(),\n },\n children: [\n {\n tag: 'span',\n classList: ['deeplib-text'],\n innerHTML: message.replaceAll('\\n\\t', ''),\n },\n {\n tag: 'br',\n },\n {\n tag: 'a',\n classList: ['deeplib-text'],\n attributes: {\n href: '#',\n },\n innerHTML: '<b>Close (Click)</b>',\n eventListeners: {\n click: () => {\n element.remove();\n },\n },\n }\n ]\n });\n\n ChatRoomAppendChat(element);\n if (!timeoutInSeconds) return;\n setTimeout(() => element.remove(), timeoutInSeconds * 1000);\n}\n\nexport function sendActionMessage(msg: string, target: undefined | number = undefined, dictionary: ChatMessageDictionaryEntry[] = []) {\n if (!msg) return;\n ServerSend('ChatRoomChat', {\n Content: 'DEEPLIB_CUSTOM_ACTION',\n Type: 'Action',\n Target: target ?? undefined,\n Dictionary: [\n { Tag: 'MISSING TEXT IN \"Interface.csv\": DEEPLIB_CUSTOM_ACTION', Text: msg },\n ...dictionary,\n ],\n });\n}\n", "import rawSdkImport from 'bondage-club-mod-sdk';\n\n// What the fuck is this?? \n// It seems that ESBuild breaks things, either when building this package or a final mod\nconst rawSdk = rawSdkImport as any;\nconst bcModSdkRef = (rawSdk.default ?? rawSdk) as ModSDKGlobalAPI;\n\nexport const HookPriority = {\n Observe: 0,\n AddBehavior: 1,\n ModifyBehavior: 5,\n OverrideBehavior: 10,\n Top: 100\n};\n\nexport type ModuleCategory = number | string;\n\ninterface IPatchedFunctionData {\n name: string;\n hooks: {\n hook: PatchHook;\n priority: number;\n module: ModuleCategory | null;\n removeCallback: () => void;\n }[];\n}\n\nexport class ModSdkManager {\n private static SDK: ModSDKModAPI;\n private static patchedFunctions: Map<string, IPatchedFunctionData> = new Map();\n\n public static ModInfo: ModSDKModInfo;\n\n constructor(info: ModSDKModInfo, options?: ModSDKModOptions) {\n ModSdkManager.SDK = bcModSdkRef.registerMod(info, options);\n ModSdkManager.ModInfo = info;\n }\n\n initPatchableFunction(target: string): IPatchedFunctionData {\n let result = ModSdkManager.patchedFunctions.get(target);\n if (!result) {\n result = {\n name: target,\n hooks: []\n };\n ModSdkManager.patchedFunctions.set(target, result);\n }\n return result;\n }\n\n hookFunction<TargetName extends string>(\n target: TargetName,\n priority: number,\n hook: PatchHook<GetDotedPathType<typeof globalThis, TargetName>>,\n module: ModuleCategory | null = null\n ): () => void {\n const data = this.initPatchableFunction(target);\n\n if (data.hooks.some((h) => h.hook === hook)) {\n return () => null;\n }\n\n const removeCallback = ModSdkManager.SDK?.hookFunction(target, priority, hook);\n\n data.hooks.push({\n hook,\n priority,\n module,\n removeCallback\n });\n data.hooks.sort((a, b) => b.priority - a.priority);\n\n return removeCallback;\n }\n\n patchFunction(target: string, patches: Record<string, string>): void {\n ModSdkManager.SDK?.patchFunction(target, patches);\n }\n\n unpatchFunction(target: string): void {\n ModSdkManager.SDK?.removePatches(target);\n }\n\n removeHookByModule(target: string, module: ModuleCategory): boolean {\n const data = this.initPatchableFunction(target);\n\n for (let i = data.hooks.length - 1; i >= 0; i--) {\n if (data.hooks[i].module === module) {\n data.hooks[i].removeCallback();\n data.hooks.splice(i, 1);\n }\n }\n\n return true;\n }\n\n removeAllHooksByModule(module: ModuleCategory): boolean {\n for (const data of ModSdkManager.patchedFunctions.values()) {\n for (let i = data.hooks.length - 1; i >= 0; i--) {\n if (data.hooks[i].module === module) {\n data.hooks[i].removeCallback();\n data.hooks.splice(i, 1);\n }\n }\n }\n\n return true;\n }\n}\n", "export const Style = {\n injectInline(styleId: string, styleSource: string) {\n const isStyleLoaded = document.getElementById(styleId);\n\n if (isStyleLoaded) return;\n\n const styleElement = document.createElement('style');\n styleElement.id = styleId;\n styleElement.appendChild(document.createTextNode(styleSource));\n document.head.appendChild(styleElement);\n },\n\n injectEmbed(styleId: string, styleLink: string) {\n const isStyleLoaded = document.getElementById(styleId);\n\n if (isStyleLoaded) return;\n\n const styleElement = document.createElement('link');\n styleElement.id = styleId;\n styleElement.rel = 'stylesheet';\n styleElement.href = styleLink;\n document.head.appendChild(styleElement);\n },\n\n eject(id: string) {\n const style = document.getElementById(id);\n if (!style) return;\n\n style.remove();\n },\n\n reload(styleId: string, styleSource: string) {\n Style.eject(styleId);\n Style.injectInline(styleId, styleSource);\n },\n\n async fetch(link: string) {\n return fetch(link).then((res) => res.text());\n }\n};\n", "type TranslationDict = {\n [key: string]: string;\n};\n\nexport interface TranslationOptions {\n /** The path to the folder where the translations are stored. */\n pathToTranslationsFolder?: string;\n /** The default language to use. */\n defaultLanguage?: string;\n /** If true, the localization will be fixed to the default language. */\n fixedLanguage?: boolean;\n}\n\nexport class Localization {\n private static LibTranslation: TranslationDict = {};\n private static ModTranslation: TranslationDict = {};\n private static PathToModTranslation: string | undefined;\n private static PathToLibTranslation: string = `${PUBLIC_URL}/dl_translations/`;\n private static DefaultLanguage: string = 'en';\n private static initialized = false;\n\n static async init(initOptions?: TranslationOptions) {\n if (Localization.initialized) return;\n Localization.initialized = true;\n\n Localization.PathToModTranslation = (() => {\n if (!initOptions?.pathToTranslationsFolder) return undefined;\n\n return initOptions.pathToTranslationsFolder.endsWith('/') ?\n initOptions.pathToTranslationsFolder :\n `${initOptions.pathToTranslationsFolder}/`;\n })();\n\n Localization.DefaultLanguage = initOptions?.defaultLanguage || Localization.DefaultLanguage;\n\n const lang = initOptions?.fixedLanguage ? Localization.DefaultLanguage : TranslationLanguage.toLowerCase();\n\n const libTranslation = await Localization.fetchLanguageFile(Localization.PathToLibTranslation, lang);\n if (lang === Localization.DefaultLanguage) {\n Localization.LibTranslation = libTranslation;\n } else {\n const fallbackTranslation = await Localization.fetchLanguageFile(Localization.PathToLibTranslation, Localization.DefaultLanguage);\n Localization.LibTranslation = { ...fallbackTranslation, ...libTranslation };\n }\n\n if (!Localization.PathToModTranslation) return;\n const modTranslation = await Localization.fetchLanguageFile(Localization.PathToModTranslation, lang);\n if (lang === Localization.DefaultLanguage) {\n Localization.ModTranslation = modTranslation;\n } else {\n const fallbackTranslation = await Localization.fetchLanguageFile(Localization.PathToModTranslation, Localization.DefaultLanguage);\n Localization.ModTranslation = { ...fallbackTranslation, ...modTranslation };\n }\n }\n\n static getTextMod(srcTag: string): string | undefined {\n return Localization.ModTranslation?.[srcTag] || undefined;\n }\n\n static getTextLib(srcTag: string): string | undefined {\n return Localization.LibTranslation?.[srcTag] || undefined;\n }\n\n private static async fetchLanguageFile(baseUrl: string, lang: string): Promise<TranslationDict> {\n const response = await fetch(`${baseUrl}${lang}.lang`);\n\n if (lang !== Localization.DefaultLanguage && !response.ok) {\n return this.fetchLanguageFile(baseUrl, Localization.DefaultLanguage);\n }\n\n if (!response.ok) {\n return {};\n }\n\n const langFileContent = await response.text();\n\n return this.parseLanguageFile(langFileContent);\n }\n\n private static parseLanguageFile(content: string): TranslationDict {\n const translations: TranslationDict = {};\n const lines = content.split('\\n');\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n\n const [key, ...rest] = trimmed.split('=');\n translations[key.trim()] = rest.join('=').trim();\n }\n\n return translations;\n }\n}\n\nexport const getText = (srcTag: string): string => {\n return Localization.getTextMod(srcTag) || Localization.getTextLib(srcTag) || srcTag;\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["o", "e", "t", "n", "r", "i", "a", "c", "l", "d", "g", "s", "p", "BaseMigrator", "elem", "rawSdkImport"]
7
7
  }