auto-champion-select 1.8.4 → 1.8.6

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.
Files changed (2) hide show
  1. package/dist/index.js +39 -17
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,29 +1,44 @@
1
- (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode('.dropdown-champions-default{position:inherit;inline-size:100%}.dropdown-champions-default.dropdown-drop-up::part(ui-dropdown-menu),.dropdown-champions-default.dropdown-drop-up::part(ui-dropdown-content),.dropdown-champions-default.dropdown-drop-up::part(ui-dropdown-options){top:auto;bottom:100%;transform-origin:bottom}.champion-priority-selector{display:grid;gap:0;padding:2px 0 3px}.champion-priority-selector__scroll{position:relative;inline-size:100%;height:58px;border:1px solid rgba(120,90,40,.7);border-top:0;background:rgba(30,35,40,.5);box-sizing:border-box}.champion-priority-selector__track{display:inline-flex;align-items:center;gap:12px;min-width:max-content;min-height:45px;padding:6px 8px 10px;box-sizing:border-box}.champion-priority-selector__empty{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;color:#5f5b4f;font-family:var(--font-body);font-size:11px;line-height:13px;text-align:center;white-space:nowrap;pointer-events:none}.champion-priority-selector__icon{position:relative;flex:0 0 auto;width:34px;height:34px;border:1px solid #c8aa6e;border-radius:50%;background:#1e2328;box-shadow:0 0 0 1px #010a13e6;box-sizing:border-box;cursor:grab;outline:none}.champion-priority-selector__icon:focus{border-color:#f0e6d2}.champion-priority-selector__icon--dragging{cursor:grabbing;filter:brightness(1.15);z-index:1}.champion-priority-selector__icon:before,.champion-priority-selector__remove,.champion-priority-selector__position-badge{display:grid;place-items:center;width:17px;height:17px;padding:0;border-radius:50%;box-sizing:border-box;font-family:var(--font-body);font-size:10px;font-weight:700;line-height:1}.champion-priority-selector__icon:before{content:attr(data-rank);position:absolute;left:-6px;top:-6px;border:1px solid #c8aa6e;background:#010a13;color:#f0e6d2;text-align:center;pointer-events:none}.champion-priority-selector__icon img{display:block;width:100%;height:100%;border-radius:50%;object-fit:cover;pointer-events:none}.champion-priority-selector__remove{position:absolute;right:-6px;bottom:-6px;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid #785a28;background:#1e2328;color:#c8aa6e;cursor:pointer;font-family:var(--font-display);font-size:0;text-align:center}.champion-priority-selector__remove:before{content:attr(data-icon);font-family:var(--font-display);font-size:7px;line-height:1;transform:translate(.4px,-.1px)}.champion-priority-selector__remove:hover{border-color:#c8aa6e;color:#f0e6d2}.champion-priority-selector__position-badge{position:absolute;left:-6px;bottom:-6px;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid #785a28;background:#010a13;color:#c8aa6e;cursor:pointer}.champion-priority-selector__position-badge:hover,.champion-priority-selector__position-badge:focus{border-color:#c8aa6e;color:#f0e6d2;outline:none}.champion-priority-selector__position-badge--empty{background:#1e2328;font-size:0}.champion-priority-selector__position-badge--empty:before{content:"+";font-family:var(--font-body);font-size:12px;line-height:1;transform:translate(.25px,.4px)}.champion-priority-selector__position-badge img{display:block;width:11px;height:11px;object-fit:contain;transform:translate(.1px)}.champion-priority-selector__position-badge:after{content:attr(data-count);position:absolute;right:-5px;top:-5px;display:none;place-items:center;width:11px;min-width:11px;height:11px;border:1px solid #785a28;border-radius:50%;background:#010a13;box-sizing:border-box;color:#f0e6d2;font-family:var(--font-body);font-size:7px;font-weight:700;line-height:1;text-align:center}.champion-priority-selector__position-badge[data-count]:after{display:grid}.champion-priority-selector__position-menu{position:fixed;z-index:10002;display:flex;gap:4px;padding:5px;border:1px solid #785a28;background:#010a13;box-shadow:0 0 0 1px #010a13d9,0 4px 16px #0000008c;box-sizing:border-box}.champion-priority-selector__position-menu[hidden]{display:none}.champion-priority-selector__position-option{display:grid;place-items:center;width:28px;height:28px;padding:0;border:1px solid #463714;background:#1e2328;box-sizing:border-box;cursor:pointer}.champion-priority-selector__position-option:hover,.champion-priority-selector__position-option--selected{border-color:#c8aa6e;background:#0f1b2d}.champion-priority-selector__position-option img{display:block;width:18px;height:18px;pointer-events:none}.auto-select-checkboxes-div{display:flex;border-top:thin solid #1e282d}.auto-select-checkbox{margin:auto}.auto-select-checkbox:last-child{margin-right:17px}.auto-select-champ-select-menu{position:absolute;right:0;bottom:36px;z-index:10000;width:min(340px,calc(100vw - 32px));color:#a09b8c;font-family:var(--font-body);font-size:12px;font-weight:400;line-height:normal;pointer-events:none;text-transform:none}.auto-select-champ-select-menu-button-wrapper{position:relative;display:block;width:38px;height:32px;flex:0 0 38px;box-sizing:border-box}.auto-select-champ-select-menu__header{position:relative;display:block;width:38px;height:32px;border:none;background-image:url(/fe/lol-social/chat_button.png);background-color:transparent;background-position:0 0;background-repeat:no-repeat;background-size:cover;box-shadow:none;cursor:pointer;outline:none;padding:0}.auto-select-champ-select-menu__header:before{content:"";position:absolute;left:50%;top:50%;width:20px;height:20px;background:url(/fe/lol-static-assets/images/nav-icon-collections.svg) center / 20px 20px no-repeat;filter:drop-shadow(0 0 1px #010a13);transform:translate(-50%,-50%)}@keyframes auto-select-champ-select-menu-mark-pulse{0%{filter:brightness(1);box-shadow:#c89b3c 0 0}15%{filter:brightness(1);box-shadow:#c89b3c 0 0}to{filter:brightness(2);box-shadow:#c89b3c 0 0 12px 2px}}.auto-select-champ-select-menu__header:after{content:"";position:absolute;right:5px;top:5px;width:6px;height:6px;border:0;border-radius:50%;background:#c89b3c;box-sizing:border-box;pointer-events:none;animation:auto-select-champ-select-menu-mark-pulse .9s ease-in-out infinite alternate}.auto-select-champ-select-menu__header:hover{background-position:0 -32px}.auto-select-champ-select-menu__header:active{background-position:0 -64px}.auto-select-champ-select-menu-button-wrapper--open .auto-select-champ-select-menu__header{background-position:0 -96px}.auto-select-champ-select-menu-button-wrapper--open{z-index:10000}.auto-select-champ-select-menu-button-wrapper--open .auto-select-champ-select-menu__header:hover{background-position:0 -128px}.auto-select-champ-select-menu-button-wrapper--open .auto-select-champ-select-menu__header:active{background-position:0 -160px}.auto-select-champ-select-menu__content{display:grid;gap:4px;width:100%;margin-bottom:4px;border:1px solid #785a28;background:rgba(1,10,19,.96);box-shadow:0 0 18px #000000a6;box-sizing:border-box;pointer-events:auto;padding:8px}.auto-select-champ-select-menu__title{display:flex;align-items:center;justify-content:center;min-height:24px;padding-bottom:4px;border-bottom:thin solid #1e282d;color:#f0e6d2;font-family:var(--font-display);font-size:14px;font-weight:700;text-align:center}.auto-select-champ-select-menu .auto-select-checkboxes-div{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-items:center;border-top:0;border-bottom:thin solid #1e282d;padding-bottom:6px}.auto-select-champ-select-menu .auto-select-checkbox{justify-self:center;margin:0}.auto-select-champ-select-menu .dropdown-champions-default{min-height:32px}.auto-select-champ-select-menu .champion-priority-selector__scroll{height:56px}.auto-select-champ-select-menu--collapsed .auto-select-champ-select-menu__content{display:none}')),document.head.appendChild(e)}}catch(o){console.error("vite-plugin-css-injected-by-js",o)}})();
1
+ (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode('.dropdown-champions-default{position:inherit;inline-size:100%}.dropdown-champions-default.dropdown-drop-up::part(ui-dropdown-menu),.dropdown-champions-default.dropdown-drop-up::part(ui-dropdown-content),.dropdown-champions-default.dropdown-drop-up::part(ui-dropdown-options){top:auto;bottom:100%;transform-origin:bottom}.champion-priority-selector{display:grid;gap:0;padding:2px 0 3px}.champion-priority-selector__scroll{position:relative;inline-size:100%;height:58px;border:1px solid rgba(120,90,40,.7);border-top:0;background:rgba(30,35,40,.5);box-sizing:border-box}.champion-priority-selector__track{display:inline-flex;align-items:center;gap:12px;min-width:max-content;min-height:45px;padding:10px 8px 8px;box-sizing:border-box}.champion-priority-selector__empty{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;color:#5f5b4f;font-family:var(--font-body);font-size:11px;line-height:13px;text-align:center;white-space:nowrap;pointer-events:none}.champion-priority-selector__icon{position:relative;flex:0 0 auto;width:34px;height:34px;border:1px solid #c8aa6e;border-radius:50%;background:#1e2328;box-shadow:0 0 0 1px #010a13e6;box-sizing:border-box;cursor:grab;outline:none}.champion-priority-selector__icon:focus{border-color:#f0e6d2}.champion-priority-selector__icon--dragging{cursor:grabbing;filter:brightness(1.15);z-index:1}.champion-priority-selector__icon:before,.champion-priority-selector__remove,.champion-priority-selector__position-badge{display:grid;place-items:center;width:17px;height:17px;padding:0;border-radius:50%;box-sizing:border-box;font-family:var(--font-body);font-size:10px;font-weight:700;line-height:1}.champion-priority-selector__icon:before{content:attr(data-rank);position:absolute;left:-6px;top:-6px;border:1px solid #c8aa6e;background:#010a13;color:#f0e6d2;text-align:center;pointer-events:none}.champion-priority-selector__icon img{display:block;width:100%;height:100%;border-radius:50%;object-fit:cover;pointer-events:none}.champion-priority-selector__remove{position:absolute;right:-6px;bottom:-6px;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid #785a28;background:#1e2328;color:#c8aa6e;cursor:pointer;font-family:var(--font-display);font-size:0;text-align:center}.champion-priority-selector__remove:before{content:attr(data-icon);font-family:var(--font-display);font-size:7px;line-height:1;transform:translate(.4px,-.1px)}.champion-priority-selector__remove:hover{border-color:#c8aa6e;color:#f0e6d2}.champion-priority-selector__position-badge{position:absolute;left:-6px;bottom:-6px;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid #785a28;background:#010a13;color:#c8aa6e;cursor:pointer}.champion-priority-selector__position-badge:hover,.champion-priority-selector__position-badge:focus{border-color:#c8aa6e;color:#f0e6d2;outline:none}.champion-priority-selector__position-badge--empty{background:#1e2328;font-size:0}.champion-priority-selector__position-badge--empty:before{content:"+";font-family:var(--font-body);font-size:12px;line-height:1;transform:translate(.25px,.4px)}.champion-priority-selector__position-badge img{display:block;width:11px;height:11px;object-fit:contain;transform:translate(.1px)}.champion-priority-selector__position-badge:after{content:attr(data-count);position:absolute;right:-5px;top:-5px;display:none;place-items:center;width:11px;min-width:11px;height:11px;border:1px solid #785a28;border-radius:50%;background:#010a13;box-sizing:border-box;color:#f0e6d2;font-family:var(--font-body);font-size:7px;font-weight:700;line-height:1;text-align:center}.champion-priority-selector__position-badge[data-count]:after{display:grid}.champion-priority-selector__position-menu{position:fixed;z-index:10002;display:flex;gap:4px;padding:5px;border:1px solid #785a28;background:#010a13;box-shadow:0 0 0 1px #010a13d9,0 4px 16px #0000008c;box-sizing:border-box}.champion-priority-selector__position-menu[hidden]{display:none}.champion-priority-selector__position-option{display:grid;place-items:center;width:28px;height:28px;padding:0;border:1px solid #463714;background:#1e2328;box-sizing:border-box;cursor:pointer}.champion-priority-selector__position-option:hover,.champion-priority-selector__position-option--selected{border-color:#c8aa6e;background:#0f1b2d}.champion-priority-selector__position-option img{display:block;width:18px;height:18px;pointer-events:none}.auto-select-checkboxes-div{display:flex;border-top:thin solid #1e282d}.auto-select-checkbox{margin:auto}.auto-select-checkbox:last-child{margin-right:17px}.auto-select-champ-select-menu{position:absolute;right:0;bottom:36px;z-index:10000;width:min(340px,calc(100vw - 32px));color:#a09b8c;font-family:var(--font-body);font-size:12px;font-weight:400;line-height:normal;pointer-events:none;text-transform:none}.auto-select-champ-select-menu-button-wrapper{position:relative;display:block;width:38px;height:32px;flex:0 0 38px;box-sizing:border-box}.auto-select-champ-select-menu__header{position:relative;display:block;width:38px;height:32px;border:none;background-image:url(/fe/lol-social/chat_button.png);background-color:transparent;background-position:0 0;background-repeat:no-repeat;background-size:cover;box-shadow:none;cursor:pointer;outline:none;padding:0}.auto-select-champ-select-menu__header:before{content:"";position:absolute;left:50%;top:50%;width:20px;height:20px;background:url(/fe/lol-static-assets/images/nav-icon-collections.svg) center / 20px 20px no-repeat;filter:drop-shadow(0 0 1px #010a13);transform:translate(-50%,-50%)}@keyframes auto-select-champ-select-menu-mark-pulse{0%{filter:brightness(1);box-shadow:#c89b3c 0 0}15%{filter:brightness(1);box-shadow:#c89b3c 0 0}to{filter:brightness(2);box-shadow:#c89b3c 0 0 12px 2px}}.auto-select-champ-select-menu__header:after{content:"";position:absolute;right:5px;top:5px;width:6px;height:6px;border:0;border-radius:50%;background:#c89b3c;box-sizing:border-box;pointer-events:none;animation:auto-select-champ-select-menu-mark-pulse .9s ease-in-out infinite alternate}.auto-select-champ-select-menu__header:hover{background-position:0 -32px}.auto-select-champ-select-menu__header:active{background-position:0 -64px}.auto-select-champ-select-menu-button-wrapper--open .auto-select-champ-select-menu__header{background-position:0 -96px}.auto-select-champ-select-menu-button-wrapper--open{z-index:10000}.auto-select-champ-select-menu-button-wrapper--open .auto-select-champ-select-menu__header:hover{background-position:0 -128px}.auto-select-champ-select-menu-button-wrapper--open .auto-select-champ-select-menu__header:active{background-position:0 -160px}.auto-select-champ-select-menu__content{display:grid;gap:4px;width:100%;margin-bottom:4px;border:1px solid #785a28;background:rgba(1,10,19,.96);box-shadow:0 0 18px #000000a6;box-sizing:border-box;pointer-events:auto;padding:8px}.auto-select-champ-select-menu__title{display:flex;align-items:center;justify-content:center;min-height:24px;padding-bottom:4px;border-bottom:thin solid #1e282d;color:#f0e6d2;font-family:var(--font-display);font-size:14px;font-weight:700;text-align:center}.auto-select-champ-select-menu .auto-select-checkboxes-div{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-items:center;border-top:0;border-bottom:thin solid #1e282d;padding-bottom:6px}.auto-select-champ-select-menu .auto-select-checkbox{justify-self:center;margin:0}.auto-select-champ-select-menu .dropdown-champions-default{min-height:32px}.auto-select-champ-select-menu .champion-priority-selector__scroll{height:56px}.auto-select-champ-select-menu--collapsed .auto-select-champ-select-menu__content{display:none}')),document.head.appendChild(e)}}catch(o){console.error("vite-plugin-css-injected-by-js",o)}})();
2
2
  /**
3
3
  * @author balaclava
4
4
  * @name auto-champion-select
5
5
  * @link https://github.com/controlado/auto-champion-select#readme
6
6
  * @description Pick or ban automatically! 🐧
7
- * @version 1.8.4
7
+ * @version 1.8.6
8
8
  * @license GPL-3.0-or-later
9
9
  */
10
- import{request as f,sleep as g,linkEndpoint as x}from"https://cdn.jsdelivr.net/npm/balaclava-utils@latest";const dt="1.8.4",ht={enabled:!1},ut={enabled:!1,force:!1,champions:[432,235],positionsByChampionId:{235:["BOTTOM","UTILITY"],432:["UTILITY"]}},pt={enabled:!1,force:!1,champions:[157,777,238,38]},mt={controladoAutoAccept:ht,controladoPick:ut,controladoBan:pt};function d(i){const t=Number(i);return Number.isSafeInteger(t)&&t>0?t:null}function X(i,t=null){const e=[],n=new Set,o=ft(t);if(!Array.isArray(i))return e;for(const s of i){const r=d(s);r===null||n.has(r)||o&&!o.has(r)||(e.push(r),n.add(r))}return e}function ft(i){return i?new Set(Array.from(i,d).filter(t=>t!==null)):null}const E=[{value:"TOP",label:"Top",iconPath:"/fe/lol-parties/icon-position-top.png"},{value:"JUNGLE",label:"Jungle",iconPath:"/fe/lol-parties/icon-position-jungle.png"},{value:"MIDDLE",label:"Mid",iconPath:"/fe/lol-parties/icon-position-middle.png"},{value:"BOTTOM",label:"ADC",iconPath:"/fe/lol-parties/icon-position-bottom.png"},{value:"UTILITY",label:"Support",iconPath:"/fe/lol-parties/icon-position-utility.png"}],gt=new Set(E.map(i=>i.value));function I(i){const t=String(i??"").toUpperCase();return gt.has(t)?t:null}function _(i,t=null){const e={};if(!i||typeof i!="object"||Array.isArray(i))return e;const n=Ct(t);for(const[o,s]of Object.entries(i)){const r=d(o),a=String(r);if(r===null||n&&!n.has(a)||!Array.isArray(s))continue;const c=[],p=new Set;for(const lt of s){const y=I(lt);!y||p.has(y)||(c.push(y),p.add(y))}c.length>0&&(e[a]=c)}return e}function Ct(i){if(!i)return null;const t=new Set;for(const e of i){const n=d(e);n!==null&&t.add(String(n))}return t}function F(i){return E.find(t=>t.value===i)}function J(i,t){var n;const e=d(t);return e===null?[]:((n=i==null?void 0:i.positionsByChampionId)==null?void 0:n[String(e)])||[]}function wt(i,t,e){const n=J(i,t);if(n.length===0)return!0;const o=I(e);return o!==null&&n.includes(o)}const N=new Set;function bt(i,t){return Object.prototype.hasOwnProperty.call(i,t)}function A(i,t){return bt(i,t)}function R(){if(!globalThis.DataStore)throw new Error("DataStore is not available");return globalThis.DataStore}function St(i){return i!==null&&typeof i=="object"&&!Array.isArray(i)}function M(i){if(i!==void 0)return JSON.parse(JSON.stringify(i))}function K(i){const t=mt[i];if(!t)throw new Error(`Unknown auto-champion-select config key: ${i}`);return M(t)}function Q(i,t,e={}){const n=K(i),o=St(t)?M(t):{},s={...n,...o},r={enabled:s.enabled===!0};return A(n,"force")&&(r.force=s.force===!0),A(n,"champions")&&(r.champions=X(s.champions,e.allowedChampionIds)),A(n,"positionsByChampionId")&&(r.positionsByChampionId=_(s.positionsByChampionId,e.selectedChampionIds||r.champions)),r}function Z(i,t,e={}){const n=t===void 0?K(i):t;return Q(i,n,e)}function C(i,t={}){const n=R().get(i);return Z(i,n,t)}function yt(i,t,e={}){const n=R(),o=Q(i,t,e);return n.set(i,o),o}function Pt(i,t){return JSON.stringify(i)===JSON.stringify(t)}function Et(i,t,e){N.has(i)||(N.add(i),console.warn(`auto-champion-select: Repaired ${i} in DataStore. The stored value used a different schema; plugins like reynbow/auto-champ-lock write this shape. Saved normalized config.`,{storedConfig:t,normalizedConfig:e}))}function tt(i,t={}){const e=R(),n=e.get(i),o=Z(i,n,t);return(n===void 0||!Pt(n,o))&&(n!==void 0&&Et(i,n,o),e.set(i,o)),o}function B(i,t,e={}){const n=C(i,e),o=M(n),s=t(o)||o;return yt(i,s,e)}const h=Object.freeze({readyCheckAccept:"/lol-matchmaking/v1/ready-check/accept",gameflowPhase:"/lol-gameflow/v1/gameflow-phase",wallet:"/lol-inventory/v1/wallet",ownedChampions:"/lol-champions/v1/owned-champions-minimal",championSummary:"/lol-game-data/assets/v1/champion-summary.json",champSelectSession:"/lol-champ-select/v1/session",championIcon(i){return`/lol-game-data/assets/v1/champion-icons/${i}.png`},champSelectAction(i){return`/lol-champ-select/v1/session/actions/${i}`}}),It=1e3;function et(i){let t=null;return function(){return t||(t=Promise.resolve().then(i).finally(()=>{t=null})),t}}function nt(i){const t=[],e=new Set;if(!Array.isArray(i))return t;for(const n of i){if(!n||typeof n!="object")continue;const o=d(n.id),s=typeof n.name=="string"?n.name:"";o===null||!s||e.has(s)||(t.push({...n,id:o,name:s,squarePortraitPath:n.squarePortraitPath||h.championIcon(o)}),e.add(s))}return t.sort((n,o)=>n.name.localeCompare(o.name)),t}async function At(){let i=await f("GET",h.ownedChampions);for(;!i.ok;)console.debug("auto-champion-select(owned-champions-minimal): Retrying..."),i=await f("GET",h.ownedChampions),await g(It);return nt(await i.json())}async function Ot(){const i=await f("GET",h.championSummary);return nt(await i.json())}const Tt=et(At),kt=et(Ot),$=300,m=Object.freeze({APPLIED:"applied",TRY_NEXT_CHAMPION:"try-next-champion",ABORT_ACTION:"abort-action"});function L(i){return Array.isArray(i)?i.flat():[]}function _t(i){return L(i).filter(t=>t.type==="ban"&&t.completed===!0).map(t=>t.championId)}function z(i){return Array.isArray(i)?i:[]}function O(i){const t=new Set;for(const e of i){const n=d(e);n!==null&&t.add(n)}return t}function G(i){return i.type==="pick"?0:1}function Lt(){return{pickConfig:C("controladoPick"),banConfig:C("controladoBan")}}class vt{constructor(){this.session=null,this.actions=null,this.localPlayerCellId=null,this.teammateIntentChampionIds=new Set,this.localPlayerIntentChampionId=null,this.pickedChampionIds=new Set,this.bannedChampionIds=new Set,this.localPlayerAssignedPosition=null,this.watchTask=null,this.watchVersion=0,this.mounted=!1}mount(){this.mounted||(this.mounted=!0,this.watchVersion+=1,this.watchTask||(this.watchTask=this.watch()))}unmount(){this.mounted&&(this.mounted=!1,this.watchVersion+=1)}async watch(){try{for(;this.mounted;){const t=this.watchVersion;let e=!1;try{await this.refreshSessionState(),e=!0}catch(n){console.debug("auto-champion-select: Failed to update champion select",n)}if(!e||!this.mounted||t!==this.watchVersion){this.mounted&&t===this.watchVersion&&await g($);continue}try{await this.runAutoSelectCycle()}catch(n){console.debug("auto-champion-select: Failed to run champion select cycle",n)}this.mounted&&t===this.watchVersion&&await g($)}}finally{this.watchTask=null}}async refreshSessionState(){var s,r;const t=await f("GET",h.champSelectSession);if(!t.ok)throw new Error(`Session request failed with status ${t.status}`);this.session=await t.json(),this.actions=this.session.actions,this.localPlayerCellId=this.session.localPlayerCellId;const e=z(this.session.myTeam),n=z(this.session.theirTeam),o=e.find(a=>a.cellId===this.localPlayerCellId);this.localPlayerAssignedPosition=I(o==null?void 0:o.assignedPosition),this.localPlayerIntentChampionId=d(o==null?void 0:o.championPickIntent),this.pickedChampionIds=O([...e,...n].map(a=>a.championId)),this.bannedChampionIds=O([...((s=this.session.bans)==null?void 0:s.myTeamBans)||[],...((r=this.session.bans)==null?void 0:r.theirTeamBans)||[],..._t(this.actions)]),this.teammateIntentChampionIds=O(e.map(a=>a.championPickIntent))}async runAutoSelectCycle(){const{pickConfig:t,banConfig:e}=Lt();if(!t.enabled&&!e.enabled)return;const n=this.getLocalPlayerActions();if(n.length===0){console.debug("auto-champion-select: No local player sub actions found, skipping..."),this.unmount();return}for(const o of n){if(!this.isActionAvailable(o))continue;const s=this.getConfigForActionType(o.type,{pickConfig:t,banConfig:e});if(s!=null&&s.enabled)for(const r of s.champions){const a=await this.attemptChampionForAction(o,r,s);if(a===m.APPLIED)break;if(a===m.ABORT_ACTION)return}}}getLocalPlayerActions(){return L(this.actions).filter(t=>this.isPendingLocalPlayerAction(t)).sort((t,e)=>G(t)-G(e))}isPendingLocalPlayerAction(t){return t.actorCellId===this.localPlayerCellId&&t.completed===!1}isActionAvailable(t){return t.type==="pick"||t.isInProgress===!0}getConfigForActionType(t,e){return t==="pick"?e.pickConfig:t==="ban"?e.banConfig:null}async attemptChampionForAction(t,e,n){const o=d(e);if(o===null||this.isChampionUnavailableForAction(t,o,n))return m.TRY_NEXT_CHAMPION;if(this.isPickIntentAlreadyApplied(t,o)||(console.debug(`auto-champion-select: Trying to ${t.type} ${o}...`),(await this.selectChampion(t.id,o)).ok))return m.APPLIED;console.debug(`auto-champion-select: Failed to ${t.type} ${o}, refreshing champ select state...`);const r=await this.refreshActionAfterFailedAttempt(t);return!r||!this.isActionAvailable(r)||!this.isChampionUnavailableForAction(r,o,n)?m.ABORT_ACTION:(console.debug(`auto-champion-select: ${o} is unavailable after refresh, trying next ${t.type}...`),m.TRY_NEXT_CHAMPION)}isPickIntentAlreadyApplied(t,e){return t.type==="pick"&&t.isInProgress!==!0&&(this.localPlayerIntentChampionId===e||d(t.championId)===e)}async refreshActionAfterFailedAttempt(t){try{await this.refreshSessionState()}catch(e){return console.debug("auto-champion-select: Failed to refresh champion select after select failure",e),null}return L(this.actions).find(e=>e.id===t.id&&e.actorCellId===t.actorCellId&&e.type===t.type&&e.completed===!1)||null}isChampionUnavailableForAction(t,e,n){if(t.type==="pick"&&!wt(n,e,this.localPlayerAssignedPosition)){const o=J(n,e);return this.localPlayerAssignedPosition?console.debug(`auto-champion-select: Picking ${e} but assigned position ${this.localPlayerAssignedPosition} is not in ${o.join(", ")}, skipping...`):console.debug(`auto-champion-select: Picking ${e} but no assigned position is available for ${o.join(", ")} restriction, skipping...`),!0}if(this.bannedChampionIds.has(e))return console.debug(`auto-champion-select: Banning ${e} but it's already banned, skipping...`),!0;if(t.type==="ban"&&this.teammateIntentChampionIds.has(e))if(n.force===!0)console.debug(`auto-champion-select: Banning ${e} but it's already picked, forcing...`);else return console.debug(`auto-champion-select: Banning ${e} but it's already picked, skipping...`),!0;if(t.type==="pick"&&this.pickedChampionIds.has(e))if(n.force===!0)console.debug(`auto-champion-select: Picking ${e} but it's already picked, forcing...`);else return console.debug(`auto-champion-select: Picking ${e} but it's already picked, skipping...`),!0;return!1}selectChampion(t,e){const n=h.champSelectAction(t);return f("PATCH",n,{body:{championId:e,completed:!0}})}}const u=Object.freeze({dropdown:"lol-uikit-framed-dropdown",dropdownOption:"lol-uikit-dropdown-option",radioInputOption:"lol-uikit-radio-input-option",scrollable:"lol-uikit-scrollable",socialRosterGroup:"lol-social-roster-group"}),l=Object.freeze({socialRoster:".lol-social-roster",champSelectButtons:".bottom-right-buttons",firstChampSelectSquareButton:"lol-social-chat-toggle-button, .missions-tracker-button-component, .champ-select-voice-button-wrapper",dropdownRoot:".ui-dropdown",dropdownCurrent:".ui-dropdown-current",dropdownOption:u.dropdownOption,dropdownOptionSelected:`${u.dropdownOption}[selected]`,dropdownOptionsContainer:".ui-dropdown-options-container",dropdownOptions:".ui-dropdown-options",dropdownScrollable:u.scrollable,socialRosterGroupArrow:".arrow",socialRosterGroupHeader:".group-header",socialRosterGroupLabel:"span"});function q(){return document.querySelector(l.socialRoster)}function v(){return document.querySelector(l.champSelectButtons)}const Rt=50,Mt=100,U="controlado-placeholder",W="controlado-search",ot="controlado-filter-icon",w="controlado-filter-icon--trash",it="controlado-filter-input",st="controlado-tag",rt="controlado-tag--search",Bt=`
10
+ import{request as f,sleep as g,linkEndpoint as N}from"https://cdn.jsdelivr.net/npm/balaclava-utils@latest";const ut="1.8.6",pt={enabled:!1},mt={enabled:!1,force:!1,champions:[432,235],positionsByChampionId:{235:["BOTTOM","UTILITY"],432:["UTILITY"]}},ft={enabled:!1,force:!1,champions:[157,777,238,38]},gt={controladoAutoAccept:pt,controladoPick:mt,controladoBan:ft};function d(i){const t=Number(i);return Number.isSafeInteger(t)&&t>0?t:null}function K(i,t=null){const e=[],n=new Set,o=Ct(t);if(!Array.isArray(i))return e;for(const s of i){const r=d(s);r===null||n.has(r)||o&&!o.has(r)||(e.push(r),n.add(r))}return e}function Ct(i){return i?new Set(Array.from(i,d).filter(t=>t!==null)):null}const E=[{value:"TOP",label:"Top",iconPath:"/fe/lol-parties/icon-position-top.png"},{value:"JUNGLE",label:"Jungle",iconPath:"/fe/lol-parties/icon-position-jungle.png"},{value:"MIDDLE",label:"Mid",iconPath:"/fe/lol-parties/icon-position-middle.png"},{value:"BOTTOM",label:"ADC",iconPath:"/fe/lol-parties/icon-position-bottom.png"},{value:"UTILITY",label:"Support",iconPath:"/fe/lol-parties/icon-position-utility.png"}],wt=new Set(E.map(i=>i.value));function I(i){const t=String(i??"").toUpperCase();return wt.has(t)?t:null}function L(i,t=null){const e={};if(!i||typeof i!="object"||Array.isArray(i))return e;const n=bt(t);for(const[o,s]of Object.entries(i)){const r=d(o),a=String(r);if(r===null||n&&!n.has(a)||!Array.isArray(s))continue;const c=[],p=new Set;for(const ht of s){const P=I(ht);!P||p.has(P)||(c.push(P),p.add(P))}c.length>0&&(e[a]=c)}return e}function bt(i){if(!i)return null;const t=new Set;for(const e of i){const n=d(e);n!==null&&t.add(String(n))}return t}function F(i){return E.find(t=>t.value===i)}function Q(i,t){var n;const e=d(t);return e===null?[]:((n=i==null?void 0:i.positionsByChampionId)==null?void 0:n[String(e)])||[]}function St(i,t,e){const n=Q(i,t);if(n.length===0)return!0;const o=I(e);return o!==null&&n.includes(o)}const $=new Set;function Pt(i,t){return Object.prototype.hasOwnProperty.call(i,t)}function A(i,t){return Pt(i,t)}function M(){if(!globalThis.DataStore)throw new Error("DataStore is not available");return globalThis.DataStore}function yt(i){return i!==null&&typeof i=="object"&&!Array.isArray(i)}function B(i){if(i!==void 0)return JSON.parse(JSON.stringify(i))}function Z(i){const t=gt[i];if(!t)throw new Error(`Unknown auto-champion-select config key: ${i}`);return B(t)}function tt(i,t,e={}){const n=Z(i),o=yt(t)?B(t):{},s={...n,...o},r={enabled:s.enabled===!0};return A(n,"force")&&(r.force=s.force===!0),A(n,"champions")&&(r.champions=K(s.champions,e.allowedChampionIds)),A(n,"positionsByChampionId")&&(r.positionsByChampionId=L(s.positionsByChampionId,e.selectedChampionIds||r.champions)),r}function et(i,t,e={}){const n=t===void 0?Z(i):t;return tt(i,n,e)}function C(i,t={}){const n=M().get(i);return et(i,n,t)}function Et(i,t,e={}){const n=M(),o=tt(i,t,e);return n.set(i,o),o}function It(i,t){return JSON.stringify(i)===JSON.stringify(t)}function At(i,t,e){$.has(i)||($.add(i),console.warn(`auto-champion-select: Repaired ${i} in DataStore. The stored value used a different schema; plugins like reynbow/auto-champ-lock write this shape. Saved normalized config.`,{storedConfig:t,normalizedConfig:e}))}function nt(i,t={}){const e=M(),n=e.get(i),o=et(i,n,t);return(n===void 0||!It(n,o))&&(n!==void 0&&At(i,n,o),e.set(i,o)),o}function x(i,t,e={}){const n=C(i,e),o=B(n),s=t(o)||o;return Et(i,s,e)}const h=Object.freeze({readyCheckAccept:"/lol-matchmaking/v1/ready-check/accept",gameflowPhase:"/lol-gameflow/v1/gameflow-phase",wallet:"/lol-inventory/v1/wallet",ownedChampions:"/lol-champions/v1/owned-champions-minimal",championSummary:"/lol-game-data/assets/v1/champion-summary.json",champSelectSession:"/lol-champ-select/v1/session",championIcon(i){return`/lol-game-data/assets/v1/champion-icons/${i}.png`},champSelectAction(i){return`/lol-champ-select/v1/session/actions/${i}`}}),Ot=1e3;function ot(i){let t=null;return function(){return t||(t=Promise.resolve().then(i).finally(()=>{t=null})),t}}function it(i){const t=[],e=new Set;if(!Array.isArray(i))return t;for(const n of i){if(!n||typeof n!="object")continue;const o=d(n.id),s=typeof n.name=="string"?n.name:"";o===null||!s||e.has(s)||(t.push({...n,id:o,name:s,squarePortraitPath:n.squarePortraitPath||h.championIcon(o)}),e.add(s))}return t.sort((n,o)=>n.name.localeCompare(o.name)),t}async function Tt(){let i=await f("GET",h.ownedChampions);for(;!i.ok;)console.debug("auto-champion-select(owned-champions-minimal): Retrying..."),i=await f("GET",h.ownedChampions),await g(Ot);return it(await i.json())}async function kt(){const i=await f("GET",h.championSummary);return it(await i.json())}const _t=ot(Tt),Lt=ot(kt),z=300,m=Object.freeze({APPLIED:"applied",TRY_NEXT_CHAMPION:"try-next-champion",ABORT_ACTION:"abort-action"});function v(i){return Array.isArray(i)?i.flat():[]}function vt(i){return v(i).filter(t=>t.type==="ban"&&t.completed===!0).map(t=>t.championId)}function G(i){return Array.isArray(i)?i:[]}function O(i){const t=new Set;for(const e of i){const n=d(e);n!==null&&t.add(n)}return t}function U(i){return i.type==="pick"?0:1}function Rt(){return{pickConfig:C("controladoPick"),banConfig:C("controladoBan")}}class Mt{constructor(){this.session=null,this.actions=null,this.localPlayerCellId=null,this.teammateIntentChampionIds=new Set,this.localPlayerIntentChampionId=null,this.pickedChampionIds=new Set,this.bannedChampionIds=new Set,this.localPlayerAssignedPosition=null,this.watchTask=null,this.watchVersion=0,this.mounted=!1}mount(){this.mounted||(this.mounted=!0,this.watchVersion+=1,this.watchTask||(this.watchTask=this.watch()))}unmount(){this.mounted&&(this.mounted=!1,this.watchVersion+=1)}async watch(){try{for(;this.mounted;){const t=this.watchVersion;let e=!1;try{await this.refreshSessionState(),e=!0}catch(n){console.debug("auto-champion-select: Failed to update champion select",n)}if(!e||!this.mounted||t!==this.watchVersion){this.mounted&&t===this.watchVersion&&await g(z);continue}try{await this.runAutoSelectCycle()}catch(n){console.debug("auto-champion-select: Failed to run champion select cycle",n)}this.mounted&&t===this.watchVersion&&await g(z)}}finally{this.watchTask=null}}async refreshSessionState(){var s,r;const t=await f("GET",h.champSelectSession);if(!t.ok)throw new Error(`Session request failed with status ${t.status}`);this.session=await t.json(),this.actions=this.session.actions,this.localPlayerCellId=this.session.localPlayerCellId;const e=G(this.session.myTeam),n=G(this.session.theirTeam),o=e.find(a=>a.cellId===this.localPlayerCellId);this.localPlayerAssignedPosition=I(o==null?void 0:o.assignedPosition),this.localPlayerIntentChampionId=d(o==null?void 0:o.championPickIntent),this.pickedChampionIds=O([...e,...n].map(a=>a.championId)),this.bannedChampionIds=O([...((s=this.session.bans)==null?void 0:s.myTeamBans)||[],...((r=this.session.bans)==null?void 0:r.theirTeamBans)||[],...vt(this.actions)]),this.teammateIntentChampionIds=O(e.map(a=>a.championPickIntent))}async runAutoSelectCycle(){const{pickConfig:t,banConfig:e}=Rt();if(!t.enabled&&!e.enabled)return;const n=this.getLocalPlayerActions();if(n.length===0){console.debug("auto-champion-select: No local player sub actions found, skipping..."),this.unmount();return}for(const o of n){if(!this.isActionAvailable(o))continue;const s=this.getConfigForActionType(o.type,{pickConfig:t,banConfig:e});if(s!=null&&s.enabled)for(const r of s.champions){const a=await this.attemptChampionForAction(o,r,s);if(a===m.APPLIED)break;if(a===m.ABORT_ACTION)return}}}getLocalPlayerActions(){return v(this.actions).filter(t=>this.isPendingLocalPlayerAction(t)).sort((t,e)=>U(t)-U(e))}isPendingLocalPlayerAction(t){return t.actorCellId===this.localPlayerCellId&&t.completed===!1}isActionAvailable(t){return t.type==="pick"||t.isInProgress===!0}getConfigForActionType(t,e){return t==="pick"?e.pickConfig:t==="ban"?e.banConfig:null}async attemptChampionForAction(t,e,n){const o=d(e);if(o===null||this.isChampionUnavailableForAction(t,o,n))return m.TRY_NEXT_CHAMPION;if(this.isPickIntentAlreadyApplied(t,o)||(console.debug(`auto-champion-select: Trying to ${t.type} ${o}...`),(await this.selectChampion(t.id,o)).ok))return m.APPLIED;console.debug(`auto-champion-select: Failed to ${t.type} ${o}, refreshing champ select state...`);const r=await this.refreshActionAfterFailedAttempt(t);return!r||!this.isActionAvailable(r)||!this.isChampionUnavailableForAction(r,o,n)?m.ABORT_ACTION:(console.debug(`auto-champion-select: ${o} is unavailable after refresh, trying next ${t.type}...`),m.TRY_NEXT_CHAMPION)}isPickIntentAlreadyApplied(t,e){return t.type==="pick"&&t.isInProgress!==!0&&(this.localPlayerIntentChampionId===e||d(t.championId)===e)}async refreshActionAfterFailedAttempt(t){try{await this.refreshSessionState()}catch(e){return console.debug("auto-champion-select: Failed to refresh champion select after select failure",e),null}return v(this.actions).find(e=>e.id===t.id&&e.actorCellId===t.actorCellId&&e.type===t.type&&e.completed===!1)||null}isChampionUnavailableForAction(t,e,n){if(t.type==="pick"&&!St(n,e,this.localPlayerAssignedPosition)){const o=Q(n,e);return this.localPlayerAssignedPosition?console.debug(`auto-champion-select: Picking ${e} but assigned position ${this.localPlayerAssignedPosition} is not in ${o.join(", ")}, skipping...`):console.debug(`auto-champion-select: Picking ${e} but no assigned position is available for ${o.join(", ")} restriction, skipping...`),!0}if(this.bannedChampionIds.has(e))return console.debug(`auto-champion-select: Banning ${e} but it's already banned, skipping...`),!0;if(t.type==="ban"&&this.teammateIntentChampionIds.has(e))if(n.force===!0)console.debug(`auto-champion-select: Banning ${e} but it's already picked, forcing...`);else return console.debug(`auto-champion-select: Banning ${e} but it's already picked, skipping...`),!0;if(t.type==="pick"&&this.pickedChampionIds.has(e))if(n.force===!0)console.debug(`auto-champion-select: Picking ${e} but it's already picked, forcing...`);else return console.debug(`auto-champion-select: Picking ${e} but it's already picked, skipping...`),!0;return!1}selectChampion(t,e){const n=h.champSelectAction(t);return f("PATCH",n,{body:{championId:e,completed:!0}})}}const u=Object.freeze({dropdown:"lol-uikit-framed-dropdown",dropdownOption:"lol-uikit-dropdown-option",radioInputOption:"lol-uikit-radio-input-option",scrollable:"lol-uikit-scrollable",socialRosterGroup:"lol-social-roster-group"}),l=Object.freeze({socialRoster:".lol-social-roster",champSelectButtons:".bottom-right-buttons",firstChampSelectSquareButton:"lol-social-chat-toggle-button, .missions-tracker-button-component, .champ-select-voice-button-wrapper",dropdownRoot:".ui-dropdown",dropdownCurrent:".ui-dropdown-current",dropdownCurrentContent:".ui-dropdown-current-content",dropdownOption:u.dropdownOption,dropdownOptionSelected:`${u.dropdownOption}[selected]`,dropdownOptionsContainer:".ui-dropdown-options-container",dropdownOptions:".ui-dropdown-options",dropdownScrollable:u.scrollable,socialRosterGroupArrow:".arrow",socialRosterGroupHeader:".group-header",socialRosterGroupLabel:"span"});function q(){return document.querySelector(l.socialRoster)}function R(){return document.querySelector(l.champSelectButtons)}const Bt=50,xt=100,T=210,W="controlado-placeholder",H="controlado-search",st="controlado-filter-icon",w="controlado-filter-icon--trash",rt="controlado-filter-input",at="controlado-tag",ct="controlado-tag--search",Dt=`
11
11
  ${l.dropdownRoot} {
12
12
  position: relative;
13
13
  }
14
14
 
15
- ${l.dropdownCurrent} {
16
- display: flex;
17
- justify-content: space-between;
18
- padding-right: 28px;
15
+ :host {
16
+ --framed-dropdown-scrollable-max-height: ${T}px;
17
+ }
18
+
19
+ :host ${l.dropdownRoot} dt${l.dropdownCurrent} {
20
+ display: grid;
21
+ grid-template-columns: minmax(0, 1fr) max-content;
22
+ align-items: center;
23
+ column-gap: 8px;
24
+ padding: 7px 8px 7px 10px;
25
+ }
26
+
27
+ :host ${l.dropdownRoot} dt${l.dropdownCurrent}::after {
28
+ display: none;
29
+ }
30
+
31
+ :host ${l.dropdownRoot} dt${l.dropdownCurrent} ${l.dropdownCurrentContent} {
32
+ min-width: 0;
33
+ padding: 0;
34
+ text-align: left;
19
35
  }
20
36
 
21
37
  ${l.dropdownOptionsContainer} {
22
38
  position: absolute;
23
39
  top: auto;
24
40
  bottom: 100%;
25
- height: 150px;
26
- max-height: 250px;
41
+ height: ${T}px;
27
42
  overflow: hidden;
28
43
  transform-origin: bottom;
29
44
  transform: translateY(0);
@@ -31,13 +46,13 @@ import{request as f,sleep as g,linkEndpoint as x}from"https://cdn.jsdelivr.net/n
31
46
 
32
47
  ${l.dropdownOptions},
33
48
  ${l.dropdownScrollable} {
34
- height: 150px;
35
- max-height: 250px;
49
+ height: ${T}px;
36
50
  }
37
51
 
38
- .${ot} {
52
+ .${st} {
39
53
  cursor: default;
40
54
  display: inline-block;
55
+ flex: 0 0 auto;
41
56
  width: 18px;
42
57
  height: 18px;
43
58
  background-color: #c8aa6e;
@@ -54,7 +69,10 @@ import{request as f,sleep as g,linkEndpoint as x}from"https://cdn.jsdelivr.net/n
54
69
  -webkit-mask-size: 12px 12px;
55
70
  }
56
71
 
57
- .${it} {
72
+ .${rt} {
73
+ flex: 0 0 auto;
74
+ min-width: 0;
75
+ width: auto;
58
76
  color: inherit;
59
77
  background: transparent;
60
78
  border: none;
@@ -63,10 +81,9 @@ import{request as f,sleep as g,linkEndpoint as x}from"https://cdn.jsdelivr.net/n
63
81
  font-family: inherit;
64
82
  font-size: inherit;
65
83
  font-weight: inherit;
66
- width: 64px;
67
84
  }
68
85
 
69
- .${st} {
86
+ .${at} {
70
87
  cursor: default;
71
88
  display: inline-flex;
72
89
  align-items: center;
@@ -84,11 +101,16 @@ import{request as f,sleep as g,linkEndpoint as x}from"https://cdn.jsdelivr.net/n
84
101
  box-shadow: inset 0 0 8px rgba(15, 30, 45, 0.6);
85
102
  }
86
103
 
87
- .${rt} {
104
+ .${ct} {
88
105
  border-color: #d7b46a;
89
106
  color: #f6e1b2;
90
107
  background: #1a232f;
108
+ width: auto;
109
+ min-width: 0;
110
+ box-sizing: border-box;
111
+ justify-content: flex-start;
112
+ justify-self: end;
91
113
  text-transform: none;
92
114
  font-weight: 500;
93
115
  }
94
- `;function H(i){const t=document.createElement(u.dropdownOption);return t.setAttribute("slot",u.dropdownOption),t.innerText=i,t}class Dt{constructor(t,e,n){this.dropdownElement=t,this.placeholderText=e,this.onChampionSelected=n,this.placeholderOption=null}renderOptions(t){this.dropdownElement.replaceChildren(),this.placeholderOption=H(this.placeholderText),this.placeholderOption.setAttribute("selected","true"),this.dropdownElement.appendChild(this.placeholderOption);for(const e of t){const n=this.createChampionOption(e);this.dropdownElement.appendChild(n)}}createChampionOption(t){const e=H(t.name);return e.addEventListener("click",()=>{this.onChampionSelected(t.id),requestAnimationFrame(()=>this.reset())}),e}async waitForRender(){for(let t=0;t<Rt;t++){const e=this.dropdownElement.shadowRoot;if(this.dropdownElement.isConnected&&(e!=null&&e.querySelector(l.dropdownCurrent)))return e;await g(Mt)}return null}ensureSearchPlaceholder(t){if(t.querySelector(`#${U}`))return;const e=t.querySelector(l.dropdownCurrent);e&&e.appendChild(this.createSearchPlaceholder())}createSearchPlaceholder(){const t=document.createElement("div");t.classList.add(st,rt),t.id=U;const e=document.createElement("input");e.classList.add(it),e.id=W,e.type="text",e.placeholder="Search";const n=document.createElement("span");return n.classList.add(ot),n.addEventListener("click",()=>{n.classList.contains(w)&&this.clearSearch(e,n)}),e.addEventListener("input",o=>{this.ensureOpen(),this.filterOptions(o.target.value),n.classList.toggle(w,!!o.target.value)}),["pointerdown","click"].forEach(o=>{t.addEventListener(o,s=>s.stopPropagation()),n.addEventListener(o,s=>s.stopPropagation())}),["pointerdown","focusin"].forEach(o=>{e.addEventListener(o,s=>s.stopPropagation(),!0)}),t.appendChild(n),t.appendChild(e),t}clearSearch(t,e){t.value="",this.filterOptions(""),e.classList.toggle(w,!1)}filterOptions(t){const e=t.toLowerCase();this.dropdownElement.querySelectorAll(l.dropdownOption).forEach(o=>{(o.textContent??"").toLowerCase().includes(e)?o.style.display="":o.style.display="none"})}reset(){var t;this.dropdownElement.querySelectorAll(l.dropdownOptionSelected).forEach(e=>{e.removeAttribute("selected")}),(t=this.placeholderOption)==null||t.setAttribute("selected","true"),this.withShadowRoot(e=>{var s;const n=e.querySelector(`#${W}`),o=e.querySelector(`.${w}`);n&&o?this.clearSearch(n,o):(n&&(n.value="",this.filterOptions("")),o&&o.classList.remove(w)),this.isOpen()&&((s=e.querySelector(l.dropdownCurrent))==null||s.click())})}isOpen(){return this.dropdownElement.classList.contains("active")}ensureOpen(){this.isOpen()||this.withShadowRoot(t=>{const e=t.querySelector(l.dropdownCurrent);e&&e.click()})}patchDropdownShadowDom(){this.withShadowRoot(t=>{this.ensureDropdownOpensUpward(t),this.injectDropdownSearchStyles(t)})}ensureDropdownOpensUpward(t){var e;(e=t.querySelector(l.dropdownRoot))==null||e.classList.add("opens-upward")}injectDropdownSearchStyles(t){if(t.querySelector("style[data-controlado='dropdown-tags']"))return;const e=document.createElement("style");e.dataset.controlado="dropdown-tags",e.textContent=Bt,t.appendChild(e)}withShadowRoot(t){const e=this.dropdownElement.shadowRoot;e&&t(e)}}const xt=".champion-priority-selector__position-badge",Ft=".champion-priority-selector__position-option",Nt=".champion-priority-selector__remove",$t="✕",P=8,zt=5,Gt=150,qt="cubic-bezier(0.2, 0, 0, 1)";class Y{constructor(t,e,n,o={}){this.element=this.createRootElement(),this.dropdownElement=this.createDropdownElement(),this.championDropdown=new Dt(this.dropdownElement,t,a=>this.addChampion(a));const{scrollElement:s,trackElement:r}=this.createSelectedChampionsScroll();this.scrollElement=s,this.trackElement=r,this.enablePositionRestrictions=o.enablePositionRestrictions===!0,this.positionMenuElement=this.enablePositionRestrictions?this.createPositionMenu():null,this.positionMenuChampionId=null,this.positionsByChampionId={},this.emptyElement=this.createEmptyState(t),this.element.append(this.dropdownElement,this.scrollElement),this.positionMenuElement&&this.element.appendChild(this.positionMenuElement),this.config=null,this.configKey=e,this.loadChampions=n,this.champions=[],this.championById=new Map,this.selectedChampionIds=[],this.iconButtons=new Map,this.dragState=null,this.handleWindowPointerMove=a=>this.moveDrag(a),this.handleWindowPointerUp=a=>this.finishDrag(a),this.handleWindowPointerCancel=a=>this.cancelDrag(a),this.handlePositionMenuOutsidePointerDown=a=>this.closePositionMenuOnOutsidePointerDown(a),this.handlePositionMenuKeyDown=a=>this.closePositionMenuOnKeyDown(a),this.setupInFlight=null,this.setupPending=!1}createRootElement(){const t=document.createElement("div");return t.classList.add("champion-priority-selector"),t}createDropdownElement(){const t=document.createElement(u.dropdown);return t.classList.add("dropdown-champions-default","dropdown-drop-up"),t}createSelectedChampionsScroll(){const t=document.createElement(u.scrollable);t.classList.add("champion-priority-selector__scroll"),t.setAttribute("direction","horizontal"),t.setAttribute("overflow-masks","disabled"),t.setAttribute("side-scroll-wheel","true");const e=document.createElement("div");return e.classList.add("champion-priority-selector__track"),t.appendChild(e),{scrollElement:t,trackElement:e}}createEmptyState(t){const e=document.createElement("div");e.classList.add("champion-priority-selector__empty");const n=document.createElement("span");n.innerText="No champions";const o=document.createElement("span"),s=t.replace(/^Add\s+/i,"").toLowerCase();return o.innerText=`Use dropdown to add ${s} option`,e.append(n,o),e}createPositionMenu(){const t=document.createElement("div");t.classList.add("champion-priority-selector__position-menu"),t.hidden=!0;for(const e of E)t.appendChild(this.createPositionOption(e));return t}createPositionOption(t){const e=document.createElement("button");e.classList.add("champion-priority-selector__position-option"),e.type="button",e.dataset.position=t.value,e.title=t.label,e.setAttribute("aria-label",t.label),e.setAttribute("aria-pressed","false"),e.addEventListener("pointerdown",o=>o.stopPropagation()),e.addEventListener("click",o=>{o.stopPropagation(),this.toggleChampionPosition(t.value)});const n=document.createElement("img");return n.src=t.iconPath,n.alt=t.label,n.draggable=!1,e.appendChild(n),e}async setup(){return this.setupPending=!0,this.setupInFlight||(this.setupInFlight=this.runSetupLoop()),this.setupInFlight}refresh(){return this.setup()}async runSetupLoop(){try{for(;this.setupPending;)this.setupPending=!1,await this.performSetup()}finally{this.setupInFlight=null}}async performSetup(){this.champions=await this.loadChampions(),this.championById=new Map(this.champions.map(n=>[n.id,n]));const t=this.getAllowedChampionIds();this.config=tt(this.configKey,{allowedChampionIds:t}),this.selectedChampionIds=X(this.config.champions,t),this.enablePositionRestrictions&&(this.positionsByChampionId=_(this.config.positionsByChampionId,this.selectedChampionIds)),this.championDropdown.renderOptions(this.champions),this.renderSelectedChampions();const e=await this.championDropdown.waitForRender();e&&(this.championDropdown.ensureSearchPlaceholder(e),this.championDropdown.patchDropdownShadowDom())}getAllowedChampionIds(){return new Set(this.championById.keys())}addChampion(t){const e=d(t);e===null||!this.championById.has(e)||this.selectedChampionIds.includes(e)||(this.selectedChampionIds.push(e),this.renderSelectedChampions(),this.saveConfig())}removeChampion(t){const e=d(t),n=this.selectedChampionIds.indexOf(e);e===null||n===-1||(this.selectedChampionIds.splice(n,1),this.positionMenuChampionId===e&&this.closePositionMenu(),this.enablePositionRestrictions&&delete this.positionsByChampionId[String(e)],this.renderSelectedChampions(),this.saveConfig())}moveChampionToIndex(t,e){const n=d(t),o=this.selectedChampionIds.indexOf(n);if(n===null||o===-1)return!1;const[s]=this.selectedChampionIds.splice(o,1),r=Math.max(0,Math.min(e,this.selectedChampionIds.length));return this.selectedChampionIds.splice(r,0,s),o!==r}syncPositionsByChampionId(){this.enablePositionRestrictions&&(this.positionsByChampionId=_(this.positionsByChampionId,this.selectedChampionIds))}saveConfig(){this.syncPositionsByChampionId();const t=this.getAllowedChampionIds();this.config=B(this.configKey,e=>(e.champions=[...this.selectedChampionIds],this.enablePositionRestrictions&&(e.positionsByChampionId={...this.positionsByChampionId}),e),{allowedChampionIds:t,selectedChampionIds:this.selectedChampionIds}),this.enablePositionRestrictions&&(this.positionsByChampionId=this.config.positionsByChampionId||{}),console.debug(this.configKey,this.config)}renderSelectedChampions(t=null,e=null){this.positionMenuChampionId!==null&&this.closePositionMenu();const n=new Set(this.selectedChampionIds);for(const[s,r]of this.iconButtons)n.has(s)||(r.remove(),this.iconButtons.delete(s));if(this.selectedChampionIds.length===0){this.trackElement.replaceChildren(this.emptyElement);return}this.emptyElement.remove();const o=this.selectedChampionIds.map((s,r)=>this.getIconButton(s,r)).filter(Boolean);this.trackElement.append(...o),t&&this.animateReorder(t,e)}getIconButton(t,e){const n=this.championById.get(t);if(!n)return null;let o=this.iconButtons.get(t);o||(o=this.createIconButton(n),this.iconButtons.set(t,o)),o.dataset.rank=String(e+1);const s=this.getChampionPositionTitleSuffix(t);o.title=`${e+1}. ${n.name}${s}`,o.setAttribute("aria-label",`${e+1}. ${n.name}${s}`);const r=o.querySelector("img");r.src=n.squarePortraitPath,r.alt=n.name;const a=o.querySelector(Nt);return a.setAttribute("aria-label",`Remove ${n.name}`),a.title=`Remove ${n.name}`,this.renderPositionBadge(o,t),o}createIconButton(t){const e=document.createElement("div");e.classList.add("champion-priority-selector__icon"),e.setAttribute("role","button"),e.tabIndex=0;const n=document.createElement("img");n.draggable=!1;const o=document.createElement("button");return o.classList.add("champion-priority-selector__remove"),o.type="button",o.dataset.icon=$t,o.addEventListener("pointerdown",s=>s.stopPropagation()),o.addEventListener("click",s=>{s.stopPropagation(),this.removeChampion(t.id)}),e.addEventListener("pointerdown",s=>this.startDrag(s,t.id)),this.enablePositionRestrictions&&e.addEventListener("contextmenu",s=>this.openPositionMenu(s,t.id)),e.append(n,o),e}getChampionAllowedPositions(t){const e=d(t);return e===null?[]:this.positionsByChampionId[String(e)]||[]}getChampionAllowedPositionLabels(t){return this.getChampionAllowedPositions(t).map(e=>{var n;return(n=F(e))==null?void 0:n.label}).filter(Boolean)}getChampionPositionTitleSuffix(t){const e=this.getChampionAllowedPositionLabels(t);return e.length>0?` (${e.join(", ")})`:""}renderPositionBadge(t,e){var o;if((o=t.querySelector(xt))==null||o.remove(),!this.enablePositionRestrictions)return;const n=this.createPositionBadge(e);n&&t.appendChild(n)}createPositionBadge(t){const e=this.getChampionAllowedPositions(t),n=this.getChampionAllowedPositionLabels(t),o=document.createElement("button");if(o.classList.add("champion-priority-selector__position-badge"),o.type="button",o.title=n.length>0?`${n.join(", ")}. Click to edit positions.`:"Any position. Click to restrict positions.",o.setAttribute("aria-label",o.title),o.addEventListener("pointerdown",a=>a.stopPropagation()),o.addEventListener("click",a=>this.openPositionMenu(a,t,o)),e.length===0)return o.classList.add("champion-priority-selector__position-badge--empty"),o.innerText="+",o;const s=F(e[0]);if(!s)return null;e.length>1&&(o.dataset.count=String(e.length));const r=document.createElement("img");return r.src=s.iconPath,r.alt=s.label,r.draggable=!1,o.appendChild(r),o}openPositionMenu(t,e,n=null){if(!this.enablePositionRestrictions||!this.positionMenuElement)return;const o=d(e);if(o===null||!this.selectedChampionIds.includes(o))return;t.preventDefault(),t.stopPropagation(),this.positionMenuChampionId=o,this.renderPositionMenu(),this.positionMenuElement.hidden=!1,this.positionMenuElement.style.left="0px",this.positionMenuElement.style.top="0px";const{left:s,top:r}=this.getPositionMenuCoordinates(t,n);this.positionMenuElement.style.left=`${s}px`,this.positionMenuElement.style.top=`${r}px`,document.addEventListener("pointerdown",this.handlePositionMenuOutsidePointerDown,!0),document.addEventListener("keydown",this.handlePositionMenuKeyDown,!0)}getPositionMenuCoordinates(t,e=null){const n=this.positionMenuElement.getBoundingClientRect();let o=t.clientX,s=t.clientY;if(e&&t.type==="click"&&t.detail===0){const c=e.getBoundingClientRect();o=c.left+c.width/2,s=c.bottom}const r=Math.min(Math.max(o,P),window.innerWidth-n.width-P),a=Math.min(Math.max(s,P),window.innerHeight-n.height-P);return{left:r,top:a}}renderPositionMenu(){if(!this.positionMenuElement||this.positionMenuChampionId===null)return;const t=new Set(this.getChampionAllowedPositions(this.positionMenuChampionId));this.positionMenuElement.querySelectorAll(Ft).forEach(e=>{const n=t.has(e.dataset.position);e.classList.toggle("champion-priority-selector__position-option--selected",n),e.setAttribute("aria-pressed",String(n))})}toggleChampionPosition(t){if(!this.enablePositionRestrictions||this.positionMenuChampionId===null)return;const e=I(t);if(!e)return;const n=String(this.positionMenuChampionId),o=new Set(this.positionsByChampionId[n]||[]);o.has(e)?o.delete(e):o.add(e);const s=E.map(c=>c.value).filter(c=>o.has(c));s.length>0?this.positionsByChampionId[n]=s:delete this.positionsByChampionId[n],this.renderPositionMenu();const r=this.iconButtons.get(this.positionMenuChampionId),a=this.selectedChampionIds.indexOf(this.positionMenuChampionId);r&&a!==-1&&this.getIconButton(this.positionMenuChampionId,a),this.saveConfig()}closePositionMenuOnOutsidePointerDown(t){var e;(e=this.positionMenuElement)!=null&&e.contains(t.target)||this.closePositionMenu()}closePositionMenuOnKeyDown(t){t.key==="Escape"&&this.closePositionMenu()}closePositionMenu(){this.positionMenuElement&&(this.positionMenuElement.hidden=!0,this.positionMenuChampionId=null,document.removeEventListener("pointerdown",this.handlePositionMenuOutsidePointerDown,!0),document.removeEventListener("keydown",this.handlePositionMenuKeyDown,!0))}startDrag(t,e){var o;if(t.button!==0)return;this.dragState&&this.clearDragState();const n=this.iconButtons.get(e);if(n){this.dragState={championId:e,pointerId:t.pointerId,startX:t.clientX,startY:t.clientY,active:!1,moved:!1};try{(o=n.setPointerCapture)==null||o.call(n,t.pointerId)}catch{}window.addEventListener("pointermove",this.handleWindowPointerMove),window.addEventListener("pointerup",this.handleWindowPointerUp),window.addEventListener("pointercancel",this.handleWindowPointerCancel)}}moveDrag(t){var p;if(!this.dragState||this.dragState.pointerId!==t.pointerId)return;const e=this.dragState.championId,n=t.clientX-this.dragState.startX,o=t.clientY-this.dragState.startY,s=Math.hypot(n,o);if(!this.dragState.active){if(s<zt)return;this.dragState.active=!0,(p=this.iconButtons.get(e))==null||p.classList.add("champion-priority-selector__icon--dragging")}t.preventDefault();const r=this.getDropIndex(t.clientX,e),a=this.selectedChampionIds.indexOf(e);if(r===a||r===-1)return;const c=this.getIconPositions();this.moveChampionToIndex(e,r)&&(this.dragState.moved=!0,this.renderSelectedChampions(c,e))}finishDrag(t){if(!this.dragState||this.dragState.pointerId!==t.pointerId)return;const e=this.dragState.active,n=this.dragState.moved;this.clearDragState(),e&&n&&this.saveConfig()}cancelDrag(t){!this.dragState||this.dragState.pointerId!==t.pointerId||this.clearDragState()}clearDragState(){var o;if(!this.dragState)return;const{championId:t,pointerId:e}=this.dragState,n=this.iconButtons.get(t);n==null||n.classList.remove("champion-priority-selector__icon--dragging");try{(o=n==null?void 0:n.releasePointerCapture)==null||o.call(n,e)}catch{}window.removeEventListener("pointermove",this.handleWindowPointerMove),window.removeEventListener("pointerup",this.handleWindowPointerUp),window.removeEventListener("pointercancel",this.handleWindowPointerCancel),this.dragState=null}getDropIndex(t,e){const n=this.selectedChampionIds.filter(o=>o!==e);for(let o=0;o<n.length;o++){const s=this.iconButtons.get(n[o]);if(!s)continue;const r=s.getBoundingClientRect();if(t<r.left+r.width/2)return o}return n.length}getIconPositions(){const t=new Map;for(const e of this.selectedChampionIds){const n=this.iconButtons.get(e);n&&t.set(e,n.getBoundingClientRect())}return t}animateReorder(t,e){for(const n of this.selectedChampionIds){if(n===e)continue;const o=this.iconButtons.get(n),s=t.get(n);if(!o||!s||typeof o.animate!="function")continue;const r=o.getBoundingClientRect(),a=s.left-r.left,c=s.top-r.top;a===0&&c===0||o.animate([{transform:`translate(${a}px, ${c}px)`},{transform:"translate(0, 0)"}],{duration:Gt,easing:qt})}}}const Ut=200,T="auto-select-champ-select-menu--collapsed",Wt="auto-select-champ-select-menu-button-wrapper--open";class k{constructor(t,e){this.element=document.createElement(u.radioInputOption),this.element.classList.add("lol-settings-voice-input-mode-option","auto-select-checkbox"),this.element.innerText=t,this.config=null,this.configKey=e,this.setupComplete=!1}setup(){this.syncFromConfig(),this.setupComplete||(this.element.addEventListener("click",()=>this.toggle()),this.setupComplete=!0)}syncFromConfig(){this.config=tt(this.configKey),this.element.toggleAttribute("selected",this.config.enabled===!0)}toggle(){return console.debug("auto-champion-select: Toggling",this.configKey),this.config=B(this.configKey,t=>(t.enabled=!t.enabled,t)),this.element.toggleAttribute("selected",this.config.enabled===!0),this.config.enabled}}class Ht{constructor(t,e,n){this.element=document.createElement("div"),this.element.classList.add("auto-select-champ-select-menu",T),this.buttonWrapper=document.createElement("div"),this.buttonWrapper.classList.add("auto-select-champ-select-menu-button-wrapper"),this.headerElement=document.createElement("button"),this.headerElement.classList.add("auto-select-champ-select-menu__header"),this.headerElement.type="button",this.headerElement.setAttribute("aria-label",t),this.headerElement.setAttribute("aria-expanded","false"),this.headerElement.addEventListener("click",()=>this.toggle()),this.contentElement=document.createElement("div"),this.contentElement.classList.add("auto-select-champ-select-menu__content"),this.titleElement=document.createElement("div"),this.titleElement.classList.add("auto-select-champ-select-menu__title"),this.titleElement.textContent=t,this.buttonWrapper.append(this.headerElement,this.element),this.contentElement.appendChild(this.titleElement),this.element.appendChild(this.contentElement),this.returnControlsToSocialRoster=e,this.controlElements=n,this.boundCloseOnOutsideInteraction=o=>this.closeOnOutsideInteraction(o),this.buttonObserver=null,this.buttonMountFrame=null,this.buttonMountTask=null,this.hiddenStates=new WeakMap,this.mounted=!1}async mount(){return this.mounted?this.mountButton():(this.mounted=!0,this.controlElements.forEach(t=>{this.hiddenStates.set(t,t.classList.contains("hidden")),t.classList.remove("hidden"),this.contentElement.appendChild(t)}),this.observeButtonContainer(),document.addEventListener("pointerdown",this.boundCloseOnOutsideInteraction,!0),this.mountButton())}unmount(){return this.mounted?(this.mounted=!1,this.stopButtonMounting(),document.removeEventListener("pointerdown",this.boundCloseOnOutsideInteraction,!0),this.setOpen(!1),this.buttonWrapper.remove(),this.restoreHiddenStates(),this.returnControlsToSocialRoster()):this.returnControlsToSocialRoster()}stopButtonMounting(){var t;(t=this.buttonObserver)==null||t.disconnect(),this.buttonObserver=null,this.buttonMountFrame!==null&&(cancelAnimationFrame(this.buttonMountFrame),this.buttonMountFrame=null),this.buttonMountTask=null}restoreHiddenStates(){this.controlElements.forEach(t=>{t.classList.toggle("hidden",this.hiddenStates.get(t)===!0),this.hiddenStates.delete(t)})}isOpen(){return!this.element.classList.contains(T)}setOpen(t){this.element.classList.toggle(T,!t),this.buttonWrapper.classList.toggle(Wt,t),this.headerElement.setAttribute("aria-expanded",String(t))}toggle(){this.setOpen(!this.isOpen())}closeOnOutsideInteraction(t){if(!this.isOpen())return;(typeof t.composedPath=="function"?t.composedPath():[]).includes(this.buttonWrapper)||this.buttonWrapper.contains(t.target)||this.setOpen(!1)}observeButtonContainer(){this.buttonObserver=new MutationObserver(()=>this.scheduleMountButton()),this.buttonObserver.observe(document.body,{childList:!0,subtree:!0})}scheduleMountButton(){this.buttonMountFrame===null&&(this.buttonMountFrame=requestAnimationFrame(()=>{this.buttonMountFrame=null,this.mountButton()}))}mountButton(){return this.buttonMountTask||(this.buttonMountTask=this.appendButtonToContainer().finally(()=>{this.buttonMountTask=null})),this.buttonMountTask}async appendButtonToContainer(){let t=v();for(;this.mounted&&!t;)await g(Ut),t=v();if(!this.mounted||!t)return;const e=t.querySelector(l.firstChampSelectSquareButton);this.buttonWrapper.parentNode===t&&this.buttonWrapper.nextSibling===e||t.insertBefore(this.buttonWrapper,e)}}class Yt{constructor(t,...e){this.element=document.createElement(u.socialRosterGroup),this.element.addEventListener("post-render",()=>this.onPostRender()),this.element.addEventListener("click",()=>this.onClick()),this.label=t,this.collapsibleElements=e,this.waitRender()}waitRender(){new MutationObserver((t,e)=>{if(this.element.querySelector(l.socialRosterGroupLabel)){const n=new Event("post-render");this.element.dispatchEvent(n),e.disconnect()}}).observe(this.element,{childList:!0})}onPostRender(){var t;this.element.querySelector(l.socialRosterGroupLabel).innerText=this.label,(t=this.element.querySelector(l.socialRosterGroupHeader))==null||t.removeAttribute("draggable")}onClick(){var t;this.collapsibleElements.forEach(e=>{e.closest(".auto-select-champ-select-menu")||e.classList.toggle("hidden")}),(t=this.element.querySelector(l.socialRosterGroupArrow))==null||t.toggleAttribute("open")}}const S="Balaclava: Auto Champion Select";function jt(i){return typeof(i==null?void 0:i.then)=="function"}class D{constructor({id:t,name:e,legend:n,tags:o,group:s,callback:r,toasts:a}){this.id=t,this.name=e,this.legend=n,this.tags=o,this.group=s,this.perform=this.perform.bind(this),this.callback=r,this.toasts=a}perform(){try{const t=this.callback();if(jt(t))return Toast.promise(t,{loading:this.toasts.loading,success:this.toasts.success,error:this.toasts.error});const e=this.toasts.success||(t?this.toasts.on:this.toasts.off);Toast.success(e)}catch(t){Toast.error(this.toasts.error),console.error(t)}}}class at extends D{constructor(t,e,n){super({id:`${e}Switch`,name:()=>`Auto ${t} [${C(e).enabled?"ON":"OFF"}]`,legend:()=>C(e).enabled?"Turn OFF":"Turn ON",tags:[S,e,"switch"],group:S,callback:n,toasts:{on:`Auto ${t} is ON!`,off:`Auto ${t} is OFF!`,error:`Failed to toggle Auto ${t}. Check console.`}})}}function Vt(i){return B(i,e=>(e.force=!e.force,e)).force}class ct extends D{constructor(t,e){super({id:`${e}ForceSwitch`,name:()=>`Force ${t} [${C(e).force?"ON":"OFF"}]`,legend:()=>`Ignore team intent and force ${t} the selected champion`,tags:[S,e,"force","switch"],group:S,callback:()=>Vt(e),toasts:{on:`Force ${t} is ON!`,off:`Force ${t} is OFF!`,error:`Failed to toggle Force ${t}. Check console.`}})}}class Xt extends D{constructor(t){super({id:"RefreshDropdowns",name:()=>"Refresh Champions",legend:()=>"Normally champion selectors refresh automatically...",tags:[S,"refresh"],group:S,callback:t,toasts:{success:"Refreshed Champions!",error:"Failed to refresh Champions. Check console."}})}}class Jt extends at{constructor(t){super("Pick","controladoPick",t)}}class Kt extends at{constructor(t){super("Ban","controladoBan",t)}}class Qt extends ct{constructor(){super("Pick","controladoPick")}}class Zt extends ct{constructor(){super("Ban","controladoBan")}}function te(i){for(const t of i)CommandBar.addAction(t)}const ee=2e3,ne=200,oe=6e4,ie=".auto-select-champ-select-menu__header",b=Object.freeze({autoAccept:"controladoAutoAccept",pick:"controladoPick",ban:"controladoBan"});async function se(){C(b.autoAccept).enabled===!0&&(console.debug("auto-champion-select(auto-accept): Ready check detected, accepting in 2 seconds..."),await g(ee),await re())}async function re(){const i=await f("POST",h.readyCheckAccept);i.ok?console.debug("auto-champion-select(auto-accept): Accepted ready check"):console.error("auto-champion-select(auto-accept): Failed to accept ready check",i)}async function ae(i){const t=await f("GET",h.gameflowPhase),e=t.ok?await t.json():null;i.handleGameflowPhase(e)}function ce({championSelect:i,champSelectControlsMenu:t,setupChampionSelectors:e}){let n=0;return async function(a){const c=++n;try{await o(a,c)}catch(p){console.error("auto-champion-select: Failed to handle gameflow phase",p)}};async function o(r,a){r==="ReadyCheck"&&se().catch(c=>console.error("auto-champion-select(auto-accept): Failed to handle ready check",c)),await s(r),a===n&&await e()}async function s(r){r==="ChampSelect"?(i.mount(),await t.mount()):(i.unmount(),await t.unmount())}}function le(){const i=new vt,t=new k("Accept",b.autoAccept),e=new k("Pick",b.pick),n=new Y("Add pick",b.pick,Tt,{enablePositionRestrictions:!0}),o=new k("Ban",b.ban),s=new Y("Add ban",b.ban,kt),r=de(n,s),a=he(t,e,o),c=new Yt("Auto champion select",r,a);return{championSelect:i,autoAcceptToggle:t,pickToggle:e,banToggle:o,pickChampionSelector:n,banChampionSelector:s,selectorsContainer:r,checkboxesContainer:a,pluginSection:c,championSelectors:[n,s]}}function de(...i){const t=document.createElement("div");return t.append(...i.map(e=>e.element)),t}function he(...i){const t=document.createElement("div");return t.classList.add("auto-select-checkboxes-div"),t.append(...i.map(e=>e.element)),t}function ue({pluginSection:i,checkboxesContainer:t,selectorsContainer:e}){let n=null,o=0,s=()=>!1;async function r(a){let c=q();for(;!c;){if(s()||a!==o)return;await g(ne),c=q()}s()||a!==o||c.append(i.element,t,e)}return{setIsChampSelectControlsMounted(a){s=a},returnControlsToSocialRoster(){if(n)return n;const a=++o;return n=r(a).catch(c=>console.error("auto-champion-select: Failed to return controls to social roster",c)).finally(()=>{n=null}),n}}}function pe({autoAcceptToggle:i,pickToggle:t,banToggle:e}){i.setup(),t.setup(),e.setup()}async function me(i){await Promise.all(i.map(t=>t.setup()))}async function fe(i){await Promise.all(i.map(t=>t.refresh()))}function ge(){const i=le(),t=ue(i),e=new Ht("Auto Champion Select",t.returnControlsToSocialRoster,[i.checkboxesContainer,i.selectorsContainer]);t.setIsChampSelectControlsMounted(()=>e.mounted);const n={...i,champSelectControlsMenu:e,setupToggles:()=>pe(i),setupChampionSelectors:()=>me(i.championSelectors),refreshChampionSelectors:()=>fe(i.championSelectors),refreshPickChampionSelector:async()=>{await i.pickChampionSelector.refresh()}};return n.handleGameflowPhase=ce(n),n}function Ce(i){x(h.gameflowPhase,t=>{i.handleGameflowPhase(t.data)}),x(h.wallet,async t=>{if(t.eventType==="Update"){console.debug("auto-champion-select(wallet): Refreshing champion selectors...");try{await i.refreshPickChampionSelector()}catch(e){console.error("auto-champion-select(wallet): Failed to refresh champion selectors",e)}}})}function we({pickToggle:i,banToggle:t,refreshChampionSelectors:e}){te([new Jt(()=>i.toggle()),new Kt(()=>t.toggle()),new Qt,new Zt,new Xt(e)])}function be(i){let t=null,e=null;function n(){e==null||e.disconnect(),e=null,t!==null&&(cancelAnimationFrame(t),t=null)}const o=setTimeout(()=>{n()},oe);function s(){if(!(v()!==null))return;clearTimeout(o),n(),document.querySelector(ie)!==null||i.handleGameflowPhase("ChampSelect")}e=new MutationObserver(()=>{t===null&&(t=requestAnimationFrame(()=>{t=null,s()}))}),e.observe(document.body,{childList:!0,subtree:!0}),s()}async function Se(){const i=ge();i.setupToggles(),we(i),Ce(i),await ae(i),be(i),console.debug(`auto-champion-select(${dt}): Report bugs to Balaclava#1912`)}let j=!1;function V(){j||(j=!0,Se().catch(i=>console.error("auto-champion-select: Failed to initialize",i)))}document.readyState==="loading"?window.addEventListener("load",V,{once:!0}):V();export{V as load};
116
+ `;function Y(i){const t=document.createElement(u.dropdownOption);return t.setAttribute("slot",u.dropdownOption),t.innerText=i,t}class Nt{constructor(t,e,n,o={}){this.dropdownElement=t,this.placeholderText=e,this.searchPlaceholderText=o.searchPlaceholderText||"Search",this.onChampionSelected=n,this.placeholderOption=null}renderOptions(t){this.dropdownElement.replaceChildren(),this.placeholderOption=Y(this.placeholderText),this.placeholderOption.setAttribute("selected","true"),this.hidePlaceholderOption(),this.dropdownElement.appendChild(this.placeholderOption);for(const e of t){const n=this.createChampionOption(e);this.dropdownElement.appendChild(n)}}createChampionOption(t){const e=Y(t.name);return e.addEventListener("click",()=>{this.onChampionSelected(t.id),requestAnimationFrame(()=>this.reset())}),e}async waitForRender(){for(let t=0;t<Bt;t++){const e=this.dropdownElement.shadowRoot;if(this.dropdownElement.isConnected&&(e!=null&&e.querySelector(l.dropdownCurrent)))return e;await g(xt)}return null}ensureSearchPlaceholder(t){if(t.querySelector(`#${W}`))return;const e=t.querySelector(l.dropdownCurrent);e&&e.appendChild(this.createSearchPlaceholder())}createSearchPlaceholder(){const t=document.createElement("div");t.classList.add(at,ct),t.id=W;const e=document.createElement("input");e.classList.add(rt),e.id=H,e.type="text",e.placeholder=this.searchPlaceholderText,e.setAttribute("aria-label",this.searchPlaceholderText),e.size=Math.max(this.searchPlaceholderText.length,1);const n=document.createElement("span");return n.classList.add(st),n.addEventListener("click",()=>{n.classList.contains(w)&&this.clearSearch(e,n)}),e.addEventListener("input",o=>{this.ensureOpen(),this.filterOptions(o.target.value),n.classList.toggle(w,!!o.target.value)}),["pointerdown","click"].forEach(o=>{t.addEventListener(o,s=>s.stopPropagation()),n.addEventListener(o,s=>s.stopPropagation())}),["pointerdown","focusin"].forEach(o=>{e.addEventListener(o,s=>s.stopPropagation(),!0)}),t.appendChild(n),t.appendChild(e),t}clearSearch(t,e){t.value="",this.filterOptions(""),e.classList.toggle(w,!1)}filterOptions(t){const e=t.toLowerCase();this.dropdownElement.querySelectorAll(l.dropdownOption).forEach(o=>{if(o===this.placeholderOption){this.hidePlaceholderOption();return}(o.textContent??"").toLowerCase().includes(e)?o.style.display="":o.style.display="none"})}hidePlaceholderOption(){this.placeholderOption&&(this.placeholderOption.style.display="none")}reset(){var t;this.dropdownElement.querySelectorAll(l.dropdownOptionSelected).forEach(e=>{e.removeAttribute("selected")}),(t=this.placeholderOption)==null||t.setAttribute("selected","true"),this.withShadowRoot(e=>{var s;const n=e.querySelector(`#${H}`),o=e.querySelector(`.${w}`);n&&o?this.clearSearch(n,o):(n&&(n.value="",this.filterOptions("")),o&&o.classList.remove(w)),this.isOpen()&&((s=e.querySelector(l.dropdownCurrent))==null||s.click())})}isOpen(){return this.dropdownElement.classList.contains("active")}ensureOpen(){this.isOpen()||this.withShadowRoot(t=>{const e=t.querySelector(l.dropdownCurrent);e&&e.click()})}patchDropdownShadowDom(){this.withShadowRoot(t=>{this.ensureDropdownOpensUpward(t),this.injectDropdownSearchStyles(t)})}ensureDropdownOpensUpward(t){var e;(e=t.querySelector(l.dropdownRoot))==null||e.classList.add("opens-upward")}injectDropdownSearchStyles(t){if(t.querySelector("style[data-controlado='dropdown-tags']"))return;const e=document.createElement("style");e.dataset.controlado="dropdown-tags",e.textContent=Dt,t.appendChild(e)}withShadowRoot(t){const e=this.dropdownElement.shadowRoot;e&&t(e)}}const Ft=".champion-priority-selector__position-badge",$t=".champion-priority-selector__position-option",zt=".champion-priority-selector__remove",Gt="✕",Ut=0,j=1,y=8,qt=5,Wt=150,Ht="cubic-bezier(0.2, 0, 0, 1)";class V{constructor(t,e,n,o={}){this.element=this.createRootElement(),this.dropdownElement=this.createDropdownElement(),this.championDropdown=new Nt(this.dropdownElement,t,a=>this.addChampion(a),{searchPlaceholderText:o.searchPlaceholderText});const{scrollElement:s,trackElement:r}=this.createSelectedChampionsScroll();this.scrollElement=s,this.trackElement=r,this.enablePositionRestrictions=o.enablePositionRestrictions===!0,this.positionMenuElement=this.enablePositionRestrictions?this.createPositionMenu():null,this.positionMenuChampionId=null,this.positionsByChampionId={},this.emptyElement=this.createEmptyState(t),this.element.append(this.dropdownElement,this.scrollElement),this.positionMenuElement&&this.element.appendChild(this.positionMenuElement),this.config=null,this.configKey=e,this.loadChampions=n,this.champions=[],this.championById=new Map,this.selectedChampionIds=[],this.iconButtons=new Map,this.dragState=null,this.handleWindowPointerMove=a=>this.moveDrag(a),this.handleWindowPointerUp=a=>this.finishDrag(a),this.handleWindowPointerCancel=a=>this.cancelDrag(a),this.handlePositionMenuOutsidePointerDown=a=>this.closePositionMenuOnOutsidePointerDown(a),this.handlePositionMenuKeyDown=a=>this.closePositionMenuOnKeyDown(a),this.setupInFlight=null,this.setupPending=!1}createRootElement(){const t=document.createElement("div");return t.classList.add("champion-priority-selector"),t}createDropdownElement(){const t=document.createElement(u.dropdown);return t.classList.add("dropdown-champions-default","dropdown-drop-up"),t}createSelectedChampionsScroll(){const t=document.createElement(u.scrollable);t.classList.add("champion-priority-selector__scroll"),t.setAttribute("direction","horizontal"),t.setAttribute("overflow-masks","disabled"),t.setAttribute("side-scroll-wheel","true");const e=document.createElement("div");return e.classList.add("champion-priority-selector__track"),t.appendChild(e),{scrollElement:t,trackElement:e}}createEmptyState(t){const e=document.createElement("div");e.classList.add("champion-priority-selector__empty");const n=document.createElement("span");n.innerText="No champions";const o=document.createElement("span"),s=t.replace(/^Add\s+/i,"").toLowerCase();return o.innerText=`Use dropdown to add ${s} option`,e.append(n,o),e}createPositionMenu(){const t=document.createElement("div");t.classList.add("champion-priority-selector__position-menu"),t.hidden=!0;for(const e of E)t.appendChild(this.createPositionOption(e));return t}createPositionOption(t){const e=document.createElement("button");e.classList.add("champion-priority-selector__position-option"),e.type="button",e.dataset.position=t.value,e.title=t.label,e.setAttribute("aria-label",t.label),e.setAttribute("aria-pressed","false"),e.addEventListener("pointerdown",o=>o.stopPropagation()),e.addEventListener("click",o=>{o.stopPropagation(),this.toggleChampionPosition(t.value)});const n=document.createElement("img");return n.src=t.iconPath,n.alt=t.label,n.draggable=!1,e.appendChild(n),e}async setup(){return this.setupPending=!0,this.setupInFlight||(this.setupInFlight=this.runSetupLoop()),this.setupInFlight}refresh(){return this.setup()}async runSetupLoop(){try{for(;this.setupPending;)this.setupPending=!1,await this.performSetup()}finally{this.setupInFlight=null}}async performSetup(){this.champions=await this.loadChampions(),this.championById=new Map(this.champions.map(n=>[n.id,n]));const t=this.getAllowedChampionIds();this.config=nt(this.configKey,{allowedChampionIds:t}),this.selectedChampionIds=K(this.config.champions,t),this.enablePositionRestrictions&&(this.positionsByChampionId=L(this.config.positionsByChampionId,this.selectedChampionIds)),this.championDropdown.renderOptions(this.champions),this.renderSelectedChampions();const e=await this.championDropdown.waitForRender();e&&(this.championDropdown.ensureSearchPlaceholder(e),this.championDropdown.patchDropdownShadowDom())}getAllowedChampionIds(){return new Set(this.championById.keys())}addChampion(t){const e=d(t);e===null||!this.championById.has(e)||this.selectedChampionIds.includes(e)||(this.selectedChampionIds.push(e),this.renderSelectedChampions(),this.saveConfig())}removeChampion(t){const e=d(t),n=this.selectedChampionIds.indexOf(e);e===null||n===-1||(this.selectedChampionIds.splice(n,1),this.positionMenuChampionId===e&&this.closePositionMenu(),this.enablePositionRestrictions&&delete this.positionsByChampionId[String(e)],this.renderSelectedChampions(),this.saveConfig())}moveChampionToIndex(t,e){const n=d(t),o=this.selectedChampionIds.indexOf(n);if(n===null||o===-1)return!1;const[s]=this.selectedChampionIds.splice(o,1),r=Math.max(0,Math.min(e,this.selectedChampionIds.length));return this.selectedChampionIds.splice(r,0,s),o!==r}syncPositionsByChampionId(){this.enablePositionRestrictions&&(this.positionsByChampionId=L(this.positionsByChampionId,this.selectedChampionIds))}saveConfig(){this.syncPositionsByChampionId();const t=this.getAllowedChampionIds();this.config=x(this.configKey,e=>(e.champions=[...this.selectedChampionIds],this.enablePositionRestrictions&&(e.positionsByChampionId={...this.positionsByChampionId}),e),{allowedChampionIds:t,selectedChampionIds:this.selectedChampionIds}),this.enablePositionRestrictions&&(this.positionsByChampionId=this.config.positionsByChampionId||{}),console.debug(this.configKey,this.config)}renderSelectedChampions(t=null,e=null){this.positionMenuChampionId!==null&&this.closePositionMenu();const n=new Set(this.selectedChampionIds);for(const[s,r]of this.iconButtons)n.has(s)||(r.remove(),this.iconButtons.delete(s));if(this.selectedChampionIds.length===0){this.trackElement.replaceChildren(this.emptyElement);return}this.emptyElement.remove();const o=this.selectedChampionIds.map((s,r)=>this.getIconButton(s,r)).filter(Boolean);this.trackElement.append(...o),t&&this.animateReorder(t,e)}getIconButton(t,e){const n=this.championById.get(t);if(!n)return null;let o=this.iconButtons.get(t);o||(o=this.createIconButton(n),this.iconButtons.set(t,o)),o.dataset.rank=String(e+1);const s=this.getChampionPositionTitleSuffix(t);o.title=`${e+1}. ${n.name}${s}`,o.setAttribute("aria-label",`${e+1}. ${n.name}${s}`);const r=o.querySelector("img");r.src=n.squarePortraitPath,r.alt=n.name;const a=o.querySelector(zt);return a.setAttribute("aria-label",`Remove ${n.name}`),a.title=`Remove ${n.name}`,this.renderPositionBadge(o,t),o}createIconButton(t){const e=document.createElement("div");e.classList.add("champion-priority-selector__icon"),e.setAttribute("role","button"),e.tabIndex=0;const n=document.createElement("img");n.draggable=!1;const o=document.createElement("button");return o.classList.add("champion-priority-selector__remove"),o.type="button",o.dataset.icon=Gt,o.addEventListener("pointerdown",s=>s.stopPropagation()),o.addEventListener("click",s=>{s.stopPropagation(),this.removeChampion(t.id)}),e.addEventListener("pointerdown",s=>this.startDrag(s,t.id)),e.addEventListener("auxclick",s=>this.removeChampionOnMiddleClick(s,t.id)),this.enablePositionRestrictions&&e.addEventListener("contextmenu",s=>this.openPositionMenu(s,t.id)),e.append(n,o),e}getChampionAllowedPositions(t){const e=d(t);return e===null?[]:this.positionsByChampionId[String(e)]||[]}getChampionAllowedPositionLabels(t){return this.getChampionAllowedPositions(t).map(e=>{var n;return(n=F(e))==null?void 0:n.label}).filter(Boolean)}getChampionPositionTitleSuffix(t){const e=this.getChampionAllowedPositionLabels(t);return e.length>0?` (${e.join(", ")})`:""}renderPositionBadge(t,e){var o;if((o=t.querySelector(Ft))==null||o.remove(),!this.enablePositionRestrictions)return;const n=this.createPositionBadge(e);n&&t.appendChild(n)}createPositionBadge(t){const e=this.getChampionAllowedPositions(t),n=this.getChampionAllowedPositionLabels(t),o=document.createElement("button");if(o.classList.add("champion-priority-selector__position-badge"),o.type="button",o.title=n.length>0?`${n.join(", ")}. Click to edit positions.`:"Any position. Click to restrict positions.",o.setAttribute("aria-label",o.title),o.addEventListener("pointerdown",a=>a.stopPropagation()),o.addEventListener("click",a=>this.openPositionMenu(a,t,o)),e.length===0)return o.classList.add("champion-priority-selector__position-badge--empty"),o.innerText="+",o;const s=F(e[0]);if(!s)return null;e.length>1&&(o.dataset.count=String(e.length));const r=document.createElement("img");return r.src=s.iconPath,r.alt=s.label,r.draggable=!1,o.appendChild(r),o}openPositionMenu(t,e,n=null){if(!this.enablePositionRestrictions||!this.positionMenuElement)return;const o=d(e);if(o===null||!this.selectedChampionIds.includes(o))return;t.preventDefault(),t.stopPropagation(),this.positionMenuChampionId=o,this.renderPositionMenu(),this.positionMenuElement.hidden=!1,this.positionMenuElement.style.left="0px",this.positionMenuElement.style.top="0px";const{left:s,top:r}=this.getPositionMenuCoordinates(t,n);this.positionMenuElement.style.left=`${s}px`,this.positionMenuElement.style.top=`${r}px`,document.addEventListener("pointerdown",this.handlePositionMenuOutsidePointerDown,!0),document.addEventListener("keydown",this.handlePositionMenuKeyDown,!0)}getPositionMenuCoordinates(t,e=null){const n=this.positionMenuElement.getBoundingClientRect();let o=t.clientX,s=t.clientY;if(e&&t.type==="click"&&t.detail===0){const c=e.getBoundingClientRect();o=c.left+c.width/2,s=c.bottom}const r=Math.min(Math.max(o,y),window.innerWidth-n.width-y),a=Math.min(Math.max(s,y),window.innerHeight-n.height-y);return{left:r,top:a}}renderPositionMenu(){if(!this.positionMenuElement||this.positionMenuChampionId===null)return;const t=new Set(this.getChampionAllowedPositions(this.positionMenuChampionId));this.positionMenuElement.querySelectorAll($t).forEach(e=>{const n=t.has(e.dataset.position);e.classList.toggle("champion-priority-selector__position-option--selected",n),e.setAttribute("aria-pressed",String(n))})}toggleChampionPosition(t){if(!this.enablePositionRestrictions||this.positionMenuChampionId===null)return;const e=I(t);if(!e)return;const n=String(this.positionMenuChampionId),o=new Set(this.positionsByChampionId[n]||[]);o.has(e)?o.delete(e):o.add(e);const s=E.map(c=>c.value).filter(c=>o.has(c));s.length>0?this.positionsByChampionId[n]=s:delete this.positionsByChampionId[n],this.renderPositionMenu();const r=this.iconButtons.get(this.positionMenuChampionId),a=this.selectedChampionIds.indexOf(this.positionMenuChampionId);r&&a!==-1&&this.getIconButton(this.positionMenuChampionId,a),this.saveConfig()}closePositionMenuOnOutsidePointerDown(t){var e;(e=this.positionMenuElement)!=null&&e.contains(t.target)||this.closePositionMenu()}closePositionMenuOnKeyDown(t){t.key==="Escape"&&this.closePositionMenu()}closePositionMenu(){this.positionMenuElement&&(this.positionMenuElement.hidden=!0,this.positionMenuChampionId=null,document.removeEventListener("pointerdown",this.handlePositionMenuOutsidePointerDown,!0),document.removeEventListener("keydown",this.handlePositionMenuKeyDown,!0))}startDrag(t,e){var o;if(t.button===j){t.preventDefault();return}if(t.button!==Ut)return;this.dragState&&this.clearDragState();const n=this.iconButtons.get(e);if(n){this.dragState={championId:e,pointerId:t.pointerId,startX:t.clientX,startY:t.clientY,active:!1,moved:!1};try{(o=n.setPointerCapture)==null||o.call(n,t.pointerId)}catch{}window.addEventListener("pointermove",this.handleWindowPointerMove),window.addEventListener("pointerup",this.handleWindowPointerUp),window.addEventListener("pointercancel",this.handleWindowPointerCancel)}}removeChampionOnMiddleClick(t,e){t.button===j&&(t.preventDefault(),t.stopPropagation(),this.removeChampion(e))}moveDrag(t){var p;if(!this.dragState||this.dragState.pointerId!==t.pointerId)return;const e=this.dragState.championId,n=t.clientX-this.dragState.startX,o=t.clientY-this.dragState.startY,s=Math.hypot(n,o);if(!this.dragState.active){if(s<qt)return;this.dragState.active=!0,(p=this.iconButtons.get(e))==null||p.classList.add("champion-priority-selector__icon--dragging")}t.preventDefault();const r=this.getDropIndex(t.clientX,e),a=this.selectedChampionIds.indexOf(e);if(r===a||r===-1)return;const c=this.getIconPositions();this.moveChampionToIndex(e,r)&&(this.dragState.moved=!0,this.renderSelectedChampions(c,e))}finishDrag(t){if(!this.dragState||this.dragState.pointerId!==t.pointerId)return;const e=this.dragState.active,n=this.dragState.moved;this.clearDragState(),e&&n&&this.saveConfig()}cancelDrag(t){!this.dragState||this.dragState.pointerId!==t.pointerId||this.clearDragState()}clearDragState(){var o;if(!this.dragState)return;const{championId:t,pointerId:e}=this.dragState,n=this.iconButtons.get(t);n==null||n.classList.remove("champion-priority-selector__icon--dragging");try{(o=n==null?void 0:n.releasePointerCapture)==null||o.call(n,e)}catch{}window.removeEventListener("pointermove",this.handleWindowPointerMove),window.removeEventListener("pointerup",this.handleWindowPointerUp),window.removeEventListener("pointercancel",this.handleWindowPointerCancel),this.dragState=null}getDropIndex(t,e){const n=this.selectedChampionIds.filter(o=>o!==e);for(let o=0;o<n.length;o++){const s=this.iconButtons.get(n[o]);if(!s)continue;const r=s.getBoundingClientRect();if(t<r.left+r.width/2)return o}return n.length}getIconPositions(){const t=new Map;for(const e of this.selectedChampionIds){const n=this.iconButtons.get(e);n&&t.set(e,n.getBoundingClientRect())}return t}animateReorder(t,e){for(const n of this.selectedChampionIds){if(n===e)continue;const o=this.iconButtons.get(n),s=t.get(n);if(!o||!s||typeof o.animate!="function")continue;const r=o.getBoundingClientRect(),a=s.left-r.left,c=s.top-r.top;a===0&&c===0||o.animate([{transform:`translate(${a}px, ${c}px)`},{transform:"translate(0, 0)"}],{duration:Wt,easing:Ht})}}}const Yt=200,k="auto-select-champ-select-menu--collapsed",jt="auto-select-champ-select-menu-button-wrapper--open";class _{constructor(t,e){this.element=document.createElement(u.radioInputOption),this.element.classList.add("lol-settings-voice-input-mode-option","auto-select-checkbox"),this.element.innerText=t,this.config=null,this.configKey=e,this.setupComplete=!1}setup(){this.syncFromConfig(),this.setupComplete||(this.element.addEventListener("click",()=>this.toggle()),this.setupComplete=!0)}syncFromConfig(){this.config=nt(this.configKey),this.element.toggleAttribute("selected",this.config.enabled===!0)}toggle(){return console.debug("auto-champion-select: Toggling",this.configKey),this.config=x(this.configKey,t=>(t.enabled=!t.enabled,t)),this.element.toggleAttribute("selected",this.config.enabled===!0),this.config.enabled}}class Vt{constructor(t,e,n){this.element=document.createElement("div"),this.element.classList.add("auto-select-champ-select-menu",k),this.buttonWrapper=document.createElement("div"),this.buttonWrapper.classList.add("auto-select-champ-select-menu-button-wrapper"),this.headerElement=document.createElement("button"),this.headerElement.classList.add("auto-select-champ-select-menu__header"),this.headerElement.type="button",this.headerElement.setAttribute("aria-label",t),this.headerElement.setAttribute("aria-expanded","false"),this.headerElement.addEventListener("click",()=>this.toggle()),this.contentElement=document.createElement("div"),this.contentElement.classList.add("auto-select-champ-select-menu__content"),this.titleElement=document.createElement("div"),this.titleElement.classList.add("auto-select-champ-select-menu__title"),this.titleElement.textContent=t,this.buttonWrapper.append(this.headerElement,this.element),this.contentElement.appendChild(this.titleElement),this.element.appendChild(this.contentElement),this.returnControlsToSocialRoster=e,this.controlElements=n,this.boundCloseOnOutsideInteraction=o=>this.closeOnOutsideInteraction(o),this.buttonObserver=null,this.buttonMountFrame=null,this.buttonMountTask=null,this.hiddenStates=new WeakMap,this.mounted=!1}async mount(){return this.mounted?this.mountButton():(this.mounted=!0,this.controlElements.forEach(t=>{this.hiddenStates.set(t,t.classList.contains("hidden")),t.classList.remove("hidden"),this.contentElement.appendChild(t)}),this.observeButtonContainer(),document.addEventListener("pointerdown",this.boundCloseOnOutsideInteraction,!0),this.mountButton())}unmount(){return this.mounted?(this.mounted=!1,this.stopButtonMounting(),document.removeEventListener("pointerdown",this.boundCloseOnOutsideInteraction,!0),this.setOpen(!1),this.buttonWrapper.remove(),this.restoreHiddenStates(),this.returnControlsToSocialRoster()):this.returnControlsToSocialRoster()}stopButtonMounting(){var t;(t=this.buttonObserver)==null||t.disconnect(),this.buttonObserver=null,this.buttonMountFrame!==null&&(cancelAnimationFrame(this.buttonMountFrame),this.buttonMountFrame=null),this.buttonMountTask=null}restoreHiddenStates(){this.controlElements.forEach(t=>{t.classList.toggle("hidden",this.hiddenStates.get(t)===!0),this.hiddenStates.delete(t)})}isOpen(){return!this.element.classList.contains(k)}setOpen(t){this.element.classList.toggle(k,!t),this.buttonWrapper.classList.toggle(jt,t),this.headerElement.setAttribute("aria-expanded",String(t))}toggle(){this.setOpen(!this.isOpen())}closeOnOutsideInteraction(t){if(!this.isOpen())return;(typeof t.composedPath=="function"?t.composedPath():[]).includes(this.buttonWrapper)||this.buttonWrapper.contains(t.target)||this.setOpen(!1)}observeButtonContainer(){this.buttonObserver=new MutationObserver(()=>this.scheduleMountButton()),this.buttonObserver.observe(document.body,{childList:!0,subtree:!0})}scheduleMountButton(){this.buttonMountFrame===null&&(this.buttonMountFrame=requestAnimationFrame(()=>{this.buttonMountFrame=null,this.mountButton()}))}mountButton(){return this.buttonMountTask||(this.buttonMountTask=this.appendButtonToContainer().finally(()=>{this.buttonMountTask=null})),this.buttonMountTask}async appendButtonToContainer(){let t=R();for(;this.mounted&&!t;)await g(Yt),t=R();if(!this.mounted||!t)return;const e=t.querySelector(l.firstChampSelectSquareButton);this.buttonWrapper.parentNode===t&&this.buttonWrapper.nextSibling===e||t.insertBefore(this.buttonWrapper,e)}}class Xt{constructor(t,...e){this.element=document.createElement(u.socialRosterGroup),this.element.addEventListener("post-render",()=>this.onPostRender()),this.element.addEventListener("click",()=>this.onClick()),this.label=t,this.collapsibleElements=e,this.waitRender()}waitRender(){new MutationObserver((t,e)=>{if(this.element.querySelector(l.socialRosterGroupLabel)){const n=new Event("post-render");this.element.dispatchEvent(n),e.disconnect()}}).observe(this.element,{childList:!0})}onPostRender(){var t;this.element.querySelector(l.socialRosterGroupLabel).innerText=this.label,(t=this.element.querySelector(l.socialRosterGroupHeader))==null||t.removeAttribute("draggable")}onClick(){var t;this.collapsibleElements.forEach(e=>{e.closest(".auto-select-champ-select-menu")||e.classList.toggle("hidden")}),(t=this.element.querySelector(l.socialRosterGroupArrow))==null||t.toggleAttribute("open")}}const S="Balaclava: Auto Champion Select";function Jt(i){return typeof(i==null?void 0:i.then)=="function"}class D{constructor({id:t,name:e,legend:n,tags:o,group:s,callback:r,toasts:a}){this.id=t,this.name=e,this.legend=n,this.tags=o,this.group=s,this.perform=this.perform.bind(this),this.callback=r,this.toasts=a}perform(){try{const t=this.callback();if(Jt(t))return Toast.promise(t,{loading:this.toasts.loading,success:this.toasts.success,error:this.toasts.error});const e=this.toasts.success||(t?this.toasts.on:this.toasts.off);Toast.success(e)}catch(t){Toast.error(this.toasts.error),console.error(t)}}}class lt extends D{constructor(t,e,n){super({id:`${e}Switch`,name:()=>`Auto ${t} [${C(e).enabled?"ON":"OFF"}]`,legend:()=>C(e).enabled?"Turn OFF":"Turn ON",tags:[S,e,"switch"],group:S,callback:n,toasts:{on:`Auto ${t} is ON!`,off:`Auto ${t} is OFF!`,error:`Failed to toggle Auto ${t}. Check console.`}})}}function Kt(i){return x(i,e=>(e.force=!e.force,e)).force}class dt extends D{constructor(t,e){super({id:`${e}ForceSwitch`,name:()=>`Force ${t} [${C(e).force?"ON":"OFF"}]`,legend:()=>`Ignore team intent and force ${t} the selected champion`,tags:[S,e,"force","switch"],group:S,callback:()=>Kt(e),toasts:{on:`Force ${t} is ON!`,off:`Force ${t} is OFF!`,error:`Failed to toggle Force ${t}. Check console.`}})}}class Qt extends D{constructor(t){super({id:"RefreshDropdowns",name:()=>"Refresh Champions",legend:()=>"Normally champion selectors refresh automatically...",tags:[S,"refresh"],group:S,callback:t,toasts:{success:"Refreshed Champions!",error:"Failed to refresh Champions. Check console."}})}}class Zt extends lt{constructor(t){super("Pick","controladoPick",t)}}class te extends lt{constructor(t){super("Ban","controladoBan",t)}}class ee extends dt{constructor(){super("Pick","controladoPick")}}class ne extends dt{constructor(){super("Ban","controladoBan")}}function oe(i){for(const t of i)CommandBar.addAction(t)}const ie=2e3,se=200,re=6e4,ae=".auto-select-champ-select-menu__header",b=Object.freeze({autoAccept:"controladoAutoAccept",pick:"controladoPick",ban:"controladoBan"});async function ce(){C(b.autoAccept).enabled===!0&&(console.debug("auto-champion-select(auto-accept): Ready check detected, accepting in 2 seconds..."),await g(ie),await le())}async function le(){const i=await f("POST",h.readyCheckAccept);i.ok?console.debug("auto-champion-select(auto-accept): Accepted ready check"):console.error("auto-champion-select(auto-accept): Failed to accept ready check",i)}async function de(i){const t=await f("GET",h.gameflowPhase),e=t.ok?await t.json():null;i.handleGameflowPhase(e)}function he({championSelect:i,champSelectControlsMenu:t,setupChampionSelectors:e}){let n=0;return async function(a){const c=++n;try{await o(a,c)}catch(p){console.error("auto-champion-select: Failed to handle gameflow phase",p)}};async function o(r,a){r==="ReadyCheck"&&ce().catch(c=>console.error("auto-champion-select(auto-accept): Failed to handle ready check",c)),await s(r),a===n&&await e()}async function s(r){r==="ChampSelect"?(i.mount(),await t.mount()):(i.unmount(),await t.unmount())}}function ue(){const i=new Mt,t=new _("Accept",b.autoAccept),e=new _("Pick",b.pick),n=new V("Add pick",b.pick,_t,{enablePositionRestrictions:!0}),o=new _("Ban",b.ban),s=new V("Add ban",b.ban,Lt),r=pe(n,s),a=me(t,e,o),c=new Xt("Auto champion select",r,a);return{championSelect:i,autoAcceptToggle:t,pickToggle:e,banToggle:o,pickChampionSelector:n,banChampionSelector:s,selectorsContainer:r,checkboxesContainer:a,pluginSection:c,championSelectors:[n,s]}}function pe(...i){const t=document.createElement("div");return t.append(...i.map(e=>e.element)),t}function me(...i){const t=document.createElement("div");return t.classList.add("auto-select-checkboxes-div"),t.append(...i.map(e=>e.element)),t}function fe({pluginSection:i,checkboxesContainer:t,selectorsContainer:e}){let n=null,o=0,s=()=>!1;async function r(a){let c=q();for(;!c;){if(s()||a!==o)return;await g(se),c=q()}s()||a!==o||c.append(i.element,t,e)}return{setIsChampSelectControlsMounted(a){s=a},returnControlsToSocialRoster(){if(n)return n;const a=++o;return n=r(a).catch(c=>console.error("auto-champion-select: Failed to return controls to social roster",c)).finally(()=>{n=null}),n}}}function ge({autoAcceptToggle:i,pickToggle:t,banToggle:e}){i.setup(),t.setup(),e.setup()}async function Ce(i){await Promise.all(i.map(t=>t.setup()))}async function we(i){await Promise.all(i.map(t=>t.refresh()))}function be(){const i=ue(),t=fe(i),e=new Vt("Auto Champion Select",t.returnControlsToSocialRoster,[i.checkboxesContainer,i.selectorsContainer]);t.setIsChampSelectControlsMounted(()=>e.mounted);const n={...i,champSelectControlsMenu:e,setupToggles:()=>ge(i),setupChampionSelectors:()=>Ce(i.championSelectors),refreshChampionSelectors:()=>we(i.championSelectors),refreshPickChampionSelector:async()=>{await i.pickChampionSelector.refresh()}};return n.handleGameflowPhase=he(n),n}function Se(i){N(h.gameflowPhase,t=>{i.handleGameflowPhase(t.data)}),N(h.wallet,async t=>{if(t.eventType==="Update"){console.debug("auto-champion-select(wallet): Refreshing champion selectors...");try{await i.refreshPickChampionSelector()}catch(e){console.error("auto-champion-select(wallet): Failed to refresh champion selectors",e)}}})}function Pe({pickToggle:i,banToggle:t,refreshChampionSelectors:e}){oe([new Zt(()=>i.toggle()),new te(()=>t.toggle()),new ee,new ne,new Qt(e)])}function ye(i){let t=null,e=null;function n(){e==null||e.disconnect(),e=null,t!==null&&(cancelAnimationFrame(t),t=null)}const o=setTimeout(()=>{n()},re);function s(){if(!(R()!==null))return;clearTimeout(o),n(),document.querySelector(ae)!==null||i.handleGameflowPhase("ChampSelect")}e=new MutationObserver(()=>{t===null&&(t=requestAnimationFrame(()=>{t=null,s()}))}),e.observe(document.body,{childList:!0,subtree:!0}),s()}async function Ee(){const i=be();i.setupToggles(),Pe(i),Se(i),await de(i),ye(i),console.debug(`auto-champion-select(${ut}): Report bugs to Balaclava#1912`)}let X=!1;function J(){X||(X=!0,Ee().catch(i=>console.error("auto-champion-select: Failed to initialize",i)))}document.readyState==="loading"?window.addEventListener("load",J,{once:!0}):J();export{J as load};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auto-champion-select",
3
- "version": "1.8.4",
3
+ "version": "1.8.6",
4
4
  "description": "Pick or ban automatically! 🐧",
5
5
  "author": "balaclava",
6
6
  "repository": {