- Persistent header: clock countdown, level, blinds, player count (red pulse <10s, PAUSED/BREAK badges) - Bottom tab bar (mobile): Overview, Players, Tables, Financials, More with 48px touch targets - Desktop sidebar (>=768px): vertical nav replacing bottom tabs - FAB: expandable quick actions (Bust, Buy In, Rebuy, Add-On, Pause/Resume) with backdrop - Toast notification system: success/info/warning/error with auto-dismiss and stacking - DataTable: sortable columns, sticky header, search/filter, mobile swipe actions, skeleton loading - Multi-tournament tabs: horizontal scrollable selector when 2+ tournaments active - Loading components: spinner (sm/md/lg), skeleton rows, full-page overlay - Root layout: auth guard, responsive shell (mobile bottom tabs / desktop sidebar) - Route pages: overview, players, tables, financials, more with placeholder content Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 line
3.5 KiB
JavaScript
1 line
3.5 KiB
JavaScript
var S=Object.defineProperty;var v=e=>{throw TypeError(e)};var O=(e,t,a)=>t in e?S(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var g=(e,t,a)=>O(e,typeof t!="symbol"?t+"":t,a),U=(e,t,a)=>t.has(e)||v("Cannot "+a);var s=(e,t,a)=>(U(e,t,"read from private field"),a?a.call(e):t.get(e)),i=(e,t,a)=>t.has(e)?v("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,a);import{b as l,g as r,d as c,e as p}from"./C4An0dnW.js";var n,d,h,u,b,k,y,o;class x{constructor(){i(this,n,l(null));i(this,d,l(null));i(this,h,l(p([])));i(this,u,l(p([])));i(this,b,l(null));i(this,k,l(p([])));i(this,y,l(p([])));i(this,o,l(null));g(this,"maxActivityEntries",100)}get id(){return r(s(this,n))}set id(t){c(s(this,n),t,!0)}get clock(){return r(s(this,d))}set clock(t){c(s(this,d),t,!0)}get players(){return r(s(this,h))}set players(t){c(s(this,h),t,!0)}get tables(){return r(s(this,u))}set tables(t){c(s(this,u),t,!0)}get financials(){return r(s(this,b))}set financials(t){c(s(this,b),t,!0)}get activity(){return r(s(this,k))}set activity(t){c(s(this,k),t,!0)}get rankings(){return r(s(this,y))}set rankings(t){c(s(this,y),t,!0)}get balanceStatus(){return r(s(this,o))}set balanceStatus(t){c(s(this,o),t,!0)}get remainingPlayers(){return this.players.filter(t=>t.status==="active").length}get totalPlayers(){return this.players.length}get activeTables(){return this.tables.filter(t=>t.players.length>0).length}get isBalanced(){var t;return((t=this.balanceStatus)==null?void 0:t.is_balanced)??!0}handleMessage(t){switch(t.type){case"clock.tick":this.clock=t.data;break;case"clock.level_change":this.clock=t.data;break;case"clock.paused":this.clock&&(this.clock.is_paused=!0);break;case"clock.resumed":this.clock&&(this.clock.is_paused=!1);break;case"state.snapshot":this.loadFullState(t.data);break;case"player.registered":this.addOrUpdatePlayer(t.data);break;case"player.seated":this.addOrUpdatePlayer(t.data);break;case"player.bust":case"player.eliminated":this.addOrUpdatePlayer(t.data);break;case"player.rebuy":case"player.addon":this.addOrUpdatePlayer(t.data);break;case"player.moved":this.addOrUpdatePlayer(t.data);break;case"table.created":this.addOrUpdateTable(t.data);break;case"table.broken":this.removeTable(t.data.id);break;case"table.updated":this.addOrUpdateTable(t.data);break;case"financial.updated":this.financials=t.data;break;case"rankings.updated":this.rankings=t.data;break;case"balance.updated":this.balanceStatus=t.data;break;case"activity.new":this.addActivity(t.data);break;case"connected":console.log("tournament: connected to server");break;default:console.warn(`tournament: unknown message type: ${t.type}`)}}reset(){this.id=null,this.clock=null,this.players=[],this.tables=[],this.financials=null,this.activity=[],this.rankings=[],this.balanceStatus=null}loadFullState(t){this.id=t.id??this.id,this.clock=t.clock??null,this.players=t.players??[],this.tables=t.tables??[],this.financials=t.financials??null,this.activity=t.activity??[],this.rankings=t.rankings??[],this.balanceStatus=t.balance_status??null}addOrUpdatePlayer(t){const a=this.players.findIndex(f=>f.id===t.id);a>=0?this.players[a]=t:this.players.push(t)}addOrUpdateTable(t){const a=this.tables.findIndex(f=>f.id===t.id);a>=0?this.tables[a]=t:this.tables.push(t)}removeTable(t){this.tables=this.tables.filter(a=>a.id!==t)}addActivity(t){this.activity=[t,...this.activity].slice(0,this.maxActivityEntries)}}n=new WeakMap,d=new WeakMap,h=new WeakMap,u=new WeakMap,b=new WeakMap,k=new WeakMap,y=new WeakMap,o=new WeakMap;const w=new x;export{w as t};
|