- {job.status === "complete" &&
}
+ {job.status === "complete" &&
}
{job.status === "rendering" && (
@@ -139,7 +140,6 @@ export const RenderQueueItem = memo(function RenderQueueItem({
)}
- {/* Progress bar + percentage */}
{job.status === "rendering" && (
@@ -214,4 +214,45 @@ export const RenderQueueItem = memo(function RenderQueueItem({
);
+
+ // Completed renders: wrap in ExpandOnHover with shared ExpandedVideoPreview
+ // (same spring-expand pattern as AssetsTab video assets and CompositionsTab).
+ if (job.status !== "complete") {
+ return row;
+ }
+
+ const subtitle = [
+ job.durationMs ? formatDuration(job.durationMs) : null,
+ formatTimeAgo(job.createdAt),
+ ]
+ .filter(Boolean)
+ .join(" · ");
+
+ return (
+
{
+ e.stopPropagation();
+ handleOpen();
+ }}
+ className="px-4 py-1.5 text-xs font-semibold text-[#09090B] bg-[#3CE6AC] rounded-lg hover:brightness-110 transition-colors flex-shrink-0"
+ >
+ Open
+
+ }
+ />
+ }
+ onClick={handleOpen}
+ expandScale={0.5}
+ delay={500}
+ >
+ {row}
+
+ );
});
diff --git a/packages/studio/src/components/sidebar/AssetsTab.tsx b/packages/studio/src/components/sidebar/AssetsTab.tsx
index 7584b284c..70d7e53a7 100644
--- a/packages/studio/src/components/sidebar/AssetsTab.tsx
+++ b/packages/studio/src/components/sidebar/AssetsTab.tsx
@@ -1,5 +1,6 @@
import { memo, useState, useCallback, useRef } from "react";
import { ExpandOnHover } from "../ui/ExpandOnHover";
+import { ExpandedVideoPreview } from "../ui/ExpandedVideoPreview";
interface AssetsTabProps {
projectId: string;
@@ -112,22 +113,33 @@ function ExpandedAssetPreview({
isAudio: boolean;
onCopy: () => void;
}) {
+ if (isVideo) {
+ return (
+
{
+ e.stopPropagation();
+ onCopy();
+ }}
+ className="px-4 py-1.5 text-xs font-semibold text-[#09090B] bg-[#3CE6AC] rounded-lg hover:brightness-110 transition-colors flex-shrink-0"
+ >
+ Copy Path
+
+ }
+ />
+ );
+ }
+
return (
{isImage && (

)}
- {isVideo && (
-
- )}
{isAudio && (
+ );
+}