+
{items.map(function(src, i) {
return (
@@ -628,6 +672,17 @@ function FilmStrip({ seed, current, total, onSeek, comments, frames, loading })
})}
{loading &&
Building filmstrip…
}
+
+ {ctx && (
+
+
+
+
+ )}
);
}
@@ -696,10 +751,122 @@ function CommentComposer({ asset, currentMs, value, onChange, onSubmit }) {
);
}
-function VersionsTab() {
+function FilesTab({ asset, filmFrames, filmstripLoading, streamUrl, reprocessing, onRegenProxy, onRegenThumbnail, onRegenFilmstrip }) {
+ const hasProxy = !!asset.proxy_s3_key;
+ const hasHires = !!asset.original_s3_key;
+ const hasThumb = !!asset.thumbnail_s3_key;
+ const hasFilmstrip = Array.isArray(filmFrames) && filmFrames.length > 0;
+
+ // Rows: label | status badge | path | action button
+ const FileRow = function({ label, present, path, icon, actionLabel, onAction, disabled, children }) {
+ return (
+
+
+
+
+
+ {label}
+ {present
+ ? ready
+ : missing}
+
+ {path && (
+
+ {path}
+
+ )}
+
+ {actionLabel && onAction && (
+
+ )}
+
+ {children &&
{children}
}
+
+ );
+ };
+
return (
-
- Version history not yet available.
+
+
+ {/* Proxy */}
+
+ {streamUrl && (
+
+ )}
+ {!streamUrl && !hasProxy && (
+ No browser-playable proxy yet.
+ )}
+
+
+ {/* Hi-res */}
+
+
+ {/* Thumbnail */}
+
+ {hasThumb && (
+
+ )}
+
+
+ {/* Filmstrip */}
+
+ {hasFilmstrip && (
+
+ {filmFrames.filter(Boolean).slice(0, 14).map(function(src, i) {
+ return (
+

+ );
+ })}
+
+ )}
+ {filmstripLoading && (
+ Building filmstrip from proxy…
+ )}
+
+
);
}