<!-- source-hash: 81400380536975a05d6ee9dc0f9ea30f -->
Reusable wrapper component around `AIEnrichSection` that provides a standardized UI for triggering and managing video clips extraction from uploaded media.

## Key Components

### `VideoClipsSection`
A pre-configured `AIEnrichSection` wrapper that handles the video clips extraction step for `CustomerInterview` and `ProductRelease` entities. Automatically toggles the button label between `"Generate Clips"` and `"Regenerate Clips"` based on whether a result already exists.

### `VideoClipsSectionProps`
Full interface for controlling extraction state, UI labels, cancel behavior, and required field validation display.

## Usage Example

```typescript
import { VideoClipsSection } from './video-clips-section';

<VideoClipsSection
  onExtractClips={handleExtract}
  isProcessing={isLoading}
  canEnrich={!!uploadedVideo}
  requiredFields={[{ label: 'Video', isMet: !!uploadedVideo }]}
  status={extractionStatus}
  statusMessage="Clips extracted successfully"
  hasResult={clips.length > 0}
  showCancel={true}
  onCancel={handleCancel}
  isCancelling={isCancelling}
/>
```

## Props Summary

| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `onExtractClips` | `() => void` | — | Triggers extraction |
| `isProcessing` | `boolean` | — | Shows loading state |
| `canEnrich` | `boolean` | — | Enables the button |
| `hasResult` | `boolean` | `false` | Switches label to "Regenerate" |
| `disabledMessage` | `string` | `"Upload a video first"` | Tooltip when disabled |
| `loadingLabel` | `string` | `"Extracting clips..."` | In-progress button label |
| `showCancel` | `boolean` | `true` | Shows cancel option |