Provides lib-side default prop builders for ``, covering both the compact `sm` (chat dispatch) and full `lg` (catalog page) card variants without requiring embedder-supplied extras. ## Key Components ### Interfaces - **`ReleaseLike`** — Minimal shape for `sm` builder; covers image/video thumbnail and date fields - **`RichReleaseLike`** — Extended shape for `lg` builder; adds `release_type`, `release_status`, `view_count`, `author`, and changelog arrays - **`DerivedSmProps`** — Output type for the compact builder (`coverImage`, `hasVideoCover`, `formattedDate`) - **`ProductReleaseCardDerivedProps`** — Full output type for the rich builder, including badge color, author, view count, and changelog counts ### Functions - **`pickCover(item)`** *(internal)* — Selects the best cover image URL using a simplified sm-specific heuristic: prefers video thumbnails when a video URL is present, otherwise falls back to `featured_image` or `og_image_url` - **`defaultBuildProductReleaseCardProps(item)`** — Lightweight builder for chat-dispatch `sm` cards; satisfies only the three fields the compact variant reads - **`buildProductReleaseCardProps(item)`** — Rich `lg`-variant builder and the **default** for ``; populates the full metadata grid using `resolveReleaseCover` and `releaseTypeToBadgeColor` ## Usage Example ```typescript import { defaultBuildProductReleaseCardProps, buildProductReleaseCardProps, } from './product-release-card-defaults' // Compact sm card (chat dispatch — no extras needed) const smProps = defaultBuildProductReleaseCardProps(releaseRow) // → { coverImage, hasVideoCover, formattedDate } // Full lg card (ProductReleasesView default) const lgProps = buildProductReleaseCardProps(releaseRow) // → { coverImage, hasVideoCover, formattedDate, releaseType, // releaseStatus, releaseTypeBadgeColor, viewCount, // author, changelogCounts } ``` > Hub-side embedders can override the default by passing a richer builder via `opts.extras.buildProductReleaseCardProps`. The `sm` builder intentionally diverges from `resolveReleaseCover` to avoid pulling hub-only dependencies into the lib bundle.