{#if showForm}

New Market Call

{ e.preventDefault(); submit(); }}>
{#if formError}
⚠ {formError}
{/if}
{/if} {#if (data.events ?? []).length > 0}

πŸ“… Upcoming Events

{upcoming.length} upcoming {#if past.length > 0} {past.length} recent {/if}
{#each upcoming as ev}
{ev.date}
{ev.ticker} {eventIcon(ev.type)} {ev.label} {#if ev.detail}Β· {ev.detail}{/if} {#if ev.epsEstimate != null} EPS est. ${ev.epsEstimate?.toFixed(2)} Β· Rev est. {fmtMoney(ev.revEstimate)} {/if}
{/each} {#if past.length > 0}
β€” Past β€”
{#each past as ev}
{ev.date}
{ev.ticker} {eventIcon(ev.type)} {ev.label}
{/each} {/if}
{/if} {#if data.error}
⚠ {data.error}
{:else if data.calls.length === 0}
No market calls yet. Create your first one to start tracking.
{:else} {#each data.calls as call}
{call.title}
{call.quarter} {call.date} {call.tickers.length} tickers

{call.thesis}

{#if Object.keys(call.snapshot ?? {}).length}
{#each call.tickers as ticker} {@const snap = call.snapshot[ticker]} {#if snap}
{ticker}
${snap.price?.toFixed(2) ?? 'β€”'}
{snap.signal?.replace(/[βœ…βš‘βš οΈπŸ”„βŒ]/u, '').trim() ?? 'β€”'}
{/if} {/each}
View performance β†’ {/if}
{/each} {/if}