auto-champion-select 1.9.0 → 1.9.1

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 +31 -31
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,19 +1,19 @@
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}.dropdown-champions-default .controlado-champion-option__content{display:inline-flex;align-items:center;gap:8px;width:100%;min-width:0;line-height:20px;vertical-align:middle}.dropdown-champions-default .controlado-champion-option__icon{flex:0 0 20px;width:20px;height:20px;border:1px solid rgba(200,170,110,.65);border-radius:50%;background:#010a13;object-fit:cover;box-sizing:border-box;pointer-events:none}.dropdown-champions-default .controlado-champion-option__name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.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:1px solid #785a28;background:#1e2328;box-shadow:inset 0 0 0 1px #010a13;box-sizing:border-box;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-color:#c8aa6e;-webkit-mask:url(/fe/lol-static-assets/images/nav-icon-collections.svg) center / 20px 20px no-repeat;mask:url(/fe/lol-static-assets/images/nav-icon-collections.svg) center / 20px 20px no-repeat;pointer-events:none;transform:translate(-50%,-50%)}.auto-select-champ-select-menu__header:hover{border-color:#c8aa6e;background:#2a3038}.auto-select-champ-select-menu__header:hover:before{background-color:#f0e6d2}.auto-select-champ-select-menu__header:active,.auto-select-champ-select-menu-button-wrapper--open .auto-select-champ-select-menu__header{border-color:#c89b3c;background:#111820}.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{border-color:#c8aa6e;background:#1e2328}.auto-select-champ-select-menu-button-wrapper--open .auto-select-champ-select-menu__header:before{background-color:#f0e6d2}.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 o=document.createElement("style");o.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}.dropdown-champions-default .controlado-champion-option__content{display:inline-flex;align-items:center;gap:8px;width:100%;min-width:0;line-height:20px;vertical-align:middle}.dropdown-champions-default .controlado-champion-option__icon{display:block;flex:0 0 20px;width:20px;height:20px;border:1px solid rgba(200,170,110,.65);border-radius:50%;background:#010a13;object-fit:cover;box-sizing:border-box;pointer-events:none}.dropdown-champions-default .controlado-champion-option__static-icon{display:grid;place-items:center;color:#f0e6d2;font-family:var(--font-display);font-size:13px;font-weight:700;line-height:1}.dropdown-champions-default .controlado-champion-option__text{display:flex;align-items:baseline;gap:8px;width:100%;min-width:0}.dropdown-champions-default .controlado-champion-option__name{flex:0 0 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dropdown-champions-default .controlado-champion-option__description{flex:1 1 auto;min-width:0;color:#a09b8ce6;font-size:11px;line-height:1;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.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__icon--random{display:grid;place-items:center;color:#f0e6d2;font-family:var(--font-display);font-weight:700}.champion-priority-selector__random-icon{font-size:20px;line-height:1;transform:translateY(-.5px);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:1px solid #785a28;background:#1e2328;box-shadow:inset 0 0 0 1px #010a13;box-sizing:border-box;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-color:#c8aa6e;-webkit-mask:url(/fe/lol-static-assets/images/nav-icon-collections.svg) center / 20px 20px no-repeat;mask:url(/fe/lol-static-assets/images/nav-icon-collections.svg) center / 20px 20px no-repeat;pointer-events:none;transform:translate(-50%,-50%)}.auto-select-champ-select-menu__header:hover{border-color:#c8aa6e;background:#2a3038}.auto-select-champ-select-menu__header:hover:before{background-color:#f0e6d2}.auto-select-champ-select-menu__header:active,.auto-select-champ-select-menu-button-wrapper--open .auto-select-champ-select-menu__header{border-color:#c89b3c;background:#111820}.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{border-color:#c8aa6e;background:#1e2328}.auto-select-champ-select-menu-button-wrapper--open .auto-select-champ-select-menu__header:before{background-color:#f0e6d2}.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(o)}}catch(e){console.error("vite-plugin-css-injected-by-js",e)}})();
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.9.0
7
+ * @version 1.9.1
8
8
  * @license GPL-3.0-or-later
9
9
  */
10
- import{request as b,sleep as C,linkEndpoint as W}from"https://cdn.jsdelivr.net/npm/balaclava-utils@latest";const Lt="1.9.0",vt={enabled:!1},Rt={enabled:!1,force:!1,quickAction:!1,champions:[432,235],positionsByChampionId:{235:["BOTTOM","UTILITY"],432:["UTILITY"]}},Mt={enabled:!1,force:!1,quickAction:!1,champions:[157,777,238,38]},xt={controladoAutoAccept:vt,controladoPick:Rt,controladoBan:Mt};function d(o){const t=Number(o);return Number.isSafeInteger(t)&&t>0?t:null}function pt(o,t=null){const e=[],n=new Set,i=Bt(t);if(!Array.isArray(o))return e;for(const s of o){const r=d(s);r===null||n.has(r)||i&&!i.has(r)||(e.push(r),n.add(r))}return e}function Bt(o){return o?new Set(Array.from(o,d).filter(t=>t!==null)):null}const I=[{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"}],Dt=new Set(I.map(o=>o.value));function k(o){const t=String(o??"").toUpperCase();return Dt.has(t)?t:null}function L(o,t=null){const e={};if(!o||typeof o!="object"||Array.isArray(o))return e;const n=Ft(t);for(const[i,s]of Object.entries(o)){const r=d(i);if(r===null||!Array.isArray(s))continue;const a=String(r);if(n&&!n.has(a))continue;const c=[],h=new Set;for(const u of s){const w=k(u);!w||h.has(w)||(c.push(w),h.add(w))}c.length>0&&(e[a]=c)}return e}function Ft(o){if(!o)return null;const t=new Set;for(const e of o){const n=d(e);n!==null&&t.add(String(n))}return t}function j(o){return I.find(t=>t.value===o)}function mt(o,t){var n;const e=d(t);return e===null?[]:((n=o==null?void 0:o.positionsByChampionId)==null?void 0:n[String(e)])||[]}function $t(o,t,e){const n=mt(o,t);if(n.length===0)return!0;const i=k(e);return i!==null&&n.includes(i)}const V=new Set;function Nt(o,t){return Object.prototype.hasOwnProperty.call(o,t)}function O(o,t){return Nt(o,t)}function U(){if(!globalThis.DataStore)throw new Error("DataStore is not available");return globalThis.DataStore}function qt(o){return o!==null&&typeof o=="object"&&!Array.isArray(o)}function Q(o){if(o!==void 0)return JSON.parse(JSON.stringify(o))}function ft(o){const t=xt[o];if(!t)throw new Error(`Unknown auto-champion-select config key: ${o}`);return Q(t)}function gt(o,t,e={}){const n=ft(o),i=qt(t)?Q(t):{},s={...n,...i},r={enabled:s.enabled===!0};return O(n,"force")&&(r.force=s.force===!0),O(n,"quickAction")&&(r.quickAction=s.quickAction===!0),O(n,"champions")&&(r.champions=pt(s.champions,e.allowedChampionIds)),O(n,"positionsByChampionId")&&(r.positionsByChampionId=L(s.positionsByChampionId,e.selectedChampionIds||r.champions)),r}function Ct(o,t,e={}){const n=t===void 0?ft(o):t;return gt(o,n,e)}function y(o,t={}){const n=U().get(o);return Ct(o,n,t)}function zt(o,t,e={}){const n=U(),i=gt(o,t,e);return n.set(o,i),i}function Gt(o,t){return JSON.stringify(o)===JSON.stringify(t)}function Ut(o,t,e){V.has(o)||(V.add(o),console.warn(`auto-champion-select: Repaired ${o} 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 bt(o,t={}){const e=U(),n=e.get(o),i=Ct(o,n,t);return(n===void 0||!Gt(n,i))&&(n!==void 0&&Ut(o,n,i),e.set(o,i)),i}function v(o,t,e={}){const n=y(o,e),i=Q(n),s=t(i)||i;return zt(o,s,e)}const p=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",recommendedChampionPositions:"/lol-perks/v1/recommended-champion-positions",champSelectSession:"/lol-champ-select/v1/session",championIcon(o){return`/lol-game-data/assets/v1/champion-icons/${o}.png`},champSelectAction(o){return`/lol-champ-select/v1/session/actions/${o}`}}),Qt=1e3;function H(o){let t=null;return function(){return t||(t=Promise.resolve().then(o).finally(()=>{t=null})),t}}function wt(o,t={}){const e=[],n=new Set;if(!Array.isArray(o))return e;for(const i of o){if(!i||typeof i!="object")continue;const s=d(i.id),r=typeof i.name=="string"?i.name:"";s===null||!r||n.has(r)||(e.push({...i,id:s,name:r,squarePortraitPath:i.squarePortraitPath||p.championIcon(s),recommendedPositions:t[String(s)]||[]}),n.add(r))}return e.sort((i,s)=>i.name.localeCompare(s.name)),e}function Ht(o){const t={};if(!o||typeof o!="object"||Array.isArray(o))return t;for(const[e,n]of Object.entries(o))!n||typeof n!="object"||Array.isArray(n)||(t[e]=n.recommendedPositions);return L(t)}async function Yt(){try{const o=await b("GET",p.recommendedChampionPositions);return o.ok?Ht(await o.json()):(console.warn("auto-champion-select(recommended-champion-positions): Request failed",o),{})}catch(o){return console.warn("auto-champion-select(recommended-champion-positions): Failed to load",o),{}}}const yt=H(Yt);async function Wt(){let o=await b("GET",p.ownedChampions);for(;!o.ok;)console.debug("auto-champion-select(owned-champions-minimal): Retrying..."),o=await b("GET",p.ownedChampions),await C(Qt);return wt(await o.json(),await yt())}async function jt(){const[o,t]=await Promise.all([b("GET",p.championSummary),yt()]);return wt(await o.json(),t)}const Vt=H(Wt),Xt=H(jt),X=300,K=2e3,Kt=4e3,f=Object.freeze({APPLIED:"applied",TRY_NEXT_CHAMPION:"try-next-champion",ABORT_ACTION:"abort-action"});function $(o){return Array.isArray(o)?o.flat():[]}function Jt(o){return $(o).filter(t=>t.type==="ban"&&t.completed===!0).map(t=>t.championId)}function J(o){return Array.isArray(o)?o:[]}function R(o){const t=new Set;for(const e of o){const n=d(e);n!==null&&t.add(n)}return t}function Z(o){return o.type==="pick"?0:1}function tt(){return{pickConfig:y("controladoPick"),banConfig:y("controladoBan")}}function Zt(o){return o.quickAction===!0}function te(){const o=Kt-K;return K+Math.floor(Math.random()*(o+1))}class ee{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 C(X);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 C(X)}}finally{this.watchTask=null}}async refreshSessionState(){var s,r;const t=await b("GET",p.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=J(this.session.myTeam),n=J(this.session.theirTeam),i=e.find(a=>a.cellId===this.localPlayerCellId);this.localPlayerAssignedPosition=k(i==null?void 0:i.assignedPosition),this.localPlayerIntentChampionId=d(i==null?void 0:i.championPickIntent),this.pickedChampionIds=R([...e,...n].map(a=>a.championId)),this.bannedChampionIds=R([...((s=this.session.bans)==null?void 0:s.myTeamBans)||[],...((r=this.session.bans)==null?void 0:r.theirTeamBans)||[],...Jt(this.actions)]),this.teammateIntentChampionIds=R(e.map(a=>a.championPickIntent))}async runAutoSelectCycle(){const{pickConfig:t,banConfig:e}=tt();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 i of n){if(!this.isActionAvailable(i))continue;const s=this.getConfigForActionType(i.type,{pickConfig:t,banConfig:e});if(!(s!=null&&s.enabled))continue;let r=i,a=s,c=this.getAvailableChampionIdsForAction(r,a);if(c.length===0)continue;const h=c.find(u=>this.isPickIntentAlreadyApplied(r,u));if(h!==void 0)c=[h];else if(!Zt(a)){const u=await this.delayAndRefreshPendingAction(r);if(!u)return;r=u.action,a=u.config,c=u.championIds}for(const u of c){const w=await this.attemptChampionForAction(r,u,a);if(w===f.APPLIED)break;if(w===f.ABORT_ACTION)return}}}getLocalPlayerActions(){return $(this.actions).filter(t=>this.isPendingLocalPlayerAction(t)).sort((t,e)=>Z(t)-Z(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}getAvailableChampionIdsForAction(t,e){return e.champions.map(n=>d(n)).filter(n=>n!==null&&!this.isChampionUnavailableForAction(t,n,e))}async delayAndRefreshPendingAction(t){const e=te();console.debug(`auto-champion-select: Quick action is off, waiting ${e}ms before ${t.type}...`);const n=this.watchVersion;if(await C(e),!this.mounted||n!==this.watchVersion)return null;let i=null;try{await this.refreshSessionState(),i=this.findPendingAction(t)}catch(a){return console.debug("auto-champion-select: Failed to refresh champion select after action delay",a),null}if(!i||!this.isActionAvailable(i))return null;const s=this.getConfigForActionType(t.type,tt());if(!(s!=null&&s.enabled))return null;const r=this.getAvailableChampionIdsForAction(i,s);return r.length===0?null:{action:i,config:s,championIds:r}}async attemptChampionForAction(t,e,n){const i=d(e);if(i===null||this.isChampionUnavailableForAction(t,i,n))return f.TRY_NEXT_CHAMPION;if(this.isPickIntentAlreadyApplied(t,i)||(console.debug(`auto-champion-select: Trying to ${t.type} ${i}...`),(await this.selectChampion(t.id,i)).ok))return f.APPLIED;console.debug(`auto-champion-select: Failed to ${t.type} ${i}, refreshing champ select state...`);const r=await this.refreshPendingAction(t);return!r||!this.isActionAvailable(r)||!this.isChampionUnavailableForAction(r,i,n)?f.ABORT_ACTION:(console.debug(`auto-champion-select: ${i} is unavailable after refresh, trying next ${t.type}...`),f.TRY_NEXT_CHAMPION)}isPickIntentAlreadyApplied(t,e){return t.type==="pick"&&t.isInProgress!==!0&&(this.localPlayerIntentChampionId===e||d(t.championId)===e)}async refreshPendingAction(t){try{await this.refreshSessionState()}catch(e){return console.debug("auto-champion-select: Failed to refresh champion select action",e),null}return this.findPendingAction(t)}findPendingAction(t){return $(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"&&!$t(n,e,this.localPlayerAssignedPosition)){const i=mt(n,e);return this.localPlayerAssignedPosition?console.debug(`auto-champion-select: Picking ${e} but assigned position ${this.localPlayerAssignedPosition} is not in ${i.join(", ")}, skipping...`):console.debug(`auto-champion-select: Picking ${e} but no assigned position is available for ${i.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=p.champSelectAction(t);return b("PATCH",n,{body:{championId:e,completed:!0}})}}const m=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:m.dropdownOption,dropdownOptionSelected:`${m.dropdownOption}[selected]`,dropdownOptionsContainer:".ui-dropdown-options-container",dropdownOptions:".ui-dropdown-options",dropdownScrollable:m.scrollable,socialRosterGroupArrow:".arrow",socialRosterGroupHeader:".group-header",socialRosterGroupLabel:"span"});function et(){return document.querySelector(l.socialRoster)}function N(){return document.querySelector(l.champSelectButtons)}const ne=50,oe=100,M=210,x=40,_="controlado-position-filter",q="controlado-position-filter-visible",g="controlado-position-filter__badge",z="controlado-position-filter__badge--active",nt="controlado-placeholder",ot="controlado-search",Pt="controlado-filter-input",At="controlado-tag--search",B="controlado-quick-action",E="controlado-quick-action-toggle",St="controlado-quick-action-toggle--active",ie=`url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M13.1 2 4 13.2h6.7L9.9 22 20 9.8h-6.9L13.1 2z'/%3E%3C/svg%3E")`,Et="controlado-tag",It="controlado-filter-icon",P="controlado-filter-icon--trash",se="controlado-champion-option__content",re="controlado-champion-option__icon",ae="controlado-champion-option__name",it=`
10
+ import{request as g,sleep as b,linkEndpoint as st}from"https://cdn.jsdelivr.net/npm/balaclava-utils@latest";const Qt="1.9.1",jt={enabled:!1},Wt={enabled:!1,force:!1,quickAction:!1,champions:[432,235],positionsByChampionId:{235:["BOTTOM","UTILITY"],432:["UTILITY"]}},Kt={enabled:!1,force:!1,quickAction:!1,champions:[157,777,238,38]},Vt={controladoAutoAccept:jt,controladoPick:Wt,controladoBan:Kt};function d(o){const t=Number(o);return Number.isSafeInteger(t)&&t>0?t:null}function Xt(o,t=null){const e=[],n=new Set,i=Jt(t);if(!Array.isArray(o))return e;for(const s of o){const r=d(s);r===null||n.has(r)||i&&!i.has(r)||(e.push(r),n.add(r))}return e}function Jt(o){return o?new Set(Array.from(o,d).filter(t=>t!==null)):null}const M=[{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"}],Zt=new Set(M.map(o=>o.value));function x(o){const t=String(o??"").toUpperCase();return Zt.has(t)?t:null}function $(o,t=null){const e={};if(!o||typeof o!="object"||Array.isArray(o))return e;const n=te(t);for(const[i,s]of Object.entries(o)){const r=d(i);if(r===null||!Array.isArray(s))continue;const a=String(r);if(n&&!n.has(a))continue;const c=[],u=new Set;for(const A of s){const F=x(A);!F||u.has(F)||(c.push(F),u.add(F))}c.length>0&&(e[a]=c)}return e}function te(o){if(!o)return null;const t=new Set;for(const e of o){const n=d(e);n!==null&&t.add(String(n))}return t}function rt(o){return M.find(t=>t.value===o)}function Lt(o,t){var n;const e=d(t);return e===null?[]:((n=o==null?void 0:o.positionsByChampionId)==null?void 0:n[String(e)])||[]}function ee(o,t,e){const n=Lt(o,t);if(n.length===0)return!0;const i=x(e);return i!==null&&n.includes(i)}const C="random";function f(o){return o===C}function R(o){return f(o)?C:d(o)}function S(o){const t=R(o);return t===null?null:String(t)}function Z(o,t=null){const e=[],n=new Set,i=ne(t);if(!Array.isArray(o))return e;for(const s of o){const r=R(s);if(r===null)continue;const a=String(r);n.has(a)||!f(r)&&i&&!i.has(r)||(e.push(r),n.add(a))}return e}function I(o){return o?Array.from(o,d).filter(t=>t!==null):[]}function ne(o){return o?new Set(Array.from(o,d).filter(t=>t!==null)):null}const at=new Set;function oe(o,t){return Object.prototype.hasOwnProperty.call(o,t)}function B(o,t){return oe(o,t)}function ie(o){return Array.isArray(o.priorityOptions)?o.priorityOptions:o.champions}function tt(){if(!globalThis.DataStore)throw new Error("DataStore is not available");return globalThis.DataStore}function se(o){return o!==null&&typeof o=="object"&&!Array.isArray(o)}function et(o){if(o!==void 0)return JSON.parse(JSON.stringify(o))}function vt(o){const t=Vt[o];if(!t)throw new Error(`Unknown auto-champion-select config key: ${o}`);return et(t)}function Rt(o,t,e={}){const n=vt(o),i=se(t)?et(t):{},s={...n,...i},r={enabled:s.enabled===!0};return B(n,"force")&&(r.force=s.force===!0),B(n,"quickAction")&&(r.quickAction=s.quickAction===!0),B(n,"champions")&&(r.priorityOptions=Z(ie(s),e.allowedChampionIds),r.champions=I(r.priorityOptions)),B(n,"positionsByChampionId")&&(r.positionsByChampionId=$(s.positionsByChampionId,e.selectedChampionIds||r.champions)),r}function Mt(o,t,e={}){const n=t===void 0?vt(o):t;return Rt(o,n,e)}function w(o,t={}){const n=tt().get(o);return Mt(o,n,t)}function re(o,t,e={}){const n=tt(),i=Rt(o,t,e);return n.set(o,i),i}function ae(o,t){return JSON.stringify(o)===JSON.stringify(t)}function ce(o,t,e){at.has(o)||(at.add(o),console.warn(`auto-champion-select: Repaired ${o} 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 xt(o,t={}){const e=tt(),n=e.get(o),i=Mt(o,n,t);return(n===void 0||!ae(n,i))&&(n!==void 0&&ce(o,n,i),e.set(o,i)),i}function q(o,t,e={}){const n=w(o,e),i=et(n),s=t(i)||i;return re(o,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",recommendedChampionPositions:"/lol-perks/v1/recommended-champion-positions",champSelectSession:"/lol-champ-select/v1/session",pickableChampionIds:"/lol-champ-select/v1/pickable-champion-ids",bannableChampionIds:"/lol-champ-select/v1/bannable-champion-ids",championIcon(o){return`/lol-game-data/assets/v1/champion-icons/${o}.png`},champSelectAction(o){return`/lol-champ-select/v1/session/actions/${o}`}}),le=1e3;function nt(o){let t=null;return function(){return t||(t=Promise.resolve().then(o).finally(()=>{t=null})),t}}function Ft(o,t={}){const e=[],n=new Set;if(!Array.isArray(o))return e;for(const i of o){if(!i||typeof i!="object")continue;const s=d(i.id),r=typeof i.name=="string"?i.name:"";s===null||!r||n.has(r)||(e.push({...i,id:s,name:r,squarePortraitPath:i.squarePortraitPath||h.championIcon(s),recommendedPositions:t[String(s)]||[]}),n.add(r))}return e.sort((i,s)=>i.name.localeCompare(s.name)),e}function de(o){const t={};if(!o||typeof o!="object"||Array.isArray(o))return t;for(const[e,n]of Object.entries(o))!n||typeof n!="object"||Array.isArray(n)||(t[e]=n.recommendedPositions);return $(t)}async function he(){try{const o=await g("GET",h.recommendedChampionPositions);return o.ok?de(await o.json()):(console.warn("auto-champion-select(recommended-champion-positions): Request failed",o),{})}catch(o){return console.warn("auto-champion-select(recommended-champion-positions): Failed to load",o),{}}}const ot=nt(he);async function ue(){let o=await g("GET",h.ownedChampions);for(;!o.ok;)console.debug("auto-champion-select(owned-champions-minimal): Retrying..."),o=await g("GET",h.ownedChampions),await b(le);return Ft(await o.json(),await ot())}async function pe(){const[o,t]=await Promise.all([g("GET",h.championSummary),ot()]);return Ft(await o.json(),t)}const me=nt(ue),Bt=nt(pe),ct=300,lt=2e3,fe=4e3,ge=-1,p=Object.freeze({SATISFIED:"satisfied",TRY_NEXT_CHAMPION:"try-next-champion",STOP_CYCLE:"stop-cycle"}),E=Object.freeze({CONTINUE:"continue-cycle",STOP:"stop-cycle"}),m=Object.freeze({READY:"ready",SKIP_ACTION:"skip-action",STOP_CYCLE:"stop-cycle"}),O=Object.freeze({SATISFIED:"satisfied",TRY_NEXT_PRIORITY_OPTION:"try-next-priority-option",STOP_CYCLE:"stop-cycle"});function W(o){return Array.isArray(o)?o.flat():[]}function ye(o){return W(o).filter(t=>t.type==="ban"&&t.completed===!0).map(t=>t.championId)}function dt(o){return Array.isArray(o)?o:[]}function z(o){const t=new Set;for(const e of o){const n=d(e);n!==null&&t.add(n)}return t}function ht(o){return o.type==="pick"?0:1}function ut(){return{pickConfig:w("controladoPick"),banConfig:w("controladoBan")}}function Ce(o){return o.quickAction===!0}function Pe(){const o=fe-lt;return lt+Math.floor(Math.random()*(o+1))}function be(o){const t=[...o];for(let e=t.length-1;e>0;e--){const n=Math.floor(Math.random()*(e+1));[t[e],t[n]]=[t[n],t[e]]}return t}function Se(o){return Array.isArray(o)&&o.length===1&&o[0]===ge}class we{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 b(ct);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 b(ct)}}finally{this.watchTask=null}}async refreshSessionState(){var s,r;const t=await g("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=dt(this.session.myTeam),n=dt(this.session.theirTeam),i=e.find(a=>a.cellId===this.localPlayerCellId);this.localPlayerAssignedPosition=x(i==null?void 0:i.assignedPosition),this.localPlayerIntentChampionId=d(i==null?void 0:i.championPickIntent),this.pickedChampionIds=z([...e,...n].map(a=>a.championId)),this.bannedChampionIds=z([...((s=this.session.bans)==null?void 0:s.myTeamBans)||[],...((r=this.session.bans)==null?void 0:r.theirTeamBans)||[],...ye(this.actions)]),this.teammateIntentChampionIds=z(e.map(a=>a.championPickIntent))}async runAutoSelectCycle(){const t=ut();if(!t.pickConfig.enabled&&!t.banConfig.enabled)return;const e=this.getLocalPlayerActions();if(e.length===0){console.debug("auto-champion-select: No local player sub actions found, skipping..."),this.unmount();return}for(const n of e)if(await this.runAutoSelectForAction(n,t)===E.STOP)return}async runAutoSelectForAction(t,e){const n=await this.prepareActionForAutoSelect(t,e);switch(n.status){case m.READY:return this.tryAutoSelectPlan(n.plan);case m.SKIP_ACTION:return E.CONTINUE;case m.STOP_CYCLE:return E.STOP;default:throw new Error(`Unexpected auto-select plan status: ${n.status}`)}}async prepareActionForAutoSelect(t,e){if(!this.isActionAvailable(t))return{status:m.SKIP_ACTION};const n=this.getConfigForActionType(t.type,e);if(!(n!=null&&n.enabled))return{status:m.SKIP_ACTION};const i=this.createAutoSelectPlan(t,n);if(!i)return{status:m.SKIP_ACTION};const s=this.createPlanLimitedToAlreadySatisfiedPriorityOption(i);if(s)return{status:m.READY,plan:s};if(Ce(n))return{status:m.READY,plan:i};const r=await this.delayAndRefreshAutoSelectPlan(t);return r?{status:m.READY,plan:this.createPlanLimitedToAlreadySatisfiedPriorityOption(r)||r}:{status:m.STOP_CYCLE}}async tryAutoSelectPlan(t){for(const e of t.priorityOptions){const n=await this.tryPriorityOptionForAction(t.action,e,t.config);if(n===O.SATISFIED)return E.CONTINUE;if(n===O.STOP_CYCLE)return E.STOP}return E.CONTINUE}async tryPriorityOptionForAction(t,e,n){if(this.isPriorityOptionAlreadySatisfied(t,e))return O.SATISFIED;const i=await this.resolveChampionIdsForPriorityOption(t,e,n),s=f(e)&&!this.isLockingExistingPickIntent(t,i);for(const r of i){const a={tryNextRandomCandidateOnFailure:s},c=await this.attemptChampionForAction(t,r,n,a);if(c===p.SATISFIED)return O.SATISFIED;if(c===p.STOP_CYCLE)return O.STOP_CYCLE}return O.TRY_NEXT_PRIORITY_OPTION}getLocalPlayerActions(){return W(this.actions).filter(t=>this.isPendingLocalPlayerAction(t)).sort((t,e)=>ht(t)-ht(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}createAutoSelectPlan(t,e){const n=this.getAvailablePriorityOptionsForAction(t,e);return n.length===0?null:{action:t,config:e,priorityOptions:n}}getAvailablePriorityOptionsForAction(t,e){return Z(e.priorityOptions||e.champions).filter(n=>!this.isPriorityOptionUnavailableForAction(t,n,e))}isPriorityOptionUnavailableForAction(t,e,n){return!f(e)&&this.isChampionUnavailableForAction(t,e,n)}createPlanLimitedToAlreadySatisfiedPriorityOption(t){const e=t.priorityOptions.find(n=>this.isPriorityOptionAlreadySatisfied(t.action,n));return e===void 0?null:{...t,priorityOptions:[e]}}isPriorityOptionAlreadySatisfied(t,e){return f(e)?this.hasAnyPickIntentSet(t):this.isPickIntentSetToChampion(t,e)}hasAnyPickIntentSet(t){return t.type==="pick"&&t.isInProgress!==!0&&(this.localPlayerIntentChampionId!==null||d(t.championId)!==null)}isLockingExistingPickIntent(t,e){return t.type==="pick"&&t.isInProgress===!0&&e.length===1&&e[0]===this.getPickIntentChampionId(t)}getPickIntentChampionId(t){return t.type!=="pick"?null:d(t.championId)??this.localPlayerIntentChampionId}async delayAndRefreshAutoSelectPlan(t){const e=Pe();console.debug(`auto-champion-select: Quick action is off, waiting ${e}ms before ${t.type}...`);const n=this.watchVersion;if(await b(e),!this.mounted||n!==this.watchVersion)return null;let i=null;try{await this.refreshSessionState(),i=this.findPendingAction(t)}catch(r){return console.debug("auto-champion-select: Failed to refresh champion select after action delay",r),null}if(!i||!this.isActionAvailable(i))return null;const s=this.getConfigForActionType(t.type,ut());return s!=null&&s.enabled?this.createAutoSelectPlan(i,s):null}async resolveChampionIdsForPriorityOption(t,e,n){return f(e)?this.resolveRandomChampionIdsForAction(t,n):[e]}async resolveRandomChampionIdsForAction(t,e){if(t.type==="pick"&&t.isInProgress===!0){const r=this.getPickIntentChampionId(t);if(r!==null&&!this.isChampionUnavailableForAction(t,r,e))return[r]}const n=await this.fetchRandomCandidateChampionIds(t);if(n.length===0)return[];const i=n.filter(r=>!this.isChampionUnavailableForAction(t,r,e)),s=t.type==="pick"?await this.preferAssignedPositionRandomPickCandidates(i):i;return be(s)}async fetchRandomCandidateChampionIds(t){const e=t.type==="pick"?h.pickableChampionIds:h.bannableChampionIds;try{const n=await g("GET",e);if(!n.ok)return console.debug(`auto-champion-select: Failed to load random ${t.type} candidates`,n),[];const i=await n.json();return t.type==="ban"&&Se(i)?(console.debug("auto-champion-select: Random ban endpoint returned unrestricted sentinel, falling back to all champions..."),await this.fetchAllChampionIdsForRandomBan()):Xt(i)}catch(n){return console.debug(`auto-champion-select: Failed to load random ${t.type} candidates`,n),[]}}async fetchAllChampionIdsForRandomBan(){return(await Bt()).map(e=>e.id)}async preferAssignedPositionRandomPickCandidates(t){if(!this.localPlayerAssignedPosition)return t;const e=await ot(),n=t.filter(i=>{var s;return(s=e[String(i)])==null?void 0:s.includes(this.localPlayerAssignedPosition)});return n.length>0?n:t}async attemptChampionForAction(t,e,n,i={}){const s=d(e);if(s===null||this.isChampionUnavailableForAction(t,s,n))return p.TRY_NEXT_CHAMPION;if(this.isPickIntentSetToChampion(t,s)||(console.debug(`auto-champion-select: Trying to ${t.type} ${s}...`),(await this.selectChampion(t.id,s)).ok))return p.SATISFIED;console.debug(`auto-champion-select: Failed to ${t.type} ${s}, refreshing champ select state...`);const a=await this.refreshPendingAction(t);return!a||!this.isActionAvailable(a)?p.STOP_CYCLE:i.tryNextRandomCandidateOnFailure===!0?this.hasAnyPickIntentSet(a)?p.SATISFIED:(console.debug(`auto-champion-select: Failed random ${t.type} candidate ${s}, trying next ${t.type}...`),p.TRY_NEXT_CHAMPION):this.isChampionUnavailableForAction(a,s,n)?(console.debug(`auto-champion-select: ${s} is unavailable after refresh, trying next ${t.type}...`),p.TRY_NEXT_CHAMPION):p.STOP_CYCLE}isPickIntentSetToChampion(t,e){return t.type==="pick"&&t.isInProgress!==!0&&(this.localPlayerIntentChampionId===e||d(t.championId)===e)}async refreshPendingAction(t){try{await this.refreshSessionState()}catch(e){return console.debug("auto-champion-select: Failed to refresh champion select action",e),null}return this.findPendingAction(t)}findPendingAction(t){return W(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"&&!ee(n,e,this.localPlayerAssignedPosition)){const i=Lt(n,e);return this.localPlayerAssignedPosition?console.debug(`auto-champion-select: Picking ${e} but assigned position ${this.localPlayerAssignedPosition} is not in ${i.join(", ")}, skipping...`):console.debug(`auto-champion-select: Picking ${e} but no assigned position is available for ${i.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 g("PATCH",n,{body:{championId:e,completed:!0}})}}const y=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:y.dropdownOption,dropdownOptionSelected:`${y.dropdownOption}[selected]`,dropdownOptionsContainer:".ui-dropdown-options-container",dropdownOptions:".ui-dropdown-options",dropdownScrollable:y.scrollable,socialRosterGroupArrow:".arrow",socialRosterGroupHeader:".group-header",socialRosterGroupLabel:"span"});function pt(){return document.querySelector(l.socialRoster)}function K(){return document.querySelector(l.champSelectButtons)}const Ae=50,Ee=100,U=210,Y=40,D="controlado-position-filter",V="controlado-position-filter-visible",P="controlado-position-filter__badge",X="controlado-position-filter__badge--active",mt="controlado-placeholder",ft="controlado-search",Nt="controlado-filter-input",Dt="controlado-tag--search",G="controlado-quick-action",v="controlado-quick-action-toggle",$t="controlado-quick-action-toggle--active",Oe=`url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M13.1 2 4 13.2h6.7L9.9 22 20 9.8h-6.9L13.1 2z'/%3E%3C/svg%3E")`,qt="controlado-tag",zt="controlado-filter-icon",T="controlado-filter-icon--trash",gt="controlado-champion-option__content",yt="controlado-champion-option__icon",Ie="controlado-champion-option__text",Ct="controlado-champion-option__name",Te="controlado-champion-option__description",_e="controlado-champion-option__static-icon",Pt=`
11
11
  ${l.dropdownRoot} {
12
12
  position: relative;
13
13
  }
14
14
 
15
15
  :host {
16
- --framed-dropdown-scrollable-max-height: ${M}px;
16
+ --framed-dropdown-scrollable-max-height: ${U}px;
17
17
  }
18
18
 
19
19
  :host ${l.dropdownRoot} dt${l.dropdownCurrent} {
@@ -38,7 +38,7 @@ import{request as b,sleep as C,linkEndpoint as W}from"https://cdn.jsdelivr.net/n
38
38
  position: absolute;
39
39
  top: auto;
40
40
  bottom: 100%;
41
- height: ${M}px;
41
+ height: ${U}px;
42
42
  overflow: hidden;
43
43
  transform-origin: bottom;
44
44
  transform: translateY(0);
@@ -46,7 +46,7 @@ import{request as b,sleep as C,linkEndpoint as W}from"https://cdn.jsdelivr.net/n
46
46
 
47
47
  ${l.dropdownOptions},
48
48
  ${l.dropdownScrollable} {
49
- height: ${M}px;
49
+ height: ${U}px;
50
50
  }
51
51
 
52
52
  ${l.dropdownOptions} {
@@ -58,11 +58,11 @@ import{request as b,sleep as C,linkEndpoint as W}from"https://cdn.jsdelivr.net/n
58
58
  box-sizing: border-box;
59
59
  }
60
60
 
61
- ${l.dropdownOptionsContainer}.${q} ${l.dropdownOptions} ${l.dropdownScrollable} {
62
- padding-top: ${x}px;
61
+ ${l.dropdownOptionsContainer}.${V} ${l.dropdownOptions} ${l.dropdownScrollable} {
62
+ padding-top: ${Y}px;
63
63
  }
64
64
 
65
- .${_} {
65
+ .${D} {
66
66
  position: absolute;
67
67
  left: 0;
68
68
  right: 0;
@@ -71,8 +71,8 @@ import{request as b,sleep as C,linkEndpoint as W}from"https://cdn.jsdelivr.net/n
71
71
  display: flex;
72
72
  align-items: center;
73
73
  justify-content: space-between;
74
- height: ${x}px;
75
- min-height: ${x}px;
74
+ height: ${Y}px;
75
+ min-height: ${Y}px;
76
76
  padding: 0 17px;
77
77
  border-bottom: 1px solid #1e282d;
78
78
  background: #010a13;
@@ -80,7 +80,7 @@ import{request as b,sleep as C,linkEndpoint as W}from"https://cdn.jsdelivr.net/n
80
80
  box-sizing: border-box;
81
81
  }
82
82
 
83
- .${g} {
83
+ .${P} {
84
84
  appearance: none;
85
85
  display: grid;
86
86
  place-items: center;
@@ -97,19 +97,19 @@ import{request as b,sleep as C,linkEndpoint as W}from"https://cdn.jsdelivr.net/n
97
97
  outline: none;
98
98
  }
99
99
 
100
- .${g}:hover,
101
- .${g}:focus {
100
+ .${P}:hover,
101
+ .${P}:focus {
102
102
  border-color: #c8aa6e;
103
103
  background: #0f1b2d;
104
104
  }
105
105
 
106
- .${z} {
106
+ .${X} {
107
107
  border-color: #f0e6d2;
108
108
  background: #09202c;
109
109
  box-shadow: 0 0 0 1px #c89b3c, 0 0 10px rgba(200, 155, 60, 0.45);
110
110
  }
111
111
 
112
- .${g} img {
112
+ .${P} img {
113
113
  display: block;
114
114
  width: 18px;
115
115
  height: 18px;
@@ -118,13 +118,13 @@ import{request as b,sleep as C,linkEndpoint as W}from"https://cdn.jsdelivr.net/n
118
118
  pointer-events: none;
119
119
  }
120
120
 
121
- .${g}:hover img,
122
- .${g}:focus img,
123
- .${z} img {
121
+ .${P}:hover img,
122
+ .${P}:focus img,
123
+ .${X} img {
124
124
  opacity: 1;
125
125
  }
126
126
 
127
- .${It} {
127
+ .${zt} {
128
128
  cursor: default;
129
129
  display: inline-block;
130
130
  flex: 0 0 auto;
@@ -137,14 +137,14 @@ import{request as b,sleep as C,linkEndpoint as W}from"https://cdn.jsdelivr.net/n
137
137
  -webkit-mask-size: 18px 18px;
138
138
  }
139
139
 
140
- .${P} {
140
+ .${T} {
141
141
  cursor: pointer;
142
142
  background-color: #c86e6e;
143
143
  -webkit-mask-image: url('/fe/lol-uikit/images/icon_delete.png');
144
144
  -webkit-mask-size: 12px 12px;
145
145
  }
146
146
 
147
- .${Pt} {
147
+ .${Nt} {
148
148
  flex: 0 0 auto;
149
149
  min-width: 0;
150
150
  width: auto;
@@ -158,7 +158,7 @@ import{request as b,sleep as C,linkEndpoint as W}from"https://cdn.jsdelivr.net/n
158
158
  font-weight: inherit;
159
159
  }
160
160
 
161
- .${Et} {
161
+ .${qt} {
162
162
  cursor: default;
163
163
  display: inline-flex;
164
164
  align-items: center;
@@ -176,7 +176,7 @@ import{request as b,sleep as C,linkEndpoint as W}from"https://cdn.jsdelivr.net/n
176
176
  box-shadow: inset 0 0 8px rgba(15, 30, 45, 0.6);
177
177
  }
178
178
 
179
- .${At} {
179
+ .${Dt} {
180
180
  border-color: #d7b46a;
181
181
  color: #f6e1b2;
182
182
  background: #1a232f;
@@ -190,7 +190,7 @@ import{request as b,sleep as C,linkEndpoint as W}from"https://cdn.jsdelivr.net/n
190
190
  font-weight: 500;
191
191
  }
192
192
 
193
- .${E} {
193
+ .${v} {
194
194
  appearance: none;
195
195
  display: inline-grid;
196
196
  place-items: center;
@@ -206,26 +206,26 @@ import{request as b,sleep as C,linkEndpoint as W}from"https://cdn.jsdelivr.net/n
206
206
  outline: none;
207
207
  }
208
208
 
209
- .${E}::before {
209
+ .${v}::before {
210
210
  content: "";
211
211
  display: block;
212
212
  width: 16px;
213
213
  height: 16px;
214
214
  background-color: #785a28;
215
- -webkit-mask-image: ${ie};
215
+ -webkit-mask-image: ${Oe};
216
216
  -webkit-mask-repeat: no-repeat;
217
217
  -webkit-mask-position: center;
218
218
  -webkit-mask-size: 16px 16px;
219
219
  filter: drop-shadow(0 0 1px #010a13);
220
220
  }
221
221
 
222
- .${E}:hover::before,
223
- .${E}:focus::before {
222
+ .${v}:hover::before,
223
+ .${v}:focus::before {
224
224
  background-color: #c8aa6e;
225
225
  }
226
226
 
227
- .${St}::before {
227
+ .${$t}::before {
228
228
  background-color: #f0e6d2;
229
229
  filter: drop-shadow(0 0 3px rgba(200, 170, 110, 0.75));
230
230
  }
231
- `;function st(o){const t=document.createElement(m.dropdownOption);return t.setAttribute("slot",m.dropdownOption),t.innerText=o,t}class ce{constructor(t,e,n,i={}){this.dropdownElement=t,this.placeholderText=e,this.searchPlaceholderText=i.searchPlaceholderText||"Search",this.quickActionLabel=i.quickActionLabel||"Pick/ban instantly",this.isQuickActionEnabled=typeof i.isQuickActionEnabled=="function"?i.isQuickActionEnabled:null,this.onQuickActionToggle=typeof i.onQuickActionToggle=="function"?i.onQuickActionToggle:null,this.onChampionSelected=n,this.placeholderOption=null,this.searchQuery="",this.activePositionFilter=null,this.hasRecommendedPositionData=!1,this.recommendedPositionsByOption=new WeakMap}renderOptions(t){this.dropdownElement.replaceChildren(),this.hasRecommendedPositionData=!1,this.placeholderOption=st(this.placeholderText),this.placeholderOption.setAttribute("selected","true"),this.hidePlaceholderOption(),this.dropdownElement.appendChild(this.placeholderOption);for(const e of t){const n=this.getChampionRecommendedPositions(e),i=this.createChampionOption(e,n);n.length>0&&(this.hasRecommendedPositionData=!0),this.dropdownElement.appendChild(i)}this.hasRecommendedPositionData||(this.activePositionFilter=null),this.applyOptionFilters()}createChampionOption(t,e){const n=st("");return this.recommendedPositionsByOption.set(n,new Set(e)),n.title=t.name,n.appendChild(this.createChampionOptionContent(t)),n.addEventListener("click",()=>{this.onChampionSelected(t.id),requestAnimationFrame(()=>this.reset())}),n}createChampionOptionContent(t){const e=document.createElement("span");e.classList.add(se);const n=document.createElement("img");n.classList.add(re),n.src=t.squarePortraitPath,n.alt="",n.draggable=!1,n.loading="lazy";const i=document.createElement("span");return i.classList.add(ae),i.innerText=t.name,e.append(n,i),e}getChampionRecommendedPositions(t){return Array.isArray(t.recommendedPositions)?t.recommendedPositions:[]}async waitForRender(){for(let t=0;t<ne;t++){const e=this.dropdownElement.shadowRoot;if(this.dropdownElement.isConnected&&(e!=null&&e.querySelector(l.dropdownCurrent)))return e;await C(oe)}return null}ensureSearchPlaceholder(t){if(t.querySelector(`#${nt}`))return;const e=t.querySelector(l.dropdownCurrent);e&&e.appendChild(this.createSearchPlaceholder())}ensureQuickActionToggle(t){if(!this.isQuickActionAvailable()||t.querySelector(`#${B}`)){this.syncQuickActionToggle(t);return}const e=t.querySelector(l.dropdownCurrent);e&&(e.appendChild(this.createQuickActionToggle()),this.syncQuickActionToggle(t))}ensurePositionFilter(t){var n;const e=t.querySelector(l.dropdownOptionsContainer);if(e){if(!this.hasRecommendedPositionData){(n=t.querySelector(`.${_}`))==null||n.remove(),e.classList.remove(q),this.activePositionFilter=null;return}e.classList.add(q),t.querySelector(`.${_}`)||e.insertBefore(this.createPositionFilter(),e.firstChild),this.syncPositionFilter(t)}}createPositionFilter(){const t=document.createElement("div");t.classList.add(_),t.setAttribute("role","toolbar"),t.setAttribute("aria-label","Filter champions by position");for(const e of I)t.appendChild(this.createPositionFilterBadge(e));return t}createPositionFilterBadge(t){const e=document.createElement("button");e.classList.add(g),e.type="button",e.dataset.position=t.value,e.title=t.label,e.setAttribute("aria-label",t.label),e.setAttribute("aria-pressed","false");const n=document.createElement("img");return n.src=t.iconPath,n.alt="",n.draggable=!1,e.appendChild(n),e.addEventListener("pointerdown",i=>{i.preventDefault(),i.stopPropagation()}),e.addEventListener("click",i=>{i.preventDefault(),i.stopPropagation(),this.togglePositionFilter(t.value)}),e}createSearchPlaceholder(){const t=document.createElement("div");t.classList.add(Et,At),t.id=nt;const e=document.createElement("input");e.classList.add(Pt),e.id=ot,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(It),n.addEventListener("click",()=>{n.classList.contains(P)&&this.clearSearch(e,n)}),e.addEventListener("input",i=>{this.ensureOpen(),this.setSearchQuery(i.target.value),n.classList.toggle(P,!!i.target.value)}),["pointerdown","click"].forEach(i=>{t.addEventListener(i,s=>s.stopPropagation()),n.addEventListener(i,s=>s.stopPropagation())}),["pointerdown","focusin"].forEach(i=>{e.addEventListener(i,s=>s.stopPropagation(),!0)}),t.appendChild(n),t.appendChild(e),t}createQuickActionToggle(){const t=document.createElement("button");return t.classList.add(E),t.id=B,t.type="button",t.title=this.quickActionLabel,t.setAttribute("aria-label",this.quickActionLabel),t.setAttribute("aria-pressed","false"),["pointerdown","click"].forEach(e=>{t.addEventListener(e,n=>{n.preventDefault(),n.stopPropagation()})}),t.addEventListener("click",()=>{var e;(e=this.onQuickActionToggle)==null||e.call(this),this.syncQuickActionToggle()}),t}isQuickActionAvailable(){return!!(this.isQuickActionEnabled&&this.onQuickActionToggle)}syncQuickActionToggle(t=this.dropdownElement.shadowRoot){if(!this.isQuickActionAvailable()||!t)return;const e=t.querySelector(`#${B}`);if(!e)return;const n=this.isQuickActionEnabled()===!0;e.classList.toggle(St,n),e.setAttribute("aria-pressed",String(n)),e.title=this.quickActionLabel,e.setAttribute("aria-label",this.quickActionLabel)}togglePositionFilter(t){const e=k(t);e&&(this.activePositionFilter=this.activePositionFilter===e?null:e,this.withShadowRoot(n=>this.syncPositionFilter(n)),this.applyOptionFilters())}syncPositionFilter(t){t.querySelectorAll(`.${g}`).forEach(e=>{const n=e.dataset.position===this.activePositionFilter;e.classList.toggle(z,n),e.setAttribute("aria-pressed",String(n))})}clearSearch(t,e){t.value="",this.setSearchQuery(""),e.classList.toggle(P,!1)}setSearchQuery(t){this.searchQuery=t,this.applyOptionFilters()}applyOptionFilters(){const t=this.searchQuery.toLowerCase();this.dropdownElement.querySelectorAll(l.dropdownOption).forEach(n=>{if(n===this.placeholderOption){this.hidePlaceholderOption();return}this.matchesSearchQuery(n,t)&&this.matchesPositionFilter(n)?n.style.display="":n.style.display="none"})}matchesSearchQuery(t,e){return(t.textContent??"").toLowerCase().includes(e)}matchesPositionFilter(t){var e;return this.activePositionFilter?((e=this.recommendedPositionsByOption.get(t))==null?void 0:e.has(this.activePositionFilter))===!0:!0}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(`#${ot}`),i=e.querySelector(`.${P}`);n&&i?this.clearSearch(n,i):(n&&(n.value="",this.setSearchQuery("")),i&&i.classList.remove(P)),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),this.ensurePositionFilter(t)})}ensureDropdownOpensUpward(t){var e;(e=t.querySelector(l.dropdownRoot))==null||e.classList.add("opens-upward")}injectDropdownSearchStyles(t){const e=t.querySelector("style[data-controlado='dropdown-tags']");if(e){e.textContent=it;return}const n=document.createElement("style");n.dataset.controlado="dropdown-tags",n.textContent=it,t.appendChild(n)}withShadowRoot(t){const e=this.dropdownElement.shadowRoot;e&&t(e)}}const le=".champion-priority-selector__position-badge",de=".champion-priority-selector__position-option",he=".champion-priority-selector__remove",ue="✕",pe=0,rt=1,T=8,me=5,fe=150,ge="cubic-bezier(0.2, 0, 0, 1)";class at{constructor(t,e,n,i={}){this.element=this.createRootElement(),this.dropdownElement=this.createDropdownElement(),this.championDropdown=new ce(this.dropdownElement,t,a=>this.addChampion(a),{quickActionLabel:i.quickActionLabel,searchPlaceholderText:i.searchPlaceholderText,isQuickActionEnabled:()=>this.isQuickActionEnabled(),onQuickActionToggle:()=>this.toggleQuickAction()});const{scrollElement:s,trackElement:r}=this.createSelectedChampionsScroll();this.scrollElement=s,this.trackElement=r,this.enablePositionRestrictions=i.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.quickAction=!1,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(m.dropdown);return t.classList.add("dropdown-champions-default","dropdown-drop-up"),t}createSelectedChampionsScroll(){const t=document.createElement(m.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 i=document.createElement("span"),s=t.replace(/^Add\s+/i,"").toLowerCase();return i.innerText=`Use dropdown to add ${s} option`,e.append(n,i),e}createPositionMenu(){const t=document.createElement("div");t.classList.add("champion-priority-selector__position-menu"),t.hidden=!0;for(const e of I)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",i=>i.stopPropagation()),e.addEventListener("click",i=>{i.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=bt(this.configKey,{allowedChampionIds:t}),this.quickAction=this.config.quickAction===!0,this.selectedChampionIds=pt(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.ensureQuickActionToggle(e),this.championDropdown.patchDropdownShadowDom())}getAllowedChampionIds(){return new Set(this.championById.keys())}isQuickActionEnabled(){return this.quickAction===!0}toggleQuickAction(){const t=this.getAllowedChampionIds();return this.config=v(this.configKey,e=>(e.quickAction=e.quickAction!==!0,e),{allowedChampionIds:t,selectedChampionIds:this.selectedChampionIds}),this.quickAction=this.config.quickAction===!0,this.championDropdown.syncQuickActionToggle(),this.quickAction}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),i=this.selectedChampionIds.indexOf(n);if(n===null||i===-1)return!1;const[s]=this.selectedChampionIds.splice(i,1),r=Math.max(0,Math.min(e,this.selectedChampionIds.length));return this.selectedChampionIds.splice(r,0,s),i!==r}syncPositionsByChampionId(){this.enablePositionRestrictions&&(this.positionsByChampionId=L(this.positionsByChampionId,this.selectedChampionIds))}saveConfig(){this.syncPositionsByChampionId();const t=this.getAllowedChampionIds();this.config=v(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 i=this.selectedChampionIds.map((s,r)=>this.getIconButton(s,r)).filter(Boolean);this.trackElement.append(...i),t&&this.animateReorder(t,e)}getIconButton(t,e){const n=this.championById.get(t);if(!n)return null;let i=this.iconButtons.get(t);i||(i=this.createIconButton(n),this.iconButtons.set(t,i)),i.dataset.rank=String(e+1);const s=this.getChampionPositionTitleSuffix(t);i.title=`${e+1}. ${n.name}${s}`,i.setAttribute("aria-label",`${e+1}. ${n.name}${s}`);const r=i.querySelector("img");r.src=n.squarePortraitPath,r.alt=n.name;const a=i.querySelector(he);return a.setAttribute("aria-label",`Remove ${n.name}`),a.title=`Remove ${n.name}`,this.renderPositionBadge(i,t),i}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 i=document.createElement("button");return i.classList.add("champion-priority-selector__remove"),i.type="button",i.dataset.icon=ue,i.addEventListener("pointerdown",s=>s.stopPropagation()),i.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,i),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=j(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 i;if((i=t.querySelector(le))==null||i.remove(),!this.enablePositionRestrictions)return;const n=this.createPositionBadge(e);n&&t.appendChild(n)}createPositionBadge(t){const e=this.getChampionAllowedPositions(t),n=this.getChampionAllowedPositionLabels(t),i=document.createElement("button");if(i.classList.add("champion-priority-selector__position-badge"),i.type="button",i.title=n.length>0?`${n.join(", ")}. Click to edit positions.`:"Any position. Click to restrict positions.",i.setAttribute("aria-label",i.title),i.addEventListener("pointerdown",a=>a.stopPropagation()),i.addEventListener("click",a=>this.openPositionMenu(a,t,i)),e.length===0)return i.classList.add("champion-priority-selector__position-badge--empty"),i.innerText="+",i;const s=j(e[0]);if(!s)return null;e.length>1&&(i.dataset.count=String(e.length));const r=document.createElement("img");return r.src=s.iconPath,r.alt=s.label,r.draggable=!1,i.appendChild(r),i}openPositionMenu(t,e,n=null){if(!this.enablePositionRestrictions||!this.positionMenuElement)return;const i=d(e);if(i===null||!this.selectedChampionIds.includes(i))return;t.preventDefault(),t.stopPropagation(),this.positionMenuChampionId=i,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 i=t.clientX,s=t.clientY;if(e&&t.type==="click"&&t.detail===0){const c=e.getBoundingClientRect();i=c.left+c.width/2,s=c.bottom}const r=Math.min(Math.max(i,T),window.innerWidth-n.width-T),a=Math.min(Math.max(s,T),window.innerHeight-n.height-T);return{left:r,top:a}}renderPositionMenu(){if(!this.positionMenuElement||this.positionMenuChampionId===null)return;const t=new Set(this.getChampionAllowedPositions(this.positionMenuChampionId));this.positionMenuElement.querySelectorAll(de).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=k(t);if(!e)return;const n=String(this.positionMenuChampionId),i=new Set(this.positionsByChampionId[n]||[]);i.has(e)?i.delete(e):i.add(e);const s=I.map(c=>c.value).filter(c=>i.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 i;if(t.button===rt){t.preventDefault();return}if(t.button!==pe)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{(i=n.setPointerCapture)==null||i.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===rt&&(t.preventDefault(),t.stopPropagation(),this.removeChampion(e))}moveDrag(t){var h;if(!this.dragState||this.dragState.pointerId!==t.pointerId)return;const e=this.dragState.championId,n=t.clientX-this.dragState.startX,i=t.clientY-this.dragState.startY,s=Math.hypot(n,i);if(!this.dragState.active){if(s<me)return;this.dragState.active=!0,(h=this.iconButtons.get(e))==null||h.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 i;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{(i=n==null?void 0:n.releasePointerCapture)==null||i.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(i=>i!==e);for(let i=0;i<n.length;i++){const s=this.iconButtons.get(n[i]);if(!s)continue;const r=s.getBoundingClientRect();if(t<r.left+r.width/2)return i}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 i=this.iconButtons.get(n),s=t.get(n);if(!i||!s||typeof i.animate!="function")continue;const r=i.getBoundingClientRect(),a=s.left-r.left,c=s.top-r.top;a===0&&c===0||i.animate([{transform:`translate(${a}px, ${c}px)`},{transform:"translate(0, 0)"}],{duration:fe,easing:ge})}}}const Ce=200,D="auto-select-champ-select-menu--collapsed",be="auto-select-champ-select-menu-button-wrapper--open";class F{constructor(t,e){this.element=document.createElement(m.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=bt(this.configKey),this.element.toggleAttribute("selected",this.config.enabled===!0)}toggle(){return console.debug("auto-champion-select: Toggling",this.configKey),this.config=v(this.configKey,t=>(t.enabled=!t.enabled,t)),this.element.toggleAttribute("selected",this.config.enabled===!0),this.config.enabled}}class we{constructor(t,e,n){this.element=document.createElement("div"),this.element.classList.add("auto-select-champ-select-menu",D),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=i=>this.closeOnOutsideInteraction(i),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(D)}setOpen(t){this.element.classList.toggle(D,!t),this.buttonWrapper.classList.toggle(be,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=N();for(;this.mounted&&!t;)await C(Ce),t=N();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 ye{constructor(t,...e){this.element=document.createElement(m.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")}}function kt(o){var t,e;o&&((e=(t=globalThis.Toast)==null?void 0:t.success)==null||e.call(t,o))}function G(o){var t,e;o&&((e=(t=globalThis.Toast)==null?void 0:t.error)==null||e.call(t,o))}function Pe(o,t){const e=globalThis.Toast;return typeof(e==null?void 0:e.promise)=="function"?e.promise(o,t):o}const S="Balaclava: Auto Champion Select";function Ae(o){return typeof(o==null?void 0:o.then)=="function"}class Y{constructor({id:t,name:e,legend:n,tags:i,group:s,callback:r,toasts:a}){this.id=t,this.name=e,this.legend=n,this.tags=i,this.group=s,this.perform=this.perform.bind(this),this.callback=r,this.toasts=a}perform(){try{const t=this.callback();if(Ae(t))return Pe(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);kt(e)}catch(t){G(this.toasts.error),console.error(t)}}}class Ot extends Y{constructor(t,e,n){super({id:`${e}Switch`,name:()=>`Auto ${t} [${y(e).enabled?"ON":"OFF"}]`,legend:()=>y(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 Se(o){return v(o,e=>(e.force=!e.force,e)).force}class Tt extends Y{constructor(t,e){super({id:`${e}ForceSwitch`,name:()=>`Force ${t} [${y(e).force?"ON":"OFF"}]`,legend:()=>`Ignore team intent and force ${t} the selected champion`,tags:[S,e,"force","switch"],group:S,callback:()=>Se(e),toasts:{on:`Force ${t} is ON!`,off:`Force ${t} is OFF!`,error:`Failed to toggle Force ${t}. Check console.`}})}}class Ee extends Y{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 Ie extends Ot{constructor(t){super("Pick","controladoPick",t)}}class ke extends Ot{constructor(t){super("Ban","controladoBan",t)}}class Oe extends Tt{constructor(){super("Pick","controladoPick")}}class Te extends Tt{constructor(){super("Ban","controladoBan")}}function _e(o){for(const t of o)CommandBar.addAction(t)}const Le=200,ve=6e4,ct=2e3,Re=".ready-check-root-element",Me="#lol-uikit-layer-manager-wrapper > .modal",xe="Accepted ready check!",lt="Failed to accept ready check. Check console.",Be=".auto-select-champ-select-menu__header",A=Object.freeze({autoAccept:"controladoAutoAccept",pick:"controladoPick",ban:"controladoBan"});function _t(){return y(A.autoAccept).enabled===!0}class De{constructor(t){this.isEnabled=t,this.observer=null,this.hiddenModal=null,this.hiddenModalStyles=new WeakMap,this.sync=this.sync.bind(this)}start(){this.observer||(this.observer=new MutationObserver(()=>this.sync()),this.observer.observe(document.body,{childList:!0,subtree:!0}),this.sync())}sync(){const t=Fe();if(!t){this.restore();return}if(!this.isEnabled()){this.restore();return}this.hide(t)}hide(t){this.hiddenModal!==t&&(this.restore(),this.hiddenModal=t,this.hiddenModalStyles.set(t,{display:t.style.getPropertyValue("display"),displayPriority:t.style.getPropertyPriority("display"),pointerEvents:t.style.getPropertyValue("pointer-events"),pointerEventsPriority:t.style.getPropertyPriority("pointer-events")}),t.style.setProperty("display","none","important"),t.style.setProperty("pointer-events","none","important"))}restore(){if(!this.hiddenModal)return;const t=this.hiddenModal,e=this.hiddenModalStyles.get(t);dt(t,"display",e==null?void 0:e.display,e==null?void 0:e.displayPriority),dt(t,"pointer-events",e==null?void 0:e.pointerEvents,e==null?void 0:e.pointerEventsPriority),this.hiddenModalStyles.delete(t),this.hiddenModal=null}}function Fe(){const o=document.querySelector(Re);return(o==null?void 0:o.closest(Me))||null}function dt(o,t,e,n){e?o.style.setProperty(t,e,n||""):o.style.removeProperty(t)}async function $e(o){function t(){return _t()?!1:(o.restore(),!0)}if(t()||(console.debug(`auto-champion-select(auto-accept): Ready check detected, accepting in ${ct}ms...`),await C(ct),t()))return;let e=!1;try{e=await Ne()}catch(n){throw o.restore(),G(lt),n}e?kt(xe):(o.restore(),G(lt))}async function Ne(){const o=await b("POST",p.readyCheckAccept);return o.ok?(console.debug("auto-champion-select(auto-accept): Accepted ready check"),!0):(console.error("auto-champion-select(auto-accept): Failed to accept ready check",o),!1)}async function qe(o){const t=await b("GET",p.gameflowPhase),e=t.ok?await t.json():null;o.handleGameflowPhase(e)}function ze({championSelect:o,champSelectControlsMenu:t,readyCheckModalSuppressor:e,setupChampionSelectors:n}){let i=0;return async function(c){const h=++i;try{await s(c,h)}catch(u){console.error("auto-champion-select: Failed to handle gameflow phase",u)}};async function s(a,c){a==="ReadyCheck"?$e(e).catch(h=>{console.error("auto-champion-select(auto-accept): Failed to handle ready check",h)}):e.restore(),await r(a),c===i&&await n()}async function r(a){a==="ChampSelect"?(o.mount(),await t.mount()):(o.unmount(),await t.unmount())}}function Ge(){const o=new ee,t=new F("Accept",A.autoAccept),e=new F("Pick",A.pick),n=new at("Add pick",A.pick,Vt,{enablePositionRestrictions:!0,quickActionLabel:"Pick instantly"}),i=new F("Ban",A.ban),s=new at("Add ban",A.ban,Xt,{quickActionLabel:"Ban instantly"}),r=Ue(n,s),a=Qe(t,e,i),c=new ye("Auto champion select",r,a);return{championSelect:o,autoAcceptToggle:t,pickToggle:e,banToggle:i,pickChampionSelector:n,banChampionSelector:s,selectorsContainer:r,checkboxesContainer:a,pluginSection:c,championSelectors:[n,s]}}function Ue(...o){const t=document.createElement("div");return t.append(...o.map(e=>e.element)),t}function Qe(...o){const t=document.createElement("div");return t.classList.add("auto-select-checkboxes-div"),t.append(...o.map(e=>e.element)),t}function He({pluginSection:o,checkboxesContainer:t,selectorsContainer:e}){let n=null,i=0,s=()=>!1;async function r(a){let c=et();for(;!c;){if(s()||a!==i)return;await C(Le),c=et()}s()||a!==i||c.append(o.element,t,e)}return{setIsChampSelectControlsMounted(a){s=a},returnControlsToSocialRoster(){if(n)return n;const a=++i;return n=r(a).catch(c=>console.error("auto-champion-select: Failed to return controls to social roster",c)).finally(()=>{n=null}),n}}}function Ye({autoAcceptToggle:o,pickToggle:t,banToggle:e,readyCheckModalSuppressor:n}){o.setup(),o.element.addEventListener("click",()=>n.sync()),t.setup(),e.setup()}async function We(o){await Promise.all(o.map(t=>t.setup()))}async function je(o){await Promise.all(o.map(t=>t.refresh()))}function Ve(){const o=Ge(),t=new De(_t),e=He(o),n=new we("Auto Champion Select",e.returnControlsToSocialRoster,[o.checkboxesContainer,o.selectorsContainer]);e.setIsChampSelectControlsMounted(()=>n.mounted);const i={...o,champSelectControlsMenu:n,readyCheckModalSuppressor:t,setupToggles:()=>Ye({...o,readyCheckModalSuppressor:t}),setupChampionSelectors:()=>We(o.championSelectors),refreshChampionSelectors:()=>je(o.championSelectors),refreshPickChampionSelector:async()=>{await o.pickChampionSelector.refresh()}};return i.handleGameflowPhase=ze(i),i}function Xe(o){W(p.gameflowPhase,t=>{o.handleGameflowPhase(t.data)}),W(p.wallet,async t=>{if(t.eventType==="Update"){console.debug("auto-champion-select(wallet): Refreshing champion selectors...");try{await o.refreshPickChampionSelector()}catch(e){console.error("auto-champion-select(wallet): Failed to refresh champion selectors",e)}}})}function Ke({pickToggle:o,banToggle:t,refreshChampionSelectors:e}){_e([new Ie(()=>o.toggle()),new ke(()=>t.toggle()),new Oe,new Te,new Ee(e)])}function Je(o){let t=null,e=null;function n(){e==null||e.disconnect(),e=null,t!==null&&(cancelAnimationFrame(t),t=null)}const i=setTimeout(()=>{n()},ve);function s(){if(!(N()!==null))return;clearTimeout(i),n(),document.querySelector(Be)!==null||o.handleGameflowPhase("ChampSelect")}e=new MutationObserver(()=>{t===null&&(t=requestAnimationFrame(()=>{t=null,s()}))}),e.observe(document.body,{childList:!0,subtree:!0}),s()}async function Ze(){const o=Ve();o.setupToggles(),o.readyCheckModalSuppressor.start(),Ke(o),Xe(o),await qe(o),Je(o),console.debug(`auto-champion-select(${Lt}): Report bugs to Balaclava#1912`)}let ht=!1;function ut(){ht||(ht=!0,Ze().catch(o=>console.error("auto-champion-select: Failed to initialize",o)))}document.readyState==="loading"?window.addEventListener("load",ut,{once:!0}):ut();export{ut as load};
231
+ `;function H(o){const t=document.createElement(y.dropdownOption);return t.setAttribute("slot",y.dropdownOption),t.innerText=o,t}class ke{constructor(t,e,n,i={}){this.dropdownElement=t,this.placeholderText=e,this.searchPlaceholderText=i.searchPlaceholderText||"Search",this.quickActionLabel=i.quickActionLabel||"Pick/ban instantly",this.staticOptions=Array.isArray(i.staticOptions)?i.staticOptions:[],this.isQuickActionEnabled=typeof i.isQuickActionEnabled=="function"?i.isQuickActionEnabled:null,this.onQuickActionToggle=typeof i.onQuickActionToggle=="function"?i.onQuickActionToggle:null,this.onPriorityOptionSelected=n,this.placeholderOption=null,this.searchQuery="",this.activePositionFilter=null,this.hasRecommendedPositionData=!1,this.recommendedPositionsByOption=new WeakMap,this.staticOptionElements=new WeakSet}renderOptions(t){this.dropdownElement.replaceChildren(),this.hasRecommendedPositionData=!1,this.staticOptionElements=new WeakSet,this.placeholderOption=H(this.placeholderText),this.placeholderOption.setAttribute("selected","true"),this.hidePlaceholderOption(),this.dropdownElement.appendChild(this.placeholderOption);for(const e of this.staticOptions)this.dropdownElement.appendChild(this.createStaticOption(e));for(const e of t){const n=this.getChampionRecommendedPositions(e),i=this.createChampionOption(e,n);n.length>0&&(this.hasRecommendedPositionData=!0),this.dropdownElement.appendChild(i)}this.hasRecommendedPositionData||(this.activePositionFilter=null),this.applyOptionFilters()}createChampionOption(t,e){const n=H("");return this.recommendedPositionsByOption.set(n,new Set(e)),n.title=t.name,n.appendChild(this.createChampionOptionContent(t)),n.addEventListener("click",()=>{this.onPriorityOptionSelected(t.id),requestAnimationFrame(()=>this.reset())}),n}createStaticOption(t){const e=H(""),n=typeof t.description=="string"?t.description:"";return this.staticOptionElements.add(e),e.title=n?`${t.label}. ${n}`:t.label,e.appendChild(this.createStaticOptionContent(t,n)),e.addEventListener("click",()=>{this.onPriorityOptionSelected(t.value),requestAnimationFrame(()=>this.reset())}),e}createChampionOptionContent(t){const e=document.createElement("span");e.classList.add(gt);const n=document.createElement("img");n.classList.add(yt),n.src=t.squarePortraitPath,n.alt="",n.draggable=!1,n.loading="lazy";const i=document.createElement("span");return i.classList.add(Ct),i.innerText=t.name,e.append(n,i),e}createStaticOptionContent(t,e=""){const n=document.createElement("span");n.classList.add(gt);const i=document.createElement("span");i.classList.add(yt,_e),i.innerText=t.iconText||"?";const s=document.createElement("span");s.classList.add(Ct),s.innerText=t.label;const r=document.createElement("span");if(r.classList.add(Ie),r.appendChild(s),e){const a=document.createElement("span");a.classList.add(Te),a.innerText=e,r.appendChild(a)}return n.append(i,r),n}getChampionRecommendedPositions(t){return Array.isArray(t.recommendedPositions)?t.recommendedPositions:[]}async waitForRender(){for(let t=0;t<Ae;t++){const e=this.dropdownElement.shadowRoot;if(this.dropdownElement.isConnected&&(e!=null&&e.querySelector(l.dropdownCurrent)))return e;await b(Ee)}return null}ensureSearchPlaceholder(t){if(t.querySelector(`#${mt}`))return;const e=t.querySelector(l.dropdownCurrent);e&&e.appendChild(this.createSearchPlaceholder())}ensureQuickActionToggle(t){if(!this.isQuickActionAvailable()||t.querySelector(`#${G}`)){this.syncQuickActionToggle(t);return}const e=t.querySelector(l.dropdownCurrent);e&&(e.appendChild(this.createQuickActionToggle()),this.syncQuickActionToggle(t))}ensurePositionFilter(t){var n;const e=t.querySelector(l.dropdownOptionsContainer);if(e){if(!this.hasRecommendedPositionData){(n=t.querySelector(`.${D}`))==null||n.remove(),e.classList.remove(V),this.activePositionFilter=null;return}e.classList.add(V),t.querySelector(`.${D}`)||e.insertBefore(this.createPositionFilter(),e.firstChild),this.syncPositionFilter(t)}}createPositionFilter(){const t=document.createElement("div");t.classList.add(D),t.setAttribute("role","toolbar"),t.setAttribute("aria-label","Filter champions by position");for(const e of M)t.appendChild(this.createPositionFilterBadge(e));return t}createPositionFilterBadge(t){const e=document.createElement("button");e.classList.add(P),e.type="button",e.dataset.position=t.value,e.title=t.label,e.setAttribute("aria-label",t.label),e.setAttribute("aria-pressed","false");const n=document.createElement("img");return n.src=t.iconPath,n.alt="",n.draggable=!1,e.appendChild(n),e.addEventListener("pointerdown",i=>{i.preventDefault(),i.stopPropagation()}),e.addEventListener("click",i=>{i.preventDefault(),i.stopPropagation(),this.togglePositionFilter(t.value)}),e}createSearchPlaceholder(){const t=document.createElement("div");t.classList.add(qt,Dt),t.id=mt;const e=document.createElement("input");e.classList.add(Nt),e.id=ft,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(zt),n.addEventListener("click",()=>{n.classList.contains(T)&&this.clearSearch(e,n)}),e.addEventListener("input",i=>{this.ensureOpen(),this.setSearchQuery(i.target.value),n.classList.toggle(T,!!i.target.value)}),["pointerdown","click"].forEach(i=>{t.addEventListener(i,s=>s.stopPropagation()),n.addEventListener(i,s=>s.stopPropagation())}),["pointerdown","focusin"].forEach(i=>{e.addEventListener(i,s=>s.stopPropagation(),!0)}),t.appendChild(n),t.appendChild(e),t}createQuickActionToggle(){const t=document.createElement("button");return t.classList.add(v),t.id=G,t.type="button",t.title=this.quickActionLabel,t.setAttribute("aria-label",this.quickActionLabel),t.setAttribute("aria-pressed","false"),["pointerdown","click"].forEach(e=>{t.addEventListener(e,n=>{n.preventDefault(),n.stopPropagation()})}),t.addEventListener("click",()=>{var e;(e=this.onQuickActionToggle)==null||e.call(this),this.syncQuickActionToggle()}),t}isQuickActionAvailable(){return!!(this.isQuickActionEnabled&&this.onQuickActionToggle)}syncQuickActionToggle(t=this.dropdownElement.shadowRoot){if(!this.isQuickActionAvailable()||!t)return;const e=t.querySelector(`#${G}`);if(!e)return;const n=this.isQuickActionEnabled()===!0;e.classList.toggle($t,n),e.setAttribute("aria-pressed",String(n)),e.title=this.quickActionLabel,e.setAttribute("aria-label",this.quickActionLabel)}togglePositionFilter(t){const e=x(t);e&&(this.activePositionFilter=this.activePositionFilter===e?null:e,this.withShadowRoot(n=>this.syncPositionFilter(n)),this.applyOptionFilters())}syncPositionFilter(t){t.querySelectorAll(`.${P}`).forEach(e=>{const n=e.dataset.position===this.activePositionFilter;e.classList.toggle(X,n),e.setAttribute("aria-pressed",String(n))})}clearSearch(t,e){t.value="",this.setSearchQuery(""),e.classList.toggle(T,!1)}setSearchQuery(t){this.searchQuery=t,this.applyOptionFilters()}applyOptionFilters(){const t=this.searchQuery.toLowerCase();this.dropdownElement.querySelectorAll(l.dropdownOption).forEach(n=>{if(n===this.placeholderOption){this.hidePlaceholderOption();return}this.matchesSearchQuery(n,t)&&this.matchesPositionFilter(n)?n.style.display="":n.style.display="none"})}matchesSearchQuery(t,e){return(t.textContent??"").toLowerCase().includes(e)}matchesPositionFilter(t){var e;return this.staticOptionElements.has(t)||!this.activePositionFilter?!0:((e=this.recommendedPositionsByOption.get(t))==null?void 0:e.has(this.activePositionFilter))===!0}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(`#${ft}`),i=e.querySelector(`.${T}`);n&&i?this.clearSearch(n,i):(n&&(n.value="",this.setSearchQuery("")),i&&i.classList.remove(T)),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),this.ensurePositionFilter(t)})}ensureDropdownOpensUpward(t){var e;(e=t.querySelector(l.dropdownRoot))==null||e.classList.add("opens-upward")}injectDropdownSearchStyles(t){const e=t.querySelector("style[data-controlado='dropdown-tags']");if(e){e.textContent=Pt;return}const n=document.createElement("style");n.dataset.controlado="dropdown-tags",n.textContent=Pt,t.appendChild(n)}withShadowRoot(t){const e=this.dropdownElement.shadowRoot;e&&t(e)}}const Le=".champion-priority-selector__position-badge",ve=".champion-priority-selector__position-option",bt=".champion-priority-selector__remove",St="✕",wt="?",L="Random",Re=0,At=1,N=8,Me=5,xe=150,Fe="cubic-bezier(0.2, 0, 0, 1)";class Et{constructor(t,e,n,i={}){this.element=this.createRootElement(),this.dropdownElement=this.createDropdownElement(),this.championDropdown=new ke(this.dropdownElement,t,a=>this.addPriorityOption(a),{quickActionLabel:i.quickActionLabel,searchPlaceholderText:i.searchPlaceholderText,staticOptions:[{value:C,label:L,description:i.randomOptionDescription,iconText:wt}],isQuickActionEnabled:()=>this.isQuickActionEnabled(),onQuickActionToggle:()=>this.toggleQuickAction()});const{scrollElement:s,trackElement:r}=this.createSelectedChampionsScroll();this.scrollElement=s,this.trackElement=r,this.enablePositionRestrictions=i.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.quickAction=!1,this.loadChampions=n,this.champions=[],this.championById=new Map,this.selectedPriorityOptions=[],this.optionButtons=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(y.dropdown);return t.classList.add("dropdown-champions-default","dropdown-drop-up"),t}createSelectedChampionsScroll(){const t=document.createElement(y.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 i=document.createElement("span"),s=t.replace(/^Add\s+/i,"").toLowerCase();return i.innerText=`Use dropdown to add ${s} option`,e.append(n,i),e}createPositionMenu(){const t=document.createElement("div");t.classList.add("champion-priority-selector__position-menu"),t.hidden=!0;for(const e of M)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",i=>i.stopPropagation()),e.addEventListener("click",i=>{i.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=xt(this.configKey,{allowedChampionIds:t}),this.quickAction=this.config.quickAction===!0,this.selectedPriorityOptions=Z(this.config.priorityOptions||this.config.champions,t),this.enablePositionRestrictions&&(this.positionsByChampionId=$(this.config.positionsByChampionId,I(this.selectedPriorityOptions))),this.championDropdown.renderOptions(this.champions),this.renderSelectedPriorityOptions();const e=await this.championDropdown.waitForRender();e&&(this.championDropdown.ensureSearchPlaceholder(e),this.championDropdown.ensureQuickActionToggle(e),this.championDropdown.patchDropdownShadowDom())}getAllowedChampionIds(){return new Set(this.championById.keys())}isQuickActionEnabled(){return this.quickAction===!0}toggleQuickAction(){const t=this.getAllowedChampionIds();return this.config=q(this.configKey,e=>(e.quickAction=e.quickAction!==!0,e),{allowedChampionIds:t,selectedChampionIds:I(this.selectedPriorityOptions)}),this.quickAction=this.config.quickAction===!0,this.championDropdown.syncQuickActionToggle(),this.quickAction}addPriorityOption(t){const e=R(t);e===null||this.selectedPriorityOptions.includes(e)||!f(e)&&!this.championById.has(e)||(this.selectedPriorityOptions.push(e),this.renderSelectedPriorityOptions(),this.saveConfig())}removePriorityOption(t){const e=R(t),n=this.selectedPriorityOptions.indexOf(e);if(e===null||n===-1)return;this.selectedPriorityOptions.splice(n,1);const i=f(e)?null:e;i!==null&&this.positionMenuChampionId===i&&this.closePositionMenu(),this.enablePositionRestrictions&&i!==null&&delete this.positionsByChampionId[String(i)],this.renderSelectedPriorityOptions(),this.saveConfig()}movePriorityOptionToIndex(t,e){const n=R(t),i=this.selectedPriorityOptions.indexOf(n);if(n===null||i===-1)return!1;const[s]=this.selectedPriorityOptions.splice(i,1),r=Math.max(0,Math.min(e,this.selectedPriorityOptions.length));return this.selectedPriorityOptions.splice(r,0,s),i!==r}syncPositionsByChampionId(){this.enablePositionRestrictions&&(this.positionsByChampionId=$(this.positionsByChampionId,I(this.selectedPriorityOptions)))}saveConfig(){this.syncPositionsByChampionId();const t=this.getAllowedChampionIds();this.config=q(this.configKey,e=>(e.priorityOptions=[...this.selectedPriorityOptions],e.champions=I(this.selectedPriorityOptions),this.enablePositionRestrictions&&(e.positionsByChampionId={...this.positionsByChampionId}),e),{allowedChampionIds:t,selectedChampionIds:I(this.selectedPriorityOptions)}),this.enablePositionRestrictions&&(this.positionsByChampionId=this.config.positionsByChampionId||{}),console.debug(this.configKey,this.config)}renderSelectedPriorityOptions(t=null,e=null){this.positionMenuChampionId!==null&&this.closePositionMenu();const n=new Set(this.selectedPriorityOptions.map(s=>S(s)));for(const[s,r]of this.optionButtons)n.has(s)||(r.remove(),this.optionButtons.delete(s));if(this.selectedPriorityOptions.length===0){this.trackElement.replaceChildren(this.emptyElement);return}this.emptyElement.remove();const i=this.selectedPriorityOptions.map((s,r)=>this.getPriorityOptionButton(s,r)).filter(Boolean);this.trackElement.append(...i),t&&this.animateReorder(t,e)}getPriorityOptionButton(t,e){return f(t)?this.getRandomOptionButton(e):this.getChampionOptionButton(t,e)}getChampionOptionButton(t,e){const n=this.championById.get(t);if(!n)return null;const i=String(t);let s=this.optionButtons.get(i);s||(s=this.createIconButton(n),this.optionButtons.set(i,s)),s.dataset.rank=String(e+1),s.classList.toggle("champion-priority-selector__icon--random",!1);const r=this.getChampionPositionTitleSuffix(t);s.title=`${e+1}. ${n.name}${r}`,s.setAttribute("aria-label",`${e+1}. ${n.name}${r}`);const a=s.querySelector("img");a.src=n.squarePortraitPath,a.alt=n.name;const c=s.querySelector(bt);return c.setAttribute("aria-label",`Remove ${n.name}`),c.title=`Remove ${n.name}`,this.renderPositionBadge(s,t),s}getRandomOptionButton(t){let e=this.optionButtons.get(C);e||(e=this.createRandomOptionButton(),this.optionButtons.set(C,e)),e.dataset.rank=String(t+1),e.title=`${t+1}. ${L}`,e.setAttribute("aria-label",`${t+1}. ${L}`);const n=e.querySelector(bt);return n.setAttribute("aria-label",`Remove ${L}`),n.title=`Remove ${L}`,e}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 i=document.createElement("button");return i.classList.add("champion-priority-selector__remove"),i.type="button",i.dataset.icon=St,i.addEventListener("pointerdown",s=>s.stopPropagation()),i.addEventListener("click",s=>{s.stopPropagation(),this.removePriorityOption(t.id)}),e.addEventListener("pointerdown",s=>this.startDrag(s,t.id)),e.addEventListener("auxclick",s=>this.removePriorityOptionOnMiddleClick(s,t.id)),this.enablePositionRestrictions&&e.addEventListener("contextmenu",s=>this.openPositionMenu(s,t.id)),e.append(n,i),e}createRandomOptionButton(){const t=document.createElement("div");t.classList.add("champion-priority-selector__icon","champion-priority-selector__icon--random"),t.setAttribute("role","button"),t.tabIndex=0;const e=document.createElement("span");e.classList.add("champion-priority-selector__random-icon"),e.innerText=wt;const n=document.createElement("button");return n.classList.add("champion-priority-selector__remove"),n.type="button",n.dataset.icon=St,n.addEventListener("pointerdown",i=>i.stopPropagation()),n.addEventListener("click",i=>{i.stopPropagation(),this.removePriorityOption(C)}),t.addEventListener("pointerdown",i=>this.startDrag(i,C)),t.addEventListener("auxclick",i=>this.removePriorityOptionOnMiddleClick(i,C)),t.append(e,n),t}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=rt(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 i;if((i=t.querySelector(Le))==null||i.remove(),!this.enablePositionRestrictions)return;const n=this.createPositionBadge(e);n&&t.appendChild(n)}createPositionBadge(t){const e=this.getChampionAllowedPositions(t),n=this.getChampionAllowedPositionLabels(t),i=document.createElement("button");if(i.classList.add("champion-priority-selector__position-badge"),i.type="button",i.title=n.length>0?`${n.join(", ")}. Click to edit positions.`:"Any position. Click to restrict positions.",i.setAttribute("aria-label",i.title),i.addEventListener("pointerdown",a=>a.stopPropagation()),i.addEventListener("click",a=>this.openPositionMenu(a,t,i)),e.length===0)return i.classList.add("champion-priority-selector__position-badge--empty"),i.innerText="+",i;const s=rt(e[0]);if(!s)return null;e.length>1&&(i.dataset.count=String(e.length));const r=document.createElement("img");return r.src=s.iconPath,r.alt=s.label,r.draggable=!1,i.appendChild(r),i}openPositionMenu(t,e,n=null){if(!this.enablePositionRestrictions||!this.positionMenuElement)return;const i=d(e);if(i===null||!this.selectedPriorityOptions.includes(i))return;t.preventDefault(),t.stopPropagation(),this.positionMenuChampionId=i,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 i=t.clientX,s=t.clientY;if(e&&t.type==="click"&&t.detail===0){const c=e.getBoundingClientRect();i=c.left+c.width/2,s=c.bottom}const r=Math.min(Math.max(i,N),window.innerWidth-n.width-N),a=Math.min(Math.max(s,N),window.innerHeight-n.height-N);return{left:r,top:a}}renderPositionMenu(){if(!this.positionMenuElement||this.positionMenuChampionId===null)return;const t=new Set(this.getChampionAllowedPositions(this.positionMenuChampionId));this.positionMenuElement.querySelectorAll(ve).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=x(t);if(!e)return;const n=String(this.positionMenuChampionId),i=new Set(this.positionsByChampionId[n]||[]);i.has(e)?i.delete(e):i.add(e);const s=M.map(c=>c.value).filter(c=>i.has(c));s.length>0?this.positionsByChampionId[n]=s:delete this.positionsByChampionId[n],this.renderPositionMenu();const r=this.optionButtons.get(String(this.positionMenuChampionId)),a=this.selectedPriorityOptions.indexOf(this.positionMenuChampionId);r&&a!==-1&&this.getChampionOptionButton(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 s;if(t.button===At){t.preventDefault();return}if(t.button!==Re)return;this.dragState&&this.clearDragState();const n=S(e),i=n?this.optionButtons.get(n):null;if(i){this.dragState={option:e,pointerId:t.pointerId,startX:t.clientX,startY:t.clientY,active:!1,moved:!1};try{(s=i.setPointerCapture)==null||s.call(i,t.pointerId)}catch{}window.addEventListener("pointermove",this.handleWindowPointerMove),window.addEventListener("pointerup",this.handleWindowPointerUp),window.addEventListener("pointercancel",this.handleWindowPointerCancel)}}removePriorityOptionOnMiddleClick(t,e){t.button===At&&(t.preventDefault(),t.stopPropagation(),this.removePriorityOption(e))}moveDrag(t){var A;if(!this.dragState||this.dragState.pointerId!==t.pointerId)return;const e=this.dragState.option,n=S(e),i=t.clientX-this.dragState.startX,s=t.clientY-this.dragState.startY,r=Math.hypot(i,s);if(!this.dragState.active){if(r<Me)return;this.dragState.active=!0,n&&((A=this.optionButtons.get(n))==null||A.classList.add("champion-priority-selector__icon--dragging"))}t.preventDefault();const a=this.getDropIndex(t.clientX,e),c=this.selectedPriorityOptions.indexOf(e);if(a===c||a===-1)return;const u=this.getIconPositions();this.movePriorityOptionToIndex(e,a)&&(this.dragState.moved=!0,this.renderSelectedPriorityOptions(u,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 s;if(!this.dragState)return;const{option:t,pointerId:e}=this.dragState,n=S(t),i=n?this.optionButtons.get(n):null;i==null||i.classList.remove("champion-priority-selector__icon--dragging");try{(s=i==null?void 0:i.releasePointerCapture)==null||s.call(i,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.selectedPriorityOptions.filter(i=>i!==e);for(let i=0;i<n.length;i++){const s=S(n[i]),r=s?this.optionButtons.get(s):null;if(!r)continue;const a=r.getBoundingClientRect();if(t<a.left+a.width/2)return i}return n.length}getIconPositions(){const t=new Map;for(const e of this.selectedPriorityOptions){const n=S(e),i=n?this.optionButtons.get(n):null;i&&t.set(n,i.getBoundingClientRect())}return t}animateReorder(t,e){for(const n of this.selectedPriorityOptions){if(n===e)continue;const i=S(n),s=i?this.optionButtons.get(i):null,r=i?t.get(i):null;if(!s||!r||typeof s.animate!="function")continue;const a=s.getBoundingClientRect(),c=r.left-a.left,u=r.top-a.top;c===0&&u===0||s.animate([{transform:`translate(${c}px, ${u}px)`},{transform:"translate(0, 0)"}],{duration:xe,easing:Fe})}}}const Be=200,Q="auto-select-champ-select-menu--collapsed",Ne="auto-select-champ-select-menu-button-wrapper--open";class j{constructor(t,e){this.element=document.createElement(y.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=xt(this.configKey),this.element.toggleAttribute("selected",this.config.enabled===!0)}toggle(){return console.debug("auto-champion-select: Toggling",this.configKey),this.config=q(this.configKey,t=>(t.enabled=!t.enabled,t)),this.element.toggleAttribute("selected",this.config.enabled===!0),this.config.enabled}}class De{constructor(t,e,n){this.element=document.createElement("div"),this.element.classList.add("auto-select-champ-select-menu",Q),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=i=>this.closeOnOutsideInteraction(i),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(Q)}setOpen(t){this.element.classList.toggle(Q,!t),this.buttonWrapper.classList.toggle(Ne,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=K();for(;this.mounted&&!t;)await b(Be),t=K();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 $e{constructor(t,...e){this.element=document.createElement(y.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")}}function Ut(o){var t,e;o&&((e=(t=globalThis.Toast)==null?void 0:t.success)==null||e.call(t,o))}function J(o){var t,e;o&&((e=(t=globalThis.Toast)==null?void 0:t.error)==null||e.call(t,o))}function qe(o,t){const e=globalThis.Toast;return typeof(e==null?void 0:e.promise)=="function"?e.promise(o,t):o}const k="Balaclava: Auto Champion Select";function ze(o){return typeof(o==null?void 0:o.then)=="function"}class it{constructor({id:t,name:e,legend:n,tags:i,group:s,callback:r,toasts:a}){this.id=t,this.name=e,this.legend=n,this.tags=i,this.group=s,this.perform=this.perform.bind(this),this.callback=r,this.toasts=a}perform(){try{const t=this.callback();if(ze(t))return qe(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);Ut(e)}catch(t){J(this.toasts.error),console.error(t)}}}class Yt extends it{constructor(t,e,n){super({id:`${e}Switch`,name:()=>`Auto ${t} [${w(e).enabled?"ON":"OFF"}]`,legend:()=>w(e).enabled?"Turn OFF":"Turn ON",tags:[k,e,"switch"],group:k,callback:n,toasts:{on:`Auto ${t} is ON!`,off:`Auto ${t} is OFF!`,error:`Failed to toggle Auto ${t}. Check console.`}})}}function Ue(o){return q(o,e=>(e.force=!e.force,e)).force}class Gt extends it{constructor(t,e){super({id:`${e}ForceSwitch`,name:()=>`Force ${t} [${w(e).force?"ON":"OFF"}]`,legend:()=>`Ignore team intent and force ${t} the selected champion`,tags:[k,e,"force","switch"],group:k,callback:()=>Ue(e),toasts:{on:`Force ${t} is ON!`,off:`Force ${t} is OFF!`,error:`Failed to toggle Force ${t}. Check console.`}})}}class Ye extends it{constructor(t){super({id:"RefreshDropdowns",name:()=>"Refresh Champions",legend:()=>"Normally champion selectors refresh automatically...",tags:[k,"refresh"],group:k,callback:t,toasts:{success:"Refreshed Champions!",error:"Failed to refresh Champions. Check console."}})}}class Ge extends Yt{constructor(t){super("Pick","controladoPick",t)}}class He extends Yt{constructor(t){super("Ban","controladoBan",t)}}class Qe extends Gt{constructor(){super("Pick","controladoPick")}}class je extends Gt{constructor(){super("Ban","controladoBan")}}function We(o){for(const t of o)CommandBar.addAction(t)}const Ke=200,Ve=6e4,Ot=2e3,Xe=".ready-check-root-element",Je="#lol-uikit-layer-manager-wrapper > .modal",Ze="Accepted ready check!",It="Failed to accept ready check. Check console.",tn=".auto-select-champ-select-menu__header",_=Object.freeze({autoAccept:"controladoAutoAccept",pick:"controladoPick",ban:"controladoBan"});function Ht(){return w(_.autoAccept).enabled===!0}class en{constructor(t){this.isEnabled=t,this.observer=null,this.hiddenModal=null,this.hiddenModalStyles=new WeakMap,this.sync=this.sync.bind(this)}start(){this.observer||(this.observer=new MutationObserver(()=>this.sync()),this.observer.observe(document.body,{childList:!0,subtree:!0}),this.sync())}sync(){const t=nn();if(!t){this.restore();return}if(!this.isEnabled()){this.restore();return}this.hide(t)}hide(t){this.hiddenModal!==t&&(this.restore(),this.hiddenModal=t,this.hiddenModalStyles.set(t,{display:t.style.getPropertyValue("display"),displayPriority:t.style.getPropertyPriority("display"),pointerEvents:t.style.getPropertyValue("pointer-events"),pointerEventsPriority:t.style.getPropertyPriority("pointer-events")}),t.style.setProperty("display","none","important"),t.style.setProperty("pointer-events","none","important"))}restore(){if(!this.hiddenModal)return;const t=this.hiddenModal,e=this.hiddenModalStyles.get(t);Tt(t,"display",e==null?void 0:e.display,e==null?void 0:e.displayPriority),Tt(t,"pointer-events",e==null?void 0:e.pointerEvents,e==null?void 0:e.pointerEventsPriority),this.hiddenModalStyles.delete(t),this.hiddenModal=null}}function nn(){const o=document.querySelector(Xe);return(o==null?void 0:o.closest(Je))||null}function Tt(o,t,e,n){e?o.style.setProperty(t,e,n||""):o.style.removeProperty(t)}async function on(o){function t(){return Ht()?!1:(o.restore(),!0)}if(t()||(console.debug(`auto-champion-select(auto-accept): Ready check detected, accepting in ${Ot}ms...`),await b(Ot),t()))return;let e=!1;try{e=await sn()}catch(n){throw o.restore(),J(It),n}e?Ut(Ze):(o.restore(),J(It))}async function sn(){const o=await g("POST",h.readyCheckAccept);return o.ok?(console.debug("auto-champion-select(auto-accept): Accepted ready check"),!0):(console.error("auto-champion-select(auto-accept): Failed to accept ready check",o),!1)}async function rn(o){const t=await g("GET",h.gameflowPhase),e=t.ok?await t.json():null;o.handleGameflowPhase(e)}function an({championSelect:o,champSelectControlsMenu:t,readyCheckModalSuppressor:e,setupChampionSelectors:n}){let i=0;return async function(c){const u=++i;try{await s(c,u)}catch(A){console.error("auto-champion-select: Failed to handle gameflow phase",A)}};async function s(a,c){a==="ReadyCheck"?on(e).catch(u=>{console.error("auto-champion-select(auto-accept): Failed to handle ready check",u)}):e.restore(),await r(a),c===i&&await n()}async function r(a){a==="ChampSelect"?(o.mount(),await t.mount()):(o.unmount(),await t.unmount())}}function cn(){const o=new we,t=new j("Accept",_.autoAccept),e=new j("Pick",_.pick),n=new Et("Add pick",_.pick,me,{enablePositionRestrictions:!0,quickActionLabel:"Pick instantly",randomOptionDescription:"Uses assigned role"}),i=new j("Ban",_.ban),s=new Et("Add ban",_.ban,Bt,{quickActionLabel:"Ban instantly"}),r=ln(n,s),a=dn(t,e,i),c=new $e("Auto champion select",r,a);return{championSelect:o,autoAcceptToggle:t,pickToggle:e,banToggle:i,pickChampionSelector:n,banChampionSelector:s,selectorsContainer:r,checkboxesContainer:a,pluginSection:c,championSelectors:[n,s]}}function ln(...o){const t=document.createElement("div");return t.append(...o.map(e=>e.element)),t}function dn(...o){const t=document.createElement("div");return t.classList.add("auto-select-checkboxes-div"),t.append(...o.map(e=>e.element)),t}function hn({pluginSection:o,checkboxesContainer:t,selectorsContainer:e}){let n=null,i=0,s=()=>!1;async function r(a){let c=pt();for(;!c;){if(s()||a!==i)return;await b(Ke),c=pt()}s()||a!==i||c.append(o.element,t,e)}return{setIsChampSelectControlsMounted(a){s=a},returnControlsToSocialRoster(){if(n)return n;const a=++i;return n=r(a).catch(c=>console.error("auto-champion-select: Failed to return controls to social roster",c)).finally(()=>{n=null}),n}}}function un({autoAcceptToggle:o,pickToggle:t,banToggle:e,readyCheckModalSuppressor:n}){o.setup(),o.element.addEventListener("click",()=>n.sync()),t.setup(),e.setup()}async function pn(o){await Promise.all(o.map(t=>t.setup()))}async function mn(o){await Promise.all(o.map(t=>t.refresh()))}function fn(){const o=cn(),t=new en(Ht),e=hn(o),n=new De("Auto Champion Select",e.returnControlsToSocialRoster,[o.checkboxesContainer,o.selectorsContainer]);e.setIsChampSelectControlsMounted(()=>n.mounted);const i={...o,champSelectControlsMenu:n,readyCheckModalSuppressor:t,setupToggles:()=>un({...o,readyCheckModalSuppressor:t}),setupChampionSelectors:()=>pn(o.championSelectors),refreshChampionSelectors:()=>mn(o.championSelectors),refreshPickChampionSelector:async()=>{await o.pickChampionSelector.refresh()}};return i.handleGameflowPhase=an(i),i}function gn(o){st(h.gameflowPhase,t=>{o.handleGameflowPhase(t.data)}),st(h.wallet,async t=>{if(t.eventType==="Update"){console.debug("auto-champion-select(wallet): Refreshing champion selectors...");try{await o.refreshPickChampionSelector()}catch(e){console.error("auto-champion-select(wallet): Failed to refresh champion selectors",e)}}})}function yn({pickToggle:o,banToggle:t,refreshChampionSelectors:e}){We([new Ge(()=>o.toggle()),new He(()=>t.toggle()),new Qe,new je,new Ye(e)])}function Cn(o){let t=null,e=null;function n(){e==null||e.disconnect(),e=null,t!==null&&(cancelAnimationFrame(t),t=null)}const i=setTimeout(()=>{n()},Ve);function s(){if(!(K()!==null))return;clearTimeout(i),n(),document.querySelector(tn)!==null||o.handleGameflowPhase("ChampSelect")}e=new MutationObserver(()=>{t===null&&(t=requestAnimationFrame(()=>{t=null,s()}))}),e.observe(document.body,{childList:!0,subtree:!0}),s()}async function Pn(){const o=fn();o.setupToggles(),o.readyCheckModalSuppressor.start(),yn(o),gn(o),await rn(o),Cn(o),console.debug(`auto-champion-select(${Qt}): Report bugs to Balaclava#1912`)}let _t=!1;function kt(){_t||(_t=!0,Pn().catch(o=>console.error("auto-champion-select: Failed to initialize",o)))}document.readyState==="loading"?window.addEventListener("load",kt,{once:!0}):kt();export{kt as load};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auto-champion-select",
3
- "version": "1.9.0",
3
+ "version": "1.9.1",
4
4
  "description": "Pick or ban automatically! 🐧",
5
5
  "author": "balaclava",
6
6
  "repository": {