import React from 'react'; /** * Card density. Two variants, both actively used across openframe + flamingo * apps and the related-content rail: * * - `lg`: rich large card used everywhere a product release is the focal * item — openframe's `/releases` catalog row, flamingo's DevCenter tab, * investor-update related-content section. Three zones — hero (16:9 cover * + version pill + title + summary), changelog stats strip (icons + * counts), metadata grid footer (Type · Status · Released · Author). The * grid mirrors the hub's `` byte-for-byte (see lg * branch comment). * * - `sm`: compact horizontal layout (~80px tall) for inline rendering inside * chat messages and other tight surfaces. Drops `

` (block-only, * illegal inside markdown `

`) for `` text, swaps the outer * `InteractiveCard` for a ``-anchored link, and collapses to: * 56px icon + 1-line title + 1-line meta (version · date). * * A previous `default` variant (vertical title+description / version+date * column) was deleted in the 2026-05 DRY pass — it had a single consumer * (the hub's RelatedContentSection) that has since moved to `lg`. */ export type ProductReleaseCardSize = 'lg' | 'sm'; /** * Minimal structural `` prop bundle the consumer composes (typically * via the hub's `useNavLink` hook — single source of truth for click * routing). Kept structural here so the OSS lib has zero hub coupling; * the consumer's `NavLinkProps` is type-compatible by shape. * * When supplied, the outer element renders as `` so * the SAME routing decision (modifier-click → browser default, cross- * origin → new tab, same-origin → `router.push`) runs identically to * every other entity card. When absent, the legacy `onClick` branch is * used (back-compat for the public `/releases` page). */ export interface ProductReleaseCardAnchorProps { href: string; target?: '_blank'; rel?: 'noopener noreferrer'; onClick?: (e: React.MouseEvent) => void; } export interface ProductReleaseCardProps { /** Release title */ title: string; /** Release summary/description */ summary?: string | null; /** Version string (e.g., "1.2.0") */ version: string; /** Formatted date string for display */ formattedDate: string; /** * Legacy click handler — kept for back-compat with public-page callers * (e.g. `/releases` tab) that route via `router.push()` directly. When * `anchorProps` is also supplied, `anchorProps` wins and this is * ignored. */ onClick?: () => void; /** * `` prop bundle from the consumer's `useNavLink` (or equivalent). * When provided, the card's outer element renders as a real anchor so * routing (cross-origin → new tab, same-origin → soft RSC nav, * modifier-click → browser default) is owned by the hook — the card * writes NO click logic of its own. This is the path every other * entity card uses; `onClick` is only kept for the one legacy caller. */ anchorProps?: ProductReleaseCardAnchorProps; /** Additional CSS classes */ className?: string; /** Card density. Defaults to `'lg'` (the canonical large card). */ size?: ProductReleaseCardSize; /** Cover image URL. Falls back to a neutral `Package`-icon placeholder. */ coverImage?: string | null; /** Drives the Play overlay on the cover. Caller sets `true` when the cover * came from a `*_video_thumbnail` field. */ hasVideoCover?: boolean; /** Release type for the metadata grid's first cell. */ releaseType?: 'major' | 'minor' | 'patch' | 'beta' | 'alpha'; /** Release status for the metadata grid's second cell. */ releaseStatus?: 'alpha' | 'beta' | 'stable' | 'deprecated'; /** Pre-computed `StatusBadge` colorScheme for the release-type chip. The * hub consumer maps `release_type → colorScheme` via its local helper so * the OSS card stays mapping-agnostic. */ releaseTypeBadgeColor?: 'error' | 'cyan' | 'success' | 'warning'; /** View count for the optional microline below the metadata grid. Hidden * when zero or undefined. */ viewCount?: number; /** Hydrated author (from the hub DAL's `hydrateAuthor`). When present, * renders as the last cell of the metadata grid. */ author?: { full_name: string; avatar_url: string | null; job_title: string | null; }; /** Per-category counts for the changelog stats strip. The whole strip * is hidden when total === 0. */ changelogCounts?: { features: number; fixes: number; improvements: number; breaking: number; }; } export declare function ProductReleaseCard({ title, summary, version, formattedDate, onClick, anchorProps, className, size, coverImage, hasVideoCover, releaseType, releaseStatus, releaseTypeBadgeColor, viewCount, author, changelogCounts, }: ProductReleaseCardProps): React.JSX.Element; //# sourceMappingURL=product-release-card.d.ts.map