PosterStack
A list cover: up to five overlapping posters, with empty slots kept grey.
import { PosterStack } from '@iffday/web/src/kit';Example
A list’s cover: up to five posters overlap from left to right, each covering 9% of the one before and casting a shadow to its right. total is the number of slots the cover should have; slots without a poster stay grey. Lists look like this on profiles and in the feed.





BIFF 2026 Icons


Competition
import { useT } from '@iffday/i18n';
import { PosterStack } from '@iffday/web/src/kit';
import { useSampleFilms } from '../../../samples';
export default function Example() {
const t = useT();
const films = useSampleFilms();
return (
<div style={{ width: '100%' }}>
<article className="list-card">
<PosterStack posters={films.slice(0, 5)} total={5} />
<div>
<h3 className="list-card-title">BIFF 2026 Icons</h3>
<span className="list-card-meta">{t('account.profile.filmCount', { 0: 5 })}</span>
</div>
</article>
<article className="list-card">
<PosterStack posters={films.slice(6, 8)} total={5} />
<div>
<h3 className="list-card-title">Competition</h3>
<span className="list-card-meta">{t('account.profile.filmCount', { 0: 2 })}</span>
</div>
</article>
</div>
);
}Props
PosterStack
apps/web/src/kit.tsx:355Overlapping posters for a list card, like record.club's list covers.
| Prop | Type | Default |
|---|---|---|
posters* | ({ id: string; title: string; posterUrl?: string | null } & FilmVisuals)[] | |
total | number |