diff --git a/k-tv-frontend/app/(main)/library/components/breadcrumb-nav.tsx b/k-tv-frontend/app/(main)/library/components/breadcrumb-nav.tsx new file mode 100644 index 0000000..8d60f8c --- /dev/null +++ b/k-tv-frontend/app/(main)/library/components/breadcrumb-nav.tsx @@ -0,0 +1,41 @@ +interface Props { + series?: string; + season?: number; + onNavigate: (target: "root" | "series") => void; +} + +export function BreadcrumbNav({ series, season, onNavigate }: Props) { + return ( + + ); +} diff --git a/k-tv-frontend/app/(main)/library/components/season-tile.tsx b/k-tv-frontend/app/(main)/library/components/season-tile.tsx new file mode 100644 index 0000000..bcd8872 --- /dev/null +++ b/k-tv-frontend/app/(main)/library/components/season-tile.tsx @@ -0,0 +1,63 @@ +"use client"; + +import { Film } from "lucide-react"; +import type { SeasonSummary } from "@/lib/types"; + +interface Props { + season: SeasonSummary; + selected: boolean; + onToggle: () => void; + onClick: () => void; +} + +export function SeasonTile({ season, selected, onToggle, onClick }: Props) { + return ( +
+ + +
+ +

{season.episode_count} episodes

+
+ + +
+ ); +} diff --git a/k-tv-frontend/app/(main)/library/components/show-tile.tsx b/k-tv-frontend/app/(main)/library/components/show-tile.tsx new file mode 100644 index 0000000..dc2d32a --- /dev/null +++ b/k-tv-frontend/app/(main)/library/components/show-tile.tsx @@ -0,0 +1,75 @@ +"use client"; + +import { Tv } from "lucide-react"; +import type { ShowSummary } from "@/lib/types"; + +interface Props { + show: ShowSummary; + selected: boolean; + onToggle: () => void; + onClick: () => void; +} + +export function ShowTile({ show, selected, onToggle, onClick }: Props) { + return ( +
+ {/* Thumbnail area - clickable to drill in */} + + + {/* Info area */} +
+ +

+ {show.season_count} {show.season_count === 1 ? "season" : "seasons"} · {show.episode_count} eps +

+ {show.genres.length > 0 && ( +

+ {show.genres.slice(0, 3).join(", ")} +

+ )} +
+ + {/* Select checkbox */} + +
+ ); +}