import { useState } from 'react' import { Filter } from '../../../lib/icons' import { useHasTmdbKey } from '../../../hooks/use-external' import { CANON_LISTS } from '../../../lib/canon-lists' import { STUDIOS, NETWORKS } from '../../../lib/studios-and-networks' import BrandRow from '../../../components/ui/BrandRow' import CanonListRow from '../../../components/ui/CanonListRow' import LetterboxdListRow from '../../../components/ui/LetterboxdListRow' import LetterboxdAddModal from '../../../components/ui/LetterboxdAddModal' import { useLetterboxdLists } from '../../../stores/letterboxd-lists-store' /** * "From the studios" - one row per major film studio. */ export function StudioRows() { const hasTmdb = useHasTmdbKey() if (!hasTmdb) return null return (
{STUDIOS.map(s => ( ))}
) } /** * "On the networks" - one row per major TV network. */ export function NetworkRows() { const hasTmdb = useHasTmdbKey() if (!hasTmdb) return null return (
{NETWORKS.map(n => ( ))}
) } function BrandSectionHeader({ eyebrow, title, subtitle }: { eyebrow: string; title: string; subtitle: string }) { return (
{eyebrow}

{title}

{subtitle}

) } /** * Discover canon - renders bundled canon lists (AFI, Sight & Sound, IMDb top). */ export function DiscoverCanonSection() { const hasTmdb = useHasTmdbKey() if (!hasTmdb) return null return (
{CANON_LISTS.map(list => ( ))}
) } /** * Letterboxd lists. Each saved list URL renders as its own row lazy-mounted * on scroll. The trailing affordance opens a modal to paste a new URL. */ export function LetterboxdListsSection() { const hasTmdb = useHasTmdbKey() const lists = useLetterboxdLists(s => s.lists) const [addOpen, setAddOpen] = useState(false) if (!hasTmdb) return null return ( <> {lists.map(saved => ( ))}
setAddOpen(false)} /> ) }