1(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`39a90ee50529071c06a2b35e448ee7a4d9a7e3d8`};var t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`b5f7e328-ec21-4267-a00e-a4025f2cad64`,e._sentryDebugIdIdentifier=`sentry-dbid-b5f7e328-ec21-4267-a00e-a4025f2cad64`)}catch{}})();import{r as e}from"./rolldown-runtime-C9YNbkg1.js";import{p as t,u as n}from"./react-B2A6uw6M.js";import{F as r,_ as i,b as a,g as o,v as s,y as c}from"./radix-BZD1l52z.js";import{t as l}from"./utils-BU9vqa3m.js";import{J as u,q as d}from"./auction-CWeeB6Pb.js";import{n as f,t as p}from"./auctionPriceVocabulary-BccpVlRI.js";var m=e(t(),1),h=n(),g=s,_=m.forwardRef(({className:e,sideOffset:t=4,...n},r)=>(0,h.jsx)(o,{ref:r,sideOffset:t,className:l(`z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2`,e),...n}));_.displayName=o.displayName;var v=[{id:`ppvp`,term:`PPVP`,definition:`Points per value point â average dollars the room is paying per projected fantasy point over recent picks. Lower = cheaper market.`},{id:`inflation`,term:`Inflation`,definition:`How far recent winning bids run above or below fair value. Positive = the room is overpaying; negative = the market is soft.`},{id:`fair-value`,term:`Fair $`,definition:`Room-consensus dollar value from a playerâs projected points above replacement, scaled to this leagueâs scoring, roster slots, player pool, and remaining auction dollars.`},{id:`good-value`,term:`Good value`,aliases:[`surplus`],definition:`Highest bid that still keeps a 20%+ surplus over fair value.`},{id:`target-bid`,term:`Target bid`,aliases:[`target`,`tgt`],definition:f.definition},{id:`target-bid-and-walk-away`,term:`Target bid + Walk`,definition:`Your plan-adjusted bid range: Target is the best available price for your plan, not a guaranteed win; Walk is the hard ceiling, and on the priciest players the room will often bid past it. Both reflect position priority, scarcity, and tactic adjustments, capped by your bid ceiling.`},{id:`walk-away`,term:`Walk`,aliases:[`walk`],definition:`The modelâs hard ceiling after position priority, scarcity, and tactic adjustments, capped by your bid ceiling. Target is the best available price for your plan; if bidding ever moves above Walk, let the player go.`},{id:`room-likely`,term:`Room likely`,definition:`The live Monte Carlo modelâs expected clearing price for this player. Unlike Budget est., it comes from simulated room behavior; it does not raise your disciplined walk-away.`},{id:`market-ceiling`,term:`Market maximum`,definition:`The structural ceiling from fair value, position priors, and competition scarcity. It excludes modeled opponent behavior, so it is not the Drain sale estimate. Descriptive, not advice â see Walk for the hard ceiling. (ISS-1956)`},{id:`max-bid`,term:`Maximum bid`,definition:`The most you can bid and still fill every remaining slot at $1 â your budget minus a $1 reserve for every other empty roster slot.`},{id:`nomination`,term:`Nomination`,definition:`Putting a player on the block for the room to bid on. Pricing updates after completed auction sales are recorded, not when a player is merely nominated.`},{id:`drain`,term:`Drain`,definition:`Nominating a player you donât want so opponents spend down their budgets before your targets hit the block.`},{id:`drain-score`,term:`Drain score`,definition:`Bleed-effect score for a nomination. Higher = more wallet drained per dollar of your own exposure.`},{id:`sale-estimate`,term:`Sale est.`,definition:`The behavioral opponent-price estimate for this nomination: the second-highest bid among exposed opponents, so the winner just outbids the runner-up. It may exceed market maximum; that excess is drain leverage, not a pricing error. With one exposed bi
1dder, it caps at that bidderâs max instead. (ISS-1956)`},{id:`bleed-risk`,term:`Bleed risk`,definition:`Risk that draining this player exposes a position you need.`},{id:`tier-cliff`,term:`Tier cliff`,aliases:[`cliff`],definition:`The value drop-off when a positionâs current tier is nearly empty. Prices spike for the last players before the cliff.`},{id:`vor`,term:`VORP`,definition:`Value over replacement player â projected fantasy points above the worst startable player at the same position. Higher = more impact.`},{id:`room-inflation`,term:`Room inflation`,definition:`Money still in the room divided by value still on the board, anchored at 1.00 (fair). Above 1.00 = the room is overpaying â protect your budget. Below 1.00 = buying power is elevated â lean in.`},{id:`exposure`,term:`Exposure`,definition:`For each position an opponent still needs, their remaining budget is multiplied by positional scarcity, then those amounts are added together. Scarcity rises as fewer $10+ players remain at that position and is capped at 3Ã.`},{id:`hot-board-ranking`,term:`fit à value à available`,definition:`Available filters the board to unowned players. Order combines 50% roster need, 30% value headroom (market maximum minus fair value, capped at $8), and 20% positional scarcity (how thin the remaining $10+ pool is). Score ties break by fair value, then name. The row fit badge still labels price headroom: above $4 is perfect, above $1 is strong, and the rest are ok.`},{id:`value-headroom`,term:`Value headroom`,definition:`The gap between a playerâs fair value and market maximum. More room means more ways to buy below the roomâs likely maximum.`},{id:`budget-estimate`,term:`Budget est.`,definition:`A budget-conservation estimate using room inflation, positional scarcity, and recent overpay behavior, never below market maximum. Unlike Room likely, it does not come from the live Monte Carlo simulation.`},{id:`conservation-estimate`,term:`Conservation`,definition:`Conservation-based estimate â no Monte Carlo sample for this player yet. Budget est. applies room and budget signals without a live simulation sample.`},{id:`acquisition-chance`,term:`Acquire chance`,aliases:[`acquire`],definition:`Share of Monte Carlo runs in which your team acquires this player during the simulated remainder of the draft.`},{id:`player-tier`,term:`Player tier`,aliases:[`tier`],definition:`The playerâs tier from the source data or your imported tier override. Lower numbers indicate stronger tiers; this HUD value does not recompute as the draft advances.`},{id:`projection`,term:`Proj`,definition:`The season projection used by the HUD. A custom projected-points override wins; otherwise it uses sourced projected points, then the session projection, and finally the playerâs base value when no points projection is available.`},{id:`sigmoid-win-odds`,term:`Sigmoid win odds`,definition:`Win odds come from a standard probability curve until enough live simulation data exists for this room; then it switches to the live Monte Carlo model.`},{id:`monte-carlo-win-odds`,term:`Monte Carlo win odds`,definition:`Win odds come from the live Monte Carlo model, using repeated simulations of this room and its remaining draft state.`},{id:`projection-source-vintage`,term:`Projection source and vintage`,definition:`Player projections and values are sourced from the provider named here. Vintage identifies the data season and freshness of that projection snapshot.`},{id:`squeeze`,term:`Squeeze`,definition:`Nominating a player your opponents need, forcing them to bid up and drain their budgets. A good squeeze target is one they want and you do not.`},{id:`adp`,term:`ADP`,definition:`Average draft position â where this player is typically picked across recent drafts. Lower = earlier pick, higher consensus value.`},{id:`rank-arbitrage`,term:`Rank arbitrage`,definition:`The gap between TickerTapeâs projected-points rank (TT rank) and the average rank from external draft platforms. Negative gaps flag value; positive gaps flag players the market may be taking too early.`},{id:`flex`,term:`FLX`,definition:`Flex â a starting slot that takes an RB, WR, or TE. More flex slots mean more freedom in who you bid on.`},{id:`superflex`,term:`SFLX`,definition:`Superflex â a flex slot that can also start a QB. Superflex leagues price QBs sharply higher; budget for two.`},{id:`dst`,term:`DST`,definition:`Defense / special teams â an entire NFL teamâs defense, drafted as one unit.`},{id:`bench`,term:`BN`,definition:`Bench â a reserve slot that doesnât start. Usually a $1â$2 fill late in the auction.`}],y=new Map(v.map(e=>[e.id,e]));function b(e){let t=y.get(e);if(!t)throw Error(`[glossary] unknown term id: ${e}`);return t}function x(e,{includeAliases:t=!0}={}){let n=e.toLowerCase();return v.map((e,r)=>({entry:e,declarationIndex:r,longestMatchedPhrase:Math.max(...S(e,t).filter(e=>C(n,e)).map(e=>e.length))})).filter(e=>Number.isFinite(e.longestMatchedPhrase)).sort((e,t)=>
1t.longestMatchedPhrase-e.longestMatchedPhrase||e.declarationIndex-t.declarationIndex).map(({entry:e})=>e)}function S(e,t){return[e.id.replaceAll(`-`,` `),e.term.toLowerCase().replace(/[$.+]/g,``).trim(),...t?e.aliases??[]:[]].filter(e=>e!=null&&e.length>0)}function C(e,t){let n=t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return RegExp(`\\b${n}\\b`,`i`).test(e)}function ee({term:e,children:t,side:n=`top`,detail:r,delayDuration:o=200,className:u,triggerAs:d=`button`}){let f=b(e),p=t!=null,[g,v]=m.useState(null),y=m.useCallback(e=>{e.pointerType===`touch`&&(e.stopPropagation(),v(e=>e===!0?(queueMicrotask(()=>{v(e=>e===!1?null:e)}),!1):!0))},[]),x=m.useCallback(e=>{e.stopPropagation()},[]),S=m.useCallback(e=>{(e.key===`Enter`||e.key===` `)&&(e.stopPropagation(),e.preventDefault())},[]),C=m.useCallback(e=>{!e&&g!==null&&queueMicrotask(()=>v(null))},[g]),ee=g===null?void 0:g,w=l(`cursor-help appearance-none border-0 bg-transparent p-0 text-inherit`,p?`underline decoration-dotted underline-offset-2`:`inline-flex h-4 w-4 items-center justify-center rounded-full border border-solid border-current align-middle text-[9px] font-semibold leading-none opacity-60 hover:opacity-100 focus-visible:opacity-100`,u),T=p?{font:`inherit`,letterSpacing:`inherit`}:void 0;return(0,h.jsx)(s,{delayDuration:o,children:(0,h.jsxs)(c,{open:ee,onOpenChange:C,children:[(0,h.jsx)(a,{asChild:!0,children:d===`span`?(0,h.jsx)(`span`,{role:`button`,tabIndex:0,"aria-label":p?void 0:`What is ${f.term}?`,className:w,style:T,onPointerDown:y,onClick:x,onKeyDown:S,children:p?t:`?`}):(0,h.jsx)(`button`,{type:`button`,"aria-label":p?void 0:`What is ${f.term}?`,className:w,style:T,onPointerDown:y,onClick:x,children:p?t:`?`})}),(0,h.jsx)(i,{children:(0,h.jsxs)(_,{side:n,className:`max-w-[280px]`,children:[(0,h.jsxs)(`span`,{className:`font-semibold`,children:[f.term,f.term.endsWith(`.`)?``:`.`]}),` `,f.definition,r==null?null:(0,h.jsxs)(h.Fragment,{children:[` `,r]})]})})]})})}var w=.915;function T(e,t){let n=e/Math.max(1,t);return 1/(1+Math.exp(-3.82*(n-w)))}function te(e){let{rangeMin:t,rangeMax:n,fair:r,samples:i=40}=e,a=Math.max(1,n-t),o=Math.max(1,i);return Array.from({length:i+1},(e,n)=>{let i=t+a*n/o;return{price:i,pAcquire:T(i,r)}})}var E=75e3;function D(e,t=Date.now()){if(!e)return{isStale:!1,ageMs:null};let n=Date.parse(e);if(Number.isNaN(n))return{isStale:!1,ageMs:null};let r=Math.max(0,t-n);return{isStale:r>E,ageMs:r}}function O(e){let t=k(e);return t?{pickDifference:t,pickIntegrity:null}:e?.kind===`integrity`?{pickDifference:null,pickIntegrity:e}:{pickDifference:null,pickIntegrity:null}}function k(e){if(!e||e.kind!==`count`||!Number.isFinite(e.magnitude)||e.magnitude<=0)return null;let t=Math.max(1,Math.round(e.magnitude));return{...e,signedDelta:Math.sign(e.signedDelta)*t,magnitude:t}}function A(e){if(e.kind===`integrity`)return`TickerTape found conflicting picks in the draft history. Updates are paused.`;let t=`pick${e.magnitude===1?``:`s`}`;switch(e.direction){case`local_behind`:return`TickerTape is ${e.magnitude} ${t} behind.`;case`local_ahead`:return`TickerTape is ${e.magnitude} ${t} ahead.`}}function j(e){if(e.transport===`manual`)return{label:`Manual`,message:`Picks are being entered manually.`,adviceMessage:null,correction:null,pickDifference:null,pickIntegrity:null};if(e.status===`terminal`)return e.detail.code===`poll_unmatched_terminal`||e.detail.code===`sync_finished`?{label:`Finished`,message:`Final pick data is ready to review.`,adviceMessage:`Final pick data is shown for review; new recommendations are no longer available.`,correction:null,pickDifference:null,pickIntegrity:null}:{label:`Unavailable`,message:`TickerTape cannot verify automatic draft updates for this draft.`,adviceMessage:`Recommendations are unavailable for this draft.`,correction:null,pickDifference:null,pickIntegrity:null};if(e.detail.code===`sync_manual_attested`)return{label:`Board confirmed manually`,message:`Board confirmed manually. Machine verification is not available.`,adviceMessage:null,correction:null,pickDifference:null,pickIntegrity:null};if(e.detail.code===`sync_waiting_for_pick`)return{label:`Paused`,message:`Waiting for the first verified pick.`,adviceMessage:`Waiting for the first verified pick. Recommendations are paused until it arrives.`,correction:null,pickDifference:null,pickIntegrity:null};if(e.detail.code===`sync_checking`)return{label:`Paused`,message:`Checking draft updates.`,adviceMessage:`Draft updates are being checked. Recommendations are paused for now.`,correction:null,pickDifference:null,pickIntegrity:null};if(e.detail.code===`sync_blocked`){let t=e.detail.ownerActionCode;return t&&t!==`none`&&e.detail.ownerActionAvailable===!0?{label:`Needs action`,message:t===`reconnect`?`Draft updates have stopped. Reconnect to continue.`:e.detail.message,adviceMessage:t===`reconnect`?`Draft updates have stopped. Reconnect to resume recommendations.`:e.detail.message,correction:t,pickDifference:null,pickIntegrity:null}:{label:`Paused`,message:e.detail.message,adviceMessage:e.detail.message,correction:null,pickDifference:null,pickIntegrity:null}}if(e.detail.code===`sync_delivery_mismatch`){let t=e.detail.message;return e.detail.ownerActionAvailable===!0?{label:`Needs action`,message:t,adviceMessage:t,correction:`reload_platform_tab`,pickDifference:null,pickIntegrity:null}:{label:`Paused`,message:t,adviceMessage:t,correction:null,pickDifference:null,pickIntegrity:null}}if(e.detail.code===`sync_update_required`)return{label:`Needs action`,message:`This extension ver
1sion cannot verify draft picks. Update the extension to continue.`,adviceMessage:`This extension version cannot verify draft picks. Recommendations are paused.`,correction:`update_extension`,pickDifference:null,pickIntegrity:null};if(e.detail.code===`sync_current`)return{label:`Connected`,message:`Draft picks are verified and up to date.`,adviceMessage:null,correction:null,pickDifference:null,pickIntegrity:null};if(e.detail.code===`capture_not_receiving`)return{label:`Paused`,message:e.detail.message,adviceMessage:`${e.detail.message} Recommendations are paused until picks resume.`,correction:null,pickDifference:null,pickIntegrity:null};if(e.detail.code===`capture_receiving`)return{label:`Paused`,message:e.detail.message,adviceMessage:`Waiting for verified draft picks. Recommendations are paused.`,correction:null,pickDifference:null,pickIntegrity:null};if(e.detail.code===`bridge_teams_unbound`)return{label:`Paused`,message:e.detail.message,adviceMessage:`${e.detail.message} Recommendations are paused until picks are current.`,correction:null,pickDifference:null,pickIntegrity:null};if(e.status===`connecting`||e.realtimeConnectionStatus===`reconnecting`||e.realtimeConnectionStatus===`resyncing`||e.realtimeConnectionStatus===`disconnected`)return{label:`Reconnecting`,message:`Draft updates are reconnecting automatically.`,adviceMessage:`Draft updates are reconnecting. Recommendations are paused until picks are current.`,correction:null,pickDifference:null,pickIntegrity:null};if(e.status===`stalled`)return{label:`Paused`,message:`Draft updates could not be verified.`,adviceMessage:`Draft updates could not be verified. Recommendations are paused.`,correction:null,pickDifference:null,pickIntegrity:null};if(e.status===`healthy`)return{label:`Paused`,message:`Waiting for verified draft picks.`,adviceMessage:`Waiting for verified draft picks. Recommendations are paused.`,correction:null,pickDifference:null,pickIntegrity:null};if(e.status===`degraded`&&e.detail.issueKind===`ingest_failed`)return{label:`Reconnecting`,message:`Draft updates are reconnecting automatically.`,adviceMessage:`Draft updates are reconnecting. Recommendations are paused until picks are current.`,correction:null,pickDifference:null,pickIntegrity:null};if(e.detail.drift?.kind===`integrity`)return{label:`Paused`,message:`TickerTape found conflicting picks in the draft history. Updates are paused.`,adviceMessage:`TickerTape found conflicting picks in the draft history. Recommendations are paused.`,correction:null,pickDifference:null,pickIntegrity:e.detail.drift};let t=k(e.detail.drift);return{label:`Paused`,message:t?A(t):`Draft updates are catching up automatically.`,adviceMessage:`Recommendations are paused until draft updates are current.`,correction:null,pickDifference:t,pickIntegrity:null}}function M(e){switch(e.label){case`Reconnecting`:case`Paused`:case`Finished`:case`Unavailable`:return{label:e.label,message:e.adviceMessage};case`Manual`:case`Connected`:case`Board confirmed manually`:case`Needs action`:return{label:`Paused`,message:e.message}}}function ne(e){let t=j(e);switch(e.detail.code){case`manual`:case`sync_current`:return{actionable:!0,label:null,message:null,correction:null};case`sync_manual_attested`:return{actionable:!0,label:`Board confirmed manually`,message:t.message,correction:null};case`sync_blocked`:case`sync_delivery_mismatch`:case`sync_update_required`:if(t.correction===null){let e=M(t);return{actionable:!1,label:e.label,message:e.message,correction:null}}return{actionable:!1,label:`Needs action`,message:t.adviceMessage,correction:t.correction};case`poll_connecting`:case`poll_healthy`:case`poll_degraded`:case`poll_error`:case`poll_bind_failure`:case`poll_unmatched_terminal`:case`bridge_connecting`:case`bridge_healthy`:case`bridge_retry`:case`bridge_teams_unbound`:case`bridge_stall`:case`capture_receiving`:case`capture_not_receiving`:case`sync_waiting_for_pick`:case`sync_checking`:case`sync_finished`:case`sync_capability_limited`:{let e=M(t);return{actionable:!1,label:e.label,message:e.message,correction:null}}}}function N(e){return e.transport===`manual`?`idle`:e.detail.code===`sync_current`||e.detail.code===`capture_receiving`?`live`:e.detail.code===`capture_not_receiving`||e.realtimeConnectionStatus===`disconnected`?`disconnected`:e.status===`healthy`||e.status===`connecting`||e.status===`idle`||e.detail.code===`sync_finished`?`idle`:`disconnected`}function P(e,t,n=!1){let r=t.trim().toLowerCase(),i=r===`espn`?`ESPN`:r===`yahoo`?`Yahoo`:r===`fandraft`?`previously connected`:r===`sleeper`?`Sleeper`:`platform`;return{...e,status:`stalled`,detail:{...e.detail,code:`sync_delivery_mismatch`,label:n?`Needs action`:`Paused`,message:`TickerTape received picks from another draft tab. Reload the ${i} draft tab you want to use; TickerTape will check again automatically.`,ownerActionCode:`reload_platform_tab`,ownerActionAvailable:n,evidenceVerdictReason:null,evidenceFailure:null}}}function F(e,t){let n=e?.trim().toLowerCase()??null;return n?n===`yahoo`||n===`fandraft`||n===`espn`&&t!==`snake`?`bridge`:`poll`:`manual`}function I({boundPlatform:e,sessionFormat:t,captureLiveness:n,bridgeSyncIssue:r,platformDrift:i,platformErrors:a,platformLastSyncAt:o,platformSyncFailure:s,platformPollIntervalMs:c,platformSyncError:l,platformSyncErrorCode:u,platformConnected:d,platformUnmatchedTerminal:f,realtimeConnectionStatus:p}){let m=e?.trim().toLowerCase()??null,h=F(e,t),g=m===`espn`?`ESPN`:m===`fandraft`?`FanDraft`:m?m.charAt(0).toUpperCase()+m.slice(1):`the platform`;if(h===`manual`)return{transport:h,status:`idle`,realtimeConnectionStatus:p,lastSuccessAt:null,detail
1:{code:`manual`,label:`Manual`,message:`Picks are being logged manually.`,issueKind:null,ownerActionCode:`none`}};if(h===`bridge`){let e=n.lastSignalAtMs===null?null:new Date(n.lastSignalAtMs),t=e;return n.status===`not-receiving`?{transport:h,status:`stalled`,realtimeConnectionStatus:p,lastSuccessAt:e,detail:{code:`capture_not_receiving`,label:`Picks not received`,message:n.reason===`observer-detached`?`TickerTape isn't receiving picks from ${g}. Reload the ${g} draft tab, then keep it open.`:`TickerTape hasn't received picks from ${g} recently. Check the TickerTape extension and reload the ${g} draft tab.`,issueKind:null,ownerActionCode:`reload_platform_tab`,ownerActionAvailable:!1,latestActivityAt:t}}:m===`espn`&&r?.kind===`ingest_failed`&&r.errorCode===`teams_unbound`?{transport:h,status:`degraded`,realtimeConnectionStatus:p,lastSuccessAt:e,detail:{code:`bridge_teams_unbound`,label:`Teams not mapped`,message:`ESPN teams are not mapped yet. Waiting for the room.`,issueKind:r.kind,ownerActionCode:`none`,ownerActionAvailable:!1,syncError:`teams_unbound`,latestActivityAt:t}}:r?.kind===`ingest_failed`&&n.status!==`receiving`&&r?{transport:h,status:`degraded`,realtimeConnectionStatus:p,lastSuccessAt:e,detail:{code:`bridge_retry`,label:`Extension retrying`,message:`Extension having trouble sending picks from ${g} â retrying automatically.`,issueKind:r.kind,ownerActionCode:`none`,syncError:r.errorCode,latestActivityAt:t}}:n.status===`receiving`?{transport:h,status:`healthy`,realtimeConnectionStatus:p,lastSuccessAt:e,detail:{code:`capture_receiving`,label:`In sync`,message:`Receiving picks through the ${g} extension bridge.`,issueKind:null,ownerActionCode:`none`,latestActivityAt:t}}:{transport:h,status:`connecting`,realtimeConnectionStatus:p,lastSuccessAt:null,detail:{code:`bridge_connecting`,label:`Waiting for TickerTape for Chrome`,message:`Waiting for the first ${g} pick.`,issueKind:null,ownerActionCode:`none`,latestActivityAt:t}}}let _=i?.kind===`integrity`?i:k(i),v={issueKind:null,errors:a,syncError:l,drift:_,pollIntervalMs:c,ownerActionCode:null};if(f){let{count:e}=f;return{transport:h,status:`terminal`,realtimeConnectionStatus:p,lastSuccessAt:o,detail:{...v,code:`poll_unmatched_terminal`,label:e===1?`Draft finished â 1 pick couldn't be matched`:`Draft finished â ${e} picks couldn't be matched`,message:e===1?`Draft finished â 1 pick couldn't be matched to a player`:`Draft finished â ${e} picks couldn't be matched to players`,unmatchedCount:e}}}if(u||l){let e=(()=>{switch(u){case`unsupported_format`:return{label:`Updates unavailable`,message:`Automatic draft updates are not supported for this draft format.`};case`setup_required`:return{label:`Setup needed`,message:`Automatic draft updates need platform setup before they can be verified.`};case`binding_conflict`:return{label:`Draft already linked`,message:`This platform draft is linked to another TickerTape session.`};case`source_unavailable`:return{label:`Updates unavailable`,message:`TickerTape cannot verify automatic updates from the draft platform.`};case`incomplete_data`:return{label:`Draft data incomplete`,message:`The draft platform returned incomplete data, so recommendations are paused.`};case null:return{label:`Updates unavailable`,message:`TickerTape cannot verify automatic draft updates for this draft.`}}})();return{transport:h,status:d?`error`:`terminal`,realtimeConnectionStatus:p,lastSuccessAt:o,detail:{...v,code:`poll_error`,label:e.label,message:e.message}}}if(a.length>0)return{transport:h,status:`error`,realtimeConnectionStatus:p,lastSuccessAt:o,detail:{...v,code:`poll_error`,label:`Updates need checking`,message:`Some draft updates could not be verified. Recommendations are paused.`}};if(m===`espn`&&t===`snake`&&r?.kind===`ingest_failed`&&n.status!==`receiving`)return{transport:h,status:`degraded`,realtimeConnectionStatus:p,lastSuccessAt:o,detail:{...v,code:`poll_degraded`,label:`Extension retrying`,message:`Having trouble sending your picks to TickerTape â retrying automatically.`,issueKind:r.kind,syncError:r.errorCode}};if(s)return{transport:h,status:`error`,realtimeConnectionStatus:p,lastSuccessAt:o,detail:{...v,code:`poll_bind_failure`,label:`Picks aren't syncing`,message:`Picks aren't syncing â we can't match your league's teams`}}
1;if(n.status===`not-receiving`){let e=n.lastSignalAtMs===null?o:new Date(n.lastSignalAtMs);return{transport:h,status:`stalled`,realtimeConnectionStatus:p,lastSuccessAt:e,detail:{...v,code:`capture_not_receiving`,label:`Picks not received`,message:`TickerTape hasn't received draft updates from ${g} recently. Check your connection and reload the ${g} draft tab.`,ownerActionCode:`reload_platform_tab`,ownerActionAvailable:!1,latestActivityAt:e}}}let y=_;if(y!==null){let e=y?.kind===`count`?`${y.magnitude} pick${y.magnitude===1?``:`s`} ${y.direction===`local_ahead`?`ahead`:`behind`}`:y?.kind===`integrity`?`Draft history needs checking`:null;return{transport:h,status:`degraded`,realtimeConnectionStatus:p,lastSuccessAt:o,detail:{...v,code:`poll_degraded`,label:e??`Updates delayed`,message:y===null?`Draft updates are delayed and will retry automatically.`:A(y)}}}return n.status===`receiving`?{transport:h,status:`healthy`,realtimeConnectionStatus:p,lastSuccessAt:n.lastSignalAtMs===null?o:new Date(n.lastSignalAtMs),detail:{...v,code:`capture_receiving`,label:`In sync`,message:`TickerTape is receiving draft updates from ${g}.`}}:c>5e3?{transport:h,status:`degraded`,realtimeConnectionStatus:p,lastSuccessAt:o,detail:{...v,code:`poll_degraded`,label:`Updates delayed`,message:`Draft updates are delayed and will retry automatically.`}}:{transport:h,status:`connecting`,realtimeConnectionStatus:p,lastSuccessAt:null,detail:{...v,code:`poll_connecting`,label:`Checking updates`,message:`Checking draft updates from ${g}.`}}}var L={QB:`pos-qb`,RB:`pos-rb`,WR:`pos-wr`,TE:`pos-te`,K:`pos-k`,DST:`pos-dst`,DEF:`pos-dst`,IDP:`pos-dst`};function R(e){return e?L[e.toUpperCase()]??``:``}function z({title:e,subtitle:t,actions:n,children:r,className:i=``,bodyClass:a=``,style:o,accent:s,hero:c,variant:l=`dark`,tier:u}){let d=[l===`paper`?`panel-paper`:`panel`,s&&`panel-accent`,c&&`panel-hero`,i].filter(Boolean).join(` `),f=(0,m.useRef)(null),[p,g]=(0,m.useState)(!1);return(0,m.useEffect)(()=>{let e=f.current;if(!e)return;let t=()=>{g(e.scrollHeight>e.clientHeight||e.scrollWidth>e.clientWidth)};if(t(),typeof ResizeObserver>`u`)return;let n=new ResizeObserver(t),r=()=>{n.disconnect(),n.observe(e),e.firstElementChild&&n.observe(e.firstElementChild),t()};if(r(),typeof MutationObserver>`u`)return()=>n.disconnect();let i=new MutationObserver(r);return i.observe(e,{childList:!0,subtree:!1}),()=>{n.disconnect(),i.disconnect()}},[]),(0,h.jsxs)(`section`,{className:d,"data-tier":u,style:o,children:[(e||n)&&(0,h.jsxs)(`header`,{className:`panel-header`,children:[e&&(0,h.jsx)(`h3`,{className:`panel-title`,children:e}),t&&(0,h.jsx)(`span`,{className:`muted mono`,style:{fontSize:11},children:t}),(0,h.jsx)(`span`,{className:`spacer`}),n]}),(0,h.jsx)(`div`,{ref:f,className:`panel-body ${a}`,tabIndex:p?0:void 0,children:r})]})}function B({pos:e,solid:t}){return(0,h.jsx)(`span`,{className:`pos-badge ${R(e)} ${t?`pos-badge-solid`:``}`.trim(),children:e})}var re={default:``,signal:`pill-signal`,warn:`pill-warn`,danger:`pill-danger`,info:`pill-info`,solid:`pill-solid`,ghost:`pill-ghost`};function V({kind:e=`default`,variant:t=`dark`,children:n,className:r=``,title:i,"data-testid":a}){return(0,h.jsx)(`span`,{className:`${t===`paper`?`pill-paper`:`pill`} ${re[e]} ${r}`.trim(),title:i,"data-testid":a,children:n})}var H={monte_carlo:`MC`,sigmoid:`Sigmoid`,conservation:`Conservation`},U={monte_carlo:`Live Monte Carlo simulation result for this player.`,sigmoid:`Fallback estimate â no simulation sample for this player yet.`,conservation:`Conservation-based estimate â no Monte Carlo sample for this player yet.`};function W({source:e,mcRuns:t,mcSoldRuns:n,variant:r=`dark`}){let i=e===`monte_carlo`,a=i&&n?`${H[e]} · ${n} ${n===1?`sale`:`sales`}`:i&&t?`${H[e]} · ${t} ${t===1?`run`:`runs`}`:H[e];return(0,h.jsx)(V,{kind:i?`info`:`ghost`,variant:r,title:U[e],"data-testid":`source-badge`,children:a})}var G=15e3;function K({updatedAt:e,variant:t=`dark`}){let[,n]=(0,m.useState)(0);(0,m.useEffect)(()=>{if(!e)return;let t=setInterval(()=>n(e=>e+1),G);return()=>clearInterval(t)},[e]);let{isStale:r,ageMs:i}=D(e);if(!r)return null;let a=i==null?null:Math.round(i/1e3);return(0,h.jsxs)(V,{kind:`warn`,variant:t,title:a==null?`Valuation freshness unknown.`:`Valuation last recomputed ${a}s ago â may lag recent picks (worker drains ~1/min).`,"data-testid":`value-staleness-badge`,children:[`stale`,a==null?``:` · ${a}s`]})}function q({children:e}){return(0,h.jsx)(`span`,{className:`kbd`,children:e})}var J={default:``,primary:`btn-primary`,ghost:`btn-ghost`,danger:`btn-danger`,ink:`btn-ink`,lime:`btn-lime`,"ghost-paper":`btn-ghost-paper`,"danger-paper":`btn-danger-paper`},Y={sm:`btn-sm`,md:``,lg:`btn-lg`},X=(0,m.forwardRef)(function({children:e,kind:t=`default`,size:n=`md`,className:i=``,type:a=`button`,asChild:o=!1,...s},c){let l=`btn ${J[t]} ${Y[n]} ${i}`.trim();return o?(0,h.jsx)(r,{ref:c,className:l,...s,children:e}):(0,h.jsx)(`button`,{ref:c,type:a,className:l,...s,children:e})}),Z=(0,m.forwardRef)(function({className:e=``,type:t=`button`,children:n,...r},i){return(0,h.jsx)(`button`,{ref:i,type:t,className:`icon-btn ${e}`.trim(),...r,children:n})}),Q={default:``,signal:`meter-signal`,warn:`meter-warn`,danger:`meter-danger`};function $({value:e,max:t=100,kind:n=`default`}){let r=Math.min(100,Math.max(0,e/t*100));return(0,h.jsx)(`div`,{className:`meter ${Q[n]}`.trim(),children:(0,h.jsx)(`span`,{style:{width:`${r}%`}})})}function ie({slots:e}){return(0,h.jsx)(`span`,{className:`slot-row`,children:e.map((e,t)=>(0,h.jsx)(`span`,{className:`slot-dot ${e.filled?`filled`:``} ${e.onClock?`on-clock`:``}`.trim(),title:e.slot},t))})}function ae({syncHealth:e}){return N(e)===`live`?(0,h.jsx)(`span`,{className:`live-dot`,"data-testid":`sync-live-dot`,"aria-hidden":!0}):null}var oe=16,se=p.marketMaximum.toUpperCase(),ce=104;function le(e,t){let n=Number.isFinite(e)?Math.max(0,e):0,r=Number.isFinite(t)?Math.max(n,t):n,i=Math.max(1,r-n),a=Math.max(0,Math.round(n-i*1.5)),o=Math.round(r+i*1.5);return{min:a,max:Math.max(a+2,o)}}function ue(e,t,n){return Math.min(n,Math.ceil(e.length*t*.62+10))}function de(e,t,n=2){return!(e.x+e.width+n<=t.x||t.x+t.width+n<=e.x||e.y+e.height+n<=t.y||t.y+t.height+n<=e.y)}function fe(e){if(!Array.isArray(e))return[];let t=e.filter(e=>Number.isFinite(e.price)&&Number.isFinite(e.pAcquire)).map(e=>
1({price:Math.max(0,e.price),pAcquire:Math.max(0,Math.min(1,e.pAcquire))})).sort((e,t)=>e.price-t.price),n=[];for(let e of t){let t=n[n.length-1];t?.price===e.price?t.pAcquire=Math.max(t.pAcquire,e.pAcquire):n.push({...e})}let r=0;return n.map(e=>(r=Math.max(r,e.pAcquire),{...e,pAcquire:r}))}function pe({box:e}){return(0,h.jsxs)(`g`,{children:[e.title?(0,h.jsx)(`title`,{children:e.title}):null,(0,h.jsx)(`rect`,{x:e.x,y:e.y,width:e.width,height:e.height,rx:2,fill:`var(--paper)`,stroke:`var(--paper-edge)`,strokeWidth:.75,"data-curve-label-box":e.key}),(0,h.jsx)(`text`,{x:e.x+e.width/2,y:e.y+e.height/2,textAnchor:`middle`,dominantBaseline:`central`,fontSize:e.fontSize,fill:e.color,fontFamily:`var(--f-mono)`,fontWeight:e.weight,"data-curve-label":e.key,children:e.text})]})}function me({box:e,markerX:t,plotTop:n,plotBottom:r}){let i=e.y+e.height<=n;return(0,h.jsx)(`line`,{x1:e.x+e.width/2,y1:i?e.y+e.height:e.y,x2:t,y2:i?n:r,stroke:e.color,strokeWidth:1,"data-curve-leader":e.key})}var he=`run sim for live odds`,ge=`No odds while marked Avoid. Clear Avoid to include this player.`;function _e({fair:e,max:t,myBid:n,width:r=300,height:i=56,acquisitionCurve:a,curveProvenance:o=`monte-carlo`,simulationRuns:s,estimateLabel:c=`ESTIMATE â run sim for real odds`,withholdEstimate:l=!1,excludedByAvoid:f=!1}){let p=(0,m.useId)().replaceAll(`:`,``),g=Number.isFinite(e)?Math.max(0,e):0,_=Number.isFinite(t)?Math.max(0,t):g,v=le(g,_),y=n!=null&&Number.isFinite(n)?Math.max(1,n):null,b=fe(a),x=b.length>=2,S=x&&o===`monte-carlo`;if(l&&!S)return(0,h.jsx)(`div`,{"data-curve-source":f?`excluded-avoid`:`unavailable`,className:`text-mono-xs muted`,children:`â ${f?ge:he}`});let C=v.min,w=v.max,T=w-C,E=e=>Math.max(0,Math.min(r,(e-C)/T*r)),D=Math.max(i,ce),O=D-38,k=O-38,A=x?b:te({rangeMin:C,rangeMax:w,fair:g}),j=A.map(e=>{let t=Math.max(0,Math.min(1,e.pAcquire));return[E(e.price),O-t*k]}),M=`M `+j.map(e=>e.join(`,`)).join(` L `),ne=j[0]?.[0]??0,N=M+` L ${j[j.length-1]?.[0]??r},${O} L ${ne},${O} Z`,P=E(g),F=E(_),I=y==null?null:y<C?`below`:y>w?`above`:null,L=y==null?null:I===`below`?0:I===`above`?r:E(y),R=r*.035,z=(38+O)/2,B=k*.2,re=I===`below`?`${R},${z-B} 0,${z} ${R},${z+B}`:I===`above`?`${r-R},${z-B} ${r},${z} ${r-R},${z+B}`:null,H=e=>{if(A.length===0)return 0;let t=A[0],n=A[A.length-1];if(e<=t.price)return Math.max(0,Math.min(1,t.pAcquire));if(e>=n.price)return Math.max(0,Math.min(1,n.pAcquire));for(let t=1;t<A.length;t+=1){let n=A[t];if(e>n.price)continue;let r=A[t-1],i=n.price-r.price,a=i>0?(e-r.price)/i:0;return Math.max(0,Math.min(1,r.pAcquire+(n.pAcquire-r.pAcquire)*a))}return Math.max(0,Math.min(1,n.pAcquire))},U=H(g),W=d(U,S),G=d(H(_),S),K=y==null?null:d(H(y),S),q=[{probability:1,text:`100%`,x:r-2,y:34,dominantBaseline:`text-after-edge`,collisionY:24},{probability:0,text:`0%`,x:r-2,y:O+4,dominantBaseline:`text-before-edge`,collisionY:O+4}].map(e=>({...e,width:ue(e.text,10,r)})),J=[];J.push(...q.map(e=>({x:e.x-e.width,y:e.collisionY,width:e.width,height:10})));let Y=[20,D-oe-20,2,D-18],X=(e,t,n,i,a,o={})=>{let s=ue(t,12,r),c=i>=.5?[Y[1],Y[3],Y[0],Y[2]]:Y,l=Math.max(0,Math.min(r-s,n-s/2)),u=[0,-(s+4),s+4,-s/2,s/2];for(let n of c)for(let i of u){let c={key:e,text:t,title:o.title,x:Math.max(0,Math.min(r-s,l+i)),y:n,width:s,height:oe,color:a,fontSize:12,weight:o.weight};if(!J.some(e=>de(e,c)))return J.push(c),c}let d={key:e,text:t,title:o.title,x:l,y:c[J.length%c.length],width:s,height:oe,color:a,fontSize:12,weight:o.weight};return J.push(d),d},Z=X(`fair`,`FAIR ${u(g)} · ${W}%`,P,W/100,`var(--st-neutral-paper)`),Q=X(`max`,`${se} ${u(_)} · ${G}%`,F,G/100,`var(--st-avoid-paper)`,{title:`Market maximum ${u(_)}`}),$=L!=null&&K!=null?X(`you`,I===`below`?`â YOU ${u(y)} · ${K}%`:I===`above`?`YOU ${u(y)} · ${K}% â`:`YOU ${u(y)} · ${K}%`,L,K/100,`var(--st-target-paper)`,{weight:700}):null;return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)(`svg`,{width:r,height:D,viewBox:`0 0 ${r} ${D}`,style:{display:`block`},role:`img`,"aria-label":`Acquisition probability curve, ${S?`Monte Carlo derived`:`completed-auction estimate`}. Fair ${u(g)} wins about ${W} percent, market maximum ${u(_)} wins about ${G} percent${y!=null&&K!=null?`, your bid ${u(y)} wins about ${K} percent${I?` and is ${I} the displayed range`:``}`:``}.`,"data-curve-source":S?`mc`:`corpus-estimate`,"data-curve-domain-min":C,"data-curve-domain-max":w,"data-curve-plot-top":38,"data-curve-plot-bottom":O,children:[(0,h.jsxs)(`defs`,{children:[(0,h.jsxs)(`linearGradient`,{id:`${p}-decision-fill`,gradientUnits:`userSpaceOnUse`,x1:P,y1:0,x2:F,y2:0,children:[(0,h.jsx)(`stop`,{offset:`0%`,stopColor:`var(--st-target-wash)`,stopOpacity:`1`}),(0,h.jsx)(`stop`,{offset:`100%`,stopColor:`var(--st-target-wash)`,stopOpacity:`0`})]}),(0,h.jsx)(`clipPath`,{id:`${p}
1-decision-clip`,children:(0,h.jsx)(`rect`,{x:Math.min(P,F),y:38,width:Math.abs(F-P),height:k})})]}),q.map(e=>(0,h.jsx)(`g`,{children:(0,h.jsx)(`text`,{x:e.x,y:e.y,textAnchor:`end`,dominantBaseline:e.dominantBaseline,fontSize:10,fill:`var(--st-neutral-paper)`,fontFamily:`var(--f-mono)`,"data-curve-axis-label":e.probability,children:e.text})},e.probability)),(0,h.jsx)(`path`,{d:N,fill:`url(#${p}-decision-fill)`,clipPath:`url(#${p}-decision-clip)`,"data-curve-decision-fill":!0}),(0,h.jsx)(`path`,{d:M,stroke:`var(--st-target-paper)`,strokeWidth:2,fill:`none`,"data-curve-path":!0}),(0,h.jsx)(`line`,{x1:P,y1:38,x2:P,y2:O,stroke:`var(--st-neutral-paper)`,strokeDasharray:`3 3`,strokeWidth:1,"data-curve-marker":`fair`}),(0,h.jsx)(`line`,{x1:P-2,y1:O-U*k,x2:P+2,y2:O-U*k,stroke:`var(--st-neutral-paper)`,strokeWidth:1,"data-curve-fair-tick":!0}),(0,h.jsx)(me,{box:Z,markerX:P,plotTop:38,plotBottom:O}),(0,h.jsx)(pe,{box:Z}),(0,h.jsx)(`line`,{x1:F,y1:38,x2:F,y2:O,stroke:`var(--st-avoid-paper)`,strokeDasharray:`3 3`,strokeWidth:1,"data-curve-marker":`max`}),(0,h.jsx)(me,{box:Q,markerX:F,plotTop:38,plotBottom:O}),(0,h.jsx)(pe,{box:Q}),L!=null&&(0,h.jsxs)(h.Fragment,{children:[I?(0,h.jsx)(`polyline`,{points:re??void 0,fill:`none`,stroke:`var(--st-target-paper)`,strokeWidth:Math.min(r,D)*.02,strokeLinecap:`round`,strokeLinejoin:`round`,"data-curve-bid-offscale":I}):(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`line`,{x1:L,y1:38,x2:L,y2:O,stroke:`var(--st-target-paper)`,strokeWidth:2,"data-curve-marker":`you`}),(0,h.jsx)(`circle`,{cx:L,cy:O,r:5,fill:`var(--st-target-paper)`})]}),$&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(me,{box:$,markerX:L,plotTop:38,plotBottom:O}),(0,h.jsx)(pe,{box:$})]})]})]}),(0,h.jsxs)(`div`,{className:`bid-curve-meta`,children:[(0,h.jsx)(ee,{term:S?`monte-carlo-win-odds`:`sigmoid-win-odds`,side:`top`,className:`bid-curve-source-help`,children:(0,h.jsx)(V,{kind:S?`info`:`ghost`,variant:`paper`,children:(0,h.jsx)(`span`,{"data-curve-badge":S?`mc`:`corpus`,children:S?`SIMULATED${s?` · ${s} runs`:``}`:c})})}),(0,h.jsx)(`span`,{"data-testid":`bid-curve-framing`,className:`brd-meta bid-curve-framing`,children:`Win odds by bid â every dollar between Fair and market maximum buys odds.`})]})]})}function ve({label:e,value:t,sub:n,tone:r=`neutral`,variant:i=`dark`,prominent:a=!1}){let o=r===`good`?`signal`:r===`bad`?`danger`:r===`warn`?`warn`:``,s=i===`paper`;return(0,h.jsxs)(`div`,{className:s?`otb-stat-chip-paper`:`otb-stat-chip`,children:[(0,h.jsx)(`div`,{className:`otb-stat-chip-label`,children:e}),(0,h.jsx)(`div`,{className:`otb-stat-chip-value ${o} ${a?`otb-stat-chip-value--prominent`:``}`.trim(),children:t}),n&&(0,h.jsx)(`div`,{className:`mono`,style:{fontSize:10,color:s?`var(--ink-soft)`:`var(--fg-3)`},children:n})]})}function ye({width:e,height:t=14,radius:n=4,className:r=``,style:i}){return(0,h.jsx)(`span`,{"aria-hidden":`true`,className:`skeleton ${r}`.trim(),style:{display:`inline-block`,width:e??`100%`,height:t,borderRadius:n,background:`linear-gradient(90deg, var(--bg-1) 0%, var(--bg-2) 50%, var(--bg-1) 100%)`,backgroundSize:`200% 100%`,animation:`skeleton-shimmer 1.4s ease-in-out infinite`,...i}})}function be({title:e,hint:t,action:n}){return(0,h.jsxs)(`div`,{role:`status`,style:{display:`flex`,flexDirection:`column`,alignItems:`center`,justifyContent:`center`,padding:`32px 16px`,textAlign:`center`,color:`var(--fg-2)`,gap:6},children:[(0,h.jsx)(`div`,{className:`text-display-sm`,style:{color:`var(--fg-0)`},children:e}),t&&(0,h.jsx)(`div`,{className:`mono`,style:{fontSize:11,color:`var(--fg-3)`,lineHeight:1.5},children:t}),n&&(0,h.jsx)(`div`,{style:{marginTop:10},children:n})]})}function xe({message:e,onRetry:t}){return(0,h.jsxs)(`div`,{role:`alert`,style:{display:`flex`,alignItems:`flex-start`,gap:10,padding:`10px 12px`,borderRadius:`var(--r-2, 6px)`,background:`color-mix(in srgb, var(--danger) 12%, transparent)`,border:`1px solid color-mix(in srgb, var(--danger) 35%, transparent)`,color:`var(--fg-0)`,fontSize:12.5,lineHeight:1.5},children:[(0,h.jsx)(`span`,{"aria-hidden":`true`,style:{color:`var(--danger)`,fontWeight:700},children:`â `}),(0,h.jsx)(`span`,{style:{flex:1},children:e}),t&&(0,h.jsx)(`button`,{type:`button`,onClick:t,style:{background:`transparent`,border:`1px solid var(--line-1)`,color:`var(--fg-0)`,borderRadius:4,padding:`2px 8px`,fontSize:11,cursor:`pointer`},children:`Retry`})]})}
1export{x as A,j as C,te as D,P as E,g as M,T as O,N as S,O as T,K as _,xe as a,ne as b,ae as c,V as d,B as f,ve as g,W as h,be as i,b as j,ee as k,$ as l,ie as m,_e as n,Z as o,ye as p,X as r,q as s,ge as t,z as u,he as v,F as w,I as x,le as y};
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.