\n {#each inning.events as event (event)}\n {#if event.type !== 'atBat'}\n
\n
\n
\n
{tokensToText(event.description)}
\n
\n {#if $players}\n {@const player = $players[event.playerId]}\n {#if player && !player.imageUrl.includes('silhouette')}\n
\n {/if}\n {/if}\n
\n
\n {:else}\n {#each event.events as atBatEvent (atBatEvent)}\n {#if isLineupChange(atBatEvent)}\n
\n
\n
\n
{tokensToText(atBatEvent.description)}
\n
\n {#if $players}\n {@const player = $players[atBatEvent.playerId]}\n {#if player && !player.imageUrl.includes('silhouette')}\n
\n {/if}\n {/if}\n
\n
\n {:else if isSteal(atBatEvent)}\n {#if atBatEvent.runners && some(atBatEvent.runners, (r) => !!r.description)}\n {@const runners = atBatEvent.runners}\n
\n
\n
\n
\n {runners\n .flatMap((r) => r.description)\n .filter((x) => !!x)\n .map((r) => r.text)\n .join(' ')}\n
\n
\n {#if $players}\n {@const player = $players[runners[0].playerId]}\n {#if player && !player.imageUrl.includes('silhouette')}\n
\n {/if}\n {/if}\n
\n
\n {/if}\n {:else if isPitch(atBatEvent)}\n {#if !atBatEvent.flags.isAtBatOver}\n {#if atBatEvent.outcomeType === 'balk'}\n {@const runners = atBatEvent.runners}\n {#if runners && runners.length > 0}\n
\n
\n
\n
\n {runners\n .flatMap((r) => r.description)\n .filter((x) => !!x)\n .map((r) => r.text)\n .join(' ')}\n
\n
\n {atBatEvent.outcomeType}\n
\n
\n {#if $players}\n {@const player = $players[runners[0].playerId]}\n {#if player && !player.imageUrl.includes('silhouette')}\n
\n {/if}\n {/if}\n
\n
\n {/if}\n {:else}\n {@const runners = atBatEvent.runners}\n {#if runners && runners.length > 0 && some(runners, (r) => !!r.description)}\n
\n
\n
\n
\n {tokensToText(\n runners\n .flatMap((r) => r.description)\n .filter((x) => !!x),\n )}\n
\n
\n {runners[0].outcomeType === 'steal'\n ? 'Stolen Base'\n : runners[0].outcomeType === 'caughtStealing'\n ? 'Caught Stealing'\n : atBatEvent.flags.isWildPitch\n ? 'Wild Pitch'\n : atBatEvent.flags.isPassedBall\n ? 'Passed Ball'\n : ''}\n
\n
\n {#if $players}\n {@const player = $players[runners[0].playerId]}\n {#if player && !player.imageUrl.includes('silhouette')}\n
\n {/if}\n {/if}\n
\n
\n {/if}\n {/if}\n {/if}\n {/if}\n {/each}\n\n {#if event.description}\n
\n selectedAtBat.set({\n atBat: event,\n number: inningNumber,\n half: inning.half,\n pitcher: $players[event.pitcher.playerId],\n })}\n >\n
\n
\n
{tokensToText(event.description)}
\n {#if event.type === 'atBat'}\n {@const lastPitch = findLast(event.events, { type: 'pitch' })}\n {@const pitches =\n event.pitches ??\n event.events.filter((e) => e.type === 'pitch')}\n {#if lastPitch && lastPitch.type === 'pitch'}\n {@const { count, hitData, runners } = lastPitch}\n
\n
\n {formatPlayOutcome(lastPitch)}\n
\n
\n {#if pitches}\n
\n {/if}\n {#if hitData?.coordinates}\n
\n {/if}\n {#if runners && some(runners, (r) => r.startingBase !== 0)}\n
r.startingBase === 1,\n )}\n fillSecondBase={some(\n runners,\n (r) => r.startingBase === 2,\n )}\n fillThirdBase={some(\n runners,\n (r) => r.startingBase === 3,\n )}\n />\n {/if}\n \n {/if}\n {/if}\n
\n {#if $players}\n {@const player = $players[event.batter.playerId]}\n {#if player && !player.imageUrl.includes('silhouette')}\n
\n {/if}\n {/if}\n
\n
\n {/if}\n {/if}\n {/each}\n
\n