UNPKG

@steambrew/api

Version:
1 lines 30.8 kB
var steam_client_components=function(e,t){"use strict";const n="background: #8a16a2; color: white;",o="steamloopback.host"===window.location.hostname?"@steambrew/client":"@steambrew/webkit";const r=new class{constructor(e){this.name=e,this.name=e}log(...e){((e,...t)=>{console.log(`%c ${o} %c ${e} %c`,n,"background: #b11cce; color: white;","background: transparent;",...t)})(this.name,...e)}debug(...e){((e,...t)=>{console.debug(`%c ${o} %c ${e} %c`,n,"background: #1abc9c; color: white;","color: blue;",...t)})(this.name,...e)}warn(...e){((e,...t)=>{console.warn(`%c ${o} %c ${e} %c`,n,"background: #ffbb00; color: white;","color: blue;",...t)})(this.name,...e)}error(...e){((e,...t)=>{console.error(`%c ${o} %c ${e} %c`,n,"background: #FF0000;","background: transparent;",...t)})(this.name,...e)}group(...e){((e,...t)=>{console.group(`%c ${o} %c ${e} %c`,n,"background: #b11cce; color: white;","background: transparent;",...t)})(this.name,...e)}groupEnd(...e){((e,...t)=>{console.groupEnd(),t?.length>0&&console.log(`^ %c ${o} %c ${e} %c`,n,"background: #b11cce; color: white;","background: transparent;",...t)})(this.name,...e)}}("Webpack");let a=[];!function(){const e=performance.now();r.group("Webpack Module Init");const t=Math.random();let n;window.webpackChunksteamui.push([[t],{},e=>{n=e}]),r.log("Initializing all modules. Errors here likely do not matter, as they are usually just failing module side effects.");for(let e of Object.keys(n.m))try{const t=n(e);t&&a.push(t)}catch(t){r.debug("Ignoring require error for module",e,t)}r.groupEnd(`Modules initialized in ${performance.now()-e}ms...`)}();const i=e=>{for(const t of a){if(t.default&&e(t.default))return t.default;if(e(t))return t}};void 0===window.SP_REACT&&(window.SP_REACTDOM=i((e=>e.createPortal&&e.createRoot&&e.flushSync)),window.SP_REACT=i((e=>e.Component&&e.PureComponent&&e.useLayoutEffect)));const l=(e,t)=>{for(const n of a)if(n)for(const o of[n.default,n])if("object"==typeof o&&!(t&&Object.keys(o).length<t))for(let t in o)if(o?.[t]){if(e(o[t],t))return[o,o[t],t]}else;return[void 0,void 0,void 0]},c=(e,t)=>l(e,t)?.[0],s=(e,t)=>l(e,t)?.[1],d=e=>{const t=[];for(const n of a)n.default&&e(n.default)&&t.push(n.default),e(n)&&t.push(n);return t},u=a.find((e=>{if("object"!=typeof e)return!1;for(let t in e)if(e[t]?.contextType?._currentValue&&Object.keys(e).length>60)return!0;return!1})),g=c((e=>e?.toString&&/Spinner\)}\)?,.\.createElement\(\"path\",{d:\"M18 /.test(e.toString()))),p=c((e=>e.computeRootMatch)),m=Object.values(u).filter((e=>"object"==typeof e&&e?.render?.toString().includes('createElement("div",{...')||e?.render?.toString().includes('createElement("div",Object.assign({},'))),f=new Map(Object.values(m).map((e=>{try{return[e.render({}).props.className.split(" ")[0],e]}catch(e){return console.error("[DFL:Dialog]: failed to render common dialog component",e),[null,null]}}))),C=f.get("DialogHeader"),h=f.get("DialogSubHeader"),S=f.get("DialogFooter"),b=f.get("DialogLabel"),y=f.get("DialogBodyText"),w=f.get("DialogBody"),k=f.get("DialogControlsSection"),E=f.get("DialogControlsSectionHeader"),v=Object.values(u).find((e=>e?.render?.toString()?.includes('"DialogButton","_DialogLayout","Primary"'))),P=Object.values(u).find((e=>e?.render?.toString()?.includes('"DialogButton","_DialogLayout","Secondary"'))),_=P,R=_?.render({}).type;let T=Symbol("DECKY_CALL_ORIGINAL");function A(e,t,n,o,r){Object.assign(e[t],r),e[t].toString=()=>r.toString(),Object.defineProperty(e[t],"__deckyOrig",{get:()=>a.original,set:e=>a.original=e});const a={object:e,property:t,handler:n,patchedFunction:o,original:r,hasUnpatched:!1,unpatch:()=>function(e){const{object:t,property:n,handler:o,patchedFunction:r,original:a}=e;if(e.hasUnpatched)throw new Error("Function is already unpatched.");let i=n,l=t;console.debug("[Patcher] unpatching",{realObject:l,realProp:i,object:t,property:n,handler:o,patchedFunction:r,original:a,isEqual:l[i]===r});for(;l[i]&&l[i]!==r;)l=l[i].__deckyPatch,i="original",console.debug("[Patcher] moved to next",{realObject:l,realProp:i,object:t,property:n,handler:o,patchedFunction:r,original:a,isEqual:l[i]===r});l[i]=l[i].__deckyPatch.original,e.hasUnpatched=!0,console.debug("[Patcher] unpatched",{realObject:l,realProp:i,object:t,property:n,handler:o,patchedFunction:r,original:a,isEqual:l[i]===r})}(a)};return e[t].__deckyPatch=a,a}function L(e,t=!0){let n=t?"const{":"";return e.forEach(((t,o)=>{n+=`"?${t}"?:[a-zA-Z_$]{1,2}`,o<e.length-1&&(n+=",")})),new RegExp(n)}function I(e,t={}){const n=window.SP_REACT.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher.current;let o={useContext:n.useContext,useCallback:n.useCallback,useLayoutEffect:n.useLayoutEffect,useEffect:n.useEffect,useMemo:n.useMemo,useRef:n.useRef,useState:n.useState};n.useCallback=e=>e,n.useContext=e=>e._currentValue,n.useLayoutEffect=e=>{},n.useMemo=(e,t)=>e,n.useEffect=e=>{},n.useRef=e=>({current:e||{}}),n.useState=e=>{let t=e;return[t,e=>t=e]},Object.assign(n,t);const r=e(n);return Object.assign(n,o),r}const D=(e,t,n)=>{const{walkable:o=null,ignore:r=[]}=n??{};return e&&"object"==typeof e?t(e)?e:Array.isArray(e)?e.map((e=>D(e,t,n))).find((e=>e)):(o||Object.keys(e)).map((o=>!r.includes(o)&&D(e[o],t,n))).find((e=>e)):null},O=(e,t)=>D(e,t,{walkable:["props","children","child","sibling"]}),M=d((e=>{if("object"==typeof e&&!e.__esModule){const t=Object.keys(e);return(1!=t.length||!e.version)&&(!(t.length>1e3&&e.AboutSettings)&&(t.length>0&&t.every((t=>!Object.getOwnPropertyDescriptor(e,t)?.get&&"string"==typeof e[t]))))}return!1})),N=Object.assign({},...M.map((e=>Object.fromEntries(Object.entries(e).map((([e,t])=>[e,t]))))));function B(e){return M.find((t=>t?.[e]))?.[e]}const $=new Proxy(B,{get:(e,t)=>{if("string"==typeof t)return e(t)}});function j(e){return M.find((t=>e(t)))}const F=j((e=>e.Title&&e.QuickAccessMenu&&e.BatteryDetailsLabels)),U=j((e=>e.ScrollPanel)),G=j((e=>e.GamepadDialogContent&&!e.BindingButtons)),x=j((e=>e.BatteryPercentageLabel&&e.PanelSection&&!e["vr-dashboard-bar-height"]&&!e.QuickAccessMenu&&!e.QuickAccess&&!e.PerfProfileInfo)),H=j((e=>e.OOBEUpdateStatusContainer)),K=j((e=>e.PlayBarDetailLabel)),W=j((e=>e.SliderControlPanelGroup)),V=j((e=>e.TopCapsule)),q=j((e=>e.HeaderLoaded)),Q=j((e=>e.BasicUiRoot)),z=j((e=>e.GamepadTabbedPage)),Y=j((e=>e.BasicContextMenuModal)),J=j((e=>e.AchievementListItemBase&&!e.Page)),Z=j((e=>e.AchievementListItemBase&&e.Page)),X=j((e=>e.AppRunningControls&&e.OverlayAchievements)),ee=j((e=>e.AppDetailsRoot)),te=j((e=>e.SpinnerLoaderContainer)),ne=j((e=>e.QuickAccessFooter)),oe=j((e=>e.PlayButtonContainer)),re=j((e=>e.LongTitles&&e.GreyBackground)),ae=j((e=>e.GamepadLibrary)),ie=j((e=>e.FocusRingRoot)),le=j((e=>e.SearchAndTitleContainer)),ce=j((e=>e.MainBrowserContainer)),se=F,de=U,ue=J;function ge(e){return new Promise((t=>setTimeout(t,e)))}function pe(){if("SP"==document.title)return window;const e=fe();return e?.find((e=>"root_1_"==e.m_ID)).Root.Element.ownerDocument.defaultView}function me(){return window.GamepadNavTree?.m_context?.m_controller||window.FocusNavController}function fe(){const e=me(),t=e.m_ActiveContext||e.m_LastActiveContext;return t?.m_rgGamepadNavigationTrees}const Ce=L(["highlightOnFocus","childrenContainerWidth"],!1),he=Object.values(u).find((e=>e?.render?.toString&&Ce.test(e.render.toString())||e?.render?.toString?.().includes('childrenContainerWidth:"min"'))),Se=s((e=>e.render?.toString().includes("setFocusedColumn:"))),be=s((e=>e?.toString&&e.toString().includes("().ControlsListChild")&&e.toString().includes("().ControlsListOuterPanel"))),ye=Object.values(i((e=>{if("object"!=typeof e)return!1;for(const t in e)if(e[t]?.prototype?.GetPanelElementProps)return!0;return!1}))).find((e=>e.contextType&&e.prototype?.render.toString().includes("fallback:")&&e?.prototype?.SetChecked&&e?.prototype?.Toggle&&e?.prototype?.GetPanelElementProps)),we=Object.values(u).find((e=>e?.prototype?.SetSelectedOption&&e?.prototype?.BuildMenu)),ke=L(["dropDownControlRef","description"],!1),Ee=Object.values(u).find((e=>e?.toString&&ke.test(e.toString()))),ve=s((e=>e?.render?.toString().includes('"shift-children-below"'))),Pe=L(["flow-children","onActivate","onCancel","focusClassName","focusWithinClassName"]),_e=s((e=>e?.render?.toString&&Pe.test(e.render.toString()))),Re=s((e=>e?.toString()?.includes(".GetShowDebugFocusRing())")));var Te;e.GamepadButton=void 0,(Te=e.GamepadButton||(e.GamepadButton={}))[Te.INVALID=0]="INVALID",Te[Te.OK=1]="OK",Te[Te.CANCEL=2]="CANCEL",Te[Te.SECONDARY=3]="SECONDARY",Te[Te.OPTIONS=4]="OPTIONS",Te[Te.BUMPER_LEFT=5]="BUMPER_LEFT",Te[Te.BUMPER_RIGHT=6]="BUMPER_RIGHT",Te[Te.TRIGGER_LEFT=7]="TRIGGER_LEFT",Te[Te.TRIGGER_RIGHT=8]="TRIGGER_RIGHT",Te[Te.DIR_UP=9]="DIR_UP",Te[Te.DIR_DOWN=10]="DIR_DOWN",Te[Te.DIR_LEFT=11]="DIR_LEFT",Te[Te.DIR_RIGHT=12]="DIR_RIGHT",Te[Te.SELECT=13]="SELECT",Te[Te.START=14]="START",Te[Te.LSTICK_CLICK=15]="LSTICK_CLICK",Te[Te.RSTICK_CLICK=16]="RSTICK_CLICK",Te[Te.LSTICK_TOUCH=17]="LSTICK_TOUCH",Te[Te.RSTICK_TOUCH=18]="RSTICK_TOUCH",Te[Te.LPAD_TOUCH=19]="LPAD_TOUCH",Te[Te.LPAD_CLICK=20]="LPAD_CLICK",Te[Te.RPAD_TOUCH=21]="RPAD_TOUCH",Te[Te.RPAD_CLICK=22]="RPAD_CLICK",Te[Te.REAR_LEFT_UPPER=23]="REAR_LEFT_UPPER",Te[Te.REAR_LEFT_LOWER=24]="REAR_LEFT_LOWER",Te[Te.REAR_RIGHT_UPPER=25]="REAR_RIGHT_UPPER",Te[Te.REAR_RIGHT_LOWER=26]="REAR_RIGHT_LOWER",Te[Te.STEAM_GUIDE=27]="STEAM_GUIDE",Te[Te.STEAM_QUICK_MENU=28]="STEAM_QUICK_MENU";const Ae=s((e=>e?.toString&&e.toString().includes(".Marquee")&&e.toString().includes("--fade-length"))),Le=s((e=>"function"==typeof e&&e.toString().includes("GetContextMenuManagerFromWindow(")&&e.toString().includes(".CreateContextMenuInstance("))),Ie=s((e=>e?.prototype?.HideIfSubmenu&&e?.prototype?.HideMenu)),De=s((e=>e?.render?.toString()?.includes("bPlayAudio:")||e?.prototype?.OnOKButton&&e?.prototype?.OnMouseEnter)),Oe=s((e=>"function"==typeof e&&e.toString().includes("props.bDisableBackgroundDismiss")&&!e?.prototype?.Cancel)),Me=s((e=>!e?.prototype?.OK&&e?.prototype?.Cancel&&e?.prototype?.render)),Ne=Object.values(i((e=>{if("object"!=typeof e)return!1;for(let t in e)if(e[t]?.m_mapModalManager&&Object.values(e)?.find((e=>e?.type)))return!0;return!1}))||{})?.find((e=>e?.type?.toString?.()?.includes("((function(){"))),[Be,$e]=l((e=>e?.toString().includes(".ModalPosition")),5),je=(Be?Object.values(Be):[]).find((e=>{const t=e?.toString();return t?.includes(".ShowPortalModal()")&&t?.includes(".OnElementReadyCallbacks.Register(")})),Fe=$e,[Ue,Ge]=l((e=>e.toString()?.includes(".PanelSection"))),xe=Ge,He=Object.values(Ue).filter((e=>!e?.toString()?.includes(".PanelSection")))[0],Ke=s((e=>e?.toString()?.includes('.ProgressBar,"standard"=='))),We=s((e=>e?.toString()?.includes(".ProgressBarFieldStatus},"))),Ve=L(["indeterminate","nTransitionSec","nProgress"]),qe=s((e=>e?.toString&&Ve.test(e.toString()))),Qe=L(["pages","fnSetNavigateToPage","disableRouteReporting"]),ze=s((e=>e?.toString&&Qe.test(e.toString()))),Ye=Object.values(u).find((e=>e?.toString()?.includes("SliderField,fallback"))),Je=Object.values(g)?.find((e=>e?.toString&&/Spinner\)}\)?,.\.createElement\(\"path\",{d:\"M18 /.test(e.toString()))),Ze=s((e=>e?.toString?.()?.includes("Steam Spinner")&&e?.toString?.()?.includes("src")));let Xe;let et;try{const e=c((e=>e.Unbleed));e&&(et=Object.values(e).find((e=>e?.type?.toString()?.includes("((function(){"))))}catch(e){console.error("Error finding oldTabs:",e)}const tt=et||(e=>{const n=Xe,[o,r]=t.useState(n);return t.useEffect((()=>{n||(async()=>{console.debug("[DFL:Tabs]: Finding component...");const e=await(async()=>{if(Xe)return Xe;for(;!window?.DeckyPluginLoader?.routerHook?.routes;)console.debug("[DFL:Tabs]: Waiting for Decky router..."),await ge(500);return Xe=I((()=>O(O(window.DeckyPluginLoader.routerHook.routes.find((e=>"/library/app/:appid/achievements"==e.props.path)).props.children.type(),(e=>e?.props?.scrollTabsTop)).type({appid:1}),(e=>e?.props?.tabs)).type),{useRef:()=>({current:{reaction:{track:()=>{}}}}),useContext:()=>({match:{params:{appid:1}}}),useMemo:()=>({data:{}})})})();console.debug("[DFL:Tabs]: Found!"),r(e)})()}),[]),console.log("tc",o),o?t.createElement(o,e):window.SP_REACT.createElement(Ze,null)}),nt=Object.values(u).find((e=>e?.validateUrl&&e?.validateEmail)),ot=Object.values(u).find((e=>e?.render?.toString()?.includes(".ToggleOff)"))),rt=Object.values(u).find((e=>e?.render?.toString()?.includes("ToggleField,fallback"))),at=c((e=>e?.render?.toString?.().includes('{case"x":'))),it=(at?Object.values(at):[]).find((e=>e?.render?.toString?.().includes('{case"x":'))),lt=s((e=>e?.render?.toString().includes(".FocusVisibleChild()),[])")));function ct(n){const[o,r]=t.useState(!1),[a,i]=t.useState(!1),l=n.listData;async function c(e){r(e);for(let e=0;e<3;e++)await new Promise((e=>requestAnimationFrame(e)));i(e)}return window.SP_REACT.createElement("div",{style:n.animate?{transition:o||a?"":"transform 0.3s cubic-bezier(0.25, 1, 0.5, 1), opacity 0.3s cubic-bezier(0.25, 1, 0.5, 1)",transform:!n.reorderEnabled||o?"scale(1)":"scale(0.9)",opacity:!n.reorderEnabled||o?1:.7}:{}},window.SP_REACT.createElement(ve,{label:n.entryData.label,...n.fieldProps,focusable:!n.children,onButtonDown:function(t){if(!n.reorderEnabled)return;const o=t,r=l.findIndex((e=>e===n.entryData)),a=l[r];if(r<0)return;let i=-1;if(o.detail.button==e.GamepadButton.DIR_DOWN?i=a.position+1:o.detail.button==e.GamepadButton.DIR_UP&&(i=a.position-1),i>=l.length||i<0)return;let c=l.find((e=>e.position===i));if(!c)return;let s=a.position;a.position=c.position,c.position=s,n.reorderEntryFunc([...l].sort(((e,t)=>e.position-t.position)))},onGamepadBlur:()=>c(!1),onGamepadFocus:()=>c(!0)},window.SP_REACT.createElement(_e,{style:{display:"flex",width:"100%",position:"relative"}},n.children)))}function st(){const e=fe();return e.find((e=>"QuickAccess-NA"===e?.id))?.m_Root?.m_element?.ownerDocument.defaultView??null}const dt=Object.values(p).find((e=>/return (\w)\?\1\.params:{}/.test(`${e}`)));var ut,gt,pt;e.SideMenu=void 0,(ut=e.SideMenu||(e.SideMenu={}))[ut.None=0]="None",ut[ut.Main=1]="Main",ut[ut.QuickAccess=2]="QuickAccess",e.QuickAccessTab=void 0,(gt=e.QuickAccessTab||(e.QuickAccessTab={}))[gt.Notifications=0]="Notifications",gt[gt.RemotePlayTogetherControls=1]="RemotePlayTogetherControls",gt[gt.VoiceChat=2]="VoiceChat",gt[gt.Friends=3]="Friends",gt[gt.Settings=4]="Settings",gt[gt.Perf=5]="Perf",gt[gt.Help=6]="Help",gt[gt.Music=7]="Music",gt[gt.Decky=999]="Decky",e.DisplayStatus=void 0,(pt=e.DisplayStatus||(e.DisplayStatus={}))[pt.Invalid=0]="Invalid",pt[pt.Launching=1]="Launching",pt[pt.Uninstalling=2]="Uninstalling",pt[pt.Installing=3]="Installing",pt[pt.Running=4]="Running",pt[pt.Validating=5]="Validating",pt[pt.Updating=6]="Updating",pt[pt.Downloading=7]="Downloading",pt[pt.Synchronizing=8]="Synchronizing",pt[pt.ReadyToInstall=9]="ReadyToInstall",pt[pt.ReadyToPreload=10]="ReadyToPreload",pt[pt.ReadyToLaunch=11]="ReadyToLaunch",pt[pt.RegionRestricted=12]="RegionRestricted",pt[pt.PresaleOnly=13]="PresaleOnly",pt[pt.InvalidPlatform=14]="InvalidPlatform",pt[pt.PreloadComplete=16]="PreloadComplete",pt[pt.BorrowerLocked=17]="BorrowerLocked",pt[pt.UpdatePaused=18]="UpdatePaused",pt[pt.UpdateQueued=19]="UpdateQueued",pt[pt.UpdateRequired=20]="UpdateRequired",pt[pt.UpdateDisabled=21]="UpdateDisabled",pt[pt.DownloadPaused=22]="DownloadPaused",pt[pt.DownloadQueued=23]="DownloadQueued",pt[pt.DownloadRequired=24]="DownloadRequired",pt[pt.DownloadDisabled=25]="DownloadDisabled",pt[pt.LicensePending=26]="LicensePending",pt[pt.LicenseExpired=27]="LicenseExpired",pt[pt.AvailForFree=28]="AvailForFree",pt[pt.AvailToBorrow=29]="AvailToBorrow",pt[pt.AvailGuestPass=30]="AvailGuestPass",pt[pt.Purchase=31]="Purchase",pt[pt.Unavailable=32]="Unavailable",pt[pt.NotLaunchable=33]="NotLaunchable",pt[pt.CloudError=34]="CloudError",pt[pt.CloudOutOfDate=35]="CloudOutOfDate",pt[pt.Terminating=36]="Terminating";const mt=s((e=>e.Navigate&&e.NavigationManager));const ft=window.Millennium;return e.Button=R,e.ButtonItem=he,e.Carousel=Se,e.Classes=$,e.ColorPickerModal=({closeModal:e,onConfirm:n=()=>{},title:o="Color Picker",defaultH:r=0,defaultS:a=100,defaultL:i=50,defaultA:l=1})=>{const[c,s]=t.useState(r),[d,u]=t.useState(a),[g,p]=t.useState(i),[m,f]=t.useState(l),C={"--decky-color-picker-hvalue":`${c}`,"--decky-color-picker-svalue":`${d}%`,"--decky-color-picker-lvalue":`${g}%`,"--decky-color-picker-avalue":`${m}`};return window.SP_REACT.createElement(Me,{bAllowFullSize:!0,onCancel:e,onOK:()=>{n(`hsla(${c}, ${d}%, ${g}%, ${m})`),e()}},window.SP_REACT.createElement("style",null,`\n /* This removes the cyan track color that is behind the slider head */\n .ColorPicker_Container .${W.SliderTrack} {\n --left-track-color: #0000;\n /* This is for compatibility with the "Colored Toggles" CSSLoader Theme*/\n --colored-toggles-main-color: #0000;\n }\n\n .ColorPicker_HSlider .${W.SliderTrack} {\n background: linear-gradient(\n 270deg,\n hsla(360, var(--decky-color-picker-svalue), var(--decky-color-picker-lvalue), var(--decky-color-picker-avalue)),\n hsla(270, var(--decky-color-picker-svalue), var(--decky-color-picker-lvalue), var(--decky-color-picker-avalue)),\n hsla(180, var(--decky-color-picker-svalue), var(--decky-color-picker-lvalue), var(--decky-color-picker-avalue)),\n hsla(90, var(--decky-color-picker-svalue), var(--decky-color-picker-lvalue), var(--decky-color-picker-avalue)),\n hsla(0, var(--decky-color-picker-svalue), var(--decky-color-picker-lvalue), var(--decky-color-picker-avalue))\n );\n }\n\n .ColorPicker_SSlider .${W.SliderTrack} {\n background: linear-gradient(\n 90deg,\n hsla(var(--decky-color-picker-hvalue), 0%, var(--decky-color-picker-lvalue), var(--decky-color-picker-avalue)),\n hsla(var(--decky-color-picker-hvalue), 100%, var(--decky-color-picker-lvalue), var(--decky-color-picker-avalue))\n );\n }\n\n .ColorPicker_LSlider .${W.SliderTrack} {\n background: linear-gradient(\n 90deg,\n hsla(var(--decky-color-picker-hvalue), var(--decky-color-picker-svalue), 0%, var(--decky-color-picker-avalue)),\n hsla(var(--decky-color-picker-hvalue), var(--decky-color-picker-svalue), 50%, var(--decky-color-picker-avalue)),\n hsla(var(--decky-color-picker-hvalue), var(--decky-color-picker-svalue), 100%, var(--decky-color-picker-avalue))\n );\n }\n\n .ColorPicker_ASlider .${W.SliderTrack} {\n background: linear-gradient(\n 90deg,\n hsla(var(--decky-color-picker-hvalue), var(--decky-color-picker-svalue), var(--decky-color-picker-lvalue), 0),\n hsla(var(--decky-color-picker-hvalue), var(--decky-color-picker-svalue), var(--decky-color-picker-lvalue), 1)\n );\n }\n `),window.SP_REACT.createElement("div",{className:"ColorPicker_ColorDisplayContainer",style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"1em",marginTop:"-2.5em"}},window.SP_REACT.createElement("div",null,window.SP_REACT.createElement("span",{style:{fontSize:"1.5em"}},window.SP_REACT.createElement("b",null,o))),window.SP_REACT.createElement("div",{style:{backgroundColor:`hsla(${c}, ${d}%, ${g}%, ${m})`,width:"40px",height:"40px"}})),window.SP_REACT.createElement("div",{className:"ColorPicker_Container",style:C},window.SP_REACT.createElement("div",{className:"ColorPicker_HSlider"},window.SP_REACT.createElement(Ye,{showValue:!0,editableValue:!0,label:"Hue",value:c,min:0,max:360,onChange:s})),window.SP_REACT.createElement("div",{className:"ColorPicker_SSlider"},window.SP_REACT.createElement(Ye,{showValue:!0,editableValue:!0,label:"Saturation",value:d,min:0,max:100,onChange:u})),window.SP_REACT.createElement("div",{className:"ColorPicker_LSlider"},window.SP_REACT.createElement(Ye,{showValue:!0,editableValue:!0,label:"Lightness",value:g,min:0,max:100,onChange:p})),window.SP_REACT.createElement("div",{className:"ColorPicker_ASlider"},window.SP_REACT.createElement(Ye,{showValue:!0,editableValue:!0,label:"Alpha",value:m,step:.1,min:0,max:1,onChange:f}))))},e.CommonUIModule=u,e.ConfirmModal=Me,e.ControlsList=be,e.DialogBody=w,e.DialogBodyText=y,e.DialogButton=_,e.DialogButtonPrimary=v,e.DialogButtonSecondary=P,e.DialogCheckbox=ye,e.DialogControlsSection=k,e.DialogControlsSectionHeader=E,e.DialogFooter=S,e.DialogHeader=C,e.DialogLabel=b,e.DialogSubHeader=h,e.Dropdown=we,e.DropdownItem=Ee,e.Field=ve,e.FocusRing=Re,e.Focusable=_e,e.IconsModule=g,e.Marquee=Ae,e.Menu=Ie,e.MenuItem=De,e.Millennium=ft,e.ModalPosition=Fe,e.ModalRoot=Ne,e.Navigation={},e.PanelSection=xe,e.PanelSectionRow=He,e.ProgressBar=Ke,e.ProgressBarItem=qe,e.ProgressBarWithInfo=We,e.ReactRouter=p,e.ReorderableList=function(n){void 0===n.animate&&(n.animate=!0);const[o,r]=t.useState([...n.entries].sort(((e,t)=>e.position-t.position))),[a,i]=t.useState(!1);function l(){let e=!a;i(e),e||n.onSave(o)}return t.useEffect((()=>{r([...n.entries].sort(((e,t)=>e.position-t.position)))}),[n.entries]),window.SP_REACT.createElement(t.Fragment,null,window.SP_REACT.createElement("div",{style:{width:"inherit",height:"inherit",flex:"1 1 1px",scrollPadding:"48px 0px",display:"flex",flexDirection:"column",justifyContent:"flex-start",alignContent:"stretch"}},window.SP_REACT.createElement(_e,{onSecondaryButton:l,onSecondaryActionDescription:a?"Save Order":"Reorder",onClick:l,onButtonDown:function(t){t.detail.button==e.GamepadButton.CANCEL&&a&&(i(!a),n.onSave(o))}},o.map((e=>window.SP_REACT.createElement(ct,{animate:n.animate,listData:o,entryData:e,reorderEntryFunc:r,reorderEnabled:a,fieldProps:n.fieldProps},n.interactables?window.SP_REACT.createElement(n.interactables,{entry:e}):null))))))},e.Router=mt,e.ScrollPanel=it,e.ScrollPanelGroup=lt,e.SidebarNavigation=ze,e.SimpleModal=je,e.SliderField=Ye,e.Spinner=Je,e.SteamSpinner=Ze,e.SuspensefulImage=e=>{const[n,o]=t.useState(!0),[r,a]=t.useState(!1);return t.useEffect((()=>{o(!0),a(!1);const t=new Image;t.src=e.src||"",t.addEventListener("load",(()=>{o(!1)})),t.addEventListener("error",(()=>{a(!0)}))}),[e.src]),n?window.SP_REACT.createElement("div",{style:{width:e.suspenseWidth||e.style?.width,height:e.suspenseHeight||e.style?.height,background:"rgba(255, 255, 255, 0.2)",display:"flex",alignItems:"center",justifyContent:"center"}},r?"Missing image":window.SP_REACT.createElement(Je,{style:{height:"48px"}})):window.SP_REACT.createElement("img",{...e})},e.Tabs=tt,e.TextField=nt,e.Toggle=ot,e.ToggleField=rt,e.achievementClasses=ue,e.achievementListClasses=J,e.achievementPageClasses=Z,e.afterPatch=function(e,t,n,o={}){const r=e[t];e[t]=function(...e){let t=a.original.call(this,...e);return t=n.call(this,e,t),o.singleShot&&a.unpatch(),t};const a=A(e,t,n,e[t],r);return a},e.appActionButtonClasses=oe,e.appDetailsClasses=q,e.appDetailsHeaderClasses=V,e.basicAppDetailsSectionStylerClasses=ee,e.beforePatch=function(e,t,n,o={}){const r=e[t];e[t]=function(...e){n.call(this,e);const t=a.original.call(this,...e);return o.singleShot&&a.unpatch(),t};const a=A(e,t,n,e[t],r);return a},e.callOriginal=T,e.classMap=N,e.classMapList=M,e.createPropListRegex=L,e.definePlugin=e=>(...t)=>e(...t),e.fakeRenderComponent=I,e.findAllModules=d,e.findClass=B,e.findClassModule=j,e.findInReactTree=O,e.findInTree=D,e.findModule=i,e.findModuleByExport=c,e.findModuleChild=e=>{for(const t of a)for(const n of[t.default,t]){const t=e(n);if(t)return t}},e.findModuleDetailsByExport=l,e.findModuleExport=s,e.findSP=pe,e.focusRingClasses=ie,e.footerClasses=ne,e.gamepadContextMenuClasses=Y,e.gamepadDialogClasses=G,e.gamepadLibraryClasses=ae,e.gamepadSliderClasses=W,e.gamepadTabbedPageClasses=z,e.gamepadUIClasses=Q,e.getFocusNavController=me,e.getGamepadNavigationTrees=fe,e.getReactInstance=function(e){return e[Object.keys(e).find((e=>e.startsWith("__reactFiber")))]||e[Object.keys(e).find((e=>e.startsWith("__reactInternalInstance")))]},e.getReactRoot=function(e){return e[Object.keys(e).find((e=>e.startsWith("__reactContainer$")))]||e._reactRootContainer?._internalRoot?.current},e.joinClassNames=function(...e){return e.join(" ")},e.libraryAssetImageClasses=re,e.mainBrowserClasses=ce,e.mainMenuAppRunningClasses=X,e.modules=a,e.playSectionClasses=K,e.pluginSelf=undefined,e.quickAccessControlsClasses=x,e.quickAccessMenuClasses=F,e.replacePatch=function(e,t,n,o={}){const r=e[t];e[t]=function(...e){const t=n.call(this,e);return t==T?a.original.call(this,...e):(o.singleShot&&a.unpatch(),t)};const a=A(e,t,n,e[t],r);return a},e.scrollClasses=de,e.scrollPanelClasses=U,e.searchBarClasses=le,e.showContextMenu=Le,e.showModal=(e,t,n={strTitle:"Decky Dialog",bHideMainWindowForPopouts:!1})=>Oe(e,t||pe()||window,n.strTitle,n,void 0,{bHideActions:n.bHideActionIcons}),e.sleep=ge,e.staticClasses=se,e.steamSpinnerClasses=te,e.unminifyClass=function(e){for(let t of M)for(let n of Object.keys(t))if(t[n]==e)return n},e.updaterFieldClasses=H,e.useParams=dt,e.useQuickAccessVisible=function(){const[e,n]=t.useState(st()?.document.hidden??!1);return t.useEffect((()=>{const e=st();if(null===e)return void console.error("Could not get window of QuickAccess menu!");const t=()=>n(e.document.hidden);return e.addEventListener("visibilitychange",t),()=>{e.removeEventListener("visibilitychange",t)}}),[]),!e},e.wrapReactClass=function(e,t="type"){var n;if(e[t]?.__DECKY_WRAPPED)return e[t];{const o=e[t],r=((n=class extends o{}).__DECKY_WRAPPED=!0,n);return e[t]=r}},e.wrapReactType=function(e,t="type"){return e[t]?.__DECKY_WRAPPED?e[t]:e[t]={...e[t],__DECKY_WRAPPED:!0}},e},millennium_api_components=function(e){"use strict";const t="steamloopback.host"===window.location.hostname;window.MILLENNIUM_BACKEND_IPC={postMessage:(e,t)=>new Promise((n=>{const o={id:e,iteration:window.CURRENT_IPC_CALL_COUNT++,data:t},r=e=>{let a;try{a=JSON.parse(e.data)}catch{return void console.error("Failed to parse JSON from backend IPC",e.data,t)}a.id===o.iteration&&(n(a),window.MILLENNIUM_IPC_SOCKET.removeEventListener("message",r))};window.MILLENNIUM_IPC_SOCKET.addEventListener("message",r),window.MILLENNIUM_IPC_SOCKET.send(JSON.stringify(o))}))},window.Millennium={callServerMethod:(e,t,n)=>new Promise(((o,r)=>{const a={pluginName:e,methodName:t,...n&&{argumentList:n}};window.MILLENNIUM_BACKEND_IPC.postMessage(0,a).then((n=>{if(n?.failedRequest)return r(`IPC call failed [plugin: ${e}, method: ${t}] -> ${n.failMessage}`);o("string"==typeof n.returnValue?atob(n.returnValue):n.returnValue)}))})),findElement:(e,t,n)=>new Promise(((o,r)=>{const a=e.querySelectorAll(t);if(a.length)return o(a);const i=new MutationObserver((()=>{const n=e.querySelectorAll(t);n.length&&(i.disconnect(),l&&clearTimeout(l),o(n))}));i.observe(e.body,{childList:!0,subtree:!0});const l=n&&setTimeout((()=>{i.disconnect(),r()}),n)})),...t?{exposeObj:function(e,t){for(const n in t)e[n]=t[n]},AddWindowCreateHook:e=>{g_PopupManager.AddPopupCreatedCallback((t=>{e(t)}))}}:{}};const n=t?undefined:void 0,o=window.Millennium;return e.Millennium=o,e.callable=(e,t)=>(...n)=>e(t,...n),e.pluginSelf=n,e},millennium_components=function(){"use strict";const e="background: #8a16a2; color: white;",t="steamloopback.host"===window.location.hostname?"@steambrew/client":"@steambrew/webkit";const n=new class{constructor(e){this.name=e,this.name=e}log(...n){((n,...o)=>{console.log(`%c ${t} %c ${n} %c`,e,"background: #b11cce; color: white;","background: transparent;",...o)})(this.name,...n)}debug(...n){((n,...o)=>{console.debug(`%c ${t} %c ${n} %c`,e,"background: #1abc9c; color: white;","color: blue;",...o)})(this.name,...n)}warn(...n){((n,...o)=>{console.warn(`%c ${t} %c ${n} %c`,e,"background: #ffbb00; color: white;","color: blue;",...o)})(this.name,...n)}error(...n){((n,...o)=>{console.error(`%c ${t} %c ${n} %c`,e,"background: #FF0000;","background: transparent;",...o)})(this.name,...n)}group(...n){((n,...o)=>{console.group(`%c ${t} %c ${n} %c`,e,"background: #b11cce; color: white;","background: transparent;",...o)})(this.name,...n)}groupEnd(...n){((n,...o)=>{console.groupEnd(),o?.length>0&&console.log(`^ %c ${t} %c ${n} %c`,e,"background: #b11cce; color: white;","background: transparent;",...o)})(this.name,...n)}}("Core"),o="steamloopback.host"===window.location.hostname,r=e=>new Promise(((t,n)=>{e.readyState===WebSocket.OPEN?t():(e.addEventListener("open",(()=>t())),e.addEventListener("error",(()=>n())))})),a=()=>new Promise((e=>{const t=t=>{t?.length>=5&&((async()=>{window.MILLENNIUM_API={...window.MILLENNIUM_API,...millennium_api_components({}),...steam_client_components({},window.SP_REACT)}})(),clearInterval(n),e())},n=setInterval((()=>t(window?.webpackChunksteamui)),100)})),i=async()=>{const e=JSON.parse(await Millennium.callServerMethod("core","_webkit_accent_color"));((e,t,n)=>{e.querySelectorAll(`style[id='${n}']`).length||(e.head.appendChild(Object.assign(e.createElement("style"),{id:n})).innerText=t)})(document,`\n\t:root {\n --SystemAccentColor: ${e.accent}; \n --SystemAccentColor-RGB: ${e.accentRgb}; \n --SystemAccentColorLight1: ${e.light1}; \n --SystemAccentColorLight1-RGB: ${e.light1Rgb}; \n --SystemAccentColorLight2: ${e.light2}; \n --SystemAccentColorLight2-RGB: ${e.light2Rgb}; \n --SystemAccentColorLight3: ${e.light3};\n --SystemAccentColorLight3-RGB: ${e.light3Rgb};\n --SystemAccentColorDark1: ${e.dark1};\n --SystemAccentColorDark1-RGB: ${e.dark1Rgb};\n --SystemAccentColorDark2: ${e.dark2};\n --SystemAccentColorDark2-RGB: ${e.dark2Rgb};\n --SystemAccentColorDark3: ${e.dark3};\n --SystemAccentColorDark3-RGB: ${e.dark3Rgb};\n }`,"SystemAccentColorInject")};return(e,t)=>{var l;window.MILLENNIUM_IPC_PORT=e,n.log(`Successfully bound to ${o?"client":"webkit"} DOM...`),(l="ws://localhost:"+e,new Promise((e=>{try{let t=new WebSocket(l);t.addEventListener("open",(()=>{n.log("Successfully connected to IPC server."),e(t)})),t.addEventListener("error",(()=>{console.log("Failed to connect to IPC server:",l),window.location.reload()})),t.addEventListener("close",(()=>{console.log("IPC server closed connection:",l)}))}catch(e){console.warn("Failed to connect to IPC server:",e)}}))).then((async e=>{window.MILLENNIUM_IPC_SOCKET=e,window.CURRENT_IPC_CALL_COUNT=0,await Promise.all([r(e),...o?[a()]:[]]),n.log("Ready to inject shims..."),o||(window.MILLENNIUM_API=millennium_api_components({}),i()),t?.forEach((e=>{!document.querySelectorAll(`script[src='${e}'][type='module']`).length&&document.head.appendChild(Object.assign(document.createElement("script"),{src:e,type:"module",id:"millennium-injected"}))}))})).catch((e=>console.error("Initial WebSocket connection failed:",e)))}}();