@highlite/core
Version:
HighLite Client Core
1 lines • 236 kB
JavaScript
var bn=Object.defineProperty;var c=(e,t)=>bn(e,"name",{value:t,configurable:!0});var ui=(m=>(m[m.Any=-1]="Any",m[m.IdleState=0]="IdleState",m[m.MovingState=1]="MovingState",m[m.MovingTowardTargetState=2]="MovingTowardTargetState",m[m.BankingState=3]="BankingState",m[m.MeleeCombatState=4]="MeleeCombatState",m[m.TradingState=5]="TradingState",m[m.ShoppingState=6]="ShoppingState",m[m.FishingState=7]="FishingState",m[m.CookingState=8]="CookingState",m[m.RespawningState=9]="RespawningState",m[m.PlayerDeadState=10]="PlayerDeadState",m[m.ConversationState=11]="ConversationState",m[m.ChangingAppearanceState=12]="ChangingAppearanceState",m[m.WoodcuttingState=13]="WoodcuttingState",m[m.MiningState=14]="MiningState",m[m.HarvestingState=15]="HarvestingState",m[m.TreeShakingState=16]="TreeShakingState",m[m.SmeltingState=17]="SmeltingState",m[m.SmithingState=18]="SmithingState",m[m.CraftingState=19]="CraftingState",m[m.GoThroughDoorState=20]="GoThroughDoorState",m[m.MagicCombatState=21]="MagicCombatState",m[m.RangeCombatState=22]="RangeCombatState",m[m.EnchantingState=23]="EnchantingState",m[m.TeleportingState=24]="TeleportingState",m[m.NPCDeadState=25]="NPCDeadState",m[m.CreatingNonSkillItemsState=26]="CreatingNonSkillItemsState",m[m.SearchingWorldEntityState=27]="SearchingWorldEntityState",m[m.PotionMakingState=28]="PotionMakingState",m[m.MineThroughRocksState=29]="MineThroughRocksState",m[m.UsingSpinningWheelState=30]="UsingSpinningWheelState",m[m.ClimbSameMapLevelState=31]="ClimbSameMapLevelState",m[m.SmeltingKilnState=32]="SmeltingKilnState",m[m.PlayerLoggingOutState=33]="PlayerLoggingOutState",m[m.PickpocketingState=34]="PickpocketingState",m[m.StunnedState=35]="StunnedState",m[m.PicklockingState=36]="PicklockingState",m[m.NPCConversationState=37]="NPCConversationState",m[m.RubbingItemState=38]="RubbingItemState",m[m.OpeningItemState=39]="OpeningItemState",m[m.UsingItemOnEntityState=40]="UsingItemOnEntityState",m[m.DiggingState=41]="DiggingState",m))(ui||{});var ci=(S=>(S[S.Any=-1]="Any",S[S.Inventory=0]="Inventory",S[S.Bank=1]="Bank",S[S.Shop=2]="Shop",S[S.TradeInventory=3]="TradeInventory",S[S.TradeMyOfferedItems=4]="TradeMyOfferedItems",S[S.TradeOtherPlayerOfferedItems=5]="TradeOtherPlayerOfferedItems",S[S.Loadout=6]="Loadout",S[S.ChangeAppearance=7]="ChangeAppearance",S[S.Smelting=8]="Smelting",S[S.Smithing=9]="Smithing",S[S.Magic=10]="Magic",S[S.QuestDetail=11]="QuestDetail",S[S.PotionMaking=12]="PotionMaking",S[S.Welcome=13]="Welcome",S[S.SmeltingKiln=14]="SmeltingKiln",S[S.CameraSettings=15]="CameraSettings",S[S.SkillGuide=16]="SkillGuide",S[S.Loot=17]="Loot",S[S.FriendList=18]="FriendList",S[S.Stats=19]="Stats",S[S.Quests=20]="Quests",S[S.Settings=21]="Settings",S[S.TextInput=22]="TextInput",S[S.Confirmation=23]="Confirmation",S[S.Chat=24]="Chat",S[S.PrivateChat=25]="PrivateChat",S[S.TradeMenu=26]="TradeMenu",S[S.TreasureMap=27]="TreasureMap",S[S.GraphicsSettings=28]="GraphicsSettings",S))(ci||{});var vn=(a=>(a[a.Any=-1]="Any",a[a.WorldObject=0]="WorldObject",a[a.GroundItem=1]="GroundItem",a[a.NPC=2]="NPC",a[a.Player=3]="Player",a))(vn||{}),nt=class e{static{c(this,"ContextMenuManager")}static instance;defaultActions={};inventoryActions={};gameWorldActions={};gameWorldActionsSorting={};inventoryActionsSorting={};spellActions={};constructor(){if(e.instance)return e.instance;if(document.highlite.managers.ContextMenuManager)return e.instance=document.highlite.managers.ContextMenuManager,document.highlite.managers.ContextMenuManager;e.instance=this,document.highlite.managers.ContextMenuManager=this}AddDefaultMenuAction(t){return-1}AddInventoryItemMenuAction(t,i,n=-1,s){let a=document.highlite.gameLookups.InventoryActions,r=-1;return a[t]===void 0?(a[a[t]=Object.keys(a).length/2]=t,r=Object.keys(a).length/2-1):r=a[t],this.inventoryActions[s]||(this.inventoryActions[s]={}),this.inventoryActions[s][n]||(this.inventoryActions[s][n]={}),this.inventoryActions[s][n][t]?this.inventoryActions[s][n][t].handleFunctions.push(i):this.inventoryActions[s][n][t]={actionNumber:r,handleFunctions:[i]},r}AddGameWorldMenuAction(t,i,n=-1){let s=document.client.get("VA"),a=-1;return s[t]===void 0?(s[s[t]=Object.keys(s).length/2]=t,a=Object.keys(s).length/2-1):a=s[t],this.gameWorldActions[n]||(this.gameWorldActions[n]={}),this.gameWorldActions[n][t]?this.gameWorldActions[n][t].handleFunctions.push(i):this.gameWorldActions[n][t]={actionNumber:a,handleFunctions:[i]},a}RemoveGameWorldMenuAction(t,i,n=-1){if(this.gameWorldActions[n]&&this.gameWorldActions[n][t]){let s=this.gameWorldActions[n][t],a=s.handleFunctions.indexOf(i);a>-1&&s.handleFunctions.splice(a,1)}return this.gameWorldActions[n]&&this.gameWorldActions[n][t]&&this.gameWorldActions[n][t].handleFunctions.length===0&&delete this.gameWorldActions[n][t],Object.keys(this.gameWorldActions[n]).length===0&&delete this.gameWorldActions[n],!0}RemoveInventoryItemMenuAction(t,i,n=-1,s){if(this.inventoryActions[s]&&this.inventoryActions[s][n]&&this.inventoryActions[s][n][t]){let a=this.inventoryActions[s][n][t],r=a.handleFunctions.indexOf(i);r>-1&&a.handleFunctions.splice(r,1)}return this.inventoryActions[s]&&this.inventoryActions[s][n]&&this.inventoryActions[s][n][t]&&this.inventoryActions[s][n][t].handleFunctions.length===0&&delete this.inventoryActions[s][n][t],Object.keys(this.inventoryActions[s][n]).length===0&&delete this.inventoryActions[s][n],!0}AddSpellMenuAction(t){return-1}inventoryContextHook(t,i,n){let s=t[0],a=t[1],r=t[2],l=t[3],u=t[4],h=t[5],p=i;if(this.inventoryActions[u]!==void 0){let v=this.inventoryActions[u][-1];if(v)for(let[E,f]of Object.entries(v)){let d=f;p.push(n._contextMenuItemFactory.createInventoryItemContextMenuItem(this.inventoryActionHandler.bind(this,u,-1),u,d.actionNumber,r,l,null,0))}let k=this.inventoryActions[u][document.highlite.gameHooks.EntityManager.Instance._mainPlayer._currentState.getCurrentState()];if(k)for(let[E,f]of Object.entries(k)){let d=f;p.push(n._contextMenuItemFactory.createInventoryItemContextMenuItem(this.inventoryActionHandler.bind(this,u,document.highlite.gameHooks.EntityManager.Instance._mainPlayer._currentState.getCurrentState()),u,d.actionNumber,r,l,null,0))}}if(this.inventoryActions[-1]!==void 0){let v=this.inventoryActions[-1][-1];if(v)for(let[E,f]of Object.entries(v)){let d=f;p.push(n._contextMenuItemFactory.createInventoryItemContextMenuItem(this.inventoryActionHandler.bind(this,-1,-1),u,d.actionNumber,r,l,null,0))}let k=this.inventoryActions[-1][document.highlite.gameHooks.EntityManager.Instance._mainPlayer._currentState.getCurrentState()];if(k)for(let[E,f]of Object.entries(k)){let d=f;p.push(n._contextMenuItemFactory.createInventoryItemContextMenuItem(this.inventoryActionHandler.bind(this,-1,document.highlite.gameHooks.EntityManager.Instance._mainPlayer._currentState.getCurrentState()),u,d.actionNumber,r,l,null,0))}}return p.sort((v,k)=>{let E=v.Action,f=k.Action,d=this.inventoryActionsSorting[E]!==void 0?this.inventoryActionsSorting[E]:p.length,A=this.inventoryActionsSorting[f]!==void 0?this.inventoryActionsSorting[f]:p.length;return d-A}),p}gameWorldContextHook(t,i,n){let a=t[0]._actionsAndEntities,r=[];for(let u of Object.entries(a)){let h=u[1];h._entity!=null&&!r.includes(h._entity)&&r.push(h._entity)}let l=i;for(let u of r){let h=this.gameWorldActions[u._entityType];if(h)for(let[v,k]of Object.entries(h)){let E=k;l.push(n._contextMenuItemFactory.createGameWorldContextMenuItem(E.actionNumber,this.worldObjectActionHandler.bind(this,u._entityType),u,null,null,null))}let p=this.gameWorldActions[-1];if(p)for(let[v,k]of Object.entries(p)){let E=k;l.push(n._contextMenuItemFactory.createGameWorldContextMenuItem(E.actionNumber,this.worldObjectActionHandler.bind(this,-1),u,null,null,null))}}return l}inventoryActionHandler(t,i,n,s){let a=n.getItemAction(),r=this.inventoryActions[t][i];if(r)for(let[l,u]of Object.entries(r)){let h=u;if(h.actionNumber==a)for(let p of h.handleFunctions)p(n,s)}}worldObjectActionHandler(t,i,n){let s=this.gameWorldActions[t];if(s)for(let[a,r]of Object.entries(s)){let l=r;if(l.actionNumber==i.Action)for(let u of l.handleFunctions)u(i,n)}}SetGameWorldActionMenuPosition(t,i){let n=t.toLowerCase().replace(/ /g,"_"),s=document.highlite.gameLookups.GameWorldActions;s[n]!==void 0&&(this.gameWorldActionsSorting[s[n]]=i)}RemoveGameWorldActionMenuPosition(t){let i=t.toLowerCase().replace(/ /g,"_"),n=document.highlite.gameLookups.GameWorldActions;n[i]!==void 0&&delete this.gameWorldActionsSorting[n[i]]}SetInventoryActionMenuPosition(t,i){let n=document.highlite.gameLookups.InventoryActions;n[t]!==void 0&&(this.inventoryActionsSorting[n[t]]=i)}RemoveInventoryActionMenuPosition(t){let i=document.highlite.gameLookups.InventoryActions;i[t]!==void 0&&delete this.inventoryActionsSorting[i[t]]}registerContextHook(t,i,n){let s=this,a=document.highlite.gameHooks[t].prototype;return function(r){a[i]=function(...l){let u=r.apply(this,arguments);return n.apply(s,[l,u,this])}}(a[i]),!0}registerStaticContextHook(t,i,n=Function){let s=this,a=document.highlite.gameHooks[t];if(!a)return console.warn(`[Highlite] Attempted to register unknown static client class hook (${t}).`),!1;let r=i;r.startsWith("_")&&(r=r.substring(1));let l=`${t}_${r}`;return function(u){a[i]=function(...h){let p=u.apply(this,arguments);return n.apply(s,[l,...h,this]),p}}(a[i]),!0}ActionSorting(t,i,n,s,a){let r=new e;!a||!a._mousePointActionsAndEntitiesResult||!a._mousePointActionsAndEntitiesResult._actionsAndEntities||(a._mousePointActionsAndEntitiesResult._actionsAndEntities.sort((l,u)=>{let h=l.Action,p=u.Action,v=a._mousePointActionsAndEntitiesResult._actionsAndEntities.indexOf(l),k=a._mousePointActionsAndEntitiesResult._actionsAndEntities.indexOf(u),E=r.gameWorldActionsSorting[h]!==void 0?r.gameWorldActionsSorting[h]:v,f=r.gameWorldActionsSorting[p]!==void 0?r.gameWorldActionsSorting[p]:k;return E-f}),a._mousePointActionsAndEntitiesResult._mainActionAndEntity=a._mousePointActionsAndEntitiesResult._actionsAndEntities[0])}};var st=class e{static{c(this,"HookManager")}static instance;constructor(){if(e.instance)return e.instance;if(document.highlite.managers.HookManager)return e.instance=document.highlite.managers.HookManager,document.highlite.managers.HookManager;e.instance=this,document.highlite.managers.HookManager=this}registerClass(t,i){let n=document.client.get(t);if(!n)return console.warn(`[Highlite] ${t} (${i}) is not defined in client.`),!1;document.highlite.gameHooks[i]=n;let s=n.prototype,a=Object.entries(Object.getOwnPropertyDescriptors(s)).filter(([l,u])=>typeof u.value=="function"&&l!=="constructor").map(([l])=>l),r=Object.entries(Object.getOwnPropertyDescriptors(n)).filter(([l,u])=>typeof u.value=="function"&&!["length","name","prototype"].includes(l)).map(([l])=>l);for(let l in a)this.registerClassHook(i,a[l]);for(let l in r)this.registerStaticClassHook(i,r[l]);return!0}registerEnum(t,i){let n=document.client.get(t);return n?(document.highlite.gameLookups[i]=n,!0):(console.warn(`[Highlite] ${t} (${i}) is not defined in client.`),!1)}registerClassHook(t,i,n=this.hook){let s=this,a=document.highlite.gameHooks[t].prototype;if(!a)return console.warn(`[Highlite] Attempted to register unknown client class hook (${t}).`),!1;let r=i;r.startsWith("_")&&(r=r.substring(1));let l=`${t}_${r}`;return function(u){a[i]=function(...h){let p=u.apply(this,arguments);return n.apply(s,[l,...h,this]),p}}(a[i]),!0}registerClassOverrideHook(t,i,n=this.hook){let s=this,a=document.highlite.gameHooks[t].prototype;if(!a)return console.warn(`[Highlite] Attempted to register unknown client class override hook (${t}).`),!1;let r=i;r.startsWith("_")&&(r=r.substring(1));let l=`${t}_${r}`;return function(u){a[i]=function(...h){return n.apply(s,[l,...h,this])}}(a[i]),!0}registerStaticClassHook(t,i,n=this.hook){let s=this,a=document.highlite.gameHooks[t];if(!a)return console.warn(`[Highlite] Attempted to register unknown static client class hook (${t}).`),!1;let r=i;r.startsWith("_")&&(r=r.substring(1));let l=`${t}_${r}`;return function(u){a[i]=function(...h){let p=u.apply(this,arguments);return n.apply(s,[l,...h,this]),p}}(a[i]),!0}hook(t,...i){if(!document.highlite.managers.PluginManager){console.warn("[Highlite] Plugin Manager not initialized.");return}for(let n of document.highlite.managers.PluginManager.plugins)if(n.instance&&typeof n.instance[t]=="function")try{n.instance.settings.enable.value&&n.instance[t].apply(n.instance,i)}catch(s){console.error(`[Highlite] Error in plugin ${n.instance?.pluginName} (${t}):`,s)}}};var at=class e{static{c(this,"NotificationManager")}static instance;canNotify=!1;constructor(){if(e.instance)return e.instance;if(document.highlite.managers.NotificationManager)return e.instance=document.highlite.managers.NotificationManager,document.highlite.managers.NotificationManager;e.instance=this,document.highlite.managers.NotificationManager=this}createNotification(t,i=()=>{window.focus()}){if(!this.canNotify)return!1;let n=new Notification("Highlite",{icon:"./static/icons/icon.png",body:t});return n.onclick=()=>{i()},!0}async askNotificationPermission(){"Notification"in window||(console.info("[Highlite] This browser does not support notifications."),this.canNotify=!1),Notification.permission==="granted"?(console.info("[Highlite] Notification permission granted."),this.canNotify=!0):Notification.permission==="denied"?(console.info("[Highlite] Notification permission denied."),this.canNotify=!1):(console.info("[Highlite] Notification permission dismissed."),this.canNotify=!1)}};function ze(e){try{return document.highlite.gameLookups.Skills[e]||`Skill ${e}`}catch{return`Skill ${e}`}}c(ze,"getSkillName");function hi(e){try{return["helmet","chest","legs","shield","weapon","back","neck","gloves","boots","projectile"][e]||`Type ${e}`}catch{return`Type ${e}`}}c(hi,"getEquipmentTypeName");var Pt={showSprite:!0,showName:!0,showId:!0,showDescription:!0,showCost:!0,showRequirements:!0,showEffects:!0,showEdibleEffects:!0,showWeaponSpeed:!0,showEquipmentType:!0,showExpFromObtaining:!0,showRecipe:!0,showTags:!0,showEdibleResult:!0},rt=class{static{c(this,"ItemTooltip")}element;currentItemId=null;constructor(t){this.element=document.createElement("div"),this.element.className="hs-ui-item-tooltip",this.element.style.display="none",t.appendChild(this.element)}show(t,i,n,s=Pt){this.currentItemId=t;let a=null;try{a=document.highlite.gameHooks.ItemDefinitionManager._itemDefMap.get(t)}catch(f){console.warn(`Error getting item definition for ID ${t}:`,f)}if(!a)return console.warn(`No item definition found for ID ${t}`),{hide:c(()=>{},"hide")};this.element.innerHTML="";let r=document.createElement("div");if(r.className="hs-ui-item-tooltip-header",s.showSprite){let f=document.createElement("div");f.className="hs-ui-item-tooltip-sprite";try{let d=document.highlite.gameHooks.InventoryItemSpriteManager.getCSSBackgroundPositionForItem(t);d&&(f.style.backgroundPosition=d)}catch(d){console.warn(`Error getting item sprite for ID ${t}:`,d)}r.appendChild(f)}let l=document.createElement("div");if(l.className="hs-ui-item-tooltip-title",s.showName){let f=document.createElement("div");f.className="hs-ui-item-tooltip-name",f.textContent=a._nameCapitalized||a._name||`Item ${t}`,l.appendChild(f)}if(s.showId){let f=document.createElement("div");f.className="hs-ui-item-tooltip-id",f.textContent=`ID: ${t}`,l.appendChild(f)}if(r.appendChild(l),this.element.appendChild(r),s.showDescription&&a._description){let f=document.createElement("div");f.className="hs-ui-item-tooltip-description",f.textContent=a._description,this.element.appendChild(f)}if(s.showCost&&a._cost&&a._cost>0){let f=document.createElement("div");f.className="hs-ui-item-tooltip-section",f.innerHTML=`<span class="hs-ui-item-tooltip-label">Cost:</span> <span class="hs-ui-item-tooltip-cost">${a._cost.toLocaleString()} coins</span>`,this.element.appendChild(f)}if(s.showRequirements&&a._equippableRequirements&&a._equippableRequirements.length>0){let f=document.createElement("div");f.className="hs-ui-item-tooltip-section",f.innerHTML='<span class="hs-ui-item-tooltip-label">Requirements:</span>',a._equippableRequirements.forEach(d=>{let A=document.createElement("div");A.className="hs-ui-item-tooltip-requirement",A.textContent=`\u2022 Level ${d._amount} ${ze(d._skill)}`,f.appendChild(A)}),this.element.appendChild(f)}if(s.showEffects&&a._equippableEffects&&a._equippableEffects.length>0){let f=document.createElement("div");f.className="hs-ui-item-tooltip-section",f.innerHTML='<span class="hs-ui-item-tooltip-label">Equipment Effects:</span>',a._equippableEffects.forEach(d=>{let A=document.createElement("div");A.className="hs-ui-item-tooltip-effect";let x=d._amount>0?"+":"";A.textContent=`\u2022 ${x}${d._amount} ${ze(d._skill)}`,f.appendChild(A)}),this.element.appendChild(f)}if(s.showEdibleEffects&&a._edibleEffects&&a._edibleEffects.length>0){let f=document.createElement("div");f.className="hs-ui-item-tooltip-section",f.innerHTML='<span class="hs-ui-item-tooltip-label">Edible Effects:</span>',a._edibleEffects.forEach(d=>{let A=document.createElement("div");A.className="hs-ui-item-tooltip-effect";let x=d._amount>0?"+":"",F=d._amount;typeof d._amount=="number"&&!Number.isInteger(d._amount)&&(F=`${x}${Math.round(d._amount*100)}%`,x=""),A.textContent=`\u2022 ${x}${F} ${ze(d._skill)}`,f.appendChild(A)}),this.element.appendChild(f)}if(s.showWeaponSpeed&&a._weaponSpeed&&a._weaponSpeed>0){let f=document.createElement("div");f.className="hs-ui-item-tooltip-section",f.innerHTML=`<span class="hs-ui-item-tooltip-label">Attack Speed:</span> <span class="hs-ui-item-tooltip-value">${a._weaponSpeed}</span>`,this.element.appendChild(f)}if(s.showEquipmentType&&a._equipmentType!==null&&a._equipmentType!==void 0){let f=document.createElement("div");f.className="hs-ui-item-tooltip-section",f.innerHTML=`<span class="hs-ui-item-tooltip-label">Type:</span> <span class="hs-ui-item-tooltip-value">${hi(a._equipmentType)}</span>`,this.element.appendChild(f)}if(s.showExpFromObtaining&&a._expFromObtaining&&a._expFromObtaining._skill!==void 0&&a._expFromObtaining._amount>0){let f=document.createElement("div");f.className="hs-ui-item-tooltip-section",f.innerHTML='<span class="hs-ui-item-tooltip-label">Experience Gained:</span>';let d=document.createElement("div");d.className="hs-ui-item-tooltip-effect",d.textContent=`\u2022 ${a._expFromObtaining._amount} ${ze(a._expFromObtaining._skill)} XP`,f.appendChild(d),this.element.appendChild(f)}if(s.showRecipe&&a._recipe&&a._recipe._ingredients&&a._recipe._ingredients.length>0){let f=document.createElement("div");f.className="hs-ui-item-tooltip-section",f.innerHTML='<span class="hs-ui-item-tooltip-label">Recipe:</span>',a._recipe._ingredients.forEach(d=>{let A=document.createElement("div");A.className="hs-ui-item-tooltip-effect";try{let x=document.highlite.gameHooks.ItemDefMap.ItemDefMap.get(d._itemId),F=x?._nameCapitalized||x?._name||`Item ${d._itemId}`;A.textContent=`\u2022 ${d._amount}x ${F}`}catch{A.textContent=`\u2022 ${d._amount}x Item ${d._itemId}`}f.appendChild(A)}),this.element.appendChild(f)}if(s.showTags){let f=document.createElement("div");if(f.className="hs-ui-item-tooltip-tags",a._isMembers){let d=document.createElement("span");d.className="hs-ui-item-tooltip-tag members",d.textContent="Members",f.appendChild(d)}if(a._isStackable){let d=document.createElement("span");d.className="hs-ui-item-tooltip-tag stackable",d.textContent="Stackable",f.appendChild(d)}if(a._isTradeable){let d=document.createElement("span");d.className="hs-ui-item-tooltip-tag tradeable",d.textContent="Tradeable",f.appendChild(d)}if(a._canIOU){let d=document.createElement("span");d.className="hs-ui-item-tooltip-tag iou",d.textContent="IOU",f.appendChild(d)}if(a._metalType!==null&&a._metalType!==void 0){let A=["Bronze","Iron","Steel","Silver","Palladium","Gold","Coronium","Celadium"][a._metalType]||`Metal ${a._metalType}`,x=document.createElement("span");x.className="hs-ui-item-tooltip-tag",x.textContent=A,f.appendChild(x)}f.children.length>0&&this.element.appendChild(f)}if(s.showEdibleResult&&a._edibleResult){let f=document.createElement("div");f.className="hs-ui-item-tooltip-section",f.innerHTML='<span class="hs-ui-item-tooltip-label">After Eating:</span>';let d=document.createElement("div");d.className="hs-ui-item-tooltip-effect";try{let A=document.highlite.gameHooks.ItemDefMap.ItemDefMap.get(a._edibleResult._itemId),x=A?._nameCapitalized||A?._name||`Item ${a._edibleResult._itemId}`;d.textContent=`\u2022 ${a._edibleResult._amount}x ${x}`}catch{d.textContent=`\u2022 ${a._edibleResult._amount}x Item ${a._edibleResult._itemId}`}f.appendChild(d),this.element.appendChild(f)}this.element.style.display="block";let u=this.element.getBoundingClientRect(),h=window.innerWidth,p=window.innerHeight,v=10,k=i+v,E=n-u.height-v;return k+u.width>h&&(k=i-u.width-v),E<0&&(E=n+v),E+u.height>p&&(E=p-u.height-v),this.element.style.left=k+"px",this.element.style.top=E+"px",{hide:c(()=>{this.hide()},"hide")}}hide(){this.element.style.display="none",this.currentItemId=null}getCurrentItemId(){return this.currentItemId}isAttached(){return this.element.parentElement!==null}reattach(t){this.isAttached()||t.appendChild(this.element)}};var pi=(n=>(n[n.ClientRelative=0]="ClientRelative",n[n.ClientInternal=1]="ClientInternal",n[n.ClientOverlay=2]="ClientOverlay",n))(pi||{}),Pe=class e{static{c(this,"UIManager")}static instance;itemTooltip=null;constructor(){if(e.instance)return e.instance;if(document.highlite.managers.UIManager)return e.instance=document.highlite.managers.UIManager,document.highlite.managers.UIManager;e.instance=this,document.highlite.managers.UIManager=this}preventDefault(t){t.preventDefault(),t.stopPropagation()}bindOnClickBlockHsMask(t,i){t.addEventListener("click",n=>{i(n),this.preventDefault(n)}),t.addEventListener("pointerdown",this.preventDefault),t.addEventListener("pointerup",this.preventDefault)}createElement(t){let i=document.createElement("div");switch(i.classList.add("highlite-ui"),t){case 0:i.classList.add("highlite-ui-client-relative"),i.addEventListener("keydown",n=>{n.stopPropagation()}),i.addEventListener("keyup",n=>{n.stopPropagation()}),i.addEventListener("keyup",n=>{n.stopPropagation()}),i.addEventListener("keypress",n=>{n.stopPropagation()}),document.getElementById("main")?.appendChild(i);break;case 1:if(i.classList.add("highlite-ui-client-internal"),document.getElementById("hs-screen-mask"))document.getElementById("hs-screen-mask")?.appendChild(i);else throw new Error("Highlite UI Manager: #hs-screen-mask not found");break;case 2:i.classList.add("highlite-ui-client-overlay"),document.body?.appendChild(i);break}return i}ensureItemTooltip(){if(this.itemTooltip&&this.itemTooltip.isAttached())return;let i=document.getElementById("hs-screen-mask")||document.body;this.itemTooltip=new rt(i)}drawItemTooltip(t,i,n,s=Pt){return this.ensureItemTooltip(),this.itemTooltip?this.itemTooltip.show(t,i,n,s):{hide:c(()=>{},"hide")}}hideItemTooltip(){this.itemTooltip&&this.itemTooltip.hide()}getCurrentItemTooltipId(){return this.itemTooltip?.getCurrentItemId()||null}};var Ae=class e{static{c(this,"PanelManager")}static instance;uiManager;highliteBar=null;highliteBarSelectedContent=null;currentMenuItem=null;barIcons={};barContentPages={};constructor(){if(e.instance)return e.instance;if(document.highlite.managers.PanelManager)return e.instance=document.highlite.managers.PanelManager,document.highlite.managers.PanelManager;e.instance=this,this.uiManager=new Pe,document.highlite.managers.PanelManager=this,this.setup()}setup(){this.highliteBarSelectedContent=this.uiManager.createElement(0),this.highliteBar=this.uiManager.createElement(0),this.highliteBar.classList.add("highlite_bar"),this.highliteBarSelectedContent.classList.add("highlite_bar_selected_content");let t=document.createElement("div");t.classList.add("content_title");let i=document.createElement("span");i.id="selectedContentTitle",t.appendChild(i),this.highliteBarSelectedContent.appendChild(t);let n=document.createElement("div");n.id="selectedContentDiv",n.classList.add("content"),this.highliteBarSelectedContent.appendChild(n)}requestMenuItem(t,i){if(this.barContentPages[t])throw new Error(`[Highlite] Bar Icon ${t} already exists`);let n=document.createElement("div");n.classList.add("highlite_bar_item"),n.innerHTML=t,n.onclick=()=>{if(this.currentMenuItem===t){this.highliteBarSelectedContent?.classList.remove("activated"),this.currentMenuItem=null,window.dispatchEvent(new Event("resize"));return}this.currentMenuItem=t,this.highliteBarSelectedContent?.classList.add("activated"),window.dispatchEvent(new Event("resize"));let a=this.highliteBarSelectedContent?.querySelector("#selectedContentTitle");a&&(a.innerHTML=i);let r=this.highliteBarSelectedContent?.querySelector("#selectedContentDiv");if(r){r.innerHTML="";let l=this.barContentPages[t];l&&r.appendChild(l)}},this.highliteBar?.appendChild(n);let s=document.createElement("div");return s.style.position="absolute",s.style.top="0",s.style.left="0",s.style.overflowX="hidden",s.style.overflowY="scroll",s.style.height="100%",this.barContentPages[t]=s,this.barIcons[t]=n,[this.barIcons[t],this.barContentPages[t]]}removeMenuItem(t){if(!this.barIcons[t]||!this.barContentPages[t])throw new Error(`[Highlite] Bar Icon ${t} does not exist`);this.highliteBar?.removeChild(this.barIcons[t]),delete this.barIcons[t];let i=this.barContentPages[t];i&&i.parentNode&&i.parentNode.removeChild(i),delete this.barContentPages[t]}forceClose(){this.highliteBarSelectedContent&&this.highliteBarSelectedContent.classList.remove("activated"),this.currentMenuItem=null,window.dispatchEvent(new Event("resize"))}};var Lt=c((e,t)=>t.some(i=>e instanceof i),"instanceOfAny"),fi,di;function Sn(){return fi||(fi=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])}c(Sn,"getIdbProxyableTypes");function wn(){return di||(di=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])}c(wn,"getCursorAdvanceMethods");var Nt=new WeakMap,At=new WeakMap,ot=new WeakMap;function kn(e){let t=new Promise((i,n)=>{let s=c(()=>{e.removeEventListener("success",a),e.removeEventListener("error",r)},"unlisten"),a=c(()=>{i(we(e.result)),s()},"success"),r=c(()=>{n(e.error),s()},"error");e.addEventListener("success",a),e.addEventListener("error",r)});return ot.set(t,e),t}c(kn,"promisifyRequest");function Cn(e){if(Nt.has(e))return;let t=new Promise((i,n)=>{let s=c(()=>{e.removeEventListener("complete",a),e.removeEventListener("error",r),e.removeEventListener("abort",r)},"unlisten"),a=c(()=>{i(),s()},"complete"),r=c(()=>{n(e.error||new DOMException("AbortError","AbortError")),s()},"error");e.addEventListener("complete",a),e.addEventListener("error",r),e.addEventListener("abort",r)});Nt.set(e,t)}c(Cn,"cacheDonePromiseForTransaction");var Dt={get(e,t,i){if(e instanceof IDBTransaction){if(t==="done")return Nt.get(e);if(t==="store")return i.objectStoreNames[1]?void 0:i.objectStore(i.objectStoreNames[0])}return we(e[t])},set(e,t,i){return e[t]=i,!0},has(e,t){return e instanceof IDBTransaction&&(t==="done"||t==="store")?!0:t in e}};function xi(e){Dt=e(Dt)}c(xi,"replaceTraps");function En(e){return wn().includes(e)?function(...t){return e.apply(Tt(this),t),we(this.request)}:function(...t){return we(e.apply(Tt(this),t))}}c(En,"wrapFunction");function In(e){return typeof e=="function"?En(e):(e instanceof IDBTransaction&&Cn(e),Lt(e,Sn())?new Proxy(e,Dt):e)}c(In,"transformCachableValue");function we(e){if(e instanceof IDBRequest)return kn(e);if(At.has(e))return At.get(e);let t=In(e);return t!==e&&(At.set(e,t),ot.set(t,e)),t}c(we,"wrap");var Tt=c(e=>ot.get(e),"unwrap");function bi(e,t,{blocked:i,upgrade:n,blocking:s,terminated:a}={}){let r=indexedDB.open(e,t),l=we(r);return n&&r.addEventListener("upgradeneeded",u=>{n(we(r.result),u.oldVersion,u.newVersion,we(r.transaction),u)}),i&&r.addEventListener("blocked",u=>i(u.oldVersion,u.newVersion,u)),l.then(u=>{a&&u.addEventListener("close",()=>a()),s&&u.addEventListener("versionchange",h=>s(h.oldVersion,h.newVersion,h))}).catch(()=>{}),l}c(bi,"openDB");var _n=["get","getKey","getAll","getAllKeys","count"],Pn=["put","add","delete","clear"],Mt=new Map;function mi(e,t){if(!(e instanceof IDBDatabase&&!(t in e)&&typeof t=="string"))return;if(Mt.get(t))return Mt.get(t);let i=t.replace(/FromIndex$/,""),n=t!==i,s=Pn.includes(i);if(!(i in(n?IDBIndex:IDBObjectStore).prototype)||!(s||_n.includes(i)))return;let a=c(async function(r,...l){let u=this.transaction(r,s?"readwrite":"readonly"),h=u.store;return n&&(h=h.index(l.shift())),(await Promise.all([h[i](...l),s&&u.done]))[0]},"method");return Mt.set(t,a),a}c(mi,"getMethod");xi(e=>({...e,get:c((t,i,n)=>mi(t,i)||e.get(t,i,n),"get"),has:c((t,i)=>!!mi(t,i)||e.has(t,i),"has")}));var An=["continue","continuePrimaryKey","advance"],gi={},Bt=new WeakMap,vi=new WeakMap,Mn={get(e,t){if(!An.includes(t))return e[t];let i=gi[t];return i||(i=gi[t]=function(...n){Bt.set(this,vi.get(this)[t](...n))}),i}};async function*Ln(...e){let t=this;if(t instanceof IDBCursor||(t=await t.openCursor(...e)),!t)return;t=t;let i=new Proxy(t,Mn);for(vi.set(i,t),ot.set(i,Tt(t));t;)yield i,t=await(Bt.get(i)||t.continue()),Bt.delete(i)}c(Ln,"iterate");function yi(e,t){return t===Symbol.asyncIterator&&Lt(e,[IDBIndex,IDBObjectStore,IDBCursor])||t==="iterate"&&Lt(e,[IDBIndex,IDBObjectStore])}c(yi,"isIteratorProp");xi(e=>({...e,get(t,i,n){return yi(t,i)?Ln:e.get(t,i,n)},has(t,i){return yi(t,i)||e.has(t,i)}}));var me=class e{static{c(this,"DatabaseManager")}static instance;database;constructor(){if(e.instance)return e.instance;if(document.highlite.managers.DatabaseManager)return e.instance=document.highlite.managers.DatabaseManager,document.highlite.managers.DatabaseManager;e.instance=this,document.highlite.managers.DatabaseManager=this}async initDB(){this.database=await bi("HighliteDatabase",4,{upgrade(t,i){t.objectStoreNames.contains("settings")||t.createObjectStore("settings"),i<2&&!t.objectStoreNames.contains("drop_logs")&&t.createObjectStore("drop_logs"),i<3&&(t.createObjectStore("data"),t.objectStoreNames.contains("settings")&&(t.deleteObjectStore("settings"),t.createObjectStore("settings"))),i<4&&t.createObjectStore("plugins")}})}};var Rt=(p=>(p[p.checkbox=0]="checkbox",p[p.range=1]="range",p[p.color=2]="color",p[p.text=3]="text",p[p.button=4]="button",p[p.combobox=5]="combobox",p[p.textarea=6]="textarea",p[p.alert=7]="alert",p[p.warning=8]="warning",p[p.info=9]="info",p))(Rt||{});var Me=class e{static{c(this,"SettingsManager")}static instance;panelManager;database;pluginList;username;databaseSettings;pluginSettings;isInitialized=!1;panelContainer=null;currentView=null;mainSettingsView=null;pluginSettingsView=null;constructor(){if(e.instance)return e.instance;if(document.highlite.managers.SettingsManager)return e.instance=document.highlite.managers.SettingsManager,document.highlite.managers.SettingsManager;e.instance=this,document.highlite.managers.SettingsManager=this}async init(){return this.database=document.highlite.managers.DatabaseManager.database,this.pluginList=document.highlite.managers.PluginManager.plugins,this.pluginList=this.pluginList.map(t=>t.instance).filter(t=>t!==void 0),this.panelManager=document.highlite.managers.PanelManager,this.username=document.highlite.gameHooks.EntityManager.Instance._mainPlayer._nameLowerCase,this.createMenu(),this.isInitialized=!0,Promise.resolve()}async deinit(){this.panelManager.removeMenuItem("\u{1F6E0}\uFE0F"),this.panelContainer&&(this.panelContainer.remove(),this.panelContainer=null),this.currentView&&(this.currentView.remove(),this.currentView=null),this.mainSettingsView&&(this.mainSettingsView.remove(),this.mainSettingsView=null),this.pluginSettingsView&&(this.pluginSettingsView.remove(),this.pluginSettingsView=null),this.pluginSettings={},this.isInitialized=!1}async refresh(){this.isInitialized&&(await this.deinit(),await this.init(),await this.registerPlugins())}makeSettingsReactive(t){for(let i in t.settings){if(i==="enable")continue;let n=t.settings[i];t.settings[i]=new Proxy(n,{set:c((s,a,r)=>{let l=s[a];return s[a]=r,a==="hidden"&&l!==r&&setTimeout(()=>{this.refreshPluginSettingsVisibility(t)},0),a==="disabled"&&l!==r&&setTimeout(()=>{this.refreshPluginSettingsDisabled(t)},0),a==="value"&&l!==r&&setTimeout(()=>{this.storePluginSettings(this.username,t)},0),!0},"set")})}}async registerPlugins(){if(this.databaseSettings=await this.database.get("settings",this.username),this.databaseSettings)for(let t in this.databaseSettings){let i=this.databaseSettings[t];for(let n in i)if(i[n]!==void 0){let s=this.pluginList.find(a=>a.pluginName===t);s&&s.settings[n]&&(s.settings[n].value=i[n],s.settings[n].onLoaded&&s.settings[n].onLoaded.call(s))}}for(let t of this.pluginList)await this.storePluginSettings(this.username,t),this.makeSettingsReactive(t),this.createPluginSettings(t);return Promise.resolve()}async storePluginSettings(t,i){let n=i.settings,s=i.pluginName,a={};a[s]={};for(let r in n){let l=n[r];a[s][r]=l.value}this.databaseSettings||(this.databaseSettings={}),this.databaseSettings[s]=a[s],await this.database.put("settings",this.databaseSettings,t)}createMenu(){this.panelContainer=this.panelManager.requestMenuItem("\u{1F6E0}\uFE0F","Settings")[1],this.panelContainer.style.display="flex",this.panelContainer.style.width="100%",this.panelContainer.style.background="var(--theme-background)",this.mainSettingsView=document.createElement("div"),this.mainSettingsView.id="highlite-settings-content-row-holder",this.mainSettingsView.style.overflowY="auto",this.mainSettingsView.style.overflowX="hidden",this.mainSettingsView.style.display="flex",this.mainSettingsView.style.flexDirection="column",this.mainSettingsView.style.padding="8px",this.mainSettingsView.style.gap="2px";let t=document.createElement("div");t.style.display="flex",t.style.flexDirection="column",t.style.gap="8px",t.style.marginBottom="8px",t.style.flexShrink="0";let i=document.createElement("input");i.type="text",i.placeholder="Search plugins...",i.style.padding="10px 12px",i.style.borderRadius="8px",i.style.border="1px solid var(--theme-border)",i.style.background="var(--theme-background-mute)",i.style.color="var(--theme-text-primary)",i.style.fontSize="14px",i.style.fontFamily="Inter, -apple-system, BlinkMacSystemFont, sans-serif",i.style.outline="none",i.style.transition="all 0.2s ease",i.style.boxShadow="0 2px 4px rgba(0, 0, 0, 0.3)",i.style.setProperty("::placeholder","var(--theme-text-muted)"),i.addEventListener("focus",n=>{n.preventDefault(),n.stopPropagation(),i.style.border="1px solid var(--theme-accent)",i.style.boxShadow="0 0 0 2px var(--theme-accent-transparent-20)"}),i.addEventListener("blur",()=>{i.style.border="1px solid var(--theme-border)",i.style.boxShadow="0 2px 4px rgba(0, 0, 0, 0.3)"}),i.addEventListener("input",n=>{let s=n.target.value.toLowerCase();this.filterPlugins(s)}),t.appendChild(i),this.mainSettingsView.appendChild(t),this.currentView=this.mainSettingsView,this.panelContainer.appendChild(this.currentView)}getAdvancedSettings(t){let i=document.createElement("div");i.style.minHeight="24px",i.style.display="flex",i.style.alignItems="left",i.style.flexDirection="row",i.style.gap="4px";let n=document.createElement("span");n.innerText="\u{1F4F1}",n.title="Export Settings To Clipboard",n.style.color="var(--theme-text-muted)",n.style.fontSize="16px",n.style.marginRight="8px",n.style.padding="8px",n.style.fontFamily="Inter, -apple-system, BlinkMacSystemFont, sans-serif",n.style.textAlign="left",n.style.cursor="pointer",n.style.borderRadius="4px",n.style.transition="all 0.2s ease",n.addEventListener("mouseenter",()=>{n.style.color="var(--theme-text-primary)",n.style.background="var(--theme-border-light)",n.style.transform="scale(1.1)"}),n.addEventListener("mouseleave",()=>{n.style.color="var(--theme-text-muted)",n.style.background="transparent",n.style.transform="scale(1)"}),n.addEventListener("click",async()=>{let u={"text/plain":JSON.stringify({pluginName:t.pluginName,pluginSettings:t.settings})},h=new ClipboardItem(u);await navigator.clipboard.write([h])}),Object.keys(t.settings).length===1&&(n.style.display="none"),i.appendChild(n);let s=document.createElement("span");s.innerText="\u{1F4F2}",s.title="Import Settings From Clipboard",s.style.color="var(--theme-text-muted)",s.style.fontSize="16px",s.style.marginRight="8px",s.style.padding="8px",s.style.fontFamily="Inter, -apple-system, BlinkMacSystemFont, sans-serif",s.style.textAlign="left",s.style.cursor="pointer",s.style.borderRadius="4px",s.style.transition="all 0.2s ease",s.addEventListener("mouseenter",()=>{s.style.color="var(--theme-text-primary)",s.style.background="var(--theme-border-light)",s.style.transform="scale(1.1)"}),s.addEventListener("mouseleave",()=>{s.style.color="var(--theme-text-muted)",s.style.background="transparent",s.style.transform="scale(1)"}),s.addEventListener("click",async()=>{await navigator.clipboard.readText().then(l=>{let u=JSON.parse(l);if(u.pluginName!==t.pluginName)throw new Error("Mismatched plugin name");if(!u.pluginSettings)throw new Error("No settings found");Object.entries(u.pluginSettings).forEach(h=>{let p=h[0],v=h[1];t.settings[p].value=v.value})}).catch(l=>{console.error("Attempted to import settings with invalid JSON",l)}),await this.storePluginSettings(this.username,t),this.refreshPluginSettingsVisibility(t),this.refreshPluginSettingsDisabled(t)}),Object.keys(t.settings).length===1&&(s.style.display="none"),i.appendChild(s);let a=document.createElement("span");a.innerText="\u{1F4E4}",a.title="Export Data To Clipboard",a.style.color="var(--theme-text-muted)",a.style.fontSize="16px",a.style.marginRight="8px",a.style.padding="8px",a.style.fontFamily="Inter, -apple-system, BlinkMacSystemFont, sans-serif",a.style.textAlign="left",a.style.cursor="pointer",a.style.borderRadius="4px",a.style.transition="all 0.2s ease",a.addEventListener("mouseenter",()=>{a.style.color="var(--theme-text-primary)",a.style.background="var(--theme-border-light)",a.style.transform="scale(1.1)"}),a.addEventListener("mouseleave",()=>{a.style.color="var(--theme-text-muted)",a.style.background="transparent",a.style.transform="scale(1)"}),a.addEventListener("click",async()=>{let u={"text/plain":JSON.stringify({pluginName:t.pluginName,pluginData:t.data})},h=new ClipboardItem(u);await navigator.clipboard.write([h])}),Object.keys(t.data).length===1&&(a.style.display="none"),i.appendChild(a);let r=document.createElement("span");return r.innerText="\u{1F4E5}",r.title="Import Data From Clipboard",r.style.color="var(--theme-text-muted)",r.style.fontSize="16px",r.style.marginRight="8px",r.style.padding="8px",r.style.fontFamily="Inter, -apple-system, BlinkMacSystemFont, sans-serif",r.style.textAlign="left",r.style.cursor="pointer",r.style.borderRadius="4px",r.style.transition="all 0.2s ease",r.addEventListener("mouseenter",()=>{r.style.color="var(--theme-text-primary)",r.style.background="var(--theme-border-light)",r.style.transform="scale(1.1)"}),r.addEventListener("mouseleave",()=>{r.style.color="var(--theme-text-muted)",r.style.background="transparent",r.style.transform="scale(1)"}),r.addEventListener("click",async()=>{await navigator.clipboard.readText().then(async l=>{let u=JSON.parse(l);if(u.pluginName!==t.pluginName)throw new Error("Mismatched plugin name");if(!u.pluginData)throw new Error("No data found");var h=t.settings.enable.value;if(h){t.settings.enable.value=!1;try{t.settings.enable.callback.call(t)}catch(p){console.error(`Error calling enable callback for plugin ${t.pluginName}:`,p),console.error("Continuing without calling the callback.")}await this.storePluginSettings(this.username,t)}if(Object.entries(t.data).forEach(([p,v])=>{delete t.data[p]}),Object.entries(u.pluginData).forEach(([p,v])=>{t.data[p]=v}),h){t.settings.enable.value=!0;try{t.settings.enable.callback.call(t)}catch(p){console.error(`Error calling enable callback for plugin ${t.pluginName}:`,p),console.error("Continuing without calling the callback.")}await this.storePluginSettings(this.username,t)}}).catch(l=>{console.error("Attempted to import data with invalid JSON",l)})}),i.appendChild(r),i}createPluginSettings(t){let i=document.createElement("div");i.id=`highlite-settings-content-row-${t.pluginName}`,i.style.minHeight="48px",i.style.display="flex",i.style.alignItems="center",i.style.background="var(--theme-background-mute)",i.style.borderRadius="8px",i.style.border="1px solid var(--theme-border)",i.style.margin="2px 0",i.style.transition="all 0.2s ease",i.style.boxShadow="0 2px 4px rgba(0, 0, 0, 0.3)",i.addEventListener("mouseenter",()=>{i.style.background="var(--theme-background-light)",i.style.border="1px solid var(--theme-divider)",i.style.boxShadow="0 4px 8px rgba(0, 0, 0, 0.4)"}),i.addEventListener("mouseleave",()=>{i.style.background="var(--theme-background-mute)",i.style.border="1px solid var(--theme-border)",i.style.boxShadow="0 2px 4px rgba(0, 0, 0, 0.3)"});let n=document.createElement("div");n.style.display="flex",n.style.flexDirection="column",n.style.flex="1",n.style.minWidth="0",n.style.padding="12px 16px";let s=document.createElement("span");s.innerText=t.pluginName,s.style.color="var(--theme-text-primary)",s.style.fontSize="14px",s.style.margin="0px",s.style.padding="0px",s.style.fontFamily="Inter, -apple-system, BlinkMacSystemFont, sans-serif",s.style.fontWeight="500",s.style.textAlign="left",s.style.letterSpacing="0.025em",s.style.whiteSpace="nowrap",s.style.overflow="hidden",s.style.textOverflow="ellipsis",s.title=t.pluginName;let a=document.createElement("span");a.innerText=`by ${t.author}`,a.style.color="var(--theme-text-muted)",a.style.fontSize="12px",a.style.margin="0px",a.style.padding="0px",a.style.fontFamily="Inter, -apple-system, BlinkMacSystemFont, sans-serif",a.style.fontWeight="400",a.style.textAlign="left",a.style.letterSpacing="0.025em",a.style.whiteSpace="nowrap",a.style.overflow="hidden",a.style.textOverflow="ellipsis",a.title=`by ${t.author}`,n.appendChild(s),n.appendChild(a);let r=document.createElement("input");r.type="checkbox",r.checked=t.settings.enable.value,r.style.width="18px",r.style.height="18px",r.style.marginRight="12px",r.style.cursor="pointer",r.style.accentColor="var(--theme-accent)",r.addEventListener("change",async()=>{t.settings.enable.value=r.checked;try{t.settings.enable.callback.call(t)}catch(u){console.error(`Error calling enable callback for plugin ${t.pluginName}:`,u),console.error("Continuing without calling the callback.")}await this.storePluginSettings(this.username,t)});let l=document.createElement("span");l.innerText="\u2699\uFE0F",l.style.color="var(--theme-text-muted)",l.style.fontSize="18px",l.style.marginRight="8px",l.style.padding="8px",l.style.fontFamily="Inter, -apple-system, BlinkMacSystemFont, sans-serif",l.style.textAlign="right",l.style.cursor="pointer",l.style.borderRadius="4px",l.style.transition="all 0.2s ease",l.addEventListener("mouseenter",()=>{l.style.color="var(--theme-text-primary)",l.style.background="var(--theme-border-light)",l.style.transform="scale(1.1)"}),l.addEventListener("mouseleave",()=>{l.style.color="var(--theme-text-muted)",l.style.background="transparent",l.style.transform="scale(1)"}),l.addEventListener("click",()=>{this.openPluginSettings(t)}),Object.keys(t.settings).length===1&&(l.style.display="none"),i.appendChild(n),i.appendChild(l),i.appendChild(r),this.mainSettingsView.appendChild(i)}openPluginSettings(t){this.currentView&&this.panelContainer?.removeChild(this.currentView),this.pluginSettingsView=document.createElement("div"),this.pluginSettingsView.id="highlite-settings-content-row-holder",this.pluginSettingsView.style.overflowY="auto",this.pluginSettingsView.style.overflowX="hidden",this.pluginSettingsView.style.display="flex",this.pluginSettingsView.style.flexDirection="column",this.pluginSettingsView.style.padding="8px",this.pluginSettingsView.style.gap="8px",this.pluginSettingsView.style.background="var(--theme-background)";let i=document.createElement("div");i.id="highlite-settings-title-row",i.style.minHeight="60px",i.style.display="flex",i.style.alignItems="center",i.style.justifyContent="center",i.style.flexDirection="column",i.style.background="var(--theme-background-mute)",i.style.borderRadius="8px",i.style.border="1px solid var(--theme-border)",i.style.boxShadow="0 2px 4px rgba(0, 0, 0, 0.3)",i.style.marginBottom="8px",i.style.padding="16px";let n=document.createElement("h1");n.innerText=`${t.pluginName} Settings`,n.style.color="var(--theme-text-primary)",n.style.fontSize="22px",n.style.margin="0px",n.style.padding="0px",n.style.fontFamily="Inter, -apple-system, BlinkMacSystemFont, sans-serif",n.style.fontWeight="600",n.style.textAlign="center",n.style.width="100%",n.style.letterSpacing="0.025em";let s=document.createElement("span");s.innerText=`by ${t.author}`,s.style.color="var(--theme-text-muted)",s.style.fontSize="14px",s.style.margin="4px 0 0 0",s.style.padding="0px",s.style.fontFamily="Inter, -apple-system, BlinkMacSystemFont, sans-serif",s.style.fontWeight="400",s.style.textAlign="center",s.style.width="100%",s.style.letterSpacing="0.025em",i.appendChild(n),i.appendChild(s),this.pluginSettingsView.appendChild(i);let a=document.createElement("div");a.id="highlite-settings-title-row",a.style.minHeight="60px",a.style.display="flex",a.style.alignItems="center",a.style.justifyContent="center",a.style.flexDirection="column",a.style.background="var(--theme-background-mute)",a.style.borderRadius="8px",a.style.border="1px solid var(--theme-border)",a.style.boxShadow="0 2px 4px rgba(0, 0, 0, 0.3)",a.style.marginBottom="8px",a.style.padding="16px";let r=document.createElement("span");r.innerText="Transfer Plugin Data",r.style.color="var(--theme-text-primary)",r.style.fontSize="16px",r.style.paddingBottom="8px",r.style.fontFamily="Inter, -apple-system, BlinkMacSystemFont, sans-serif",r.style.fontWeight="500",r.style.textAlign="left",r.style.letterSpacing="0.025em",r.style.whiteSpace="nowrap",r.title="\u26A0\uFE0F Only import data and settings from trusted sources.",a.appendChild(r),a.appendChild(this.getAdvancedSettings(t)),this.pluginSettingsView.appendChild(a);let l=document.createElement("div");l.id="highlite-settings-back-button",l.style.width="100%",l.style.minHeight="36px",l.style.display="flex",l.style.alignItems="center",l.style.justifyContent="center",l.style.cursor="pointer",l.style.background="var(--theme-accent)",l.style.borderRadius="6px",l.style.border="1px solid var(--theme-accent-dark)",l.style.color="var(--theme-text-dark)",l.style.fontSize="14px",l.style.fontFamily="Inter, -apple-system, BlinkMacSystemFont, sans-serif",l.style.fontWeight="500",l.style.textAlign="center",l.style.transition="all 0.2s ease",l.style.boxShadow="0 2px 4px var(--theme-accent-transparent-30)",l.style.letterSpacing="0.025em",l.innerText="\u2190 Back",l.addEventListener("mouseenter",()=>{l.style.background="var(--theme-accent-light)",l.style.boxShadow="0 4px 8px var(--theme-accent-transparent-40)",l.style.transform="translateY(-1px)"}),l.addEventListener("mouseleave",()=>{l.style.background="var(--theme-accent)",l.style.boxShadow="0 2px 4px var(--theme-accent-transparent-30)",l.style.transform="translateY(0)"}),l.addEventListener("click",()=>{this.panelContainer?.removeChild(this.currentView),this.currentView=this.mainSettingsView,this.panelContainer?.appendChild(this.currentView)}),this.pluginSettingsView.appendChild(l);for(let u in t.settings){if(u==="enable")continue;let h=t.settings[u],p=document.createElement("div");p.id=`highlite-settings-content-row-${u}`,p.style.display="flex",p.style.flexDirection="column",p.style.justifyContent="center",p.style.padding="16px",p.style.alignItems="stretch",p.style.background="var(--theme-background-mute)",p.style.borderRadius="8px",p.style.border="1px solid var(--theme-border)",p.style.boxShadow="0 2px 4px rgba(0, 0, 0, 0.3)",p.style.transition="all 0.2s ease",h.hidden?(p.style.display="none",p.style.opacity="0",p.style.transform="translateY(-10px)"):(p.style.opacity="1",p.style.transform="translateY(0)"),p.addEventListener("mouseenter",()=>{p.style.background="var(--theme-background-light)",p.style.border="1px solid var(--theme-divider)",p.style.boxShadow="0 4px 8px rgba(0, 0, 0, 0.4)"}),p.addEventListener("mouseleave",()=>{p.style.background="var(--theme-background-mute)",p.style.border="1px solid var(--theme-border)",p.style.boxShadow="0 2px 4px rgba(0, 0, 0, 0.3)"});let v=u.replace(/([A-Z])/g," $1"),k=h.text?h.text:v.charAt(0).toUpperCase()+v.slice(1);switch(h?.type){case 0:let E=document.createElement("div");E.style.display="flex",E.style.alignItems="center",E.style.gap="12px",E.style.minWidth="0";let f=document.createElement("input");f.type="checkbox",f.checked=h.value,f.style.width="20px",f.style.height="20px",f.style.cursor="pointer",f.style.accentColor="var(--theme-accent)",f.addEventListener("change",async()=>{let L=f.checked;if(h.validation&&!h.validation(L)){f.checked=h.value,f.style.accentColor="#ff4444";return}h.value=L;try{h.callback.call(t)}catch(ee){console.error(`Error calling callback for setting ${u} in plugin ${t.pluginName}:`,ee),console.error("Continuing without calling the callback.")}await this.storePluginSettings(this.username,t),this.refreshPluginSettingsVisibility(t),this.refreshPluginSettingsDisabled(t),f.style.accentColor="var(--theme-accent)"});let d=document.createElement("label");d.innerText=k,d.style.color="var(--theme-text-primary)",d.style.fontSize="16px",d.style.margin="0px",d.style.fontFamily="Inter, -apple-system, BlinkMacSystemFont, sans-serif",d.style.fontWeight="500",d.style.cursor="pointer",d.style.letterSpacing="0.025em",d.style.flex="1",d.style.minWidth="0",d.style.whiteSpace="nowrap",d.style.overflow="hidden",d.style.textOverflow="ellipsis",d.addEventListener("click",()=>{f.click()}),E.appendChild(d),E.appendChild(f),p.appendChild(E);break;case 1:let A=document.createElement("div");A.style.display="flex",A.style.flexDirection="column",A.style.gap="8px";let x=document.createElement("input");x.type="num