- 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
13 KiB
JavaScript
1 line
13 KiB
JavaScript
var da=u=>{throw TypeError(u)};var xa=(u,a,e)=>a.has(u)||da("Cannot "+e);var C=(u,a,e)=>(xa(u,a,"read from private field"),e?e.call(u):a.get(u)),sa=(u,a,e)=>a.has(u)?da("Cannot add the same private member more than once"):a instanceof WeakSet?a.add(u):a.set(u,e);import{a as f,f as m,c as la}from"../chunks/Q5CB4WY5.js";import{o as ka}from"../chunks/nIaoZoCo.js";import{T as ya,V as wa,p as W,c,r as i,a as j,f as V,g as s,s as h,aR as Ta,t as O,i as ba,a0 as Aa,b as ra,d as U,e as ha,x as Fa}from"../chunks/C4An0dnW.js";import{B as Ba,i as E}from"../chunks/D__6P984.js";import{a as fa}from"../chunks/D3f6eoxz.js";import{g as Ia}from"../chunks/DQNCp18R.js";import{p as oa}from"../chunks/DyXP65qD.js";import{i as H}from"../chunks/BViIIwgj.js";import{s as y,d as ca,e as Pa,a as z}from"../chunks/CQQh_IlD.js";import{a as D,e as aa,s as N,i as na}from"../chunks/BeLKMLqR.js";import{t as B}from"../chunks/C5aWxL5p.js";import{s as va}from"../chunks/BTkWS7xQ.js";function pa(u,a,...e){var d=new Ba(u);ya(()=>{const o=a()??null;d.ensure(o,o&&(b=>o(b,...e)))},wa)}const Sa=!0,Ma=!1,we=Object.freeze(Object.defineProperty({__proto__:null,prerender:Sa,ssr:Ma},Symbol.toStringTag,{value:"Module"}));var $a=m('<span class="status-badge paused-badge svelte-1elxaub">PAUSED</span>'),Ea=m('<span class="status-badge break-badge svelte-1elxaub">BREAK</span>'),Na=m('<span class="blinds ante-value hide-mobile svelte-1elxaub"> </span>'),Ra=m('<div><!> <span class="timer clock-time svelte-1elxaub"> </span></div> <div class="header-level svelte-1elxaub"><span class="level-number svelte-1elxaub"> </span> <span class="level-name hide-mobile svelte-1elxaub"> </span></div> <div class="header-blinds svelte-1elxaub"><span class="blinds-label hide-mobile svelte-1elxaub">Blinds</span> <span class="blinds blinds-value svelte-1elxaub"> </span> <!></div> <div class="header-players svelte-1elxaub"><span class="number player-count svelte-1elxaub"> </span> <span class="player-label hide-mobile svelte-1elxaub">remaining</span></div>',1),qa=m('<div class="header-empty svelte-1elxaub"><span class="brand svelte-1elxaub">Felt</span> <span class="no-data svelte-1elxaub">No active tournament</span></div>'),Oa=m('<header class="header svelte-1elxaub"><div class="header-inner svelte-1elxaub"><!></div></header>');function La(u,a){W(a,!1);function e(n){n<0&&(n=0);const t=Math.floor(n/60),v=n%60;return`${String(t).padStart(2,"0")}:${String(v).padStart(2,"0")}`}function d(n,t){return`${n.toLocaleString()}/${t.toLocaleString()}`}H();var o=Oa(),b=c(o),l=c(b);{var r=n=>{const t=ba(()=>B.clock),v=ba(()=>s(t).remaining_seconds<=10&&!s(t).is_break&&!s(t).is_paused);var _=Ra(),g=V(_);let k;var x=c(g);{var I=F=>{var $=$a();f(F,$)},S=F=>{var $=Ea();f(F,$)};E(x,F=>{s(t).is_paused?F(I):s(t).is_break&&F(S,1)})}var T=h(x,2),M=c(T,!0);i(T),i(g);var K=h(g,2),w=c(K),A=c(w);i(w);var R=h(w,2),L=c(R,!0);i(R),i(K);var G=h(K,2),P=h(c(G),2),J=c(P,!0);i(P);var ia=h(P,2);{var ea=F=>{var $=Na(),_a=c($);i($),O(ga=>y(_a,`Ante ${ga??""}`),[()=>s(t).ante.toLocaleString()]),f(F,$)};E(ia,F=>{s(t).ante>0&&F(ea)})}i(G);var ta=h(G,2),ua=c(ta),ma=c(ua);i(ua),Ta(2),i(ta),O((F,$)=>{k=D(g,1,"header-clock svelte-1elxaub",null,k,{urgent:s(v),paused:s(t).is_paused,"on-break":s(t).is_break}),y(M,F),y(A,`L${s(t).level??""}`),y(L,s(t).name),y(J,$),y(ma,`${B.remainingPlayers??""}/${B.totalPlayers??""}`)},[()=>e(s(t).remaining_seconds),()=>d(s(t).small_blind,s(t).big_blind)]),f(n,_)},p=n=>{var t=qa();f(n,t)};E(l,n=>{B.clock?n(r):n(p,!1)})}i(b),i(o),f(u,o),j()}var Ca=m('<a role="tab"><span class="tab-icon svelte-1pn9dat" aria-hidden="true"> </span> <span class="tab-label svelte-1pn9dat"> </span></a>'),Ua=m('<div class="bottom-tabs svelte-1pn9dat" role="tablist" aria-label="Main navigation"></div>');function Da(u,a){W(a,!1);const e=[{label:"Overview",href:"/overview",icon:"🏠"},{label:"Players",href:"/players",icon:"👥"},{label:"Tables",href:"/tables",icon:"🪑"},{label:"Financials",href:"/financials",icon:"💰"},{label:"More",href:"/more",icon:"⚙"}];function d(b){var r;const l=((r=oa.url)==null?void 0:r.pathname)??"/";return b==="/overview"?l==="/"||l==="/overview"||l.startsWith("/overview/"):l===b||l.startsWith(b+"/")}H();var o=Ua();aa(o,5,()=>e,na,(b,l)=>{var r=Ca();let p;var n=c(r),t=c(n,!0);i(n);var v=h(n,2),_=c(v,!0);i(v),i(r),O((g,k)=>{N(r,"href",s(l).href),p=D(r,1,"tab-item svelte-1pn9dat",null,p,g),N(r,"aria-selected",k),N(r,"aria-label",s(l).label),y(t,s(l).icon),y(_,s(l).label)},[()=>({active:d(s(l).href)}),()=>d(s(l).href)]),f(b,r)}),i(o),f(u,o),j()}var Wa=m('<li><a><span class="nav-icon svelte-129hoe0" aria-hidden="true"> </span> <span class="nav-label svelte-129hoe0"> </span></a></li>'),ja=m('<nav class="sidebar svelte-129hoe0" aria-label="Main navigation"><div class="sidebar-brand svelte-129hoe0"><span class="brand-name svelte-129hoe0">Felt</span></div> <ul class="sidebar-nav svelte-129hoe0" role="list"></ul></nav>');function Ka(u,a){W(a,!1);const e=[{label:"Overview",href:"/overview",icon:"🏠"},{label:"Players",href:"/players",icon:"👥"},{label:"Tables",href:"/tables",icon:"🪑"},{label:"Financials",href:"/financials",icon:"💰"},{label:"More",href:"/more",icon:"⚙"}];function d(l){var p;const r=((p=oa.url)==null?void 0:p.pathname)??"/";return l==="/overview"?r==="/"||r==="/overview"||r.startsWith("/overview/"):r===l||r.startsWith(l+"/")}H();var o=ja(),b=h(c(o),2);aa(b,5,()=>e,na,(l,r)=>{var p=Wa(),n=c(p);let t;var v=c(n),_=c(v,!0);i(v);var g=h(v,2),k=c(g,!0);i(g),i(n),i(p),O((x,I)=>{N(n,"href",s(r).href),t=D(n,1,"nav-item svelte-129hoe0",null,t,x),N(n,"aria-current",I),y(_,s(r).icon),y(k,s(r).label)},[()=>({active:d(s(r).href)}),()=>d(s(r).href)?"page":void 0]),f(l,p)}),i(b),i(o),f(u,o),j()}var za=m('<div class="fab-backdrop svelte-6hll69" role="presentation"></div>'),Va=m('<button class="fab-action touch-target svelte-6hll69"><span class="fab-action-icon svelte-6hll69" aria-hidden="true"> </span> <span class="fab-action-label svelte-6hll69"> </span></button>'),Ga=m('<div class="fab-actions svelte-6hll69"></div>'),Ja=m('<!> <div><!> <button><span class="fab-icon svelte-6hll69" aria-hidden="true"> </span></button></div>',1);function Qa(u,a){var M,K;W(a,!0);let e=ra(!1);const d=[{id:"bust",label:"Bust",icon:"❌",color:"var(--color-error)",visible:()=>B.remainingPlayers>0},{id:"buyin",label:"Buy In",icon:"➕",color:"var(--color-success)",visible:()=>!0},{id:"rebuy",label:"Rebuy",icon:"🔄",color:"var(--color-primary)",visible:()=>B.remainingPlayers>0},{id:"addon",label:"Add-On",icon:"⬆",color:"var(--color-warning)",visible:()=>B.clock!==null},{id:"pause-resume",label:(M=B.clock)!=null&&M.is_paused?"Resume":"Pause",icon:(K=B.clock)!=null&&K.is_paused?"▶":"⏸",color:"var(--ctp-peach)",visible:()=>B.clock!==null}];function o(){U(e,!s(e))}function b(w){var A;U(e,!1),(A=a.onaction)==null||A.call(a,w)}function l(){U(e,!1)}function r(w){w.key==="Escape"&&s(e)&&U(e,!1)}var p=Ja();Pa("keydown",Aa,r);var n=V(p);{var t=w=>{var A=za();z("click",A,l),z("keydown",A,R=>R.key==="Enter"&&l()),f(w,A)};E(n,w=>{s(e)&&w(t)})}var v=h(n,2);let _;var g=c(v);{var k=w=>{var A=Ga();aa(A,21,()=>d.filter(R=>R.visible()),na,(R,L,G)=>{var P=Va(),J=c(P),ia=c(J,!0);i(J);var ea=h(J,2),ta=c(ea,!0);i(ea),i(P),O(()=>{va(P,`--action-color: ${s(L).color??""}; --action-delay: ${G*40}ms`),N(P,"aria-label",s(L).label),y(ia,s(L).icon),y(ta,s(L).label)}),z("click",P,()=>b(s(L).id)),f(R,P)}),i(A),f(w,A)};E(g,w=>{s(e)&&w(k)})}var x=h(g,2);let I;var S=c(x),T=c(S,!0);i(S),i(x),i(v),O(()=>{_=D(v,1,"fab-container svelte-6hll69",null,_,{expanded:s(e)}),I=D(x,1,"fab-main touch-target svelte-6hll69",null,I,{expanded:s(e)}),N(x,"aria-label",s(e)?"Close actions":"Open quick actions"),N(x,"aria-expanded",s(e)),y(T,s(e)?"✕":"+")}),z("click",x,o),f(u,p),j()}ca(["click","keydown"]);const Xa={success:3e3,info:4e3,warning:5e3,error:8e3};let Ya=0;var X;class Za{constructor(){sa(this,X,ra(ha([])))}get toasts(){return s(C(this,X))}set toasts(a){U(C(this,X),a,!0)}success(a,e){return this.add("success",a,e)}info(a,e){return this.add("info",a,e)}warning(a,e){return this.add("warning",a,e)}error(a,e){return this.add("error",a,e)}dismiss(a){const e=this.toasts.find(d=>d.id===a);e!=null&&e.timer&&clearTimeout(e.timer),this.toasts=this.toasts.filter(d=>d.id!==a)}dismissAll(){for(const a of this.toasts)a.timer&&clearTimeout(a.timer);this.toasts=[]}add(a,e,d){const o=`toast-${++Ya}`,b=d??Xa[a],l={id:o,type:a,message:e,duration:b,dismissible:a==="error"};return l.timer=setTimeout(()=>{this.dismiss(o)},b),this.toasts=[...this.toasts,l],o}}X=new WeakMap;const q=new Za;var Ha=m('<button class="toast-dismiss svelte-1cpok13" aria-label="Dismiss notification">×</button>'),ae=m('<div role="alert"><span class="toast-icon svelte-1cpok13" aria-hidden="true"> </span> <span class="toast-message svelte-1cpok13"> </span> <!></div>'),ee=m('<div class="toast-container svelte-1cpok13" role="region" aria-label="Notifications" aria-live="polite"></div>');function te(u,a){W(a,!1);function e(r){switch(r){case"success":return"var(--color-success)";case"info":return"var(--color-primary)";case"warning":return"var(--color-warning)";case"error":return"var(--color-error)";default:return"var(--color-text)"}}function d(r){switch(r){case"success":return"✓";case"info":return"ℹ";case"warning":return"⚠";case"error":return"✗";default:return""}}H();var o=la(),b=V(o);{var l=r=>{var p=ee();aa(p,5,()=>q.toasts,n=>n.id,(n,t)=>{var v=ae(),_=c(v),g=c(_,!0);i(_);var k=h(_,2),x=c(k,!0);i(k);var I=h(k,2);{var S=T=>{var M=Ha();z("click",M,()=>q.dismiss(s(t).id)),f(T,M)};E(I,T=>{s(t).dismissible&&T(S)})}i(v),O((T,M)=>{D(v,1,`toast toast-${s(t).type??""}`,"svelte-1cpok13"),va(v,`--toast-color: ${T??""}`),y(g,M),y(x,s(t).message)},[()=>e(s(t).type),()=>d(s(t).type)]),f(n,v)}),i(p),f(r,p)};E(b,r=>{q.toasts.length>0&&r(l)})}f(u,o),j()}ca(["click"]);var Y,Z;class se{constructor(){sa(this,Y,ra(ha([])));sa(this,Z,ra(null))}get tournaments(){return s(C(this,Y))}set tournaments(a){U(C(this,Y),a,!0)}get activeId(){return s(C(this,Z))}set activeId(a){U(C(this,Z),a,!0)}get isMulti(){return this.tournaments.length>=2}get activeTournament(){return this.tournaments.find(a=>a.id===this.activeId)??null}setTournaments(a){this.tournaments=a,a.length===0?this.activeId=null:a.length===1?this.activeId=a[0].id:(!this.activeId||!a.find(e=>e.id===this.activeId))&&(this.activeId=a[0].id)}switchTo(a){this.tournaments.find(e=>e.id===a)&&(this.activeId=a,B.id=a)}routeMessage(a){const e=a.tournament_id;if(a.type==="tournament.status"&&e){const d=a.data,o=this.tournaments.find(b=>b.id===e);o&&(d.name&&(o.name=d.name),d.status&&(o.status=d.status))}(!e||e===this.activeId)&&B.handleMessage(a)}reset(){this.tournaments=[],this.activeId=null}}Y=new WeakMap,Z=new WeakMap;const Q=new se;var re=m('<button role="tab"><span class="status-dot svelte-ldvvqt" aria-hidden="true"></span> <span class="tab-name svelte-ldvvqt"> </span></button>'),ne=m('<div class="tournament-tabs svelte-ldvvqt" role="tablist" aria-label="Tournament selection"></div>');function ie(u,a){W(a,!1);function e(l){switch(l){case"active":return"var(--color-success)";case"paused":return"var(--ctp-peach)";case"break":return"var(--color-break)";case"completed":return"var(--color-text-muted)";default:return"var(--color-text-secondary)"}}H();var d=la(),o=V(d);{var b=l=>{var r=ne();aa(r,5,()=>Q.tournaments,na,(p,n)=>{var t=re();let v;var _=c(t),g=h(_,2),k=c(g,!0);i(g),i(t),O(x=>{v=D(t,1,"tournament-tab touch-target svelte-ldvvqt",null,v,{active:s(n).id===Q.activeId}),N(t,"aria-selected",s(n).id===Q.activeId),va(_,`background-color: ${x??""}`),y(k,s(n).name)},[()=>e(s(n).status)]),z("click",t,()=>Q.switchTo(s(n).id)),f(p,t)}),i(r),f(l,r)};E(o,l=>{Q.isMulti&&l(b)})}f(u,d),j()}ca(["click"]);var le=m('<div class="app-shell svelte-12qhfyh"><!> <!> <!> <main class="main-content svelte-12qhfyh"><!></main> <!> <!></div>'),oe=m('<div class="redirect-screen svelte-12qhfyh"><p>Redirecting to login...</p></div>'),ce=m("<!> <!>",1);function Te(u,a){W(a,!0);let e=Fa(()=>{var t;return(((t=oa.url)==null?void 0:t.pathname)??"")==="/login"});ka(()=>{!fa.isAuthenticated&&!s(e)&&Ia("/login")});function d(t){switch(t){case"bust":q.info("Bust flow: coming in Plan N");break;case"buyin":q.info("Buy-in flow: coming in Plan N");break;case"rebuy":q.info("Rebuy flow: coming in Plan N");break;case"addon":q.info("Add-on flow: coming in Plan N");break;case"pause-resume":q.info("Pause/Resume: coming in Plan N");break;default:console.warn(`Unknown FAB action: ${t}`)}}var o=ce(),b=V(o);{var l=t=>{var v=la(),_=V(v);pa(_,()=>a.children),f(t,v)},r=t=>{var v=le(),_=c(v);La(_,{});var g=h(_,2);Ka(g,{});var k=h(g,2);ie(k,{});var x=h(k,2),I=c(x);pa(I,()=>a.children),i(x);var S=h(x,2);Da(S,{});var T=h(S,2);Qa(T,{onaction:d}),i(v),f(t,v)},p=t=>{var v=oe();f(t,v)};E(b,t=>{s(e)?t(l):fa.isAuthenticated?t(r,1):t(p,!1)})}var n=h(b,2);te(n,{}),f(u,o),j()}export{Te as component,we as universal};
|