<!-- source-hash: e2ba951ef60128447d27416a00b1a586 -->
Renders the video block for entity detail pages, combining full video, highlight video, AI-generated summary, and video bites into a unified tabbed layout.

## Key Components

### `EntityVideoSection` (default export)
Main component that orchestrates the video display logic:
- **Tab UI** — renders "Full Video" / "Highlights" tabs when both a full video and highlight video are present; falls back to a single `<Video>` when only one exists
- **YouTube precedence** — resolves `youtubeUrl` vs `mainVideoUrl` priority at this level, keeping `<Video>` as a single-source-per-render primitive
- **Video summary** — renders an AI-generated markdown summary via injected `MarkdownRenderer`
- **Video bites grid** — delegates to `<VideoBitesDisplay>` when `videoBites` are provided
- **Null guard** — returns `null` when no video, summary, or bites are present

### `EntityVideoSectionProps`
Full interface for controlling content and behavior:

| Prop | Type | Description |
|------|------|-------------|
| `youtubeUrl` | `string \| null` | YouTube URL (takes priority over `mainVideoUrl`) |
| `mainVideoUrl` | `string \| null` | Uploaded video URL |
| `highlightVideoUrl` | `string \| null` | AI-generated highlight clip |
| `captionsUrl` | `string \| null` | HTTPS URL to a VTT captions file |
| `MarkdownRenderer` | `ComponentType` | Injected renderer for summary markdown |
| `priority` | `boolean` | LCP hint for eager poster loading |
| `srtContent` | `string \| null` | Deprecated — use `captionsUrl` |

## Usage Example

```typescript
import { EntityVideoSection } from './entity-video-section';
import { MarkdownRenderer } from '@/components/markdown-renderer';

export function TalkDetailPage({ talk }) {
  return (
    <EntityVideoSection
      youtubeUrl={talk.youtubeUrl}
      mainVideoUrl={talk.videoUrl}
      highlightVideoUrl={talk.highlightUrl}
      highlightVideoThumbnail={talk.highlightThumb}
      mainVideoPoster={talk.posterUrl}
      title={talk.title}
      videoSummary={talk.aiSummary}
      videoBites={talk.bites}
      bitesTitle="Key Moments"
      captionsUrl={talk.captionsUrl}
      MarkdownRenderer={MarkdownRenderer}
      priority
    />
  );
}
```