/**
 * ProgramCard (pure presentation). Generic card for podcasts / webinars /
 * events. Two densities — `default` (vertical detail) and `sm` (compact
 * horizontal for chat-inline).
 *
 * The card writes NO click logic — callers wrap with their own anchor
 * and pass the resolved detail URL via `href`.
 */
import React from 'react';
import type { BaseProgramItem, ProgramConfig, ProgramMedia } from '../types/entities/program-types';
type CardSize = 'default' | 'sm';
export declare function ProgramCardSkeleton({ size }: {
    size?: CardSize;
}): React.JSX.Element;
export interface ProgramCardProps<T extends BaseProgramItem> {
    config: ProgramConfig<T>;
    item: T;
    media?: ProgramMedia[];
    renderMeta?: (item: T) => React.ReactNode;
    size?: CardSize;
    /** Detail URL resolved by the caller. */
    href: string;
    /** When `_blank`, opens in a new tab. Set by chat dispatch via
     *  `computeIsNewTab` so the inner `<a>` matches the runtime
     *  nav decision (cross-platform / embed → new tab). Defaults to
     *  same-tab for non-chat callsites. */
    target?: '_blank';
    rel?: 'noopener noreferrer';
    targetPlatform?: string | null;
    /** OG placeholder URL used by the compact branch when no cover. */
    placeholderUrl?: string | null;
    wholeCardClickable?: boolean;
    className?: string;
}
export declare function ProgramCard<T extends BaseProgramItem>({ config, item, media, renderMeta, size, href, target: targetProp, rel: relProp, targetPlatform, placeholderUrl: placeholderUrlProp, wholeCardClickable, className, }: ProgramCardProps<T>): React.JSX.Element;
export {};
//# sourceMappingURL=program-card.d.ts.map