+
);
}
@@ -355,14 +344,18 @@ function ResolvedBadge({
}) {
const resolved = status?.resolved?.[controlKey];
if (!resolved || resolved.source !== "auto") return null;
- return (
-
+ const badge = (
+
Auto: {formatResolvedValue(resolved.value)}
);
+ if (!resolved.reason) return badge;
+ return (
+
+ {badge}
+ {resolved.reason}
+
+ );
}
// A compact labeled Select row for the Advanced Options panel.
@@ -1370,15 +1363,19 @@ export function VideoPage({ active = true }: { active?: boolean }) {
]}
/>
{status?.loaded && canReapply && (
-
+
+
+
+
+ Reload the current model with these advanced options
+
)}
>
);
@@ -1418,29 +1415,34 @@ export function VideoPage({ active = true }: { active?: boolean }) {
{/* Single fixed toggle for the right-docked Advanced panel (mirrors Chat's settings
toggle, same icon in both states so it never moves). Highlighted when open. */}
-
+
+
+
+
+ Advanced options
+
- {/* ── Controls rail + preview canvas. Padding mirrors the other tabs. ── */}
-
- {/* The controls rail. Plain card with no header -- the prompt + Generate button make
- the panel self-explanatory. */}
-
+ {/* ── Controls rail + preview canvas, matching the Images tabs: no cards, the Hub's
+ centered measure, and a rule that runs the full page height. ── */}
+
+
+ {/* pl-0.5 keeps focus rings off the scroll container's edge. */}
+
-
-
+
+
{selected && selectedSrc ? (
<>
{/* The first video element in the app. autoPlay + muted + playsInline so
@@ -1615,16 +1618,20 @@ export function VideoPage({ active = true }: { active?: boolean }) {
- void handleDelete(selected.id)}
- >
-
-
+
+
+ void handleDelete(selected.id)}
+ >
+
+
+
+ Delete
+
{status?.loaded
? "Enter a prompt and hit Generate."
@@ -1670,7 +1678,7 @@ export function VideoPage({ active = true }: { active?: boolean }) {
{(videos.length > 0 || busy === "generating") && (
{
// Near the right edge: pull the next older page (infinite scroll).
const el = e.currentTarget;
@@ -1680,17 +1688,17 @@ export function VideoPage({ active = true }: { active?: boolean }) {
{/* In-progress generation: a placeholder tile at the front so past clips stay
visible and browsable while the new one renders. */}
{busy === "generating" && (
-
+
)}
{videos.map((video) => (
+
+ setSelectedId(video.id)}
- title={`${video.prompt}\nseed ${video.seed} · ${clipMeta(video)}`}
- className="relative flex h-16 w-24 shrink-0 flex-col justify-end overflow-hidden rounded-lg bg-muted/40 outline-none ring-1 ring-transparent transition-shadow hover:ring-border focus-visible:ring-2 focus-visible:ring-ring"
+ className="relative flex h-16 w-24 shrink-0 flex-col justify-end overflow-hidden rounded-[10px] bg-muted/40 outline-none ring-1 ring-transparent transition-shadow hover:ring-border focus-visible:ring-2 focus-visible:ring-ring"
>
{srcById[video.id] ? (
// Muted, preload="metadata" so the first frame renders as a poster
@@ -1715,9 +1723,17 @@ export function VideoPage({ active = true }: { active?: boolean }) {
{/* Selection marker on a non-focusable overlay. */}
{video.id === selected?.id && (
-
+
)}
+
+
+ {video.prompt}
+
+ seed {video.seed} - {clipMeta(video)}
+
+
+
))}
{/* Tail spinner while older pages stream in on scroll. */}
{hasMore && (
@@ -1727,15 +1743,19 @@ export function VideoPage({ active = true }: { active?: boolean }) {
)}
{/* Clear-all, tucked at the end so it never sits under a hover. */}
{videos.length > 0 && (
- void handleClearAll()}
- title="Clear all videos"
- className="flex h-16 w-16 shrink-0 flex-col items-center justify-center gap-1 rounded-lg text-muted-foreground ring-1 ring-border transition-colors hover:text-destructive hover:ring-destructive/40"
- >
-
- Clear all
-
+
+
+ void handleClearAll()}
+ className="flex h-16 w-16 shrink-0 flex-col items-center justify-center gap-1 rounded-[10px] text-muted-foreground ring-1 ring-border transition-colors hover:text-destructive hover:ring-destructive/40"
+ >
+
+ Clear all
+
+
+ Clear all videos
+
)}
)}
@@ -1744,14 +1764,14 @@ export function VideoPage({ active = true }: { active?: boolean }) {
{/* Right-docked Advanced panel (mirrors Chat's settings panel): closed by default,
opened by the single fixed top-bar toggle above. */}
{advancedOpen && (
-
-
+
+
Advanced
-
+
Load-time tuning. Changes apply on the next load; Reapply reloads the current model.