Pure presentation component for displaying investor update entities across three density variants (`default`, `sm`, `portrait`), with no internal click logic — callers provide the resolved `href`.
## Key Components
| Export | Description |
|---|---|
| `InvestorUpdateCard` | Main card component rendering one of three layouts based on the `size` prop |
| `InvestorUpdateCardSkeleton` | Loading placeholder matching the card's layout for `default`/`portrait` or `sm` density |
| `InvestorUpdateCardProps` | Props interface defining the card's API |
**Size variants:**
- **`default`** — Full card using `AdminContentCard` with cover image, title, summary, badge, and period meta
- **`sm`** — Compact horizontal layout (`EntityPortraitCard`-style) with image slot, title, update number badge, period subtitle, and truncated summary
- **`portrait`** — Rail/strip layout delegated to `EntityPortraitCard`, with optional content-type chip controlled by `showTypeBadge`
## Usage Example
```typescript
import { InvestorUpdateCard, InvestorUpdateCardSkeleton } from './investor-update-card'
// Default density
// Compact horizontal (e.g., list/feed rows)
// Portrait rail (mixed-type content strips)
// Loading state
```
**Key behaviours:**
- Falls back to a generated placeholder image via `useEntityCardPlaceholder` when `featured_image` is absent; aspect ratio is `square` for `sm`, `wide` otherwise
- Tab target and `rel` are resolved by `useEntityCardLink`, supporting cross-platform dispatch via `targetPlatform`
- Image `onError` hides broken images gracefully in the `sm` variant
## Source
[`investor-update-card.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/investor-update-card.tsx)