{#if schedule.lives.length === 0} {/if}
{#each schedule.lives .filter((live) => { try { $locale().hololive.dateFormatter(new Date(live.time)); return true; } catch { return false; } }) .sort((a, b) => { const now = Date.now(); const aTime = new Date(a.time).getTime(); const bTime = new Date(b.time).getTime(); const aIsLive = a.streaming; const bIsLive = b.streaming; const aIsClosestPinned = closestUpcomingPinnedStreams.get(a.streamer) === a; const bIsClosestPinned = closestUpcomingPinnedStreams.get(b.streamer) === b; if (aIsLive && pinnedStreams.includes(a.streamer)) return -1; if (bIsLive && pinnedStreams.includes(b.streamer)) return 1; if (aIsLive && !bIsLive) return -1; if (bIsLive && !aIsLive) return 1; if (aIsClosestPinned && !bIsClosestPinned) return -1; if (bIsClosestPinned && !aIsClosestPinned) return 1; if (aTime > now && !(aTime < now && !aIsLive)) return -1; if (bTime > now && !(bTime < now && !bIsLive)) return 1; return bTime - aTime; }) as live}
{#if $identity.id !== -2} {/if}

[{#if live.streaming} {$locale().hololive.live}{:else if new Date(live.time).getTime() < Date.now()} {$locale().hololive.ended}{:else} {$locale().hololive.upcoming}{/if}] {live.streamer} | {$locale().hololive.dateFormatter(new Date(live.time))} {#if live.guests.length > 0}
{$locale().hololive.with}{live.guests .join($locale().hololive.comma) .replace( new RegExp( `${$locale().hololive.comma}([^${$locale().hololive.commaNoSpace}]+)$`, 'g' ), `${$locale().hololive.comma}${$locale().hololive.ampersand}$1` )} {/if}

Stream Thumbnail
{/each}