<!-- source-hash: 32d71d29579661580177180e5a23c34d -->
Renders the correct compact card component for a given `ChatRef` by dispatching on document type, handling fetch/skeleton states, and wiring navigation props for the chat shell.

## Key Components

### Types
- **`ChatCardDispatchExtras`** — Host-supplied builders for hub-specific derived props (program configs, product-release prop builder, OG placeholder URL generator)
- **`ChatCardRenderOptions`** — Per-render options including `baseRoute`, `chipBasePlatform`, `extras`, and the pre-computed `isNewTab` flag

### Internal Card Wrappers
- **`GitHubChatCard`** — Renders a compact `GitHubActivityCard` from a `ChatRef`
- **`HubspotTicketChatCard`** — Extracts ticket metadata (status, priority, customer) from `chatRef.metadata` and renders `HubspotTicketCard`
- **`SlackChatCard`** — Maps channel name from metadata and renders `SlackMessageCard`
- **`DataRoomDocChatCard`** — Renders `DataRoomDocCard` with provenance badge resolved via `getSourceLabel`; intentionally falls back to `"Document"` (never `"Data room"`) to avoid false sensitivity labeling
- **`GenericFinancialChatCard`** — Renders `GenericEntityCard` with badge, color scheme, optional facts list, and subtitle
- **`ChatInlineVideoPill`** — Inline pill span for video references (non-block contexts)

### Utilities Used
- `buildAnchorProps` / `computeIsNewTab` / `newTabAnchorAttrs` — Anchor attribute construction
- `resolveHrefForRuntime` / `handleChatNavClick` — Runtime-aware navigation
- `resolveSourceRowCTA` / `resolveSourceIcon` / `getSourceLabel` — Source chip metadata

## Usage Example

```typescript
// In the chat shell — dispatch a compact inline card
const card = renderChatInlineEntityCard(chatRef, {
  isNewTab: computeIsNewTab(chatRef.url, runtime.source),
  baseRoute: '/app',
  chipBasePlatform: 'hub',
  extras: {
    programConfigs: { podcast: myPodcastConfig },
    buildProductReleaseCardProps: (release) => ({ iconUrl: release.icon }),
    buildOgPlaceholderUrl: (title) => `/og?title=${encodeURIComponent(title)}`,
  },
})
```

> **Adding a new card type:** Implement the `size='sm'` branch in `./<card>.tsx`, then register one entry in the `CHAT_CARD_REGISTRY` switch inside this file.