+
+ Pick a different clip from this program's manifest. The choice replaces the
+ slot's source — your existing trim values are preserved.
+
+
+ {aliases.map((alias) => {
+ const isCurrent = alias === currentAlias;
+ return (
+
+ );
+ })}
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/components/videos/types.ts b/frontend/src/components/videos/types.ts
index 0d8c8a7..78a060b 100644
--- a/frontend/src/components/videos/types.ts
+++ b/frontend/src/components/videos/types.ts
@@ -42,6 +42,7 @@ export type PendingChange =
// What the drawer is currently editing.
export type WidgetRef =
| { kind: "clip-trim"; clipKind: "scene-clip" | "product-beat"; beatId: string; index: number }
+ | { kind: "clip-picker"; clipKind: "scene-clip" | "product-beat"; beatId: string; index: number }
| { kind: "narration"; beatId: string }
| { kind: "stat"; beatId: string; path: string };
diff --git a/frontend/src/components/videos/widgets/ClipSlotWidget.tsx b/frontend/src/components/videos/widgets/ClipSlotWidget.tsx
index ba785f5..3568b82 100644
--- a/frontend/src/components/videos/widgets/ClipSlotWidget.tsx
+++ b/frontend/src/components/videos/widgets/ClipSlotWidget.tsx
@@ -91,7 +91,26 @@ export function ClipSlotWidget({ beatId, clipKind, index }: Props) {
trimmed
)}
-