- {#if ep.format}
{ep.format}{/if}
- {#if ep.duration}
• Length: {ep.duration}m{/if}
- {#if ep.episodes}
• Episodes: {ep.episodes}{/if}
+
+ {#if wide1600}
+
+
+
+ {#if ep.format}{ep.format}{/if}
+ {#if ep.duration}• Length: {ep.duration}m{/if}
+ {#if ep.episodes}• Episodes: {ep.episodes}{/if}
+
+
+
Ep {ep.episode}
+
+ {format(ep.airTime, 'h:mm')} {format(ep.airTime, 'a')}
+
+
-
-
Ep {ep.episode}
-
+ {:else}
+
+
+ {#if ep.format}{ep.format}{/if}
+ {#if ep.episodes}
+ • {ep.episodes}eps
+ {/if}
+ {#if ep.duration}
+ • {ep.duration}m
+ {/if}
+
+
+
Ep {ep.episode}
+
{format(ep.airTime, 'h:mm')} {format(ep.airTime, 'a')}
-
+ {/if}
{/each}
diff --git a/src/routes/app/schedule/ThreeDayView.svelte b/src/routes/app/schedule/ThreeDayView.svelte
index 9a206a4..e9410fc 100644
--- a/src/routes/app/schedule/ThreeDayView.svelte
+++ b/src/routes/app/schedule/ThreeDayView.svelte
@@ -3,6 +3,7 @@
import { Button as ButtonPrimitive } from 'bits-ui'
import { goto } from '$app/navigation'
import { cn } from '$lib/utils'
+ import { onMount } from 'svelte'
export let prevDate: Date
export let currentDate: Date
@@ -14,6 +15,8 @@
export let onSelectDate: (date: Date) => void
export let onSelectEpisode: (ep: any) => void
+ export let androidPortrait: boolean = false
+ export let androidLandscape: boolean = false
let lastClickId: string | null = null
let lastClickAt = 0
@@ -40,11 +43,43 @@
function keydownSelectPrev(e: KeyboardEvent) { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); e.stopPropagation(); onSelectDate(prevDate) } }
function keydownSelectCurrent(e: KeyboardEvent) { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); e.stopPropagation(); onSelectDate(currentDate) } }
function keydownSelectNext(e: KeyboardEvent) { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); e.stopPropagation(); onSelectDate(nextDate) } }
+
+ // Android portrait: collapse current-day list to 6 items with More+ button
+ let showAllCurrent = false
+ $: visibleCurrentEpisodes = androidPortrait && !showAllCurrent ? currentEpisodes.slice(0, 6) : currentEpisodes
+
+ // Apply same behavior to previous and next day in Android portrait
+ let showAllPrev = false
+ let showAllNext = false
+ $: visiblePrevEpisodes = androidPortrait && !showAllPrev ? prevEpisodes.slice(0, 6) : prevEpisodes
+ $: visibleNextEpisodes = androidPortrait && !showAllNext ? nextEpisodes.slice(0, 6) : nextEpisodes
+
+ // Below 1400px: change 3-day list to 2-day (current + next). Hide Previous.
+ let wide1400 = false
+ onMount(() => {
+ const mq = window.matchMedia('(min-width: 1400px)')
+ const update = () => { wide1400 = mq.matches }
+ update()
+ mq.addEventListener('change', update)
+ return () => mq.removeEventListener('change', update)
+ })
+
+ // Reset expanded state when dates change
+ let _prevKey = 0, _currentKey = 0, _nextKey = 0
+ $: { const k = +prevDate; if (k !== _prevKey) { _prevKey = k; showAllPrev = false } }
+ $: { const k = +currentDate; if (k !== _currentKey) { _currentKey = k; showAllCurrent = false } }
+ $: { const k = +nextDate; if (k !== _nextKey) { _nextKey = k; showAllNext = false } }
-
+
-
+ {#if wide1400}
+
@@ -60,22 +95,28 @@
{#if prevEpisodes.length === 0}
No episodes
{:else}
- {#each prevEpisodes as ep (ep.id + ':' + ep.episode)}
+ {#each visiblePrevEpisodes as ep (ep.id + ':' + ep.episode)}
handleEpisodeClick(e, ep)}>
- {format(ep.airTime, 'HH:mm')}
-
+
{format(ep.airTime, 'HH:mm')}
+
{ep.title?.userPreferred}
-
Ep {ep.episode}
+
Ep {ep.episode}
{/each}
+ {#if androidPortrait && prevEpisodes.length > 6 && !showAllPrev}
+
+
+
+ {/if}
{/if}
-
+ {/if}
-
+
@@ -83,22 +124,27 @@
{#if currentEpisodes.length === 0}
No episodes
{:else}
- {#each currentEpisodes as ep (ep.id + ':' + ep.episode)}
+ {#each visibleCurrentEpisodes as ep (ep.id + ':' + ep.episode)}
handleEpisodeClick(e, ep)}>
- {format(ep.airTime, 'HH:mm')}
-
+
{format(ep.airTime, 'HH:mm')}
+
{ep.title?.userPreferred}
-
Ep {ep.episode}
+
Ep {ep.episode}
{/each}
+ {#if androidPortrait && currentEpisodes.length > 6 && !showAllCurrent}
+
+
+
+ {/if}
{/if}
-
+
@@ -113,16 +159,22 @@
{#if nextEpisodes.length === 0}
No episodes
{:else}
- {#each nextEpisodes as ep (ep.id + ':' + ep.episode)}
+ {#each visibleNextEpisodes as ep (ep.id + ':' + ep.episode)}
handleEpisodeClick(e, ep)}>
- {format(ep.airTime, 'HH:mm')}
-
+
{format(ep.airTime, 'HH:mm')}
+
{ep.title?.userPreferred}
-
Ep {ep.episode}
+
Ep {ep.episode}
{/each}
+ {#if androidPortrait && nextEpisodes.length > 6 && !showAllNext}
+
+
+
+ {/if}
{/if}