import React from 'react';
import type { VideoTeaser } from '../../types/video-processing';
export interface VideoBitesDisplayProps {
    /** Array of video bites/teasers to display. */
    bites: VideoTeaser[];
    /** Title for the section. */
    title?: string;
    /** Whether to filter to only show published bites. Default `true`. */
    filterPublished?: boolean;
    /** Whether to show the title section heading. Default `true`. */
    showTitle?: boolean;
}
/**
 * Unified video-bites grid.
 *
 * Groups by aspect ratio when multiple ratios are present, otherwise
 * renders a flat grid. Each bite mounts lazily via `LazyBite` so
 * off-screen players don't cost the page.
 */
export declare function VideoBitesDisplay({ bites, title, filterPublished, showTitle, }: VideoBitesDisplayProps): React.JSX.Element | null;
interface VideoBiteCardProps {
    url: string;
    title?: string | null;
    thumbnailUrl?: string | null;
}
/**
 * Individual bite card — routes through `<Video>` so the SSoT player
 * is the only video primitive in the lib.
 *
 * Layout: `LazyBite` sets the OUTER `aspectRatio` (portrait/square/landscape),
 * but `<Card>` between LazyBite and `<Video>` has no intrinsic height, so
 * we wrap `<Video>` in `layout="fill"` + an explicit `relative` parent so
 * the player fills the bite's aspect box from first paint. Otherwise
 * MuxPlayer renders at its intrinsic default size and grows once metadata
 * loads — the same CLS that hits the centered layout.
 */
declare function VideoBiteCard({ url, title, thumbnailUrl }: VideoBiteCardProps): React.JSX.Element;
export { VideoBiteCard };
//# sourceMappingURL=video-bites-display.d.ts.map