1import{a as G}from"./chunk-UDRLYT4S.js";import"./chunk-U5UNPWKA.js";import{j as N}from"./chunk-RTCQSZ34.js";import"./chunk-EYJG6K46.js";import{b as L,c as j}from"./chunk-7BI62HGX.js";import"./chunk-K2FFOTHJ.js";import{C as O,t as S}from"./chunk-STNGBLON.js";import{c as V,e as B}from"./chunk-MQ73MKHP.js";import"./chunk-DXQ2TSJO.js";import"./chunk-7AJKC2Q4.js";import"./chunk-Y7EZXREE.js";import"./chunk-T4ATVOVN.js";import{B as x,F as T}from"./chunk-WVVCABH3.js";import{Kb as l,Lb as a,Mb as c,Ub as _,Wb as y,Xb as r,_a as s,jb as p,ka as v,kc as u,la as b,lc as g,nd as E,pb as w,ub as m,vc as I,wc as k,xc as M,xd as P}from"./chunk-VQHB4ORK.js";import{i as f}from"./chunk-FBFWB55K.js";var F=()=>({width:"calc(100% - 24px)",right:"12px"}),$=n=>({"600px":n});function D(n,d){if(n&1&&(a(0,"p"),u(1),c()),n&2){let t=r(2);s(),g(t.lang.mpBusyHint)}}function q(n,d){if(n&1){let t=_();a(0,"button",9),y("click",function(){v(t);let o=r().$implicit,i=r();return b(i.accept(o.data))}),c()}if(n&2){let t=r().$implicit,e=r();l("rounded",!0)("disabled",e.busy)("label",t.data.status==="pending"?e.lang.acceptGame:e.lang.mpOpen)}}function z(n,d){if(n&1){let t=_();a(0,"button",10),y("click",function(){v(t);let o=r().$implicit,i=r();return b(i.decline(o.data))}),c()}if(n&2){let t=r(2);l("rounded",!0)("disabled",t.busy)("label",t.lang.mpDecline)}}function R(n,d){if(n&1&&(a(0,"p",11),u(1),c()),n&2){let t=r(2);s(),g(t.error)}}function U(n,d){if(n&1){let t=_();a(0,"div",2)(1,"strong"),u(2),c(),a(3,"p"),u(4),c(),m(5,D,2,1,"p",3),a(6,"div",4),m(7,q,1,3,"button",5)(8,z,1,3,"button",6),a(9,"button",7),y("click",function(){let o=v(t).$implicit,i=r();return b(i.later(o.data))}),c()(),m(10,R,2,1,"p",8),c()}if(n&2){let t=d.$implicit,e=r();s(2),g(t.summary),s(2),g(t.detail),s(),l("ngIf",e.inGame),s(2),l("ngIf",!e.inGame),s(),l("ngIf",t.data.status==="pending"),s(),l("text",!0)("disabled",e.busy)("label",e.lang.mpLater),s(),l("ngIf",e.error)}}var rt=(()=>{class n{invites;cache;language;router;messages;busy=!1;error="";subscription;seen=new Set;token="";showing;constructor(t,e,o,i,h){this.invites=t,this.cache=e,this.language=o,this.router=i,this.messages=h}resolvedLang;get lang(){let t=this.cache.getCache("ipLocationCountryCode")||"en";if(this.resolvedLang?.code===t)return this.resolvedLang.lang;let e=this.language.getLanguageFileForLocalUse(t);return this.language.isLanguageLoaded(t)&&(this.resolvedLang={code:t,lang:e}),e}get inGame(){return this.invites.inbox.inGame||this.router.url.startsWith("/gameboard")}ngOnInit(){this.subscription=this.invites.inbox$.subscribe(t=>{let e=this.cache.getCache("token")||"";e!==this.token&&(this.seen.clear(),this.dismiss(),this.token=e);let o=[...t.received.filter(i=>i.status==="pending"),...t.sent.filter(i=>i.status==="accepted")];this.showing&&!o.some(i=>i.code===this.showing)&&this.dismiss();for(let i of o){let h=i.code+":"+i.status;if(this.seen.has(h))continue;this.seen.add(h);let C=this.router.parseUrl(this.router.url);if(!(i.rematchOf&&this.router.url.startsWith("/gameboard"))&&!(C.queryParams.view==="multiplayer"&&C.queryParams.invite===i.code)){this.showing=i.code,this.messages.clear("multiplayer-new"),this.messages.add({key:"multiplayer-new",severity:"info",life:15e3,data:i,summary:i.status==="accepted"?this.lang.mpAcceptedReturn:this.lang.mpNewInvite,detail:(i.status==="accepted"?i.friend?.nickname:i.host.nickname)+" \xB7 "+i.playToPoints+" \xB7 "+(i.ruleset==="juxtab-extreme"?this.lang.juxtabExtremeMode:i.ruleset==="juxtab"?this.lang.juxtabMode:i.isKontra?this.lang.counterMode:this.lang.normalMode)});break}}this.seen.size>200&&(this.seen=new Set([...this.seen].slice(-100)))}),this.invites.start()}ngOnDestroy(){this.subscription?.unsubscribe()}open(t){this.inGame||(this.dismiss(),this.router.navigate(["/home"],{queryParams:{view:"multiplayer",invite:t.code}}))}accept(t){return f(this,null,function*(){if(!(this.busy||this.inGame)){if(t.status!=="pending"){this.open(t);return}this.busy=!0,this.error="";try{yield this.invites.action(t.code,"join"),this.open(t),yield this.invites.refresh()}catch(e){this.error=this.lang["friendInviteError_"+e?.error?.code]||this.lang.friendInviteError}finally{this.busy=!1}}})}decline(t){return f(this,null,function*(){if(!this.busy){this.busy=!0,this.error="";try{yield this.invites.action(t.code,"decline"),this.dismiss(),yield this.invites.refresh()}catch(e){this.error=this.lang["friendInviteError_"+e?.error?.code]||this.lang.friendInviteError}finally{this.busy=!1}}})}later(t){return f(this,null,function*(){if(!this.busy){if(t.status!=="pending"){this.dismiss();return}this.busy=!0,this.error="";try{yield this.invites.action(t.code,"later"),this.dismiss()}catch(e){this.error=this.lang["friendInviteError_"+e?.error?.code]||this.lang.friendInviteError}finally{this.busy=!1}}})}dismiss(){this.messages.clear("multiplayer-new"),this.showing=void 0,this.error=""}static \u0275fac=function(e){return new(e||n)(p(G),p(O),p(N),p(S),p(x))};static \u0275cmp=w({type:n,selectors:[["app-invite-notifications"]],features:[I([x])],decls:2,vars:5,consts:[["key","multiplayer-new","styleClass","mp-invite-toast","position","top-right",3,"baseZIndex","breakpoints"],["pTemplate","message"],[1,"invite-notice"],[4,"ngIf"],[1,"notice-actions"],["pButton","","type","button","severity","success",3,"rounded","disabled","label","click",4,"ngIf"],["pButton","","type","button","severity","danger",3,"rounded","disabled","label","click",4,"ngIf"],["pButton","","type","button","severity","warn",3,"click","text","disabled","label"],["role","alert",4,"ngIf"],["pButton","","type","button","severity","success",3,"click","rounded","disabled","label"],["pButton","","type","button","severity","danger",3,"click","rounded","disabled","label"],["role","alert"]],template:function(e,o){e&1&&(a(0,"p-toast",0),m(1,U,11,9,"ng-template",1),c()),e&2&&l("baseZIndex",9999999)("breakpoints",M(3,$,k(2,F)))},dependencies:[P,E,j,L,T,B,V],styles:["[_nghost-%COMP%] .mp-invite-toast .p-toast-message{background:var(--p-dialog-background, var(--p-overlay-modal-background, var(--brand-surface)));color:var(--p-dialog-color, var(--p-overlay-modal-color, var(--brand-text)));border:1px solid var(--p-dialog-border-color, var(--p-overlay-modal-border-color, var(--brand-surface-border)));border-radius:16px;box-shadow:var(--p-dialog-shadow, var(--p-overlay-modal-shadow));backdrop-filter:none;font-family:var(--brand-font-family)}[_nghost-%COMP%] .mp-invite-toast .p-toast-close-button{color:var(--brand-primary)}[_nghost-%COMP%] .mp-invite-toast .p-toast-close-button:hover{background:color-mix(in srgb,var(--brand-primary) 12%,transparent)}[_nghost-%COMP%] .mp-invite-toast .p-toast-close-button:focus-visible{outline:2px solid var(--brand-primary);box-shadow:none}.invite-notice[_ngcontent-%COMP%]{width:100%}.invite-notice[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--brand-primary);font-size:1.25rem;font-weight:400}.invite-notice[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{font-family:Roboto,sans-serif;font-size:14px;line-height:1.5}.notice-actions[_ngcontent-%COMP%]{display:flex;gap:10px;flex-wrap:wrap;align-items:center}"]})}return n})();export{rt as InviteNotificationsComponent};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.